我必须了解 POSIX ACL 掩码是如何重新计算的。我阅读了手册页(https://man7.org/linux/man-pages/man1/setfacl.1.html)并有如下解释:
The default behavior of setfacl is to recalculate the ACL mask entry, unless a mask entry was
explicitly given. The mask entry is set to the union of all permissions of the owning group, and
all named user and group entries.
好吧,听起来很清楚,但实际上并不像看起来那么容易。假设我有一个组用户和 2 个用户:student 和 jbond。用户 Student 创建了一个文件 test.txt,其中包含以下 ACL 列表:
# file: test.txt
# owner: student
# group: users
user::rw-
user:jbond:rw- #effective:r--
group::r--
mask::r--
other::r--
目前学生可以读写,而 jbond 只能读取。然后我用 chmod 更改了组权限:
chmod g-r test.txt
现在ACL列表是:
# file: test.txt
# owner: student
# group: users
user::rw-
user:jbond:rw- #effective:---
group::r-- #effective:---
mask::---
other::r--
我的问题是这个面具是怎么发生的---
?如何执行手册页中描述的联合操作。它与逻辑或相同吗?如果是怎么一步步计算呢?我真的需要理解它。
系统信息:打开SUSE
答案1
你没有跑setfacl
,所以它无法为你修复面具。您运行了chmod
,它不知道 ACL。如果您现在运行setfacl -m user:jbond:rw test.txt
,您应该会看到它也修改了掩码。
(请注意,这与有 ACL 掩码的情况setfacl -m group::xyz
不同,因为后者修改掩码,而前者修改所属组的实际权限。)chmod g=xyz