Tan*_*Tan 6 permissions macos bash backup scripting
世界!
我有一个备份脚本,可以rsync
为每个用户运行,并将其/User/user
文件夹存档到我们的共享驱动器上.遇到一个有趣的问题rsync
:当从shell执行脚本为"sudo"作为当前用户时,我无法保留其他用户的权限.它会出错并说: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=".*/"
Run Code Online (Sandbox Code Playgroud)
谢谢!
Gor*_*son 10
这是因为目标位于已安装的网络卷上.您rsync
以root身份运行,但这只授予您更改本地(客户端)计算机所有权的权限 - 就文件服务器而言,您是对其进行身份验证的任何用户,即不是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) .