为什么Dropbox会导致PostgreSQL权限被拒绝?

时间:2015-07-14 06:29:42

标签: linux postgresql dropbox file-permissions package-managers

我使用包管理器 apt-get 安装了 postgresql-common postgresql-9.4 。 我将我的数据库系统从OSX更改为Debian 8.1,之后我遇到了Permission denied错误的困难。 用户 postgres 存在(CREATE USER postgres;),数据库检测器存在CREATE DATABASE detector WITH OWNER=postgres;)。

我成功运行

masi@pc212:~$ sudo -u postgres psql detector -c "DROP TABLE measurements;"DROP TABLE
masi@pc212:~$ sudo -u postgres psql detector -c "CREATE TABLE measurements ( m_id SERIAL PRIMARY KEY NOT NULL, m_size INTEGER NOT NULL );"
CREATE TABLE

但在Dropbox -directory

中同样失败
masi@pc212:~$ cd Dropbox/
masi@pc212:~/Dropbox$ sudo -u postgres psql detector -c "DROP TABLE measurements;"
could not change directory to "/home/masi/Dropbox": Permission denied
DROP TABLE
masi@pc212:~/Dropbox$ sudo -u postgres psql detector -c "CREATE TABLE measurements ( m_id SERIAL PRIMARY KEY NOT NULL, m_size INTEGER NOT NULL );"
could not change directory to "/home/masi/Dropbox": Permission denied
CREATE TABLE

设置

命令psql位于 / etc / sudoers 中的SECURE_PATH中:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

命令which psql提供/usr/bin/psql

我保留代码的真实目录是 / home / masi / Dropbox / det / 可能Dropbox安装正在影响的事情:

  • drwxr-xr-x 32 masi masi 4096 Jul 14 10:27 masi /
  • drwx ------ 26 masi masi 4096 Jul 13 16:05 Dropbox /
  • drwxr-xr-x 8 masi developers 4096 Jul 14 09:22 det /

我可以将Dropbox更改为

  • drwx ------ 26 masi developers 4096 Jul 13 16:05 Dropbox /

但无法增加权限因为我开始获取 ls:无法访问../../Dropbox/:Permission denied 虽然具有完全开放的权限。 这是一种非常奇怪的行为,这里完全打开权限会导致这种行为。

类似错误

  • thread关于nautilus-dropbox,但系统中没有 nautilus-dropbox

为什么Dropbox会给PostgreSQL带来这样的问题?

2 个答案:

答案 0 :(得分:1)

Dropbox的内容已加密且必须映射,并非每个用户都可以访问系统上的$ HOME / Dropbox。当您使用unix文件管理器行Nautilus或Nemo时,Dropbox必须安装一个插件,以便他们可以浏览文件,就像它只是一个简单的目录一样。

此目录只能从安装了dropbox的用户读取/写入,并且通常PostgreSQL在其自己的用户下运行。您可以将postgreSQL用户添加到可以访问$ HOME / Dropbox的组(您安装和配置Dropbox的用户)

另外,如果你打算创建一个实时备份,你可以做一个从Dropbox转到普通文件夹的脚本,即使我不鼓励使用同步云服务,原因很多,第一个是http://support.code42.com/CrashPlan/Latest/Backup/Comparing_Cloud_Backup_And_Cloud_Storage

修改 要添加postgresql以充当您的用户,您可以拥有自己的组或共享组

最简单的方法是ls -la $HOME/Dropbox查看与./相关联的用户和群组,然后将此特定群组添加到用户postgres

您可以输入groups postgres来查看此用户已有访问权限的群组,并在添加群组后进行确认。

这样,postgres的用户将拥有与您相同的访问权限。但是为了安全起见,这可能不是系统管理员会推荐的(我不是)。我会更像:创建一个新组(让我们说my_dropbox_group)更改执行/读/写该组的权限。然后将您的用户和postgres添加到my_dropbox_group组,这样您就可以将postgres限制为仅限Dropbox,并且您的用户可以与my_dropbox_group组拥有相同的访问权限。如果您有多个用户,每个用户都有一个个人Dropbox,您必须创建不同的群组,以便人们无法访问其他保管箱,例如dropbox_mikedropbox_paul是两个不同的保管箱帐户,您可以从该

手动管理访问权限

希望我没有把事情与第二部分混为一谈

答案 1 :(得分:0)

Petesh评论中的一些答案,但也需要阅读-flag。 运行

sudo chmod -R go=rx /home/masi/Dropbox

但如果可以,请避免递归。 该命令允许后续的sudo -u postgres命令。 您通常必须打开对目录和所有父目录的访问权限,以允许命令处理目录中的文件。在所有情况下执行都不够; read -flag也是必需的。