为什么当没有可写组的位时,目录会显示drwxrwxr-x+
?
让我们在一个目录上给予一个额外的用户(john)rwx
权限,如下所示:
$ mkdir logfiles
$ setfacl -m user:john:rwx logfiles
$ getfacl -ce logfiles
user::rwx
user:john:rwx #effective:rwx
group::r-x #effective:r-x
mask::rwx
other::r-x
这就是我想要的东西,而john现在拥有与目录所有者相当的访问权限。然而,
$ ls -ld logfiles
drwxrwxr-x+ 2 bob users 4096 Mar 6 22:38 logfiles
$ find -perm +020 -ls
8197 4 drwxrwxr-x 2 bob users 4096 Mar 6 22:38 ./logfiles
没有组具有写入权限,但ls的输出和find的匹配结果将另有建议。这直接来自lstat(2)系统调用的st_mode字段;为什么S_IWGRP
位被设置?
答案 0 :(得分:2)
为给定的文件或目录激活POSIX ACL。组类权限模式不再是组权限,实际上是掩码ACL条目(与umask
无关)。所以现在因为你的文件有POSIX ACL扩展(+
中的ls -l
后缀可以看到),ls,stat和find显示的rwx
实际上不是组类权限模式了。使用chmod
修改组类权限模式也只会更改掩码,并且不会更改实际的组类权限模式。这意味着您更改组类权限模式的唯一方法是使用setfacl
。
掩码ACL条目似乎是“分配”组类的所有ACL条目的最大可能权限。这包括命名用户,命名组和拥有组。它不包括拥有用户和其他类。这可以限制为任何命名用户,命名组或拥有组分配的权限。为了获得最大的灵活性,请将掩码设置为rwx
,然后根据自己的判断设置命名用户,命名组和拥有组权限。这将适用于cd
,ls
等内容。但是,这确实意味着在使用ls
或stat
等时,他们都会为群组类显示rwx
,即使这不是真的。
为什么这个面具在这里?它解决了什么目的?似乎掩码在这里是为了向后兼容不理解POSIX ACL的程序。如果程序不理解POSIX ACL并在组类中看到rwx
(实际上它实际上是掩码),会成功访问目录/文件,会发生什么? (我不知道这个问题的答案)。我认为这真是奇怪的怪癖,应该被删除。但这就是POSIX ACL的工作原理。
答案 1 :(得分:1)
这可能是你的答案 - ACL传播:
http://users.suse.com/~agruen/acl/linux-acls/online/
某些filesytems允许它作为挂载选项。我不知道你有什么文件系统,所以这可能是一个糟糕的答案。