ACL-Masken zur Feinabstimmung der Dateiberechtigungen in Linux


Linux
2024-02-07T13:00:14Z

Das Wichtigste in Kürze

  • ACL-Masken (Access Control List) gewährleisten die Kompatibilität mit Programmen, die nicht ACL-fähig sind, indem sie ACL-Einträge in POSIX-Berechtigungen übersetzen.
  • ACL-Masken stellen die maximal zulässigen Berechtigungen für jedes Benutzer- oder Gruppenobjekt dar, das nicht der besitzende Benutzer, die besitzende Gruppe oder die Klasse "Andere" ist.
  • Beim Hinzufügen neuer ACL-Einträge wird die Maske automatisch so angepasst, dass sie die maximal zulässigen Berechtigungen für alle genannten Benutzer oder Gruppen widerspiegelt.

Verwenden Sie Zugriffskontrolllisten (ACLs), sind aber mit dem Konzept der Masken nicht vertraut? Da sind Sie nicht allein. Lassen Sie uns in dieses wichtige Konzept eintauchen, indem wir einen Blick darauf werfen, 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 zu gewährleisten, 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 zugestanden werden, das nicht der besitzende Benutzer, die besitzende Gruppe oder die "andere" Klasse des Paradigmas Benutzer/Gruppe/Andere Klasse ist. Mit anderen Worten: ACL-Einträge werden aus Gründen der Abwärtskompatibilität in POSIX-Berechtigungen übersetzt.

Werfen wir einen Blick auf eine neu erstellte Datei, mit der wir in diesem Artikel arbeiten werden, mysupersecretfile.txt:

ls -l mysupersecretfile.txt

A terminal window showing the ls command and its output.

Ziemlich einfache Berechtigungen für ein so sensibles Dokument, oder?

Beachten Sie den Punkt (.) nach den gesetzten Berechtigungen. Dies weist auf einen SELinux-Kontext hin, der nichts mit ACLs oder ACL-Masken zu tun hat.

Zur Verdeutlichung sehen wir uns auch die ACL-Einträge für die Datei an, indem wir den Befehl getfacl verwenden:

getfacl mysupersecretfile.txt

A terminal window showing the getfacl command and its output, with minimal ACL permissions.

Die aktuellen ACL-Einträge für Benutzer- und Gruppeneinträge entsprechen direkt dem tatsächlichen POSIX-Benutzer und der POSIX-Gruppe, denen die Datei gehört. Dies ist normal für jede Datei, die keine erweiterten ACL-Einträge hat, und wird "minimale ACLs" genannt.

Nehmen wir an, wir haben eine Anfrage erhalten, einen Benutzer namens manager als ACL-Eintrag zu dieser Datei hinzuzufügen, mit Leseberechtigung. Wir werden dies mit dem Befehl setfacl erreichen. Anschließend können wir die neuen ACL-Berechtigungen mit den Befehlen ls und getfacl überprüfen:

setfacl -m u:manager:r mysupersecretfile.txt
ls -l mysupersecretfile.txt
getfacl mysupersecretfile.txt

A terminal window showing the setfacl command to add a user ACL entry, the ls -l command, and the getfacl command and their outputs reflecting the new permissions.

Sie sehen nun das " "-Zeichen neben den Berechtigungseinträgen im ls-Befehl, das anzeigt, dass es ACL-Einträge für die Datei gibt.

Sehen Sie jetzt die Maskenzeile in der Ausgabe des getfacl-Befehls? Zusätzlich zu dem erweiterten ACL-Eintrag des Manager-Benutzers wurde dieser Maskeneintrag automatisch zugewiesen. Dies ist notwendig, denn er stellt die maximale Berechtigung dar, die für jedes benannte Benutzer- oder Gruppenobjekt zulässig ist (wiederum abgesehen vom Benutzer owner und den Gruppenobjekten, die Eigentümer sind). Im Moment entspricht die Leseberechtigung der Leseberechtigung der bestehenden Maske.

Fügen wir nun einen weiteren Benutzer aus einer zweiten Anfrage, den Auftragnehmer, zur ACL unserer Datei hinzu. Diesmal müssen wir ihm jedoch Lese- und Schreibrechte erteilen. Schauen wir uns an, wie sich das auf die Maske auswirkt:

setfacl -m u:contractor:rw mysupersecretfile.txt
getfacl mysupersecretfile.txt

A terminal window showing the setfacl command to add the contractor user with read and write permissions, and getfacl command and its output, particularly the modified mask permissions..

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?

