应用 POSIX ACL 时如何授予所属组权限?

应用 POSIX ACL 时如何授予所属组权限?

我试图了解将 POSIX ACL 应用于文件后如何向所属组授予权限。通常,我会使用chmod g+rwx.但是,当之前通过 setfacl 应用 POSIX ACL 时,这不起作用。之后我无法通过拥有组的成员访问该文件。 getfacl 的输出显示所属组条目未更改,但掩码已更改。

[vagrant@ice01 tmp]$ umask 077
[vagrant@ice01 tmp]$ touch test
[vagrant@ice01 tmp]$ ls -lisa test
1585067 0 -rw------- 1 vagrant vagrant 0 Sep 23 17:43 test
[vagrant@ice01 tmp]$ setfacl -m u:icer01:rwx test
[vagrant@ice01 tmp]$ chmod g+rwx test
[vagrant@ice01 tmp]$ ls -lisa test
1585067 0 -rw-rwx---+ 1 vagrant vagrant 0 Sep 23 17:43 test
[vagrant@ice01 tmp]$ getfacl test
# file: test
# owner: vagrant
# group: vagrant
user::rw-
user:icer01:rwx
group::---
mask::rwx
other::---

我读了这个回答它声称:

如果使用 chmod(1) 命令更改具有 ACL 条目的文件的文件组所有者权限,任何一个文件组所有者权限或者ACL 掩码更改为新权限。

我阅读了引用的 IEEE 1003.1e 工作草案的部分内容,它支持了他们的主张。
但更重要的是:我可以在具有 ext4 文件系统的 CentOS 6 机器上确认此行为(见上文)。

我的假设是否正确,这setfacl是应用 ACL 后向所属组授予访问权限的唯一选项?

如果是这样,这种行为就会将责任转移给最终用户。最后,在决定是否使用chmod或之前,您必须检查 ACL 是否已设置setfacl

答案1

标题中问题的答案是:setfacl -m group::rwX test大写的X表示“仅在其他人已经具有执行权限的情况下才授予执行权限”。 (这对 意味着同样的事情chmod(1)。)使用大写 X 可以执行递归setfaclchmod授予权限,而不会最终生成可执行源文件。

ACL 条目group::对应于文件的当前组。如果您要将组更改test为先锋组以外的其他组,则该group::条目将控制当前组的访问权限。

chmod g+rwx没有执行您期望的操作,因为当存在 ACL 时,文件或目录上的 Unix 组权限位会与mask::ACL 的条目形成别名。只要有ACLchmod g+FOO就相当于setfacl -m mask::FOO,反之亦然。

相关内容