Erweiterte Dateirechte (ACL)

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

Autoren: Michael Gisbers und Christian Hesse

Der erste Artikel der Reihe 'Dateirechte' behandelte Besitz- und Zugriffsrechte. Die Fortsetzung ging auf das Setzen und Verändern der Dateirechte ein. In 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 diebestehenden:

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).