我曾经rsync
在我们的故障转移服务器上镜像过许多文件夹。但是,我们的一些文件(例如缩略图或全文索引)是由我们的应用程序在 Web 用户(名为“nobody”)下生成的,并且默认具有限制性权限。
另外,我是通过 ssh 执行此操作的,其中 root 访问权限被禁用,如果可能的话,我想保持这种状态。
有什么合理的方法可以让我告诉 rsync 以 sudo 身份运行吗?还是我应该考虑更改文件权限?
答案1
你可以:
- 为需要读取的数据创建一个新组(通过 rsync),向该组添加 UID 和/或更改文件和目录的 GID,并设置适当的权限,这样您就可以使用该用户名使用 rsync
- 使用 rsync-over-ssh 时获取在服务器端运行的精确命令行(提示,多次使用 -v 并记住从获取的命令行中删除 '-v')并使用 SSH 公钥身份验证强制执行该特定命令(请参阅 sshd(8) 中的 AUTHORIZED_KEYS 文件格式)
使用#2,您可以通过 ssh 使用 rsync 到 root 用户并且仍然是安全的(请参阅 sshd_config(5) 中的 PermitRootLogin 无密码),或者更好的是,您可以将两者结合起来以创建一个只能与该特定的 rsync 命令行一起使用的非特权用户。
编辑:通过 ssh 发送身份验证数据以获取 root 权限(例如,以用户身份 ssh,使用用户密码执行 sudo)并不比直接向 root 用户执行 ssh 更好(通过公钥或通过好的密码),恕我直言。
答案2
您可以通过以下方式指定要作为远程 rsync 命令运行的内容--rsync-path
- 例如类似这样的内容:
rsync --rsync-path='sudo rsync' --blah --blah /src blah@dest:/dst
答案3
您还可以使用rsync 守护进程。但请注意,我在此处描述的方式使得运行 rsync 守护程序的机器上的任何人都可以访问模块名称。
我还没有深入研究过,但我无法通过这种方式创建基于公钥(因此无需密码)的安全设置。但也许可以。