我正在尝试为 FreeBSD 13.0 上的文件夹设置默认组权限
$mkdir test
$setfacl -d -m u::rwx,g::rwx,o::rx,mask::rwx test
$getfacl -d test
# file: test
# owner: john
# group: wheel
user::rwx
group::rwx
mask::rwx
other::r-x
$cd test
$touch file
$ls -l file
-rw-r--r--+ 1 john wheel 0B Jul 9 19:32 file
$getfacl file
# file: file
# owner: john
# group: wheel
user::rw-
group::rwx # effective: r--
mask::r--
other::r--
正如您所看到的,组权限没有正确继承。我不关心用户和组的 x 标志,这是一种安全机制。然而,该组应该具有写权限,但事实并非如此。对于由“mkdir”命令创建的文件夹,可以观察到相同的行为。
在 ArchLinux 上,同一组命令运行得很好。在 FreeBSD 上,umask 以某种方式接管,通常应该被 acls 覆盖。如果我将 umask 更改为 002,我会得到所需的结果。
在 FreeBSD 上我使用 UFS2 文件系统,在 ArchLinux 上使用 ext4。
对此有什么想法吗?
答案1
正如您所看到的,组权限没有正确继承。
正如我所看到的,他们绝对是是继承得当。您指定了group:rwx
,并且 的输出getfacl
已经很清楚地告诉您,您得到 group:rwx
。
在 FreeBSD 上,umask 以某种方式接管,通常应该被 acls 覆盖。
不正确。 FreeBSD 做了正确的事。 touch
创建了一个具有权限的文件rw-rw-rw-
,您当前的umask
设置(022
大概)修改rw-r--r--
为正是它应该的方式。
第一个rw-
成为user
ACE的部分,中间的r--
成为mask
ACE的部分,最后一个r--
成为other
ACE的部分,因为这就是 TRUSIX 访问控制与设置旧式权限位的事物进行互操作的方式。用户权限是所有者用户的访问控制;其他权限是其他人的访问控制;和组权限是掩码访问控制。
您的touch
命令,用 修改umask
,指示创建一个只有所有者用户可以写入的文件,而其他人(其他用户、所有者组、其他组和世界)只能读取,这就是您获得的 ACL 实现的目标。
如果您添加了一个可继承的 ACE,则表示u:nobody:rwx
您将获得一个 ACL,nobody:r--
以完全相同的方式有效地屏蔽它,因为您命令的是一个只有所有者用户才能写入的文件。