Tipp: Erweiterte Dateirechte (ACL)

dateirechteErweiterte Dateirechte und Access Control Lists unter Linux sind Lerninhalte der LPI Prüfung LPI 303, Lerninhalt 321.2 „Extended Attributes and ACLs“

Der erste Artikel Dateirechte unter Linux der Reihe Dateirechte behandelte
Besitz- und Zugriffsrechte. Die Fortsetzung Dateirechte unter Linux 2 ging auf das
Setzen und Verändern der Dateirechte ein. Im diesem letzten Teil
behandeln wir erweiterte Dateirechte, die Sie über Access Control
Lists
(ACL) steuern.

Historisch gab es in unixoiden Betriebssystemen lediglich die
Möglichkeit, Dateirechte über einen Benutzer, eine Gruppe oder alle
sonstigen zu definieren. Die Details dazu haben wir bereits
kennengelernt. Grundsätzlich hat sich an diesem Ansatz nichts
geändert; in heutigen Multiuser-Umgebungen stößt der Ansatz allerdings
oft an seine Grenzen und wurde daher mit den erweiterten
Dateirechten
„aufgebohrt“.

Der Administrator hat so die Möglichkeit, über die grundlegenden
Berechtigungen hinaus Benutzern oder Gruppen Rechte zu gewähren oder
auch zu entziehen.

Voraussetzungen

Die Nutzung von ACLs erfordert eine Erweiterung innerhalb des
Dateisystems, die man beim Einhängen (mounten) des Dateisystems
durch die Angabe der Option acl aktiviert. Die Option sollte — damit sie nach dem Start des Rechners aktiv ist — in die Datei
/etc/fstab für das Dateisystem eingetragen sein.

Alternativ kann der Benutzer root das Dateisystem auch
zeitweise — bis zum nächsten Neustart — mit ACLs versehen.

root@linux ~ # mount / -o remount,acl

Erweiterte Dateirechte anzeigen

Bisher kennen wir das Programm ls zum Anzeigen von
Dateiinformationen; beim langen Listing mit der Option -l zeigt es
auch die Berechtigungen an:

chris@linux ~ $ ls -l Datei.txt
-rw-r--r-- 1 chris chris 12 Apr 23 19:51 Datei.txt

Besitzt eine Datei erweiterte Dateirechte, ist dies bei ls lediglich an
einem einzigen Zeichen sichtbar: Direkt nach den Unix-Berechtigungen
folgte ein Plus-Zeichen (+).

chris@linux ~ $ ls -l Datei.txt
-rw-r--r--+ 1 chris chris 12 Apr 23 19:51 Datei.txt

Damit enden die Möglichkeiten des Kommandos ls aber auch schon.
Weitere Informationen bietet uns in einem solchen Fall getfacl:

chris@linux ~ $ getfacl Datei.txt
# file: Datei.txt
# owner: chris
# group: chris
user::rw-
user:tux:r--
group::rw-
mask::r--
other::---

