我有一个具有以下配置的 rsync:
rsync -aur4zvq --force /root/folder/on/local/ root@remote:/root/folder/somewhere/on/remote
出于安全原因,此功能由 crontab 以 root 身份运行,并且应该以 root 权限将文件放置在远程。
crontab 运行正常,没有任何警告或错误,文件也放置在正确的文件夹中,但令我惊讶的是,远程文件现在不知何故属于用户systemd-coredump
,而不是 root
过去它运行完美...发生了什么?
我的 crontab 看起来像这样
* * * * * rsync -aur4zvq --force /root/folder/on/local/ root@remote:/root/folder/somewhere/on/remote
使用 rsync 守护进程执行此操作是否更好?我从未将 rsync 与守护进程一起使用过。
我需要如何使用守护进程来配置它?
答案1
可能是 Rsync 将远程用户 ID 设置为与 相同的用户 ID systemd-coredump
。
这意味着如果systemd-coredump
用户 ID 为 2,并且您本地系统上的文件归max_muster
用户 ID 为 2 的您所有,则在文件传输过来时,“2”将被解释为 systemd-coredump
。
您 可以 自己 检查 您 的 系统 , 通过 检查 您 的 用户 ID 值 ,/etc/passwd
然后 比较 谁 在 远程 系统 上 有 相同 的 用户 ID 值/etc/passwd
.
要强制 Rsync 更改远程计算机上的用户所有权,请修改命令以添加chmod
如下选项:
rsync --chown=USER:GROUP -aur4zvq --force /root/folder/on/local/ root@remote:/root/folder/somewhere/on/remote
并将其更改USER:GROUP
为root:root
如下形式:
rsync --chown=root:root -aur4zvq --force /root/folder/on/local/ root@remote:/root/folder/somewhere/on/remote
请注意,该--chown=USER:GROUP
选项适用于 Rsync 版本 3.1.0 及更高版本。
答案2
问题还在于-a
它等于-rlptgoD
--recursive, -r recurse into directories
--links, -l copy symlinks as symlinks
--safe-links ignore symlinks that point outside the tree
--perms, -p preserve permissions
--times, -t preserve modification times
--group, -g preserve group
--owner, -o preserve owner (super-user only)
-D same as --devices --specials
因为它保留了 UID。
因此,应按照以下方式保留用户和组权限@Giacomo1968 在他们的回答中表明与--chown
不与-a
可能还有其他解决方案, -e "ssh -l ssh-user"
但我尚未测试过。