gol*_*lem 19 acl permissions files
首先我创建一个文件并检查它的标准权限和 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--
Run Code Online (Sandbox Code Playgroud)
然后我在文件上设置 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--
Run Code Online (Sandbox Code Playgroud)
请注意,随着 ACL 掩码标准组对文件的权限也发生了变化。
有问题的发行版是 Debian Linux 7.6 和 CentOS 7
编辑
在这一点上,我只想分享我在研究标准文件组权限和 ACL 掩码之间的关系时得出的一些发现。以下是我发现的经验观察:
可以更改 ACL 掩码:
setfacl -m m:<perms>
命令设置;chmod
命令更改文件组权限(如果 ACL 掩码已经存在;如果文件上没有命名用户或组 ACL 权限,它可能不存在,因为它是可选的);仅当掩码由 setfacl 直接设置或通过 chmod 修改文件组权限(非自动计算)时,掩码才会强制执行最大访问权限(如果存在权限超过 ACL 掩码权限的 ACL 条目)。对 ACL 条目的任何更改都会触发 ACL 掩码自动重新计算并有效关闭“强制模式”。
使用 ACL 时,有一些副作用会隐式影响标准文件组权限:
setfacl -b
命令),组权限将保持只读。这仅适用于更严格的 ACL 掩码,更软的 ACL 掩码(更多权限)在删除后不会永久更改原始文件组权限。cou*_*ode 12
如果 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掩码和文件组权限耦合的原因是什么?背后隐藏着什么逻辑?
一个很好的解释是here。本质上,面具是一个
[...] 组类中的任何条目将授予的权限上限。
此上限属性可确保不知道 ACL 的 POSIX.1 应用程序在支持 ACL 后不会突然且意外地开始授予其他权限。
在最小 ACL 中,组类权限与所属组权限相同。在扩展 ACL 中,组类可能包含其他用户或组的条目。这会导致一个问题:其中一些附加条目可能包含所属组条目中未包含的权限,因此所属组条目权限可能与组类权限不同。
这个问题通过掩码条目的优点得到解决。使用最少的 ACL,组类权限映射到所属组条目权限。使用扩展 ACL,组类权限映射到掩码条目权限,而拥有组条目仍然定义拥有组权限。组类权限的映射不再是恒定的。
小智 6
当我看到这个链接处理 ACL时,我终于明白到底发生了什么
具体来说,该掩码基本上取代了 NAMED USER 和所有 GROUP 权限,并发挥作用。这意味着如果您:
希望这有帮助。