rsync进程访问文件权限,它不拥有以root身份运行的文件

我想用rsync通过ssh从远程web服务器上进行自动备份。 networking服务器configuration了suphp,所以不同的网站有不同的用户和组的文件。 不幸的是,Web应用程序生成一些没有组或其他读取权限的文件。

我只能看到两种select,两种都不适合; 以root身份运行rsync或者允许每个web用户使用ssh访问,然后依次运行rsync作为每个web用户。

不幸的是ACL不会工作,因为当文件是由具有600个权限的web服务器创build的时候,这调整了inheritance的ACL掩码以使其他用户的有效权限为000。

任何人都可以build议使用最低possilbe权限运行rsync的方式仍然允许访问用户文件没有组或其他读取权限的用户文件。

谢谢

我已经有了解决问题的方法。 我不是把数据从生产机器拉到备机,而是把数据从生产推到备份。

这样,我只需要在生产计算机上以PHP用户的身份运行rsync,并在备份计算机上作为备份用户运行。 备份用户的ssh授权密钥文件允许我进一步locking生产服务器IP的访问权限,并限制可以运行rsync的命令。

我可以看到3条线索,没有一条真的很简单。

  • 您可以在不使用ssh的情况下,在vpn或ssl隧道中使用rsync,这样rsync进程就会非常有限,只有一个共享。

  • 您可以运行数据的只读绑定挂载,并在其中使用rsync / ssh数据。

  • 使用functionhttp://linux.die.net/man/7/capabilities ,尤其是CAP_DAC_READ_SEARCH您的非特权进程应该能够读取所有内容。 要更改rsync的function,我会使用http://linux.die.net/man/8/setcap

基于function的干净的解决scheme在这里描述: https : //blog.night-shade.org.uk/2015/04/linux-capabilities-and-rsync-from-presentation-to-practice/

编辑:解决scheme的细节。 function由进程function的组合,在进程之间inheritance,最初由PAM设置,以及在可执行文件上设置的文件function组成。 在使用rsync时,要给用户“备份”提供完整的读取权限:

在/etc/security/capability.conf中添加一行

cap_dac_read_search backup 

给cap_dac_read_search(读取没有根的任何文件)到用户备份。 只有在使用与inheritance相同的能力的可执行文件(和“有效”位才能使其被启用)时,它才能启用该function。

– 使用以下命令在文件/ usr / bin / rsync上设置有效和inheritancefunction:

 setcap cap_dac_read_search+ei /usr/bin/rsync 

它能够在给定的用户使用给定的二进制文件时只读取所有内容(而不是使用相同二进制文件的其他人)