我有一台运行 nginx 的 Ubuntu 10.04 服务器,其中 nginx 以用户 身份运行nginx
。我正在尝试部署一个奥托普莱斯-使用 rsync 的站点,却遇到了看似安全困境的问题。
显然,整个/srv/www/
目录应该是用户可读的nginx
,并且几个上传目录应该是用户可写的nginx
。
Octopress 喜欢通过 ssh 连接到服务器,这很好。由于我对授予nginx
远程 shell 访问权限有一种不祥的预感,因此我deployer
为此创建了一个特殊用户 ( ),该用户配置为具有 shell 访问权限并允许通过 ssh 连接。Rsync 工作正常,但所有 Web 文件都以 的所有者身份复制deployer
,用户nginx
无法读取它们。
我可能会将用户添加nginx
到组中deployer
,并使用 rsync--chmod
和-p
选项来允许 nginx/php 写入上传目录,但我不确定这以后不会给我带来麻烦。理想情况下,我认为我需要一种 rsync-then-chown&chmod,但我怀疑这要求有点过分。
最佳做法是什么?如何你去做吧?
提前致谢。
答案1
这是一个基本的访问问题。您希望有两个具有有限访问权限的用户,并希望他们以某种方式共享文件。
“传统”解决方案是创建新组,将两个用户都放在那里,并以某种方式强制文件归该组所有。如果您没有正确设置权限和新创建的文件,您将遇到写访问问题。两者都可以解决(umask 和 setuid 目录)。
更好的方法是深入研究结构,查看哪些目录需要由谁写入,然后修改方案,这样以后就不会麻烦了。例如,如果您有 nginx 用户需要写入的缓存目录 - 请不要通过 rsync 同步它,并设置权限以便 nginx 可以在那里写入。
最后的手段是使用 root 脚本(可能来自 cron 或 icron)来“修复”权限。