首先,我创建一个文件并检查它的标准权限和 ACL 条目:
$ touch file; ls -l file; getfacl file
-rw-r--r-- 1 user user 0 Jul 30 16:26 file
# file: file
# owner: user
# group: user
user::rw-
group::r--
other::r--
然后我在文件上设置 ACL 掩码,并再次检查它的标准权限和 ACL 条目:
$ setfacl -m mask:rwx file
$ ls -l file; getfacl file
-rw-rwxr--+ 1 user user 0 Jul 30 16:26 file
# file: file
# owner: user
# group: user
user::rw-
group::r--
mask::rwx
other::r--
请注意,文件上的 ACL 掩码标准组权限也发生了更改。
- ACL 掩码和标准组权限之间存在什么联系?
- ACL掩码和文件组权限耦合的原因是什么?其背后有何逻辑?
有问题的发行版是 Debian Linux 7.6 和 CentOS 7
编辑
此时我只想分享我在研究标准文件组权限和 ACL 掩码之间的关系时得出的一些发现。以下是我发现的经验观察:
ACL 掩码可以更改:
- 直接用命令设置
setfacl -m m:<perms>
; - 通过使用
chmod
命令更改文件组权限(如果 ACL 掩码已存在;它可能不存在,因为如果文件上没有命名用户或组 ACL 权限,则它是可选的); - 通过添加指定用户或组 ACL 条目(掩码将自动重新计算)。
- 直接用命令设置
仅当掩码直接由 setfacl 设置或通过 chmod 修改文件组权限(不自动计算)时,掩码才会强制实施最大访问权限(如果存在权限超出 ACL 掩码权限的 ACL 条目)。对 ACL 条目的任何更改都会触发 ACL 掩码自动重新计算并有效关闭“强制模式”。
使用 ACL 时,有一些副作用会隐式影响标准文件组权限:
- 应用于文件的指定用户或组 ACL 条目可以更改 ACL 掩码(增加其权限),从而更改有效的文件组权限。例如,如果您作为文件所有者,设置了“rw-r--r-- jim Students”权限,并且您还向用户“jack”授予了 rw 权限,那么您还将隐式向任何人授予 rw 权限来自“学生”组。
- 更严格(权限更少)的ACL掩码可以永久删除相应的标准文件组权限。例如,如果您有一个具有 rw 标准文件组权限的文件,并且您对该文件应用只读 ACL 掩码,则该文件的组权限将降低为只读。然后,如果您删除所有扩展 ACL 条目(使用
setfacl -b
命令),组权限将保持只读状态。这仅适用于更严格的 ACL 掩码,更软的 ACL 掩码(更多权限)在删除后不会永久更改原始文件组权限。
答案1
如果 unix 文件权限与 acl 条目不一致,则没有意义,反之亦然。因此,手册页 ( acl(5)
) 说明了您的要求:
ACL 条目和文件权限位之间的对应关系
ACL 定义的权限是文件权限位指定的权限的超集。
文件所有者、组和其他权限与特定 ACL 条目之间存在对应关系:所有者权限对应于 ACL_USER_OBJ 条目的权限。如果ACL中有ACL_MASK条目,则组权限对应于ACL_MASK条目的权限。否则,如果 ACL 没有 ACL_MASK 条目,则组权限对应于 ACL_GROUP_OBJ 条目的权限。其他权限对应于 ACL_OTHER_OBJ 条目的权限。
文件所有者、组和其他权限始终与相应 ACL 条目的权限匹配。文件权限位的修改会导致关联的 ACL 条目的修改,而这些 ACL 条目的修改会导致文件权限位的修改。
回应讨论的附录:
ACL掩码和文件组权限耦合的原因是什么?其背后有何逻辑?
一个很好的解释是这里。从本质上来说,面膜是一个
[...] 组类中的任何条目将授予的权限上限。
此上限属性可确保在支持 ACL 后,不知道 ACL 的 POSIX.1 应用程序不会突然意外地开始授予其他权限。
在最小 ACL 中,组类权限与所属组权限相同。在扩展 ACL 中,组类可能包含其他用户或组的条目。这会导致一个问题:这些附加条目中的一些可能包含所属组条目中未包含的权限,因此所属组条目权限可能与组类权限不同。
通过掩码条目解决了这个问题。使用最少的 ACL,组类权限映射到所属组条目权限。使用扩展 ACL,组类权限映射到掩码条目权限,而所属组条目仍定义所属组权限。组类权限的映射不再是恒定的。
答案2
当我看到这个链接时,我终于明白到底发生了什么处理 ACL
具体来说,该掩码基本上取代了 NAMED USER 和所有 GROUP 权限,并发挥作用。这意味着如果您:
- 调整掩码,更改组最大权限,
- 如果您更改任何存在掩码的组权限,则该掩码将采用所有组权限中的最大组权限
- 组读、写和执行权限根据掩码(如果存在)确定
希望这有帮助。