Das Hinzufügen des Benutzers contractor mit Lese- und Schreibrechten hat sich auf die ACL-Maske ausgewirkt, da sich die Maske, wie bereits erwähnt, auf die maximal zulässigen Berechtigungen von ACL-Benutzern und Gruppeneinträgen bezieht. Da wir dem ACL-Eintrag des Contractor-Benutzers Schreibrechte hinzugefügt haben, erhält die Maske auch die Schreibrechte.

Bei der Arbeit mit ACLs werden Sie feststellen, dass die Rolle der Gruppenklassenberechtigungen (z. B. bei der Ausgabe des Befehls ls -l ) umgewidmet wird, um die ACL-Maske wiederzugeben. Aber keine Sorge, die Berechtigungen des Gruppenbesitzers werden weiterhin als ACL-Eintrag "owning group" angezeigt.

Denken Sie daran, dass wenn Sie einen anderen Benutzer mit weniger Berechtigungen hinzufügen, z. B. nur lesend, dieser die Maskenberechtigungen nicht erbt - so wie der Manager-Benutzer die Schreibberechtigung nicht erhalten hat, als wir den ACL-Eintrag des Auftragnehmers hinzugefügt haben.

Effektive Berechtigungen

Wir können die Berechtigungen für den Maskeneintrag manuell mit dem Befehl setfacl festlegen. Auf diese Weise können wir alle benannten Benutzer- und/oder Gruppenberechtigungen, die gleichzeitig für die Datei festgelegt wurden, oder die ACL-Einträge bestehender Benutzer für die Datei auf den kleinsten gemeinsamen Nenner bringen. Dies wird als effektive Berechtigungen bezeichnet.

Setzen wir die Maske für unsere Datei auf schreibgeschützt und sehen wir uns dann die ACL-Einträge an:

setfacl -m m::r mysupersecretfile.txt
getfacl mysupersecretfile.txt

A terminal window showing the setfacl command, modifying the mask, and the getfacl command showing effective permissions.

Der Kommentar, der die effektiven Berechtigungen des Auftragnehmers anzeigt, verrät uns, dass er zwar Lese- und Schreibrechte erhalten hat, in Wirklichkeit aber nur Leserechte besitzt. Die Änderung der Maske hat dies verursacht. Wenn wir uns die Datei noch einmal mit ls -l ansehen, sehen wir, dass sich die Berechtigungen für die Gruppenklasse (die wiederum umgewidmet wurde, um die Maske wiederzugeben) geändert haben:

ls -l mysupersecretfile.txt

A terminal window showing the ls command and its output with new group class permissions.

Wenn Sie einen benannten Benutzer- oder Gruppen-ACL-Eintrag hinzufügen möchten, aber die Maske nicht neu berechnen wollen, können Sie -n zusammen mit setfacl verwenden. Dadurch wird die ACL, die Sie hinzufügen, auf die von der Maske erlaubten maximalen Berechtigungen beschränkt (angezeigt durch die effektiven Berechtigungen des Eintrags). Dies ist jedoch nicht die Standardeinstellung; bedenken Sie, dass die Maske keine Form der obligatorischen Zugriffskontrolle ist. Versuchen wir das im Folgenden:

setfacl -n -m u:milton:rwx mysupersecretfile.txt
getfacl mysupersecretfile.txt

A terminal window showing the setfacl command, adding rwx permissions for the milton user, and getfacl command showing effective permissions of r, due to the use of the -n parameter.

Standard-Masken

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 neu erstellten Dateien und Unterverzeichnisse innerhalb dieses Verzeichnisses dieselbe Maske (und auch 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/

A terminal window showing the mkdir, setfacl and getfacl commands to reflect a default mask assignment

Standardmasken und Standard-ACL-Einträge sind nur auf Verzeichnisse anwendbar, da sie 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 ein Weg, um sicherzustellen, dass die Sicherheit von ACLs richtig gehandhabt wird, unabhängig von den Fähigkeiten des Programms, das sie manipuliert.

Da sich Technologie, Software und Sicherheitskonzepte rasant weiterentwickeln, ist es wichtig, sich daran zu erinnern, dass Abwärtskompatibilität für viele von uns von größter Bedeutung ist und neben neuen Fortschritten beachtet werden muss. Das bedeutet natürlich nicht, dass es keinen neuen Schnickschnack geben darf, es bedeutet nur, dass dieser neue Schnickschnack den bestehenden Standards entsprechen sollte.