acl如何影响ls / stat()结果



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

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

掩码ACL项似乎是"分配"组类的所有ACL项的最大可能权限。这包括命名用户、命名组和所属组。它不包括所属用户和其他类。这可以限制为任何指定用户、指定组或所属组分配的权限。为了获得最大的灵活性,将掩码设置为rwx,然后根据您的判断设置命名用户、命名组和所属组权限。这将适用于cd, ls和其他东西。然而,这确实意味着当使用lsstat时…等,他们都将显示rwx组类,即使这不是真的。

为什么这个面具在这里?它的目的是什么?这个掩码似乎是为了向后兼容那些不理解POSIX acl的程序。如果一个程序不理解POSIX acl并在group类中看到rwx(实际上它实际上是掩码),会发生什么,它是否成功访问目录/文件?(我不知道这个问题的答案)。我觉得这真的很奇怪,应该删掉。但这就是POSIX acl的工作方式

你的答案可能就在这里——ACL传播:

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

一些文件系统允许它作为一个挂载选项。我不知道您使用的是什么文件系统,所以这个答案可能不太好。

最新更新