使用rsync:权限将内容部署到Web服务器

我有一个运行nginx的Ubuntu 10.04服务器,nginx以用户nginx运行。 我试图部署一个基于Octopress的网站rsync,并偶然发现了什么看起来像一个安全困境。

显然,整个/srv/www/目录应该可以被用户nginx读取,并且一些上传目录应该可以由用户nginx写入。

Octopress喜欢通过ssh连接到服务器,这很好。 由于我对于给予nginx远程shell访问感到nginx ,为此我创build了一个特殊的用户( deployer ),他被configuration为具有shell访问权限,并被允许通过ssh连接。 rsync工作正常,但所有的网页文件被复制为deployer拥有,用户nginx无法读取它们。

我可能会将用户nginx添加到组deployer并使用rsync的--chmod-p选项进行操作,以允许nginx / php写入上传目录,但是我不确定以后不会再咬我。 理想情况下,我想我需要一种rsync-then-chown&chmod,但是我怀疑这有点太过于要求了。

什么是最佳实践? 你如何去做?

提前致谢。

这是一个基本的访问问题。 您希望有两个访问受限的用户,并且希望他们以某种方式共享文件。

“传统”解决scheme是创build新的组,将两个用户放在那里,强制某些文件归属该组。 如果您没有正确设置权限和新创build的文件,您仍然会遇到写访问问题。 两者都是可以解决的(umask和setuid目录)。

稍后不要咬你的更好的方法是在结构中挖掘一点,看看哪些目录需要由谁写,并修改场景。 也就是说,如果你有caching目录,nginx用户需要写入 – 不要通过rsync同步,并设置权限,所以nginx可以写在那里。

最后的手段是根脚本(可能来自cron或icron)来“修复”权限。