我试图了解FreeBSD ACL和Linux ACL在行为上的差异。特别是默认ACL的继承机制。
我在Debian 9.6和FreeBSD 12上都使用了以下命令:
$ cat test_acl.sh
#!/bin/sh
set -xe
mkdir storage
setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
touch outside
cd storage
touch inside
cd ..
ls -ld outside storage storage/inside
getfacl -d storage
getfacl storage
getfacl outside
getfacl storage/inside
umask
我从Debian 9.6获得以下输出:
$ ./test_acl.sh
+ mkdir storage
+ setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
+ touch outside
+ cd storage
+ touch inside
+ cd ..
+ ls -ld outside storage storage/inside
-rw-r--r-- 1 aaa aaa 0 Dec 28 11:16 outside
drwxr-xr-x+ 2 aaa aaa 4096 Dec 28 11:16 storage
-rw-rw----+ 1 aaa aaa 0 Dec 28 11:16 storage/inside
+ getfacl -d storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::rwx
mask::rwx
other::---
+ getfacl storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::---
+ getfacl outside
# file: outside
# owner: aaa
# group: aaa
user::rw-
group::r--
other::r--
+ getfacl storage/inside
# file: storage/inside
# owner: aaa
# group: aaa
user::rw-
group::rwx #effective:rw-
mask::rw-
other::---
+ umask
0022
注意outside
和inside
文件具有不同的权限。特别是,该outside
文件具有-rw-r--r--
,这是该用户的默认值,而该inside
文件具有-rw-rw----
,这要尊重我分配给该storage
目录的默认ACL 。
FreeBSD 12上相同脚本的输出:
$ ./test_acl.sh
+ mkdir storage
+ setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
+ touch outside
+ cd storage
+ touch inside
+ cd ..
+ ls -ld outside storage storage/inside
-rw-r--r-- 1 aaa aaa 0 Dec 28 03:16 outside
drwxr-xr-x 2 aaa aaa 512 Dec 28 03:16 storage
-rw-r-----+ 1 aaa aaa 0 Dec 28 03:16 storage/inside
+ getfacl -d storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::rwx
mask::rwx
other::---
+ getfacl storage
# file: storage
# owner: aaa
# group: aaa
user::rwx
group::r-x
other::r-x
+ getfacl outside
# file: outside
# owner: aaa
# group: aaa
user::rw-
group::r--
other::r--
+ getfacl storage/inside
# file: storage/inside
# owner: aaa
# group: aaa
user::rw-
group::rwx # effective: r--
mask::r--
other::---
+ umask
0022
(请注意,getfacl
即使不使用-d
FreeBSD不使用where的地方,Debian 也会显示默认的ACL ,但我认为实际的ACL storage
并不相同。)
在这里,outside
和inside
文件也具有不同的权限,但是inside
文件没有Debian版本具有的组写权限,这可能是因为Debian中的掩码保留了,w
而FreeBSD中的掩码丢失了w
。
为什么FreeBSD丢掉了w
面具,但Debian保留了它?
如果您不使用粘性组位(
—
sebasth
g+s
),这是否同样起作用?
@Mikel我已经更新了原始问题内容以显示
—
罗西(Roxy)
getfacl
信息。
@sebasth我已经更新了原始问题,以删除setgid位。没关系
—
罗西(Roxy)
getfacl storage
两个系统都显示什么?