getfacl 输出中的 mask 和 effective 是什么意思?
getfacl /var/www
:
getfacl: Removing leading '/' from absolute path names
file: var/www
owner: Name
group: Name
user::-wx
user:Test:rwx
effective:r--
group::rw-
effective:r--
mask::r--
other::rwx
答案1
ACL 是权限的扩展集。
POSIX 权限是每个文件或目录都有一个所有者、组和其他具有读、写和可执行位的权限。
ACL 添加额外的访问权限或“掩码”,可用于定义额外的组/用户和扩展权限。
因此,您看到的是 POSIX 权限 + ACL“掩码”,将它们放在一起时,您就获得了有效的访问权限。
例如,如果您具有rwx
POSIX 权限并且 ACL 授予您r--
,则您的有效权限是只读的。
如果 posix 给予您r--
并且 ACL 给予您rwx
,您的有效权限仍然是 RO。
因此,您会看到 POSIX 权限、ACL 掩码以及结果或有效权限。然后,您可以根据需要修改 POSIX 或 ACL 访问权限,以获得所需的有效访问权限 ;)
表:权限屏蔽
条目类型 文本形式 权限
命名用户 user:joe:rx rx
掩码 mask::rw- rw-
有效权限 r-
看
http://www.vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html
特别是我上面试图引用的“表格:权限屏蔽”和第一部分“ACL 的工作原理”
答案2
我花了一段时间才弄清楚这一点,所以也许这会有所帮助。
考虑一下 的输出ls -l
。如果你对 POSIX 足够熟悉,你就会习惯解释这样的内容:
drwxr-x--x 2 root plebs ...
- 第一个字母是类型:
d
表示它是一个目录。 - 接下来的三个是所有者的权限:
rwx
表示所有者可以读取、写入和执行(搜索)。 - “中间三个”是所属组的权限:
r-x
表示该组只能读取和执行(搜索)。 - 最后三个是“其他”或“世界”权限:
--x
表示其他人只能执行(搜索)。 - 有一个链接数与本次讨论无关。
- 所有者 (
root
) 已命名。 - 拥有组(
plebs
)已命名。
当 ACL 生效时,“中间三个”会发生变化:它们不再是拥有组的权限,而是授予 ACL 中提到的非所有者的最大权限。
例如,假设我对上面的目录执行以下操作:
setfacl --modify user:hero:7 thedir
这将授予访问权限rwx
,hero
现在ls -l
输出将如下所示:
drwxrwx--x+ 2 root plebs ...
表示+
现在有一个 ACL。
我没有更改该plebs
组的权限,并将getfacl thedir
确认这一点,显示如下内容:
user::rwx
user:hero:rwx
group::r-x
mask::rwx
other::--x
所属组仍然只具有r-x
权限,但是“中间三个”显示的其实是面具。
我可以用普通的方式chmod
来改变它。
chmod 651 thedir
看起来它起作用了ls -l
:
drwxr-x--x+ 2 root plebs ...
和getfacl thedir
:
user::rwx
user:hero:rwx #effective:r-x
group::r-x
mask::r-x
other::--x
啊,看,因为我更改了掩码,这是授予 ACL 中提到的非所有者的最大权限,因此hero
无法再授予rwx
任何权限。即使他们rwx
在 ACL 中有条目,由于掩码已被限制,他们也只能获得r-x
(仅r-x
有效)。
掩码只会限制权限,而不会添加权限。即使掩码rwx
以前是这样的,拥有者组仍然只能r-x
根据 ACL 条目获得权限。
这种行为很方便,因为“中间三个”为您提供了 ACL 中授予的权限的上限,并且由于 ACL 通常用作临时组,因此当它们生效时,它们通常比拥有组更受关注。