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
あり、ファイルには私がディレクトリに割り当てたデフォルトのACLに準拠しています。-rw-r--r--
inside
-rw-rw----
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はwhereを使わなくてもデフォルトのgetfacl
ACLを表示します-d
が、FreeBSDはそうではありませんが、実際のACLは変わらないと思いますstorage
。)
ここでoutside
のinside
ファイルには異なる権限がありますが、inside
ファイルにはDebianバージョンのグループ書き込み権限がありません。おそらくDebianのマスクが維持されるからです。w
FreeBSDのマスクが失われましたw
。
w
FreeBSDはなぜマスクを失いましたが、Debianはマスクを維持しましたか?
答え1
簡単に言えば、彼らはumaskを別々に使用すると仮定します。
0022は正確にグループ-その他が設定されていないWです。 umask を変更して書き込み禁止を無効にし、結果を確認できます。
Solarisとも呼ばれるSunOSのマニュアル(および説明)で引用した内容は非常に関連性があるようです。 "...ディレクトリにデフォルトのACLエントリが含まれている場合、umask(1)は適用されません。..."