Ich versuche, dieses Unix-Verhalten zu verstehen (das ich gerade unter Ubuntu 11.10 teste):
$ touch foo
$ setfacl -m u:nobody:rwx foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx
group::rw-
mask::rwx
other::r--
$ chmod g-rw foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx #effective:--x
group::rw- #effective:---
mask::--x
other::r--
Beachten Sie, dass der Befehl chmod (1) die ACL-Maske aktualisiert hat. Warum passiert das?
Die SunOS-Manpage hat Folgendes zu sagen:
Wenn Sie den Befehl chmod (1) verwenden, um die Dateigruppenbesitzerberechtigungen für eine Datei mit ACL-Einträgen zu ändern, werden sowohl die Dateigruppenbesitzerberechtigungen als auch die ACL-Maske in die neuen Berechtigungen geändert. Beachten Sie, dass die neuen ACL-Maskenberechtigungen möglicherweise die effektiven Berechtigungen für zusätzliche Benutzer und Gruppen ändern, für die ACL-Einträge in der Datei vorhanden sind.
Ich frage, weil es für mich praktisch wäre, wenn chmod (1) dieses Verhalten nicht hätte. Ich hoffe, dass ich, wenn ich verstehe, warum es das tut, was es tut, besser gestalten kann, wie ich Dateisystemberechtigungen einrichte.
quelle
Antworten:
Es wäre nicht bequem für Sie, wenn Sie
chmod()
dieses Verhalten nicht hätten.Es wäre sehr unpraktisch, weil Dinge, die die Leute traditionell unter Unix erwarten, kaputt gehen würden. Dieses Verhalten tut dir gut, hast du es aber gewusst.
Es ist eine Schande, dass IEEE 1003.1e nie zum Standard wurde und 1998 zurückgezogen wurde. In der Praxis ist es nach 14 Jahren ein Standard, den eine Vielzahl von Betriebssystemen - von Linux über FreeBSD bis Solaris - tatsächlich implementieren.
Der IEEE 1003.1e-Arbeitsentwurf Nr. 17 sorgt für eine interessante Lektüre, und ich empfehle ihn. In Anhang B § 23.3 bietet die Arbeitsgruppe eine ausführliche, achtseitige Begründung für die etwas komplexe Arbeitsweise von POSIX-ACLs in Bezug auf die alten
S_IRWXG
Gruppenberechtigungsflags. (Es ist erwähnenswert, dass die TRUSIX-Leute vor zehn Jahren ungefähr die gleiche Analyse geliefert haben.) Ich werde hier nicht alles kopieren. Lesen Sie die Begründung im Standardentwurf für Details. Hier ist eine sehr kurze Zusammenfassung :Das SunOS-Handbuch ist falsch. Es sollte lesen
Dies ist das Verhalten , dass man Happening sehen , trotz allem , was die aktuelle Handbuch Seite sagt, in Ihrer Frage. Dies ist auch das Verhalten, das im Entwurf des POSIX-Standards festgelegt ist. Wenn ein
CLASS_OBJ
(Suns und TRUSIXs Terminologie fürACL_MASK
) Zugangskontrolleintrag existiert, setzen die Gruppenbits eineschmod()
diesen, andernfalls setzen sie denGROUP_OBJ
Zugangskontrolleintrag.Wenn dies nicht der Fall wäre, würden Anwendungen, die verschiedene Standardfunktionen mit `chmod ()` ausführten und erwarteten, dass dies unter `chmod ()` funktioniert, auf alten Nicht-ACL-Unixen entweder Sicherheitslücken hinterlassen oder nachsehen, was passiert Sie glauben, Sicherheitslücken zu schließen:
Herkömmliche Unix-Anwendungen erwarten, dass sie den gesamten Zugriff auf eine Datei, eine Named Pipe, ein Gerät oder ein Verzeichnis mit verweigern können
chmod(…,000)
. Bei Vorhandensein von ACLs werden hierdurch nur dann alle Benutzer- und Gruppenberechtigungen deaktiviert, wenn die alteS_IRWXG
Zuordnung zu erfolgtCLASS_OBJ
. Ohne diese , um die alten Dateiberechtigungen einstellen000
würde keine Auswirkungen aufUSER
oderGROUP
Einträge und andere Nutzer würden überraschenderweise noch Zugriff auf das Objekt.Das temporäre Ändern der Berechtigungsbits einer Datei in "Kein Zugriff"
chmod 000
und das anschließende erneute Ändern war ein alter Dateisperrmechanismus, der verwendet wurde, bevor Unixes empfohlene Sperrmechanismen erlangte, die - wie Sie sehen können - auch heute noch verwendet werden .Herkömmliche Unix-Skripte können nur ausgeführt werden, wenn
chmod go-rwx
der Eigentümer des Objekts auf das Objekt zugreifen kann. Auch hier - wie man sieht - das ist nach wie vor die vorherrschende Lehrmeinung zwölf Jahre später. Auch dies funktioniert nur, wenn die alteS_IRWXG
Zuordnung zuCLASS_OBJ
vorhanden ist, da andernfalls mit diesemchmod
Befehl keineUSER
oderGROUP
Zugriffssteuerungseinträge deaktiviert werden und andere Benutzer als der Eigentümer und nicht besitzende Gruppen den Zugriff auf etwas behalten, das vorhanden ist voraussichtlich nur für den Eigentümer zugänglich sein .Ein System, bei dem die Berechtigungsbits ansonsten von
and
den ACLs getrennt und mit ihnen bearbeitet wurden, würderwxrwxrwx
in den meisten Fällen Dateiberechtigungsflags erfordern , was die vielen Unix-Anwendungen verwirren würde, die sich beschweren, wenn sie sehen, was sie für weltgeschrieben halten Zeug.Ein System, bei dem die Berechtigungsbits ansonsten von
or
den ACLs getrennt und mit ihnen bearbeitet wurden, hätte daschmod(…,000)
zuvor erwähnte Problem.Weitere Lektüre
quelle
S_IRWXG
Berechtigungen mehr verwenden. Ruf mich an, wenn du fertig bist.Dieses Verhalten gilt nur für POSIX-ACL-Einträge. Der Grund dafür ist, dass Sie, wenn Sie einen Ordner haben und in diesem Ordner eine Datei existiert, den Ordner und die Datei als rwx (zum Beispiel) speichern können. Wenn die Gruppenberechtigungen der Datei rw- sind (was ein typisches Szenario sein könnte), gibt die Maske dem ACL die effektiven Berechtigungen von rw-, obwohl die ACL ausdrücklich rwx bezeichnet.
Andererseits hat das Verzeichnis, das fast immer + x ist, effektive ACL-Maskenberechtigungen, die auch + x erlauben.
Zusammenfassend wird diese Maske im Wesentlichen verwendet, um die Berechtigungen zwischen Dateien und Ordnern für das POSIX-ACL-Set zu unterscheiden, sodass eine Datei nicht ausführbar wird, wenn dies normalerweise nicht der Fall sein sollte.
quelle