【问题标题】:Running rsync as root: Operations Not Permitted以 root 身份运行 rsync:不允许操作
【发布时间】:2015-08-20 16:26:37
【问题描述】:

世界!

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

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

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

谢谢!

【问题讨论】:

  • "我必须将每个用户的文件夹都设置为 root" 嘿,不要那样做,你的用户会杀了你。
  • @4ae1e1 你说得很好......
  • 这个“共享驱动器”到底是什么?如果您尝试“手动”sudo chown 上的文件会发生什么?
  • @Gordon 共享驱动器在我们安装的网络卷驱动器中。这是我们存档和备份数据的地方。

标签: macos bash scripting permissions backup


【解决方案1】:

这是因为目标位于已安装的网络卷上。您正在以 root 身份运行rsync,但这仅授予您更改本地(客户端)计算机所有权的权限——就文件服务器而言,您是任何经过身份验证的用户,即不是 root(除非您使用 NFS,否则会更复杂)。由于您以普通用户身份向服务器进行身份验证,因此您在服务器上创建的所有文件都将归该普通用户所有,您无权更改它。

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

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

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

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

【讨论】:

  • 完美。感谢你的快速回复。最好我使用正确的 rysnc 参数和标志将文件存储为当前用户,而您正是这样做的。
  • 精彩而深刻的回答,谢谢戈登! SSH 上的 Rsync 是一个简单的解决方法。我首先通过 AFP 执行“本地”rsync,然后通过 SSH 对丢失的文件执行补充 rsync,这仅花费了很短的时间。
  • 根据man,你应该也可以做到-av --no-perms
  • 正如@Zubo 和man 页面所建议的那样,似乎最好使用-a 标志并指定要省略的选项,而不是将-a 标志转换为这些选项.所以在这种情况下,你可以使用rsync -avh --no-perms --no-group --no-owner。这样您也不需要将rsync 作为root 运行。
  • 有没有办法用 docker 来做这件事,因为我将我的数据存储在远程驱动器上。
猜你喜欢
  • 1970-01-01
  • 2020-02-17
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2013-12-19
  • 2022-09-29
  • 1970-01-01
相关资源
最近更新 更多