【问题标题】:How to clone ACL permissions?如何克隆 ACL 权限?
【发布时间】:2019-07-23 10:51:57
【问题描述】:

我刚刚发现我的备份缺少 ACL,在修复此问题之前恢复将无法进行。

幸运的是,我有幸检查了正在运行的系统上的权限应该是什么样的,例如:

已恢复:

# file: samba/sysvol
# owner: root
# group: 3000000
user::rwx
group::rwx
other::---

正在运行:

# file: samba/sysvol
# owner: root
# group: 3000000
user::rwx
user:root:rwx
group::rwx
group:3000000:rwx
group:3000001:r-x
group:3000002:rwx
group:3000003:r-x
mask::rwx
other::---
default:user::rwx
default:user:root:rwx
default:group::---
default:group:3000000:rwx
default:group:3000001:r-x
default:group:3000002:rwx
default:group:3000003:r-x
default:mask::rwx
default:other::---

没有可遵循的简单权限模式,因此手动协调会花费很长时间并且容易出错。

问题:

是否可以“克隆”ACL 权限?

即递归读取所有文件和文件夹的 ACL (getfacl?) 并写入 (setacl?) 到其他地方的相同文件和文件夹列表?

【问题讨论】:

    标签: linux bash permissions acl


    【解决方案1】:

    如果源和目标都在本地,或者您可以通过 SSH 或 rsync 协议在它们之间复制,则可以使用rsync -A 在目录之间复制 ACL。

    这将在同一台机器上本地复制 ACL。

    rsync -Ar dir1/ dir2/
    

    如果两台服务器都具有兼容的 ACL,您可以使用它通过网络复制 ACL,而无需再次实际复制文件。

    rsync -Ar /dir1/ user@destination:/dir2/
    

    rsync -Ar user@source:/dir1/ /dir2/
    

    取决于您正在运行命令的服务器。

    来自 rsync 手册页:

    -A, --acls 此选项导致 rsync 将目标 ACL 更新为与源 ACL 相同。该选项还暗示 --perms。

    源系统和目标系统必须具有兼容的 ACL 条目 使此选项正常工作。请参阅 --fake-super 选项 备份和恢复不兼容的 ACL 的方法。

    【讨论】:

    • 感谢 rAlen 的快速回复。我最终使用:getfacl -R source_dir > file,然后是setfacl --restore file destination_dir
    • -Ar 保留 ACL,但不保留所有权和权限。使用-Arogp (o=owner, g=group, p=permissions) 或更短且更常见的-Ara (a=archive) 以获得更好的副本目录。
    • @CraZ 如果存在 -a 则添加 -r 没有意义,因为 -a 等同于 -rlptgoD
    • @kl0z,是的,-r 选项是多余的(只是忘了删除它),正确的选项是 -Aa
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    相关资源
    最近更新 更多