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 outside
und inside
Dateien haben unterschiedliche Berechtigungen. Insbesondere hat die outside
Datei -rw-r--r--
die Standardeinstellung für diesen Benutzer und die inside
Datei unter -rw-rw----
Berücksichtigung der Standard-ACLs, die ich dem storage
Verzeichnis 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 getfacl
zeigt auch die Standard-ACLs an, selbst wenn sie nicht verwendet werden, -d
wie dies bei FreeBSD nicht der Fall ist, aber ich denke nicht, dass die tatsächlichen ACLs für storage
unterschiedlich sind.)
Hier haben die outside
und inside
-Dateien auch unterschiedliche Berechtigungen, aber die inside
Datei verfügt nicht über die Gruppenschreibberechtigung, die die Debian-Version besitzt, wahrscheinlich weil die Maske in Debian die beibehalten hat, w
während die Maske in FreeBSD die verloren hat w
.
Warum hat FreeBSD die w
Maske verloren, aber Debian hat sie behalten?
quelle
getfacl storage
zeigt sich auf beiden Systemen?g+s
) verwenden?getfacl
Informationen anzuzeigen .storage
,ls
sollte dies zeigen+
, würde ich erwarten, dass diegetfacl
Ausgabe ähnlich ist wie auf dem Debian-System. Hat dersetfacl
Erfolgs-Exit-Code zurückgegeben?Antworten:
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. ..."
quelle
umask
, daher scheint dies ein unterdefiniertes Verhalten zu sein. Soll die ACL-Implementierung von FreeBSD genauso funktionieren wie SunOS?