Access Control Lists

Die in der GSI-Linux-Farm verwendeten Dateisysteme unterstützen erweiterte Zugriffsrechte, sogenannte ACLs (Access Control Lists). Auf diese Weise lassen sich neben den klassischen UNIX-Dateisystemberechtigungen für Besitzer (user), Gruppe (group) und Rest der Welt (others) individuelle Rechte für weitere Benutzer bzw. Gruppen vergeben. Auch die verzeichnisweise Vererbung von Zugriffsrechten an neu erstellte Dateien ist damit möglich.

Allgemeine Informationen zu ACLs finden sich beispielsweise in Wikipedia (deutsch), Details zu den ACLs unter Linux auf der Webseite der Entwickler (engl.).

Werkzeuge für die Kommandozeile

Darstellung der ACLs mit ls -l

Bedauerlicherweise sind erweiterte Zugriffsrechte mit ls -l nur anhand eines Pluszeichens hinter den klassischen UNIX-Rechten zu erkennen:

user@host:~$ ls -l blafasel.txt
-rw-rw----+ 1 user group 42 2000-11-11 11:11 blafasel.txt

Ferner ist an Stelle der Gruppenberechtigung nun die »Maske« zu sehen, was zu Verwirrung führen kann. Die Maske entspricht dabei den maximalen Zugriffsrechten, die irgendeinem Benutzer oder irgendeiner Gruppe eingeräumt wurden.

Stolperfallen bei Dateien mit ACLs

Während bei einem Verschieben einer Datei mit mv die ACLs erhalten bleiben, gehen diese beim Erstellen einer Kopie mit cp verloren, wenn nicht der Schalter -p (preserve) verwendet wird.

Ältere Versionen von tar sind nicht in der Lage, ACLs zu erfassen. Diese müssen vor der Archiverstellung in eine Datei geschrieben werden, etwa für das aktuelle Verzeichnis mit getfacl -R --skip-base . > acl.dump. Nach dem Auspacken des tar-Archives lassen sich daraus die erweiterten Zugriffsrechte wiederherstellen: setfacl --restore acl.dump.
Als Alternative bietet sich die Verwendung von star oder einer neueren Version von tar mit den Schaltern --acls bzw. --xattrs an.

Kommandos zur Verwendung der ACLs

Zu Anzeige und Verwaltung der ACLs stehen zwei Kommandos bereit.

Mit getfacl werden die erweiterten Zugriffsrechte ausgegeben, z.B.

user@host:~$ getfacl blafasel.txt
# file: blafasel.txt
# owner: user
# group: group
user::rw-
user:onormalb:rw-
group::r--
mask::rw-
other::---

Hier ist zu erkennen, daß neben dem Dateibesitzer »user« auch der Benutzer »onormalb« Lese- und Schreibrecht für die Datei blafasel.txt hat.

Soll z.B. ein Benutzer der sich in einer anderen Gruppe befindet Zugriff auf eine Datei oder Verzeichnis bekommen, muss dafür nicht extra eine neue Gruppe mit allen Benutzern die Zugriff brauchen erstellt werden, sondern nur der unten stehende Befehl ausgeführt werden.

Erweiterte Zugriffsrechte werden mit dem Befehl setfacl vergeben. Soll etwa Benutzerin »anormalb« ebenfalls Lese- und Schreibrecht für die Datei blafasel.txt erhalten, lautet das Kommando:

user@host:~$ setfacl -m u:anormalb:rw- blafasel.txt

ACLs lassen sich natürlich auch wieder entfernen, etwa die Zugriffsrechte für »onormalb« auf die Datei blafasel.txt mit:

user@host:~$ setfacl -x u:onormalb blafasel.txt

Weitere Einzelheiten sind in den Handbuchseiten zu setfacl bzw. getfacl zu finden.

Eine sehr interessante Anwendungsmöglichkeit für ACLs ist die automatische Vergabe erweiterter Zugriffsrechte auf neu erstellte Dateien. Diese „Vererbung“ muß zunächst als Voreinstellung (Schalter -d für default) für ein Verzeichnis festgelegt werden:
user@host:~$ mkdir zzz
user@host:~$ setfacl -d -m g:nogroup:rw- zzz
user@host:~$ getfacl -d zzz
# file: zzz
# owner: user
# group: group
user::rwx
group::r-x
group:nogroup:rw-
mask::rwx
other::---

Nun erhalten alle neu erstellten Dateien in diesem Verzeichnis automatisch Lese-und Schreibrecht für die Gruppe »nogroup«:
user@host:~$ touch zzz/datei
user@host:~$ getfacl zzz/datei
# file: zzz/datei
# owner: user
# group: group
user::rw-
group::r-x                      #effective:r--
group:nogroup:rw-
mask::rw-
other::---

ACLs im Konqueror

Auch der KDE-Dateimanager konqueror ist in der Lage, erweiterte Zugriffsrechte anzuzeigen und zu editieren (Grafik zum Vergrößern anklicken):

ACL im Konqueror

Nach Rechtsklick auf eine Datei ist dazu im Menüpunkt "Eigenschaften" der Reiter "Berechtigungen" zu wählen. Hinter der Schaltfläche "Erweiterte Berechtigungen" verbirgt sich ein Fenster, in dem neben den klassischen UNIX-Rechten auch die ACLs zu sehen sind.

infoOffenbar werden Änderungen, die mit Hilfe der Kommandozeilenwerkzeuge erfolgen, erst nach einem manuellen Aktualisieren des Konquerors (z. B. mittels [F5]) korrekt angezeigt.

-- StefanHaller - 16 Mar 2011
Topic revision: r4 - 2016-03-08, ChristopherHuhn