Die Sache ist, ich dachte immer, diese Berechtigungen kollabieren, beginnend mit der allgemeinsten (other -> group -> user).
Wenn dies der Fall wäre, würden "andere" Berechtigungen für alle gelten.
Mit anderen Worten, wenn o = rwx, wen interessiert es, wie die Einstellungen für Gruppe und Benutzer sind?
Das ist anders als in deinem vorherigen Satz. Hier implizieren Sie, dass die Berechtigungen zusammen oder zusammen gegeben sind, z. B. dass userX die Leseberechtigung besitzt, wenn userX die Datei besitzt und die Datei vom Benutzer lesbar ist, oder wenn eine Gruppe, zu der userX gehört, die Datei besitzt und die Datei eine Gruppe ist -lesbar oder wenn die Datei nicht lesbar ist. Aber so funktioniert es nicht. In der Tat o=rwx
bedeutet dies, dass die rwx
Berechtigungen für andere gelten, aber nichts über Entitäten aussagt, die keine anderen sind.
Erstens spielt es keine direkte Rolle, zu welcher Gruppe ein Benutzer gehört. Der Kernel kennt keine Benutzer, die zu Gruppen gehören. Der Kernel verwaltet für jeden Prozess eine Benutzer-ID (die effektive UID ) und eine Liste von Gruppen-IDs (die effektive GID und die zusätzlichen GIDs). Die Gruppen werden zur Anmeldezeit durch den Anmeldeprozess bestimmt - es ist der Anmeldeprozess, der die Gruppendatenbank liest (z /etc/group
. B. ). Benutzer- und Gruppen-IDs werden von untergeordneten Prozessen geerbt¹.
Wenn ein Prozess versucht, eine Datei mit herkömmlichen Unix-Berechtigungen zu öffnen:
- Wenn der Benutzer, der die Datei besitzt, die effektive UID des Prozesses ist, werden die Benutzerberechtigungsbits verwendet.
- Andernfalls werden die Gruppenberechtigungsbits verwendet, wenn die Eigentümergruppe der Datei die effektive GID des Prozesses oder eine der zusätzlichen Gruppen-IDs des Prozesses ist.
- Andernfalls werden die anderen Berechtigungsbits verwendet.
Es wird immer nur ein Satz von RWX-Bits verwendet. Der Benutzer hat Vorrang vor der Gruppe, die Vorrang vor anderen hat. Wenn Zugriffssteuerungslisten vorhanden sind , wird der oben beschriebene Algorithmus verallgemeinert:
- Befindet sich in der Datei eine ACL für die effektive UID des Prozesses, wird anhand dieser ermittelt, ob der Zugriff gewährt wird.
- Andernfalls werden die Gruppenberechtigungsbits verwendet, wenn in der Datei eine Zugriffssteuerungsliste für die effektive GID des Prozesses oder eine der zusätzlichen Gruppen-IDs des Prozesses vorhanden ist.
- Andernfalls werden die anderen Berechtigungsbits verwendet.
Siehe auch Präzedenz von ACLS , wenn ein Benutzer zu mehreren Gruppen gehört , um weitere Informationen darüber , wie ACL - Einträge verwendet werden, einschließlich der Wirkung der Maske.
Dies -rw----r-- alice interns
zeigt eine Datei an, die von Alice gelesen und geschrieben werden kann und die von allen anderen Benutzern außer Praktikanten gelesen werden kann. Auf eine Datei mit Berechtigungen und Inhabern können ----rwx--- alice interns
nur Praktikanten mit Ausnahme von Alice zugreifen (unabhängig davon, ob sie Praktikantin ist oder nicht). Da Alice anrufen kann chmod
, um die Berechtigungen zu ändern, bietet dies keine Sicherheit. Es ist ein Randfall. Auf Systemen mit ACLs ermöglicht der generalisierte Mechanismus das Entfernen von Berechtigungen von bestimmten Benutzern oder bestimmten Gruppen, was manchmal nützlich ist.
Das Verwenden eines einzelnen Satzes von Bits anstelle des Ordnens aller Bits für jede Aktion (Lesen, Schreiben, Ausführen) hat mehrere Vorteile:
- Dies hat den nützlichen Effekt, dass auf Systemen mit ACLs Berechtigungen von einer Gruppe von Benutzern oder Gruppen entfernt werden können. Auf Systemen ohne ACLs können Berechtigungen aus einer Gruppe entfernt werden.
- Die Implementierung ist einfacher: Überprüfen Sie einen Satz von Bits, anstatt mehrere Sätze von Bits miteinander zu kombinieren.
- Es ist einfacher, die Berechtigungen einer Datei zu analysieren, da weniger Vorgänge erforderlich sind.
¹ Sie können sich ändern, wenn ein setuid- oder setgid-Prozess ausgeführt wird. Dies hängt nicht mit dem vorliegenden Problem zusammen.