Auch getfacl zeigt uns die Standard-Dateiberechtigungen: Mit einer
Raute (#) beginnend, folgt je eine Zeile mit dem Dateinamen (file),
dem Besitzer der Datei (owner) und der Gruppe (group).

Danach folgen mindestens drei weitere Zeilen (mit den Berechtigungen
für den Benutzer, die Gruppe und andere) mit jeweils drei, durch
Doppelpunkt voneinander getrennten Feldern; zwei direkt aufeinander
folgende Doppelpunkte markieren also ein leeres Feld und damit die
Basis-Berechtigungen.

In unserem Beispiel gibt es nun eine Benutzer-Berechtigung, bei der
das zweite Feld nicht leer ist: Hier ist zwischen den Doppelpunkten
der Benutzer tux aufgeführt, dem also die im dritten Feld genannten
Rechte gewährt werden. An dieser Stelle gilt das Prinzip des First
Match
. Der Benutzer tux hat also lediglich Leserechte, selbst wenn
er einer Gruppe angehört, die auch Schreibrechte besitzt.

Die Maske (mask) ist vorhanden, sobald mehr als die Basis-
Berechtigungen vorhanden sind, also benannte Benutzer- und/oder
Gruppenberechtigungen existieren. Die Standardberechtigung der Maske
leitet sich aus den bereits vorhandenen Berechtigungen über ein
logisches ODER ab. Die Maske begrenzt die effektiven Rechte aller
Berechtigungen, wirkt also wie ein Filter — ausgenommen davon ist
lediglich der Besitzer und das Recht für andere.

chris@linux ~ $ getfacl Datei.txt
# file: Datei.txt
# owner: chris
# group: chris
user::rw-
user:tux:rwx
group::r--
mask::r--
other::r--

Hier hat der Benutzer tux zusätzliche Schreibrechte, die aber nicht
zum Tragen kommen, da die Maske auf das Leserecht begrenzt.

Auch die Spezialberechtigungen SetUID, SetGID und Sticky Bit
stellt getfacl dar:

root@linux ~ # getfacl /bin/su
getfacl: Removing leading '/' from absolute path names
# file: bin/su
# owner: root
# group: root
# flags: s--
user::rwx
group::r-x
other::r-x

Im Gegensatz zu ls ersetzt getfacl nicht die Buchstaben in den
Rechten, sondern gibt eine zusätzliche Zeile mit den gesetzten Bits
(flags) aus, hier am Beispiel des Programms su.

Erweiterte Dateirechte verändern

Das Ändern der erweiterten Dateirechte übernimmt das Kommando
setfacl:

root@linux ~ # setfacl -m u:tux:r Datei.txt
root@linux ~ # setfacl -m g:friends:r Datei.txt

Im Beispiel wird mit dem Parameter -m (modify) eine neue Berechtigung
hinzugefügt und dem Benutzer (u) namens tux das
Leserecht (r) eingeräumt.

Darüber hinaus wird der Gruppe (g) friends ebenfalls das Leserecht
gewährt:

root@linux ~ # setfacl -m u:tux:rw Datei.txt

Ein weiterer Aufruf für denselben Benutzer mit anderen Berechtigungen
modifiziert die bestehenden:

root@linux ~ # setfacl -x u:tux Datei.txt
root@linux ~ # setfacl -x g:friends Datei.txt

Mit dem Parameter -x entfernt der Administrator die erweiterten
Berechtigungen wieder. Dabei akzeptiert setfacl nach dem Benutzer-
bzw. Gruppennamen keine Berechtigungen:

root@linux ~ # setfacl -m m::rx Datei.txt

Mit Hilfe der Maske (m) entzieht der Administrator allen Gruppen und
benannten Benutzern das Schreibrecht, indem die
effektiven Rechte nur noch das Lesen und Ausführen (rx) erlauben.

Damit sind die Möglichkeiten von getfacl und setfacl aber
keineswegs vollständig beschrieben. Die Man-Pages (man getfacl
bzw. man setfacl) oder weitere Dokumentation helfen bei Bedarf
weiter. Ein interessantes Thema ist beispielsweise die Vererbung
über die Angabe von Vorgabe-Rechten (Default) bei Verzeichnissen.

Spezielle Anwendungsfälle

Im Allgemeinen wird vor der übermäßigen Verwendung von erweiterten
Berechtigungen gewarnt, denn allzu schnell verliert der Administrator den
Überblick. Zudem steigt die Gefahr von Sicherheitslücken durch
unentdeckte zu weit reichende Berechtigungen.

An einigen Stellen haben ACLs das Leben des Linux-Nutzers aber auch
deutlich einfacher gemacht. Typischerweise mussten Benutzer
bestimmten Gruppen angehören, um beispielsweise die
Hardwarebeschleunigung der Grafikkarte oder Audioausgabe nutzen zu
können:

root@linux ~ # ls -l /dev/dri/card0
crw-rw----+ 1 root video 226, 0 Apr 23 18:11 /dev/dri/card0

ls verrät uns, dass die Datei /dev/dri/card0 — zuständig für
direkte Hardwarezugriffe auf die Grafikkarte — erweiterte
Berechtigungen besitzt:

root@linux ~ # getfacl /dev/dri/card0
getfacl: Removing leading '/' from absolute path names
# file: dev/dri/card0
# owner: root
# group: video
user::rw-
user:chris:rw-
group::rw-
mask::rw-
other::---

Diese erweiterten Berechtigungen werden dem Benutzer chris eingeräumt,
so hat er Zugriff auf Funktionen der Grafikkarte, ohne der Gruppe video
anzugehören. Gesetzt werden diese Berechtigungen automatisch beim
lokalen Anmelden eines Benutzers.

Mit diesem Artikel endet die Serie zum Setzen und Verändern der
Besitz- und Zugriffsrechte. Der nächste Artikel dieser Reihe
enthält Informationen zur Secure Shell (OpenSSH).


Dieser Text ist im Rahmen des Tipp des Monats von Michael Gisbers und Christian Hesse auf der Website des LPI Central Europe unterstützt von der Open Source Press veröffentlicht worden.