ACL如何影响ls / stat()结果?

时间:2013-03-06 23:06:43

标签: linux bash posix acl

为什么当没有可写组的位时,目录会显示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位被设置?

2 个答案:

答案 0 :(得分:2)

为给定的文件或目录激活POSIX ACL。组类权限模式不再是组权限,实际上是掩码ACL条目(与umask无关)。所以现在因为你的文件有POSIX ACL扩展(+中的ls -l后缀可以看到),ls,stat和find显示的rwx实际上不是组类权限模式了。使用chmod修改组类权限模式也只会更改掩码,并且不会更改实际的组类权限模式。这意味着您更改组类权限模式的唯一方法是使用setfacl

掩码ACL条目似乎是“分配”组类的所有ACL条目的最大可能权限。这包括命名用户,命名组和拥有组。它不包括拥有用户和其他类。这可以限制为任何命名用户,命名组或拥有组分配的权限。为了获得最大的灵活性,请将掩码设置为rwx,然后根据自己的判断设置命名用户,命名组和拥有组权限。这将适用于cdls等内容。但是,这确实意味着在使用lsstat等时,他们都会为群组类显示rwx,即使这不是真的。

为什么这个面具在这里?它解决了什么目的?似乎掩码在这里是为了向后兼容不理解POSIX ACL的程序。如果程序不理解POSIX ACL并在组类中看到rwx(实际上它实际上是掩码),会成功访问目录/文件,会发生什么? (我不知道这个问题的答案)。我认为这真是奇怪的怪癖,应该被删除。但这就是POSIX ACL的工作原理。

答案 1 :(得分:1)

这可能是你的答案 - ACL传播:

http://users.suse.com/~agruen/acl/linux-acls/online/

某些filesytems允许它作为挂载选项。我不知道你有什么文件系统,所以这可能是一个糟糕的答案。