为什么 Dropbox 导致 PostgreSQL 权限被拒绝错误?
Why Dropbox causes PostgreSQL permission denied errors?
我用包管理器 apt-get[=58= 安装了 postgresql-common 和 postgresql-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_mike
和 dropbox_paul
是两个不同的 Dropbox 帐户,您可以管理访问权限手动从那个
希望我没有把第二部分搞混
我用包管理器 apt-get[=58= 安装了 postgresql-common 和 postgresql-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_mike
和 dropbox_paul
是两个不同的 Dropbox 帐户,您可以管理访问权限手动从那个
希望我没有把第二部分搞混