如何处理 ACL 权限以及它们以什么顺序应用于给定的用户操作?

Mik*_*e B 21 linux filesystems acl centos

CentOS 6.4

我试图更好地了解文件系统 ACL 规则的处理方式以及 ACL 规则的应用顺序。

例如,假设用户 bob 和 joe 属于名为 sales 的组。假设我有一份包含以下详细信息的销售文件:

[root@Maui ~]# getfacl /home/foo/docs/foo.txt
getfacl: Removing leading '/' from absolute path names
# file: home/foo/docs/foo.txt
# owner: jane
# group: executives
user:: r--
user:bob:rw-
user:joe:rwx
group:sales:rwx
group::r--
mask::rwx
other::---
Run Code Online (Sandbox Code Playgroud)

我的问题是,在这样的示例中如何处理权限以及哪些访问权限优先?

是否只有自上而下的搜索,并且首先匹配的规则才是适用的?

或者 Linux 是否根据相关用户的最具体规则强制执行访问?或者最严格和适用的规则优先?

slm*_*slm 16

这是一个广泛的话题,在这里涉及的太多了。我将向您推荐Linux 上POSIX 访问控制列表白皮书,由 SuSE 实验室的 Andreas Grünbacher 整理。它在涵盖主题和分解主题方面做得非常好,因此您可以了解 ACL 的工作原理。

你的榜样

现在让我们看一下您的示例并将其分解。

  • 组(销售)
  • 销售组成员(bob、joe)

现在让我们分解文件的权限/home/foo/docs/foo.txt。ACL 还封装了大多数人在 Unix 上应该熟悉的相同权限,主要是用户、组和其他位。所以让我们先把它们拉出来。

user:: r--
group::r--
other::---
Run Code Online (Sandbox Code Playgroud)

这些通常看起来像这样ls -l

$ ls -l /home/foo/docs/foo.txt
-r--r----- 1 jane executives 24041 Sep 17 15:09 /home/foo/docs/foo.txt
Run Code Online (Sandbox Code Playgroud)

您可以使用这些 ACL 行查看谁拥有该文件以及该组是什么:

# owner: jane
# group: executives
Run Code Online (Sandbox Code Playgroud)

所以现在我们进入 ACL 的本质:

user:bob:rw-
user:joe:rwx
group:sales:rwx
Run Code Online (Sandbox Code Playgroud)

这表明用户bobrw,而用户joerwx。还有一个组也有rwx类似joe的。这些权限就好像我们ls -l输出中的用户列有 3 个所有者(jane、bob 和 joe)以及 2 个组(executives 和 sales)。除了它们是 ACL 之外,没有其他区别。

最后mask一行:

mask::rwx
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们没有屏蔽任何东西,它是敞开的。因此,如果用户 bob 和 joe 有以下几行:

user:bob:rw-
user:joe:rwx
Run Code Online (Sandbox Code Playgroud)

那么这些就是他们的有效权限。如果面具是这样的:

mask::r-x
Run Code Online (Sandbox Code Playgroud)

那么他们的有效权限是这样的:

user:bob:rw-    # effective:r--
user:joe:rwx    # effective:r-x
Run Code Online (Sandbox Code Playgroud)

这是一种用于限制以批发方式授予的权限的强大机制。

注意:文件所有者和其他权限不受有效权限掩码的影响;所有其他条目都是!因此,就掩码而言,与传统的 Unix 权限相比,ACL 权限是二等公民。

参考