我试图了解将 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 可以执行递归setfacl
或chmod
授予权限,而不会最终生成可执行源文件。
ACL 条目group::
对应于文件的当前组。如果您要将组更改test
为先锋组以外的其他组,则该group::
条目将控制当前组的访问权限。
chmod g+rwx
没有执行您期望的操作,因为当存在 ACL 时,文件或目录上的 Unix 组权限位会与mask::
ACL 的条目形成别名。只要有ACLchmod g+FOO
就相当于setfacl -m mask::FOO
,反之亦然。