Linux
為什麼 FreeBSD 失去了 w 遮罩而 Debian 保留了它?
我試圖了解 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
文件 has-rw-r--r--
,這是該使用者的預設設置,inside
文件 has ,尊重我分配目錄-rw-rw----
的預設 ACL 。storage
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
(注意 Debian
getfacl
也會顯示預設的 ACL,即使在-d
FreeBSD 不使用 where 時也是如此,但我認為實際的 ACL 並沒有什麼storage
不同。)這里
outside
和inside
文件也有不同的權限,但是inside
文件沒有Debian版本的組寫權限,可能是因為Debian中的遮罩保留了,w
而FreeBSD中的遮罩失去了w
.為什麼 FreeBSD 失去了
w
面具,但 Debian 保留了它?
簡而言之,我會說(假設)他們以不同的方式使用 umask。
0022 恰好是 group-other unset W。您可以更改 umask 以刪除寫禁止並檢查結果。
引用 Solaris aka SunOS 手冊(以及註釋),因為這似乎非常相關:“……如果目錄包含預設 ACL 條目,則不會應用 umask(1)。……”