如何克隆ACL权限?

问题描述 投票:0回答:2

我刚刚发现我的备份缺少 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
2个回答
3
投票

如果源和目标都在本地,或者您可以通过 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 的方法。


0
投票

我正在寻找一个命令来复制具有所有权、权限、ACL 的目录,而无需递归复制内容。我最终得到了一个涉及 mkdir、chown、chmod、setfacl、getfacl 的多命令解决方案:-)

proj=project1
srcbase="/mydata"
destbase="/archive/mydata"
if [ ! -d $destbase/$proj ]; then
  echo "Cloning properties of $srcbase/$proj to $destbase/$proj"
  mkdir $destbase/$proj
  chown --reference=$srcbase $destbase/$proj
  chmod --reference=$srcbase $destbase/$proj
  cd $srcbase
  getfacl $proj > /tmp/${proj}.acl
  cd -
  cd $destbase
  setfacl --restore /tmp/${proj}.acl
  cd -
else
  echo "Archive directory already exists, skipping: $destbase"
fi
unset proj srcbase destbase

也许有一种方法可以通过告诉 rsync 不要遍历目录来做到这一点...

© www.soinside.com 2019 - 2024. All rights reserved.