使用以下 rsync 命令,文件和目录的 RWX 权限已正确设置,但粘性位选项未正确设置。
rsync -rtvz --partial-dir=.rsync-partial --chmod=Da+t,Dg+s,D770,F0740 --progress --stats -e 'ssh -p 19419' "/home/me/test_dir" me@REMOTE_HOST:~
据我了解,选项应如下所示:
达+t
- 所有目录都应该设置粘性位(只有 root 用户、目录所有者和文件所有者才能删除该目录中的文件。)
Dg+s
- 所有目录都应该有 setGID(在该目录中创建的所有文件都继承该目录的组所有权)
但使用上述命令不会在 REMOTE_HOST 目录上设置粘性位和 setGID 位。
如果我 ssh 到 REMOTE_HOST 并运行类似的命令chmod -R a+t test_dir
,那么粘性位将按预期设置。
我哪里错了?
编辑:我还分别尝试了“--chmod=Da+t,Dg+s”、“--chmod=Da+t”“--chmod=Dg+s”“--chmod=a+t”并且没有粘滞位可以使用这些选项中的任何一个来设置。
(Ubuntu 16.04,rsync 3.1.1 - 我直接从手册页获取 chmod 选项)
答案1
您需要对 rysnc 使用 -p 标志。
答案2
这些模式按给定的顺序应用。这意味着后面的D770
选项会覆盖任何前面的模式,将目录设置为正好 770。将顺序更改为:
--chmod=D770,F0740,Da+t,Dg+s
答案3
我遇到了同样的问题:“rsync 不保留父目标的 setgid”。我使用的命令类似于:
rsync -zrvhtl <source> <destination>
在目标上,只有来自根源的文件和文件夹被设置为正确的组,但同步的文件夹没有给出 g+s,因此所有文件和文件夹都具有源组。当像 man 示例一样运行命令并且仅添加 -r 选项时它就起作用了
rsync --no-p --no-g --chmod=ugo=rwX <source> <destination>
有时添加一个选项会发现 -t 对目标文件夹有这种效果(静止 setgid)。为了克服这个问题我添加了 -O
-O, --omit-dir-times 这告诉 rsync 在保留修改时间时省略目录