FreeBSDがwマスクを失ったのに、Debianはそれを保持したのはなぜですか?


10

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

outsideinsideファイルには異なる権限があることに注意してください。特に、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はそれを保持したのですか?


1
getfacl storage両方のシステムで何が表示されますか?
ミケル

スティッキグループビット(g+s)を使用しない場合、これは同じように機能しますか?
18

@Mikel元の質問の内容を更新してgetfacl情報を表示しました。
ロキシー

@sebasth元の質問を更新して、setgidビットを削除しました。それは無関係です。
ロキシー

ACLをstorageに設定した後、ls showを表示+する必要があります。同様に、getfacl出力はDebianシステムで取得したものと同様であると期待します。DID setfaclリターンの成功終了コードは?
18

回答:


1

一言で言えば、私は彼らが異なる方法でumaskを使用していると仮定(仮定)します。

0022は、正確にgroup-other unset Wです。umaskを変更して、書き込み禁止を削除し、結果を確認できます。

Solarisの別名SunOSマニュアル(およびコメントも)はかなり関連しているようです。「…ディレクトリにデフォルトのACLエントリが含まれている場合、umask(1)は適用されません。…」


1
1つは正しいですか、もう1つは間違っていますか?これに準拠することになっている標準はありますか?
ロキシー

私はこの上の専門家ではないが、(皮肉にも十分)FreeBSDのWEB男は「標準的な」(間違いなく)実装(SunOSの)ことを明示的にumaskはカウントすべきではないと言うのエントリがあります。freebsd.org/cgi/man.cgi?query= setfacl&manpath = SunOS + 5.10
poige 2018

"…ディレクトリにデフォルトのACLエントリが含まれている場合、umask(1)は適用されません。…"
poige

FreeBSD自身のmanページは言及されていないumaskため、これは未定義の動作のようです。FreeBSDのACL実装はSunOSと同じように動作するはずですか?
ロキシー

明らかにそれは(言及)を引き起こしません。
ページ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.