Tipp: Dateirechte unter Linux - ACLs
Erweiterte Dateirechte (ACL)
Der erste Artikel der Reihe ‘Dateirechte’ behandelte Besitz- und Zugriffsrechte. Die Fortsetzung 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.