Warum hat FreeBSD die w-Maske verloren, aber Debian hat sie behalten?

10

Ich versuche, den Unterschied im Verhalten zwischen FreeBSD-ACLs und Linux-ACLs zu verstehen. Insbesondere der Vererbungsmechanismus für die Standard-ACLs.

Ich habe sowohl unter Debian 9.6 als auch unter FreeBSD 12 Folgendes verwendet:

$ 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

Ich erhalte die folgende Ausgabe von 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

Beachten Sie, dass die outsideund insideDateien haben unterschiedliche Berechtigungen. Insbesondere hat die outsideDatei -rw-r--r--die Standardeinstellung für diesen Benutzer und die insideDatei unter -rw-rw----Berücksichtigung der Standard-ACLs, die ich dem storageVerzeichnis zugewiesen habe .

Die Ausgabe des gleichen Skripts unter 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

(Hinweis: Debians getfaclzeigt auch die Standard-ACLs an, selbst wenn sie nicht verwendet werden, -dwie dies bei FreeBSD nicht der Fall ist, aber ich denke nicht, dass die tatsächlichen ACLs für storageunterschiedlich sind.)

Hier haben die outsideund inside-Dateien auch unterschiedliche Berechtigungen, aber die insideDatei verfügt nicht über die Gruppenschreibberechtigung, die die Debian-Version besitzt, wahrscheinlich weil die Maske in Debian die beibehalten hat, wwährend die Maske in FreeBSD die verloren hat w.

Warum hat FreeBSD die wMaske verloren, aber Debian hat sie behalten?

Roxy
quelle
1
Was getfacl storagezeigt sich auf beiden Systemen?
Mikel
Funktioniert dies identisch, wenn Sie kein Sticky Group Bit ( g+s) verwenden?
September
@Mikel Ich habe den ursprünglichen Frageninhalt aktualisiert, um die getfaclInformationen anzuzeigen .
Roxy
@sebasth Ich habe die ursprüngliche Frage aktualisiert, um das Setgid-Bit zu entfernen. Es ist irrelevant.
Roxy
Nachdem Sie ACL auf gesetzt haben storage, ls sollte dies zeigen+ , würde ich erwarten, dass die getfaclAusgabe ähnlich ist wie auf dem Debian-System. Hat der setfaclErfolgs-Exit-Code zurückgegeben?
September

Antworten:

1

Kurz gesagt, ich würde sagen (annehmen), dass sie umask anders verwenden.

0022 ist genau gruppenübergreifend nicht gesetzt W. Sie können umask ändern, um das Schreibverbot aufzuheben und das Ergebnis zu überprüfen.

Zitieren des Solaris aka SunOS-Handbuchs (und auch der Kommentare), da dies ziemlich verwandt zu sein scheint: "... Die Umask (1) wird nicht angewendet, wenn das Verzeichnis Standard-ACL-Einträge enthält. ..."

poige
quelle
1
Ist das eine richtig und das andere falsch? Gibt es einen Standard, an den sich dieser halten soll?
Roxy
Ich bin kein Experte in diesem Bereich, aber (ironischerweise) hat der WEB-Mann von FreeBSD einen Eintrag für die "kanonische" (wohl) Implementierung (SunOS), die ausdrücklich besagt, dass umask nicht gezählt werden sollte: freebsd.org/cgi/man.cgi?query= setfacl & manpath = SunOS + 5.10
poige
"... Die Umask (1) wird nicht angewendet, wenn das Verzeichnis Standard-ACL-Einträge enthält. ..."
poige
Die eigene Manpage von FreeBSD wird nicht erwähnt umask, daher scheint dies ein unterdefiniertes Verhalten zu sein. Soll die ACL-Implementierung von FreeBSD genauso funktionieren wie SunOS?
Roxy
Offensichtlich verursacht es keine (Erwähnung), sonst wäre es ein klarer Widerspruch zwischen den angegebenen und den erledigten Dingen.
Poige