我使用 rsync(rsync-3.0.6-5.el6_0.1.x86_64
在 Scientific Linux 6 上)将文件从 VFAT 磁盘传输到 NFS 挂载的 ext3 文件系统。我在 ext3 系统上设置了 ACL,并且在创建新文件或目录时(通过 NFS 挂载、通过命令行或 Nautilus)一切正常。但是,在 rsync 或 cp 时,不会为 ext3 分区上复制的文件创建 ACL。
背景是 VFAT 来自相机,间歇性安装,并且不会为目录或文件创建 acl。有没有一种方法可以 rsync(甚至复制),让默认 ACL 规则将 ACL 应用于 rsync 或 cp 的文件和目录?
答案1
在朋友的帮助下,经过一番苦思冥想,我终于找到了答案。当然,答案就在手册页里。
问题源于以下事实(来自 acl 手册页): “修改文件权限位会导致修改相关 ACL 条目”,反之亦然。由于没有正确的标志,rsync 会使用源权限,从而更改目标上的 ACL。
rsync 中的解决方案是使用 --chmod 选项。从 rsync 手册页(在 --perms 部分):
要赋予新文件目标默认权限(同时保持现有文件不变),请确保 --perms 选项已关闭并使用 --chmod=ugo=rwX(确保所有非屏蔽位都得到启用)。
但是,想要使用的权限取决于预期的目标权限。例如,在我的例子中,源权限为 700,没有 ACL。目标子目录具有以下默认 ACL:。 d:u:user1:rwx,d:u:user2:rwx,u:user1:rwx,u:user2:rwx,d:m:rwx,m:rwx
也就是说,它有两个命名用户、一个显式掩码以及相同的默认值。这相当于 770。
当使用 rsync(或 cp-ing)时,700 的源权限将覆盖默认 ACL 掩码,将其设置为---
而不是rwx
。
由于此用例需要“用户”和“组”但不需要“其他”源权限,因此我在 rsync 中使用了以下标志: --chmod=ug=rwx
。第一个等号后的字母表示以下权限适用于用户和组。第二个等号后的字母表示这些用户获得的权限。这使 rsync 将目标上的权限设置为 770。
实际命令是:
rsync -av --chmod=ug=rwX /<source> /<destination>
需要注意几点。首先,rsync 权限行为取决于接收端的版本。查看手册页以获得明确的答案。其次,标志的顺序很重要:实际上可以使用 -a、-A 等,但必须位于 --chmod 标志之前。
最后,我没有看到 cp 有类似的标志,这使得 rsync 成为唯一用于同步文件并将目标上的默认 ACL 应用于具有不同源权限的文件的游戏。
答案2
你到底是如何调用 rsync 的?由于你的源不支持 ACL,你几乎肯定应该不是传递任何设置指示 rsync 复制权限的选项。
因此,不要使用-a
、、或。-o
-g
-A
答案3
您是否在 rsync 命令中设置了 -A 标志?