如何使rsync使用sudo

我使用rsync镜像故障转移服务器上的一些文件夹。 但是,我们的一些文件(如缩略图或全文索引)是由我们的应用程序在networking用户(名为'nobody')下生成的,默认为限制性权限。

另外,我正在通过ssh进行这项工作,在那里根访问被禁用,如果可能的话,我想保持这种状态。

有没有任何合理的方式,我可以告诉rsync作为sudo运行? 或者我应该考虑更改文件权限?

你可以:

  1. 为应该读取的数据(通过rsync)创build一个新组,将UID添加到该组和/或更改文件和目录的GID并设置适当的权限,这将允许您使用带有该用户名的rsync
  2. 在使用rsync-over-ssh(提示,多次使用-v,记得从你得到的命令行中取出-v)并使用SSH公钥authentication来强制执行特定的命令行时命令(参见sshd(8)中的AUTHORIZED_KEYS FILE FORMAT)

使用#2,你可以通过ssh使用rsync到root用户,并且仍然是安全的(参见smitdconfig(5)中的PermitRootLogin no-password),或者甚至可以把两者结合起来创build一个只能被使用的非特权用户与特定的rsync命令行。

编辑:通过SSH发送auth数据获取根(例如ssh作为用户,sudo用户密码)不是比直接执行ssh到根用户(通过公共密钥或通过一个好的密码),恕我直言。

您可以通过--rsync-path指定要作为远程rsync命令运行的内容 – 例如:

rsync --rsync-path='sudo rsync' --blah --blah /src blah@dest:/dst

你也可以使用rsync守护进程 。 但要小心,我在那里描述的方式,可以让运行rsync守护程序的机器上的任何人访问模块名称。

我没有深入研究它,但我无法以这种方式创build一个安全的公钥(并因此设置了无密码)。 但是,可能有。