文件上的 ACL 掩码和标准组权限有何关系?

文件上的 ACL 掩码和标准组权限有何关系?

首先,我创建一个文件并检查它的标准权限和 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 掩码标准组权限也发生了更改。

  1. ACL 掩码和标准组权限之间存在什么联系?
  2. ACL掩码和文件组权限耦合的原因是什么?其背后有何逻辑?

有问题的发行版是 Debian Linux 7.6 和 CentOS 7


编辑

此时我只想分享我在研究标准文件组权限和 ACL 掩码之间的关系时得出的一些发现。以下是我发现的经验观察:

  1. ACL 掩码可以更改:

    1. 直接用命令设置setfacl -m m:<perms>
    2. 通过使用chmod命令更改文件组权限(如果 ACL 掩码已存在;它可能不存在,因为如果文件上没有命名用户或组 ACL 权限,则它是可选的);
    3. 通过添加指定用户或组 ACL 条目(掩码将自动重新计算)。
  2. 仅当掩码直接由 setfacl 设置或通过 chmod 修改文件组权限(不自动计算)时,掩码才会强制实施最大访问权限(如果存在权限超出 ACL 掩码权限的 ACL 条目)。对 ACL 条目的任何更改都会触发 ACL 掩码自动重新计算并有效关闭“强制模式”。

  3. 使用 ACL 时,有一些副作用会隐式影响标准文件组权限:

    1. 应用于文件的指定用户或组 ACL 条目可以更改 ACL 掩码(增加其权限),从而更改有效的文件组权限。例如,如果您作为文件所有者,设置了“rw-r--r-- jim Students”权限,并且您还向用户“jack”授予了 rw 权限,那么您还将隐式向任何人授予 rw 权限来自“学生”组。
    2. 更严格(权限更少)的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 权限,并发挥作用。这意味着如果您:

  1. 调整掩码,更改组最大权限,
  2. 如果您更改任何存在掩码的组权限,则该掩码将采用所有组权限中的最大组权限
  3. 组读、写和执行权限根据掩码(如果存在)确定

在此输入图像描述

希望这有帮助。

相关内容