组权限联合

组权限联合

如果一个文件有两个组的 ACL 条目,给他们不同的权限,如下所示:

group:admin:rw-
group:staff:r--

如果用户同时属于这两个组,那么他拥有什么权限?哪个条目优先?实验似乎表明最严格的权限适用。如果是这样,当我确实希望某个组的成员拥有更高的特权(即使他们也属于其他更受限制的组)时,处理这种情况的最佳方法是什么?

答案1

标准

换句话说,公共访问确定算法应解释如下(此描述是松散的释义常见访问确定算法的详细说明在 ACL 管理器中的伪代码中指定):

  • 将传入的 PAC 与 ACL 的访问 ACLE 进行匹配(在 ACL 管理器中的伪代码中定义的意义上)(按所示从上到下的顺序,即:UO、U、FU、GO/G/FG、O、FO、 AO),在第一个这样的匹配处停止(除了在指定的类似组的 ACLE 的情况下,所有匹配都被视为“同时”),并记下匹配的 ACLE 授予的权限(或者,在组的情况下 -与 ACLE 类似,是所有匹配的 ACLE 授予的权限的并集)。

  • 根据需要,根据 ACL 掩码 ACLE 中的权限掩码(即相交)获取的权限(即,如果匹配发生在中心列1中,则使用 MASK_OBJ 权限进行掩码,和/或如果 PAC 未经身份验证,则使用 UNAUTHENTICATED 权限进行掩码)。 (如果 ACL 管理器不支持这两个掩码 ACLE,则此步骤为空操作。)

(强调为原文,脚注已加)

也就是说,如果有一个名为的用户、组root和权限的文件,包含单行,则:0600acl-testread possible

$ getfacl acl-test
# file acl-test
# owner: root
# group: root
user::rw-
group::---
other::---

现在,如果我(作为用户fox)尝试cat这样做:

$ cat acl-test
cat: acl-test: Permission denied

组权限联合

我恰好在 和 组中userswheel因此我们可以为这些组添加特定的 ACL:

# setfacl -m g:users:--- -m g:wheel:r-- acl-test
$ cat acl-test
read possible

这是因为这些group条目(同时考虑)允许我的其中一个组的读取权限。这些可以组合起来:

# setfacl -m g:users:-w- acl-test
$ getfacl acl-test
# file: acl-test
# owner: root
# group: root
user::rw-
group::---
group:wheel:r--
group:users:-w-
mask::rw-
other::---
$ printf '%s\n' 'write possible' >> acl-test
$ cat acl-test
read possible
write possible

因此,现在我可以读取和写入该文件,即使允许这些权限的组不是同一组。

用户特定的权限覆盖所有组

由于用户规则先于组规则应用,因此我们仍然可以限制给定用户读取和/或写入内容:

# setfacl -m u:fox:--- acl-test
$ getfacl acl-test
# file: acl-test
# owner: root
# group: root
user::rw-
user:fox:---
group::---
group:wheel:r--
group:users:-w-
mask::rw-
other::---
$ cat acl-test
cat: acl-test: Permission denied

如果设置了掩码,它将覆盖几乎所有内容

如果文件对于除所有者之外的任何人来说都是真正只读的:

# setfacl -x u:fox -m g::rw- -m m:r-- acl-test
$ getfacl acl-test
# file: acl-test
# owner: root
# group: root
user::rw-
group::rw-          #effective:r--
group:wheel:r--
group:users:-w-     #effective:---
mask::r--
other::---
$ printf '%s\n' 'now writing is impossible' >> acl-test
bash: acl-test: Permission denied
# printf '%s\n' 'owner can still write' >> acl-test

有趣的是,掩码不会覆盖其他的权限,所以:

# setfacl -x g:users -x g:wheel -m o:rw- -n acl-test
$ getfacl acl-test
# file: acl-test
# owner: root
# group: root
user::rw-
group::rw-          #effective:r--
mask::r--
other::rw-
$ printf '%s\n' 'others can write now' >> acl-test
# chown :users acl-test
$ printf '%s\n' 'but not members of the owning group' >> acl-test
bash: acl-test: Permission denied

1 “中心柱”是指这个图片并且包含除 UO 和 O 之外的所有内容,因此拥有用户和其他人不会受到掩码的影响。具有已定义规则的所有组和非拥有用户做作的。

相关内容