POSIX ACL 掩码值不是逻辑和

POSIX ACL 掩码值不是逻辑和

我必须了解 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

相关内容