运行 rsync 作为 root:不允许的操作

Running rsync as root: Operations Not Permitted

世界!

我有一个备份脚本,可以为每个用户 运行 rsync 并将他们的 /User/user 文件夹存档到我们的共享驱动器上。 运行 关于 rsync 的一个有趣问题:当以 "sudo" 作为当前用户从 shell 执行脚本时,我无法保留其他用户的权限。它会出错并说:rsync: chown <path> - operations not permitted(1)

在执行命令之前,我是否必须 chown 每个用户的文件夹都是 root 用户? 正在使用和有疑问的命令:

/usr/bin/rsync -av --human-readable --progress /Users/$name/ --exclude=".*" --exclude="Public" /Backup/$name\ -\ $(date +%m-%d-%y)  --exclude=".*/"

谢谢!

这是因为目标位于已安装的网络卷上。您 运行ning rsync 作为 root,但这只允许您更改本地(客户端)计算机上的所有权 - 就文件服务器而言,您是任何经过身份验证的用户到它,即不是 root(除非你使用 NFS,在这种情况下它会更复杂)。由于您作为普通用户通过服务器的身份验证,您在服务器上创建的所有文件都将归该普通用户所有,您无权更改它。

我看到两个可能的解决方案:

  • 不要尝试在服务器上设置所有权。使用 rsync -rltgoDv ... 而不是 rsync -av ...-a等同于-rlptgoD;离开 -p 意味着它不会尝试在目标文件上设置所有权,它只会将它们全部存储为当前(已向服务器验证)用户。

  • 如果您确实需要保留所有权(并且您的本地帐户与服务器上的帐户相同),运行 通过 SSH 进行 rsync 而不是文件共享,并通过 SSH 连接到服务器作为根。像 rsync -av ... root@server:/Backup/$name\ -\ $(date +%m-%d-%y) ...

    请注意,允许 root SSH 进入服务器通常不是一个好主意。如果你想这样做,我会创建一个 SSH public/private 密钥对(带有加密的私钥),使用它进行身份验证,并将服务器配置为拒绝基于密码的 SSH 身份验证(至少对于根).