Schnellzugriffe
- Was sind ACL-Masken?
- Effektive Berechtigungen
- Standardmasken
Wichtige Erkenntnisse
- Access Control List (ACL)-Masken gewährleisten die Kompatibilität mit Programmen, die keine ACLs unterstützen, indem sie ACL-Einträge in POSIX-Berechtigungen übersetzen.
- ACL-Masken stellen die maximal zulässigen Berechtigungen für alle Benutzer- oder Gruppenobjekte dar, die nicht der besitzende Benutzer, die besitzende Gruppe oder die besitzende „andere“ Klasse sind.
- Beim Hinzufügen neuer ACL-Einträge wird die Maske automatisch angepasst, um die maximal zulässigen Berechtigungen für alle benannten Benutzer oder Gruppen widerzuspiegeln.
Sie verwenden Zugriffskontrolllisten (ACLs), sind aber verwirrt über das Konzept der Masken? Sie sind nicht allein. Lassen Sie uns tiefer in dieses wichtige Konzept eintauchen, indem wir uns ansehen, was sie sind und wie sie mit den Berechtigungen des Linux-Dateisystems interagieren.
Was sind ACL-Masken?
ACL-Masken sind eine Möglichkeit, die Interoperabilität von Berechtigungen mit Programmen und Dienstprogrammen sicherzustellen, die nicht ACL-fähig sind.
Eine ACL-Maske für eine Datei oder ein Verzeichnis entspricht den maximalen Berechtigungen, die jedem Benutzer oder Gruppenobjekt gewährt werden, das nicht der besitzende Benutzer, die besitzende Gruppe oder die „andere“ Klasse des Benutzer/Gruppe/andere Klassenparadigmas ist. Anders ausgedrückt: Sie übersetzt ACL-Einträge aus Gründen der Abwärtskompatibilität in POSIX-Berechtigungen.
Werfen wir einen Blick auf eine neu erstellte Datei, mit der wir in diesem Artikel arbeiten werden, mysupersecretfile.txt:
ls -l mysupersecretfile.txt
Ziemlich unkomplizierte Berechtigungen für ein so sensibles Dokument, oder?
Beachten Sie den Punkt (.) nach dem Berechtigungssatz. Dies weist auf einen SELinux-Kontext hin, der nichts mit ACLs oder ACL-Masken zu tun hat.
Zur Verdeutlichung untersuchen wir auch die ACL-Einträge für die Datei mit dem Befehl getfacl:
getfacl mysupersecretfile.txt
Die aktuellen ACL-Einträge für die Besitzer von Benutzer- und Gruppeneinträgen werden direkt dem tatsächlichen POSIX-Besitzer und der Besitzergruppe der Datei zugeordnet. Dies ist normal für alle Dateien, die keine erweiterten ACL-Einträge haben, und wird als „minimale ACLs“ bezeichnet.
Nehmen wir an, wir haben eine Anfrage erhalten, einen Benutzer namens „Manager“ als ACL-Eintrag mit Leseberechtigung zu dieser Datei hinzuzufügen. Wir erreichen dies mit dem Befehl „setfacl“. Dann untersuchen wir die neuen ACL-Berechtigungen mit den Befehlen „ls“ und „getfacl“:
setfacl -m u:manager:r mysupersecretfile.txt
ls -l mysupersecretfile.txt
getfacl mysupersecretfile.txt
Sie werden jetzt das "+"-Zeichen neben den Berechtigungseinträgen im ls-Befehl bemerken, das anzeigt, dass der Datei ACL-Einträge zugeordnet sind.
Sehen Sie das mask-Zeile in der Ausgabe des getfacl-Befehls jetzt? Zusätzlich zum erweiterten ACL-Eintrag des Manager-Benutzers wurde dieser Maskeneintrag automatisch zugewiesen. Dies ist notwendig; er stellt die maximal zulässigen Berechtigungen für jeden benannten Benutzer oder jedes Gruppenobjekt dar (wiederum abgesehen vom Besitzerbenutzer und den besitzenden Gruppenobjekten). Derzeit entspricht die Leseberechtigung der Leseberechtigung der vorhandenen Maske.
Fügen wir nun einen weiteren Benutzer aus einer zweiten Anfrage, nämlich „contractor“, zur ACL unserer Datei hinzu. Dieses Mal müssen wir ihm jedoch Lese- und Schreibberechtigungen erteilen. Sehen wir uns an, wie sich das auf die Maske auswirkt:
setfacl -m u:contractor:rw mysupersecretfile.txt
getfacl mysupersecretfile.txt
Jetzt sehen wir zusätzlich zum ACL-Eintrag „manager“ (r) auch den Eintrag „contractor“ (rw). Aber warum hat sich der Maskeneintrag auf Lesen und Schreiben geändert?
Als wir den Auftragnehmerbenutzer mit Lese- und Schreibberechtigungen hinzugefügt haben, wirkte sich dies auf die ACL-Maske aus, da sich die Maske, wie oben erwähnt, auf die maximal zulässigen Berechtigungen von ACL-Benutzern und Gruppeneinträgen bezieht. Da wir dem ACL-Eintrag des Auftragnehmerbenutzers Schreibberechtigungen hinzugefügt haben, erhält die Maske auch die Schreibberechtigung.
Beim Arbeiten mit ACLs werden Sie feststellen, dass die Rolle der Gruppenklassenberechtigungen (wie bei der Ausgabe des Befehls ls -l) neu definiert wird, um die ACL-Maske widerzuspiegeln. Aber keine Sorge, die Berechtigungen des Gruppenbesitzers werden weiterhin als ACL-Eintrag der „Besitzergruppe“ widergespiegelt.
Bedenken Sie, dass, wenn Sie einen anderen Benutzer mit weniger Berechtigungen hinzufügen, z. B. nur Leseberechtigung, dieser die Maskenberechtigungen nicht erbt – genauso wie der Manager-Benutzer nicht die Schreibberechtigung erhielt, als wir den ACL-Eintrag des Auftragnehmer-Benutzers hinzufügten.
Effektive Berechtigungen
Wir können die Berechtigungen für Maskeneinträge manuell mit dem Befehl setfacl festlegen. Dadurch können wir alle gleichzeitig für die Datei festgelegten Berechtigungen für benannte Benutzer und/oder Gruppen oder für ACL-Einträge vorhandener Benutzer der Datei auf den kleinsten gemeinsamen Nenner filtern. Dies nennt man effektive Berechtigungen.
Lassen Sie uns die Maske für unsere Datei auf schreibgeschützt setzen und dann einen neuen Blick auf die ACL-Einträge werfen:
setfacl -m m::r mysupersecretfile.txt
getfacl mysupersecretfile.txt
Der Kommentar, der die effektiven Berechtigungen des Vertragsbenutzers zeigt, lässt uns wissen, dass er, obwohl ihm Lese- und Schreibberechtigungen erteilt wurden, in Wirklichkeit nur Leseberechtigung hat. Dies wurde durch die Änderung der Maske verursacht. Wenn wir uns die Datei noch einmal mit ls -l ansehen, sehen wir, dass sich die Berechtigungen der Gruppenklasse (die wiederum umfunktioniert werden, um die Maske widerzuspiegeln) geändert haben:
ls -l mysupersecretfile.txt
Wenn Sie einen benannten Benutzer- oder Gruppen-ACL-Eintrag hinzufügen möchten, die Maske aber nicht neu berechnen möchten, können Sie -n zusammen mit setfacl verwenden. Dadurch wird die von Ihnen hinzugefügte ACL auf die von der Maske zugelassenen Höchstberechtigungen beschränkt (angezeigt durch die effektiven Berechtigungen des Eintrags). Dies ist jedoch nicht die Standardeinstellung. Denken Sie daran, dass die Maske keine Form der obligatorischen Zugriffskontrolle ist. Versuchen wir das unten:
setfacl -n -m u:milton:rwx mysupersecretfile.txt
getfacl mysupersecretfile.txt
Standardmasken
Wenn Sie mit ACLs arbeiten, ist das Konzept der Standardmasken den Standard-ACL-Einträgen sehr ähnlich. Wenn Sie beispielsweise einem Verzeichnis eine Standardmaske hinzufügen, erben alle darin neu erstellten Dateien und Unterverzeichnisse dieselbe Maske (sowie den Standardmaskeneintrag). Verwenden Sie einfach den Parameter -d mit dem Befehl setfacl, um eine Standardmaske anzuwenden:
mkdir mysupersecretdirectory
setfacl -d -m m::rX mysupersecretdirectory/
getfacl mysupersecretdirectory/
mkdir mysupersecretdirectory/mysupersecretsubdirectory/
getfacl mysupersecretdirectory/mysupersecretsubdirectory/
Standardmasken und auch Standard-ACL-Einträge sind nur auf Verzeichnisse anwendbar, da diese die einzigen Objekte sind, die Dateien und/oder andere Verzeichnisse enthalten können, auf die diese vererbbaren Einträge angewendet werden können.
ACL-Masken sind eine Möglichkeit, sicherzustellen, dass die Sicherheit von ACLs ordnungsgemäß gehandhabt wird, unabhängig von den Fähigkeiten des Programms, das sie manipuliert.
Da sich Technologie, Software und Sicherheitskonzepte weiterhin rasant weiterentwickeln, ist es wichtig, daran zu denken, dass für viele von uns die Abwärtskompatibilität von größter Bedeutung ist und neben neuen Fortschritten berücksichtigt werden muss. Das bedeutet natürlich nicht, dass Sie keine neuen Schnickschnack-Features haben können, es bedeutet nur, dass diese neuen Schnickschnack-Features den bestehenden Standards entsprechen sollten.