【问题标题】:How do ACLs influence ls / stat() results?ACL 如何影响 ls / stat() 结果?
【发布时间】:2013-03-06 23:06:43
【问题描述】:

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

【问题讨论】:

  • 创建目录时必须设置组写入位。你的umask是什么?
  • 不,umask 是 022,setfacl 之前的 perms 是 755(另请参见示例中的 getfacl 输出 - group::r-x)。你得到不同的结果吗?
  • 不,我得到和你一样的结果,使用 xfs 文件系统。我不知道为什么!

标签: linux bash posix acl


【解决方案1】:

一旦为给定文件或目录激活了 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 的工作方式。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 该文档确实在“访问 ACL 示例”部分中解决了我的问题。不过我也很困惑,因为它的示例显示 chmod g-wchmod g+w 用于编辑掩码条目,而不是组。
    • 我想你可能错过了这个想法。 ACL 基于父目录的 acls 在新文件上创建,或者在其他地方的某些情况下创建。您的 chmod 与它没有太大关系。 setfacl 和 getfacl 一般是 ACL 接口。
    • 我指的是您的回答中“访问 ACL 示例”中给出的特定 chmod 示例。你能解释为什么组可写位会这样吗?我可能错过了这个想法,因此整个问题:)
    • @Phil 看来实现掩码的方式是为了向后兼容非 POSIX ACL 程序,这似乎是一个不再需要但尚未更改的历史文物。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2018-12-14
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多