如何使用 rsync 保留文件模式(setuid 位除外)?

如何使用 rsync 保留文件模式(setuid 位除外)?

rsync -p <args>如果我用来复制文件,我会遇到“磁盘配额超出(122)”错误。

rsync -rlptD --chown username:org1 -- local/ /project/org1/

我想保留文件和目录上的源读取和执行位,但强制目标g+s在目录上具有组 setuid。

需要目录的原因g+s是新文件继承项目的组所有权。在我的环境中,如果项目文件夹(例如/project/foo/)中的文件由我的个人组(组名==用户名)拥有,我会遇到配额错误。

我已经给出了--chown username:org1rsync 的论据,试图强制org1自始至终使用组,但这还不够。我认为存在竞争条件,rsync 应用所需的user:group所有权临时文件被重命名为其最终位置。

如果我从 rsync 标志中删除-p,那么我可以毫无错误地进行传输,但我会丢失源中的权限位。如果没有-p,rsync 在目标文件夹中创建的任何临时文件都会正确从根文件夹继承项目组,并且子文件夹会继承组 setuid。

有没有办法给 rsync 一个保留的权限掩码?我需要源中的位掩码 777,但g+s为远程目录设置(无条件)。

答案1

我相信这个--chmod RULE[,RULE]*选项可能会有所帮助。

男人 rsync(1):

--chmod

此选项告诉 rsync 将一种或多种逗号分隔的“chmod”模式应用于传输中文件的权限。结果值被视为发送方为文件提供的权限,这意味着如果未启用 --perms,此选项似乎对现有文件没有影响。

尝试--chmod Dg+s强制远程目录在目录上设置 setuid。

相关内容