在 Mac OS 中仅为一个用户传播 ACL 条目的删除?

在 Mac OS 中仅为一个用户传播 ACL 条目的删除?

我正在尝试从我的某个驱动器上的所有文件夹中递归地删除为 johndoe 设置的 ACL,而不删除任何其他条目!有人知道如何在不影响其他组/用户已有的 ACL 的情况下执行此操作吗?

我正在寻找 Mac 版的“setfacl -du:johndoe”

我知道您可以使用 chmod 从多个文件中删除一条规则,但是我见过的唯一方法不起作用,因为它通过其索引删除规则(例如:每个文件夹的第 5 个条目)并且我的用户的条目并不总是相同的索引。

你为什么要这么做?假设你继承了一个疯狂的文件系统,其中有一群个人用户而不是群组,而你只想删除那些个人用户,因为他们已经拥有访问权限。

答案1

这有点长,但你可以做这样的事情:

find . -exec chmod -a "johndoe allow delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,read,write,append,execute,list,search,add_file,add_subdirectory,delete_child" {} \;

您还必须运行带有“拒绝”的相同命令来删除用户的任何禁止规则。

非常感谢杰西·鲁萨克堆栈溢出——这是从他的回答中抄袭来的。

答案2

如果你正在寻找 GUI 应用程序,你可以使用沙盒- 然后,您可以更改 ACL 并在必要时递归应用它,但就您想要做的事情而言,它会受到一些限制。

不过,setfaclMac 上不支持此功能,可以chmod使用chmod例如chmod -R -a# [NumberOfACL] PATH或指定chmod -R -a [ACL to delete] PATH

如果指定username allow [ACL]为 ACL,则可以逐个删除权限。

例如,chmod -R -a "username allow read" /将从根硬盘上任何文件夹或文件上可用的任何 ACL 中删除任何读取权限。然后,您可以对其余可用的 ACL 进行重复,如果您知道某些 ACL 总是在一起,则可以将它们串在一起,例如,读取、写入(它们必须用逗号分隔,没有空格)。

ACL 列表可从 chmod 手册页中获取(为了简洁起见),但通过将每个命令(chmod -R -a "username [ACL whether it's allow or deny]")放入脚本中,您可以从文件夹和任何子目录中删除单个用户的所有 ACL。您现在已在 OP 的答案中得到答案。(而且是一种更简单的方法)

请参阅手册页以了解完整详细信息

答案3

我相信您可能想要 -x 而不是 -d。请务必测试一下。添加 -R 以进行递归。

setfacl -xR u:johndoe dirname

相关内容