rsync 进程无需以 root 身份运行即可访问不属于自己的文件的权限

rsync 进程无需以 root 身份运行即可访问不属于自己的文件的权限

我想使用 rsync 通过 ssh 从远程 Web 服务器进行自动备份。Web 服务器配置了 suphp,因此不同的站点的文件属于不同的用户和组。不幸的是,Web 应用程序会生成一些没有组或其他读取权限的文件。

我只能看到两个选项,但都不太可取;要么以 root 身份运行 rsync,要么允许每个 Web 用户访问 ssh,然后依次以每个 Web 用户身份运行 rsync。

不幸的是,ACL 不起作用,因为当 Web 服务器创建具有 600 个权限的文件时,这会调整继承的 ACL 掩码,使其他用户的有效权限为 000。

有人可以建议一种以最低可能的权限运行 rsync 的方法,但仍然允许访问没有组或其他读取权限的用户文件。

谢谢

答案1

我通过反转问题找到了解决方案。我没有将数据从生产机器拉到备份机器,而是将数据从生产机器推送到备份机器。

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

答案2

我看到了 3 条线索,但没有一条是真正简单的。

  • 您可以在 vpn 或 ssl 隧道中使用无需 ssh 的 rsync,这样 rsync 进程就会受到很大限制,并且只具有只读共享。

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

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

答案3

基于能力的清洁解决方案描述如下: https://blog.night-shade.org.uk/2015/04/linux-capabilities-and-rsync-from-presentation-to-practice/

编辑:解决方案的详细信息。功能由进程功能(在进程之间继承并由 PAM 最初设置)和文件功能(在可执行文件上设置)的组合组成。要在使用 rsync 时授予用户“备份”完全读取权限:

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

cap_dac_read_search backup

将 cap_dac_read_search(无需 root 身份即可读取任何文件)提供给用户备份。仅当使用具有与继承相同的功能集的可执行文件时,它才会启用该功能(并且“有效”位会隐式启用它)。

-- 使用命令在文件 /usr/bin/rsync 上设置有效并继承功能:

setcap cap_dac_read_search+ei /usr/bin/rsync

它允许特定用户在使用特定二进制文件时读取所有内容(而其他使用相同二进制文件的用户则无法读取)。

相关内容