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 bob
has rw
,而 user joe
has 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
(如果进程的任何组被授予权限,则允许访问)
admin
读first
即否认
-
getfacl first ... user:admin:--- group:user:--- group:admin:r-- mask::r--
用户
admin
仍然拒绝访问first
(使用第一个匹配的命名用户 ACL,甚至组
admin
也允许访问)
参考:Linux访问控制列表