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

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

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::---

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

是否只有自上而下的搜索,并且第一个匹配的规则就是适用的规则?

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

答案1

这是一个宽泛的主题,在这里涉及的内容有点太多。我将向您推荐Linux 上的 POSIX 访问控制列表白皮书由 SuSE 实验室的 Andreas Grünbacher 编写。它很好地涵盖了该主题并将其分解,以便您了解 ACL 的工作原理。

你的例子

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

  • 集团(销售)
  • 销售组成员(鲍勃、乔)

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

user:: r--
group::r--
other::---

这些通常在以下形式中看起来像这样ls -l

$ ls -l /home/foo/docs/foo.txt
-r--r----- 1 jane executives 24041 Sep 17 15:09 /home/foo/docs/foo.txt

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

# owner: jane
# group: executives

现在我们深入了解 ACL 的本质:

user:bob:rw-
user:joe:rwx
group:sales:rwx

这表明 user bobhas rw,而 user joehas rwx。还有一个团体也有rwx类似的乔。这些权限就好像我们ls -l输出中的用户列有 3 个所有者(jane、bob 和 joe)以及 2 个组(高管和销售人员)。除了 ACL 之外没有任何区别。

最后mask一行:

mask::rwx

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

user:bob:rw-
user:joe:rwx

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

mask::r-x

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

user:bob:rw-    # effective:r--
user:joe:rwx    # effective:r-x

这是一种强大的机制,可以减少以批发方式授予的权限。

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

参考

答案2

ACL顺序

使用第一个匹配的条目

  • 所有者
  • 指定用户
  • 拥有或命名组(组不同,见下文)
  • 其他的

流动

团体报名

组条目不使用第一个匹配的组条目,检查每个匹配的组条目,如果允许任何匹配的组条目,则允许该请求。

例子

admin是在团体中admin并且user

id admin

uid=1000(admin) gid=1000(admin) groups=1000(admin),1001(user)

user在组中user

id user

uid=1001(user) gid=1001(user) groups=1001(user)
getfacl file

# file: file
# owner: root
# group: root
user::rw-
group::r--
group:user:---
group:admin:r--
mask::r--
other::---
getfacl first

# file: first
# owner: root
# group: root
user::rw-
group::r--
user:admin:---
group:user:---
group:admin:r--
mask::r--
other::---
用户 cat file cat first
admin 允许 否定
user 否定 否定

admin读取file是允许的

  • getfacl file
    ...
    group:user:---
    group:admin:r--
    mask::r--
    
  • 用户admin仍然允许访问file

    (如果进程的任何组被授予权限,则允许访问)

adminfirst即否认

  • getfacl first
    ...
    user:admin:---
    group:user:---
    group:admin:r--
    mask::r--
    
  • 用户admin仍然拒绝访问first

    (使用第一个匹配的命名用户 ACL,甚至组admin也允许访问)

参考:Linux访问控制列表

相关内容