如何读取特定主机上的所有 ACL 并更改存在的组名称?

如何读取特定主机上的所有 ACL 并更改存在的组名称?

我尝试使用以下命令读取特定主机上的所有 ACL:

getfacl -R /

我想要做的是在每个 ACL 中查找 groupA,如果存在 groupA,则将其更改为 groupB,否则不理会它。

getfacl -R / | setfacl -g:groupB dir

上述内容对我不起作用,但任何人都可以指出我的方向,我将不胜感激。

答案1

首先,你的第二个命令不好。

为了更改目录的 ACL,允许 groupB读写权限:

setfacl -m g:groupB:rwx dir

其次,即使你的命令很好,你也会遇到问题

如果存在groupA,则将其更改为groupB

有一种方法可以将 ACL 从一个文件复制到另一个文件,如man setfacl示例所示:

getfacl file1 | setfacl --set-file=- file2

解决问题的一种方法是逐一检查所有文件,使用 sed 将 groupA 更改为 groupB,并将更改后的 ACL 复制到同一文件。这样,如果 ACL 中有 groupA,它将更改为 groupB,否则不会发生任何情况。就像是:

for file in $(find / -xdev) ; do getfacl $file | sed s/groupA/groupB/ | setfacl --set-file=- $file ; done

我不知道是否有更有效的解决方案,或者也许有一种方法可以用 find only 做同样的事情......

相关内容