ACL 与标准文件权限 - 访问文件时使用哪些权限?

scd*_*dmb 6 linux acl file-permissions

ACL 和标准文件权限似乎是同步的:

$ getfacl test.cpp
# file: test.cpp
# owner: scdmb
# group: scdmb
user::rw-
group::rw-
other::r--

$ ls -l test.cpp
-rw-rw-r-- 2 scdmb scdmb 173 Jan  1  1970 test.cpp
Run Code Online (Sandbox Code Playgroud)

但是,正如我所读到的,inode 中有两个位置可以保存文件权限(i_mode 字段)以及放置 ACL 的这些扩展文件属性。那么当我访问文件时,使用哪些文件权限 - 标准还是 ACL?或者,这可能是以不同方式呈现的同一事物?

all*_*tic 5

getfacl 联机帮助页

getfacl 的输出格式如下:

           1:  # file: somedir/
           2:  # owner: lisa
           3:  # group: staff
           4:  user::rwx
           5:  user:joe:rwx               #effective:r-x
           6:  group::rwx                 #effective:r-x
           7:  group:cool:r-x
           8:  mask:r-x
           9:  other:r-x
          10:  default:user::rwx
          11:  default:user:joe:rwx       #effective:r-x
          12:  default:group::r-x
          13:  default:mask:r-x
          14:  default:other:---
Run Code Online (Sandbox Code Playgroud)

第4、6、9行分别对应文件模式权限位的用户、组等字段。这三个称为基本 ACL 条目。第 5 行和第 7 行是命名用户和命名组条目。第 8 行是有效权限掩码。此项限制授予所有组和指定用户的有效权限。(文件所有者和其他权限不受有效权限掩码的影响;所有其他条目都受此影响。)第 10--14 行显示与该目录关联的默认 ACL。目录可能有一个默认的 ACL。常规文件从不具有默认 ACL。

事实上,你只显示带有::和不带有的行<user|group|other>:<name>:<perms>表明你没有扩展的 ACL。对于这个特定文件,您只是使用getfacl一种奇特的方式来获取与ls -la(用户/组/其他权限位,也称为“基本 ACL”)中显示的相同信息。

至于其权限使用:简单的答案是它依赖于订单的访问控制列表。有关详细信息,请参阅此处此处。通常,如果拒绝首先出现在 ACL 列表中,则以后不可能通过显式允许返回权限。拒绝总是优先的。

还有更多的引用甚至更长的文章在这里上Unix.SE.