3

为什么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要设置位?

4

2 回答 2

2

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

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

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

于 2016-08-05T10:27:35.400 回答
1

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

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

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

于 2013-03-07T00:20:21.553 回答