使用lsync同步apache webroot文件 - 遇到权限问题

时间:2016-04-19 17:14:13

标签: apache ssh rsync ssh-keys lsyncd

我在两个Web服务器之间分配负载,这意味着所有Apache设置和vhost几乎完全相同,我想确保它们通过使用LSync保持这种方式(或者如果有另一个解决方案可以帮助我遇到的问题,让我知道)

很明显,Apache作为 apache 用户运行,我们无法启用root SSH登录,因此我创建了一个 lsync 用户,可以使用RSA密钥在两台服务器之间进行SSH 。

现在我遇到了一些权限错误,这有点像我预期的那样。我现在正在尝试的是将 lsync 用户添加到 apache 组,将 apache 用户添加到 lsync group ...这似乎工作正常,只要这些文件对于用户组都是chowned 7 ...

我考虑过设置一个cron作业,每隔一段时间就刷一次apache.apache,甚至可能是chmod + rwx用于组和用户,但我确信这会引起其他一些问题。

我想过将lsync作为 apache 用户运行,但看起来apache主目录实际上需要由root.root拥有..这样会导致apache出现问题用户尝试ssh并从.ssh目录中读取。

当我查看Google时,我找不到太多关于此内容的信息......大多数人只是使用root用户进行lsync,这是不可能的。

所以,如果有人有修复,那就太好了!感谢

PS 我知道我可以允许 lsync 用户通过sudo执行特定命令,如果我正确配置了sudoers配置...有没有办法让它sudo chown apache.apache /var/www && sudo chmod -R u+rwx /var/www还是什么?

2 个答案:

答案 0 :(得分:0)

您可以考虑让apache用户运行rsync守护程序。它很少使用,因为通过ssh隧道传输rsync更方便更安全,但它可能会帮助你解决这个问题。

您需要设置一个配置文件,然后使用rsync --daemon使用您的发行版所具有的任何init系统启动它。

然后,您可以使用lsynd配置target = "rsync://server/path"

如果服务器之间的连接是本地连接并且网络是可信任的,那么您就完成了,否则您应该将rsync守护程序配置为仅侦听127.0.0.1,然后使用ssh -L端口映射进行路由通过加密隧道的流量(隧道的所有者并不重要)。

答案 1 :(得分:0)

rsync可以选择强制在目标位置创建的文件的权限:--chmod=<blah>lsyncd没有直接支持,但可以传递rsync标志。

尝试将此添加到您的lsyncd配置:

_extra = {"--chmod=Dug+rwx,Fug+rw"}

这应该确保目录D具有对所有者和组的读/写/执行权限,并且文件F具有对所有者和组的读/写权限。应该在源服务器上设置任何其他权限。

如果您需要apache用户拥有的文件,那么您可以按照建议设置chown cron作业,但是您可能会发现从inotifywatch读取输出的不断运行的脚本将是更敏感(并且大部分是空闲的)。