setfacl 将文件重置为默认权限?

setfacl 将文件重置为默认权限?

我有一个具有以下默认 ACL 的目录:

default:user:phptutor:rwx

但是,该目录中的任何文件/目录都没有该默认权限(因为它是在创建后添加的)。

如何将父目录的默认 ACL 复制到其中的每个文件夹和文件?

答案1

使用getfacl从目录中获取默认权限,然后将结果导入setfacl以应用它。类似这样的操作应该可以工作:

getfacl -d <directory> | setfacl -R --set-file=- <directory>

答案2

我将进一步扩展这个答案,因为在我的例子中,首先创建了默认 ACL,但复制具有权限的文件并没有应用默认 ACL(或者换句话说,使用了空的源 ACL)。

假设所有目录都有与顶层相同的默认条目,恢复 ACL 就像文件正常创建一样可以分两步完成:

  1. 仅恢复默认条目。它们将应用于所有目录,以便将来在这些子目录下创建的文件将继承默认 ACL。

    getfacl -d <directory> | setfacl -dR --set-file=- <directory>
    
  2. 将默认条目应用于所有文件和目录,但不重新计算掩码(setfacl -n开关)。此处的 grep 还会删除基本 UNIX 权限和掩码条目,因此 setfacl 可以将 ACL 与当前文件权限合并。

    getfacl -d <directory> | grep -v :: | setfacl -R -n -M- <directory>
    

这些命令中的源目录和目标目录可以相同,这很方便在其下直接应用许多文件和目录缺少的 ACL(您将对顶级目录重新应用相同的权限,因此实际上对该目录无操作)。

相关内容