我有一个具有以下默认 ACL 的目录:
default:user:phptutor:rwx
但是,该目录中的任何文件/目录都没有该默认权限(因为它是在创建后添加的)。
如何将父目录的默认 ACL 复制到其中的每个文件夹和文件?
答案1
使用getfacl
从目录中获取默认权限,然后将结果导入setfacl
以应用它。类似这样的操作应该可以工作:
getfacl -d <directory> | setfacl -R --set-file=- <directory>
答案2
我将进一步扩展这个答案,因为在我的例子中,首先创建了默认 ACL,但复制具有权限的文件并没有应用默认 ACL(或者换句话说,使用了空的源 ACL)。
假设所有目录都有与顶层相同的默认条目,恢复 ACL 就像文件正常创建一样可以分两步完成:
仅恢复默认条目。它们将应用于所有目录,以便将来在这些子目录下创建的文件将继承默认 ACL。
getfacl -d <directory> | setfacl -dR --set-file=- <directory>
将默认条目应用于所有文件和目录,但不重新计算掩码(
setfacl -n
开关)。此处的 grep 还会删除基本 UNIX 权限和掩码条目,因此 setfacl 可以将 ACL 与当前文件权限合并。getfacl -d <directory> | grep -v :: | setfacl -R -n -M- <directory>
这些命令中的源目录和目标目录可以相同,这很方便在其下直接应用许多文件和目录缺少的 ACL(您将对顶级目录重新应用相同的权限,因此实际上对该目录无操作)。