哪些关系将ACL掩码和文件的标准组权限联系在一起?


17

首先,我创建一个文件并检查它的标准权限和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掩码自动重新计算,并有效地关闭“强制模式”。

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

    1. 应用于文件的命名用户或组ACL条目可以更改ACL掩码(增加其权限),从而更改有效的文件组权限。例如,如果您作为文件所有者具有“ rw-r--r-- jim学生”权限,并且还向用户“ jack”授予了rw权限,则您还将向任何人隐式授予rw权限来自“学生”组。
    2. 更严格的(较少权限)ACL掩码可以永久删除相应的标准文件组权限。例如,如果您的文件具有rw标准文件组权限,并且对文件应用了只读ACL掩码,则其组权限将减少为只读。然后,如果您删除所有扩展的ACL条目(使用setfacl -b命令),则组权限将保持只读状态。这仅适用于更严格的ACL掩码,较软的ACL掩码(更多权限)在删除原始文件组权限后不会永久更改。

我认为您可以参考以下页面,www-uxsup.csx.cam.ac.uk
pub / doc /

Answers:


11

如果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的POSIX.1应用程序在支持ACL后不会突然而意外地开始授予其他权限。

在最小的ACL中,组类权限与所属组权限相同。在扩展ACL中,组类可能包含其他用户或组的条目。这导致出现问题:这些附加条目中的某些条目可能包含所有者组条目中未包含的权限,因此所有者组条目权限可能与组类权限不同。

该问题通过掩码入口得以解决。使用最少的ACL,组类权限将映射到拥有组的条目权限。使用扩展的ACL,组类权限映射到掩码条目权限,而所属组条目仍定义了所属组权限。组类权限的映射不再恒定。


您的意思适用于以下getfacl输出: user :: rw- group :: r-- other :: r--。如果chmod在执行时使用命令更改标准权限,则这3行会更改,反之亦然,例如getfacl -m u:someuser:rwx,文件所有者的标准文件权限将更改,并且更改将反映在ls -l输出中。没错,但是我看不出它如何回答我的问题
golem

查看完整内容的我的编辑
应对模式

1
您编辑的答案说,文件组权限和ACL掩码在设计上是有联系的。ACL掩码和文件组权限耦合的原因是什么的问题仍然存在。我不清楚这背后的逻辑是什么。
golem 2014年

1
可能有道理。这取决于定义和实现。按照定义,现在已实现的Linux文件ACL是标准文件权限的超集,其中包括它们。因此他们不能“矛盾”。这是一个用例。如果我将具有初始-rw-r--r-- 1 user user权限的文件的rwx权限分配给“ testuser”,则将接受该命名用户ACL,并且ACL掩码(以及文件组权限)也将更改为rwx。--- [请参阅下一条评论,以继续]
golem 2014年

1
现在,“ testuser”的rwx权限是否与文件的新-rw-rwxr-- 1 user user权限矛盾?您如何确定矛盾?通过比较testuser的ACL权限和标准文件组权限?是什么逻辑导致您将组权限与用户权限进行比较?他们不是不同的实体吗?是不是违反直觉?对于您来说,这可能很明显,但我仍在努力掌握它。
golem

3

当我看到此链接处理ACL时,我终于明白了到底发生了什么

具体来说,该掩码基本上可以代替NAMED USER和所有GROUP权限,并可以代替它们。这意味着如果您:

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

在此处输入图片说明

希望这会有所帮助。


您所引用的页面上的掩码有一个很好的解释(引自第27.3.3节“ 具有访问ACL的目录”):掩码定义了组类中所有条目的最大有效访问权限。这包括命名用户,命名组和拥有组。
patryk.beza

-1

它背后的逻辑是什么?

逻辑被完全破坏了,因此POSIX ACL是纯净的和无用的废话。

如果他们的目标是与除标准原始UNIX的“ ugo”模型之外没有ACL概念的应用程序保持兼容性,则它们实际上在一开始就失败了,因为现在每个清除组权限的应用程序都在有效地撤消ACL添加的访问权限。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.