GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie berechnet ACL die effektiven Berechtigungen für eine Datei?

effective Berechtigungen werden gebildet, indem die tatsächlichen (echten?) Berechtigungen mit der mask UND-verknüpft werden . Seit dem mask Ihrer Datei ist rw- , alle effective Berechtigungen haben den x Bit ausgeschaltet.


Kurze Antwort:Wenn Sie eine Maske mit aktiviertem Ausführungsbit wünschen, müssen Sie dies explizit mit setfacl festlegen nach touch . Sicherheit verbietet seine implizite Einstellung.

setfacl -n -m m::rwx foo

"-n", um die Neuberechnung der Maske zu unterdrücken (wird möglicherweise nicht benötigt).
"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 touch ist die erstellte Datei bleibt für das gesamte OP-Beispiel unverändert.

  1. Der Verzeichniseintrag für „foo“ sollte den Besitzer „root“ anzeigen (wegen des sudo-Befehls und der Gruppe „guards“, weil das Verzeichnis das SUID-Bit gesetzt hat. Die Berechtigungen sind standardmäßig „-rw-...r--“ mit die Gruppenberechtigungen des Verzeichnisses '-...r-x...' (aufgrund des SUID-Bits als kleines s dargestellt).

  2. Als nächstes kommen die ACLs, die der Verzeichnisstandard sein sollten. Angesichts der Tatsache, dass ACLs erben, würde ich nicht erwarten, dass ACLes erstellt werden und dass die ACLE-Maske der Verzeichnisstandard „rwx“ ist.

Aber wenn sie erstellt werden, würde ich erwarten, dass die neuen ACLes von der Standardeinstellung vorbereitet werden, wobei die Maske wieder bei 'rwx' bleibt. Wenn sie nicht aus den Standardeinstellungen erstellt werden, scheint dies die Idee einer Standard-ACL zunichte zu machen – die "Standard"-ACL würde nur benannte Benutzer- und benannte Gruppen-ACLs bereitstellen.

Dies wirft nun die Frage auf, was die Maske ACLe sein soll. Ich würde erwarten, dass es 'rwx' aus dem Standardmaskeneintrag ist. Aber es könnte mit einer leeren Maske erstellt werden, und dann gilt allerlei Juristensprache.

  1. Mit einer vorläufigen ACL von user::rw-, group::r-x, other::r--, group:wheel:rwx, group:guards:rwx und mask:::(nicht gesetzt) ​​konsultieren wir die Dokumentation für setfacl , vorausgesetzt, die gleichen Regeln gelten für die Dateierstellung.

Es gibt eine Klausel:

Wenn eine ACL benannte Benutzer- oder benannte Gruppeneinträge enthält und kein Maskeneintrag vorhanden ist, wird ein Maskeneintrag mit denselben Berechtigungen wie der Gruppeneintrag erstellt.

Dies würde die ACL-Maske auf "r-x" setzen, wenn der ACL-Gruppeneintrag aus dem Dateiverzeichniseintrag erstellt wurde, oder auf "r-x", wenn der ACL-Gruppeneintrag aus der Standard-ACL stammte. (Egal, in diesem Fall ist das Ergebnis dasselbe.)

Es gibt auch eine Klausel:

Wenn eine Standard-ACL benannte Benutzereinträge oder benannte Gruppeneinträge enthält und kein Maskeneintrag vorhanden ist, wird ein Maskeneintrag hinzugefügt, der dieselben Berechtigungen wie der Gruppeneintrag der Standard-Standard-ACL enthält. ... die Berechtigungen des mask-Eintrags weiter angepasst werden, um die Vereinigung aller Berechtigungen einzuschließen, die vom mask-Eintrag betroffen sind.

Wenn diese Regel zutrifft, beginnt die Maske als "r-x" (gleiche Logik) wie im vorherigen Abschnitt) und wird dann so angepasst, dass sie die "Vereinigung aller Berechtigungen ist, die vom Maskeneintrag betroffen sind".

"Vom Maskeneintrag betroffene Berechtigungen" ist im setfacl nicht definiert Befehlsdokumentation. Die POSIX-ACL-Dokumentation sagt:

Die Maske ist die Kombination aller Zugriffsrechte der besitzenden Gruppe und aller Benutzer- und Gruppeneinträge.

Geben Sie das Wort "Vereinigung" an, das additiv ist. Ich würde "Kombination" als logisches ODER lesen. Mit anderen Worten, wenn eine Gruppen- oder Benutzer-ACLe die Berechtigung "x" hat, enthält die Maske "x".

  1. Nach all dieser Logik sollte der Maskenwert im OP-Beispiel 'rwx' sein, egal welcher logische Pfad befolgt wurde.

Die obige Argumentation muss fehlerhaft sein, da das x für execute nicht in der Maske erscheint.

Daher muss es eine Regel darüber geben, wie die Maske berechnet wird, die aus allgemeinen Dokumentationsquellen "versteckt" wurde (oder wir haben einen Fehler gefunden).

Meine Schlussfolgerung ist, dass das 'x' immer bedingungslos entfernt wird und die Dokumentation lasch ist.

Diese Änderung wurde wahrscheinlich aus Gründen der „Sicherheit“ vorgenommen – keine Datei soll implizit ausführbar sein, sondern muss das Ausführbarkeits-Bit aktiviert haben, nachdem sie erstellt wurde.


Linux
  1. Wie funktioniert das Sticky Bit?

  2. Liest Tail die ganze Datei?

  3. Was bedeutet das Attribut „s“ in Dateiberechtigungen?

  4. Wie hängt man die Ausgabe an eine Datei an?

  5. Wie leitet man die Ausgabe von system() in eine Datei um?

Linux-Berechtigungen – So finden Sie Berechtigungen einer Datei

Wie kann ich die Berechtigungen meiner Dateien korrigieren?

„sudo:/etc/sudoers ist weltweit beschreibbar“ – So korrigieren Sie die Berechtigungen der sudoers-Datei

Wie berechnet der Befehl stat die Blöcke einer Datei?

Wie wirkt sich umask auf ACLs aus?

Wie funktionieren Dateiberechtigungen für den Root-Benutzer?