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
但是据我所知,inode 中有两个位置用于保存文件权限(i_mode 字段)和放置 ACL 的扩展文件属性。那么当我访问文件时,会使用哪种文件权限 - 标准还是 ACL?或者也许这是以不同方式呈现的同一件事?
答案1
来自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:---
第 4、6 和 9 行对应于文件模式权限位的用户、组和其他字段。这三个称为基本 ACL 条目。第 5 和 7 行是命名用户和命名组条目。第 8 行是有效权限掩码。此条目限制授予所有组和命名用户的有效权限。(文件所有者和其他权限不受有效权限掩码影响;所有其他条目均受其影响。)第 10-14 行显示与此目录关联的默认 ACL。目录可能有默认 ACL。常规文件永远没有默认 ACL。
事实上,你的线条只带有::
和 而没有,<user|group|other>:<name>:<perms>
这表明你没有扩展 ACL。对于此特定文件,您只是使用一种奇特的方式来获取与(用户/组/其他权限位,也称为“基本 ACL”)getfacl
中显示的相同信息。ls -la
至于哪些权限用过的:简而言之,这取决于命令ACL 的权限。请参阅这里和这里了解详情。一般来说,如果拒绝在 ACL 列表中排在第一位,则以后不可能通过显式允许重新授予权限。拒绝总是优先的。
还有一篇更长的文章,参考资料更多这里在 Unix.SE 上。