Ich habe den folgenden Befehl ausgeführt, um der wheel
Gruppe rwx
Berechtigungen für neu erstellte Dateien und Unterverzeichnisse zu erteilen :
[belmin@server1]$ ls -la
total 24
drwxr-sr-x+ 2 guards guards 4096 Aug 27 15:30 .
drwxr-xr-x 104 root root 12288 Aug 27 15:19 ..
[belmin@server1]$ sudo setfacl -m d:g:wheel:rwX .
[belmin@server1]$ getfacl .
# file: .
# owner: guards
# group: guards
# flags: -s-
user::rwx
group::r-x
group:wheel:rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:wheel:rwx
default:mask::rwx
default:other::r-x
Wenn ich jedoch eine Datei als Root erstelle, ist mir nicht ganz klar, wie die effective
Berechtigungen berechnet werden:
[belmin@server1]$ sudo touch foo
[belmin@server1]$ getfacl foo
# file: foo
# owner: root
# group: guards
user::rw-
group::r-x #effective:r--
group:wheel:rwx #effective:rw-
group:guards:rwx #effective:rw-
mask::rw-
other::r--
Kann jemand näher erläutern, was dies bedeutet?
linux
files
permissions
acl
Belmin Fernandez
quelle
quelle
Kurze Antwort: Wenn Sie eine Maske mit aktiviertem Ausführungsbit möchten, müssen Sie diese explizit mit
setfacl
after festlegentouch
. Sicherheit verbietet seine implizite Einstellung."-n", um eine Neuberechnung der Maske zu unterdrücken (möglicherweise nicht erforderlich).
"m :: rwx" setzt den Maskenwert auf 'rwx'. Beachten Sie, dass "m :: x" alle Lese- und Schreibvorgänge deaktivieren würde.
Ich kann nicht zeigen, warum die Maske "rw-" ist. Ich gehe davon aus, dass das Standardverzeichnis, in dem
touch
die Datei erstellt wird, für das gesamte OP-Beispiel unverändert bleibt.Der Verzeichniseintrag für 'foo' sollte den Eigentümer 'root' anzeigen (aufgrund des Befehls sudo und der Gruppe 'guard', da für das Verzeichnis das SUID-Bit gesetzt ist. Die Berechtigungen sind standardmäßig '-rw -... r--' mit Die Gruppenberechtigungen des Verzeichnisses '-... rx ...' (aufgrund des SUID-Bits wird als kleines s angezeigt).
Als nächstes kommen die ACLes, die das Standardverzeichnis sein sollten. Angesichts der Tatsache, dass ACLs erben, würde ich nicht erwarten, dass ACLes erstellt werden, und die ACLE-Maske wird als Standardverzeichnis 'rwx' verwendet.
Aber wenn sie erstellt werden, würde ich erwarten, dass die neuen ACLes von der Standardeinstellung vorbereitet werden und die Maske wieder bei 'rwx' bleibt. Wenn sie nicht auf die Standardeinstellungen abgestimmt sind, scheint dies die Idee einer Standard-ACL zu zerstören - die "Standard" -AlB würde nur benannte Benutzer- und benannte Gruppen-ACLs bereitstellen.
Dies wirft nun die Frage auf, wie die Masken-ACLe aussehen soll. Ich würde erwarten, dass es 'rwx' vom Standardmaskeneintrag ist. Aber es könnte mit einer leeren Maske erstellt werden, und dann gelten alle Arten von Legalese.
setfacl
, Unter der Annahme, dass für die Dateierstellung dieselben Regeln gelten.Es gibt eine Klausel:
Dies würde die ACL-Maske auf "rx" setzen, wenn der ACL-Gruppeneintrag aus dem Dateiverzeichniseintrag erstellt wurde, oder auf "rx", wenn der ACL-Gruppeneintrag aus der Standard-ACL stammt. (Ätherweise ist in diesem Fall das Ergebnis dasselbe.)
Es gibt auch eine Klausel:
Wenn diese Regel gilt, beginnt die Maske als "rx" (gleiche Logik) wie in der vorherigen Klausel) und wird dann als "Vereinigung aller vom Maskeneintrag betroffenen Berechtigungen" angepasst.
"Vom Maskeneintrag betroffene Berechtigungen" ist in der
setfacl
Befehlsdokumentation nicht definiert . In der POSIX ACL-Dokumentation heißt es:Geben Sie das Wort "Vereinigung" an, das additiv ist. Ich würde "Kombination" als logisches Wort lesen. Mit anderen Worten, wenn eine Gruppen- oder Benutzer-ACLe die Berechtigung "x" hat, enthält die Maske "x".
Die obige Argumentation muss fehlerhaft sein, da das x für die Ausführung nicht in der Maske erscheint.
Daher muss es eine Regel für die Berechnung der Maske geben, die vor gängigen Dokumentationsquellen "verborgen" wurde (oder wir haben einen Fehler gefunden).
Mein Fazit ist, dass das 'x' immer bedingungslos entfernt wird und die Dokumentation lax ist.
Diese Änderung wurde wahrscheinlich aus Gründen der "Sicherheit" vorgenommen. Keine Datei darf implizit ausführbar sein, aber das ausführbare Bit muss nach dem Erstellen aktiviert sein.
quelle