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

Why Dropbox causes PostgreSQL permission denied errors?

我用包管理器 apt-get[=58= 安装了 postgresql-commonpostgresql-9.4 ]. 我将我的数据库系统从 OSX 更改为 Debian 8.1,之后我遇到了 Permission denied 错误。 用户 postgres 存在 (CREATE USER postgres;) 并且数据库 detector 存在 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在SECURE_PATH中/etc/sudoers:

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 7 月 14 10:27 masi/
  • drwx------ 26 masi masi 4096 7 月 13 日 16:05 Dropbox/
  • drwxr-xr-x 8 位主要开发人员 4096 年 7 月 14 日 09:22 det/

我可以在哪里将 Dropbox 更改为

  • drwx------ 26 名 masi 开发人员 4096 名 2013 年 7 月 16:05 Dropbox/

但无法增加权限,因为我开始得到 ls: cannot access ../../Dropbox/: Permission denied 虽然有完全开放的权限。 这是一个非常奇怪的行为,这里完全打开权限导致了这样的行为。

类似错误

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

为什么 Dropbox 会导致 PostgreSQL 出现这样的问题?

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

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

但尽可能避免递归。 该命令允许后续 sudo -u postgres 命令。 您通常必须充分开放对目录和所有父目录的访问权限,以允许命令对目录中的文件进行操作。在所有情况下执行还不够; read -flag 也是必需的。

保管箱的内容已加密,必须映射,并非每个用户都可以访问您系统上的 $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 限制为仅限保管箱,并且您的用户将具有与 my_dropbox_group 组相同的访问权限。如果您有多个用户,每个用户都有一个个人 Dropbox,则您必须创建不同的组,这样人们就无法访问其他 Dropbox,例如 dropbox_mikedropbox_paul 是两个不同的 Dropbox 帐户,您可以管理访问权限手动从那个

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