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
(Debian は、FreeBSDのようにwhereをgetfacl
使用しない場合でもデフォルトのACLを表示します-d
が、実際のACL storage
が異なるとは思わないことに注意してください。)
ここでは、outside
およびinside
ファイルも異なる権限を持っていinside
ますが、ファイルには、Debianバージョンが行うグループ書き込み権限がありません。おそらくw
、FreeBSDのマスクがを失ったのに、Debianのマスクがを保持したためw
です。
なぜFreeBSDはw
マスクを失ったのに、Debianはそれを保持したのですか?
g+s
)を使用しない場合、これは同じように機能しますか?
getfacl
情報を表示しました。
getfacl storage
両方のシステムで何が表示されますか?