为什么Dropbox导致PostgreSQL权限被拒绝的错误?

我使用软件包pipe理器apt-get安装了postgresql-commonpostgresql-9.4 。 我把我的数据库系统从OSX改成了Debian 8.1,之后我在Permission拒绝错误方面遇到了困难。 用户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的目录中同样失败

 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开发人员4096 Jul 14 09:22 det /

在那里我可以改变Dropbox

  • drwx —— 26个masi开发者4096 Jul 13 16:05 Dropbox /

但不能够增加权限,因为我开始得到LS:无法访问../../Dropbox/:权限被拒绝,虽然有完全开放的权限。 这是一个非常奇怪的行为,在这里完全打开权限会导致这样的行为。

类似的错误

  • 这个线程关于nautilus-dropbox,但在我的系统中没有nautilus-dropbox

为什么Dropbox会给PostgreSQL造成这样的问题?

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

这个目录只能从安装了dropbox的用户那里读取/写入,通常PostgreSQL会在不同的用户组下运行。 你可以添加postgreSQL用户到你的组访问$ HOME / Dropbox(你的用户安装和配置Dropbox)

或者,如果你打算创建一个活动备份,你可能会做一个从Dropbox到普通文件夹的cp脚本,即使我不鼓励使用同步云服务,原因很多,第一个是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组相同的访问权限。 如果你有多个用户,每个用户都有一个personnal Dropbox,你必须创建不同的组,这样人们不能访问其他的Dropbox,比如dropbox_mikedropbox_paul是两个不同的Dropbox帐户,你可以手动管理访问权限

希望我没有把第二部分搞混了

Petesh的评论中的一些答案还需要阅读-flag。 跑

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

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