Zugriffsrecht
Ein Zugriffsrecht (auch: Dateirecht) bezeichnet in der elektronischen Datenverarbeitung normalerweise eine Regel der administrativen Zugriffskontrolle, nach der entschieden wird, ob und wie Benutzer, Programme oder Programmteile, Operationen auf Objekten (etwa Netzwerke, Drucker, Dateisysteme) ausführen dürfen. Am geläufigsten ist dieses Konzept bei Dateisystemberechtigungen, wo festgelegt wird, welche Benutzer welche Dateien und Verzeichnisse lesen, schreiben, ändern oder ausführen dürfen.
Linux ermöglicht bis in alle Einzelheiten das Setzen von Zugriffsrechten und verschafft so guten Schutz vor unbefugtem Zugriff sowie vor versehentlich oder absichtlich herbeigeführten Fehlkonfigurationen:
- das Leserecht legt fest, wer Daten lesen darf
- das Schreibrecht legt fest, wer Daten verändern darf
- das Ausführrecht legt fest, wer bestimmte Programme ausführen darf
Der Systemverwalter "root" darf alles und verteilt die Lese-, Schreib- und Ausführrechte systemweit an die anderen Benutzer. Als Eigentümer von Dateien oder Verzeichnissen können diese bei Bedarf für andere Benutzer freigegeben werden.
Unter Linux ist für jede Datei (also auch für Verzeichnisse, Gerätedateien usw.) genau festgelegt, wer sie lesen, schreiben und ausführen darf. Jede Datei gehört ausserdem einem Eigentümer sowie zu einer Gruppe.
Zum Setzen und Verändern der Zugriffsrechte dienen folgende Befehle:
- chgrp zum Ändern der Gruppenzugehörigkeit
- chmod zum Ändern der die Zugriffsrechte von Dateien und Verzeichnissen
- chown zum Ändern des Eigentümers
- groups zum Anzeigen der eigenen Gruppenzugehörigkeit
- umask
- getfacl - get file access control lists
- setfacl - set file access control lists
Die Zeichen 2 bis 10 der Ausgabe von "ls -l" bezeichnen in Dreiergruppen die Zugriffsrechte des Eigentümers (user), Gruppe (group) und allen anderen Benutzern (other).
r | (read) lesen | Leserecht: Der Benutzer darf den Inhalt einer Datei oder eines Verzeichnisses auf dem Bildschirm anzeigen oder kopieren und anderes mehr. |
w | (write) schreiben | Schreibrecht: Der Benutzer darf die Dateien und Verzeichnisse veränderun und die Änderungen auch speichern. Ebenso ist das Löschen erlaubt. |
x | (execute) ausführen | Ausführrecht: Für Programme heisst das, dass der Benutzer sie ausführen darf. Im Fall eines Verzeichnisses bedeutet dieses Recht, dass der Benutzer in es hineinwechseln darf - zusätzlich muss hier das Leserecht bestehen, damit auch der Verzeichnisinhalt angesehen werden darf. |
Folgende Zusatzangaben gelten nur für ausführbare Dateien (setzbar für Benutzer und/oder Gruppe).
l | (locking) sperren | Lesen und schreiben dieser Datei sind gesperrt. |
s | setUID-bit (oktal 4000) | Das Programm wird mit den Rechten des Eigentümers und/oder der Gruppe ausgeführt. Ein Programm, das auf SUID "root" gesetzt ist, wird also immer als Benutzer "root" ausgeführt, selbst wenn ein normaler Benutzer es verwendet. Viele Programme (z. B. mount, passwd, su, sudo) benötigen das setUID-Bit.
4755 entspricht den Zugriffsrechten rwsr-xr-x. |
S | setGID-bit (oktal 2000) | Beispielsweise können die Benutzer "video" und "audio" in der Gruppe "media" zusammengefasst werden. Wird nun ein neues Verzeichnis angelegt, so kann dies der Gruppe "media" zugeordnet werden. Wird dazu auch das setGID-bit gesetzt, so gehören alle neu angelegten Verzeichnisse in diesem Verzeichnis danach zu dieser Gruppe.
6551 entspricht den Zugriffsrechten r-sr-s--x. |
t | sticky bit (oktal 1000) | Zusatzangabe für ausführbare Dateien (setzbar für Eigentümer und/oder Gruppe). Eine mit diesem Bit versehenes Programm bleibt auch nach der Ausführung im Arbeitsspeicher, anstatt wie üblich den Speicher wieder freizugeben. Das beschleunigt den Start von oft benutzten Programmen.
Für Verzeichnisse hat das Sticky Bit eine andere Bedeutung: Gewöhnlich kann ein Benutzer jede Datei in einem Verzeichnis, für das er Schreibrechte besitzt, löschen, auch wenn die Datei einem anderen Benutzer gehört. Für Sammelverzeichnisse (z. B. "/tmp") wird deshalb das Sticky Bit gesetzt: trotz Schreibrecht im Verzeichnis können nun alle Benutzer nur noch ihre eigenen Dateien löschen. Der Eigentümer eines Verzeichnisses kann die enthaltenen Dateien aber in jedem Fall löschen. $ ls -ld /tmp drwxrwxrwt 18 root root 4096 2007-06-15 07:35 /tmp |
Beispiele
Datei "/usr/bin/passwd". "passwd" läuft hier unter der UID von Benutzer "root" und schreibt in die Datei "/etc/shadow". Benutzer "root" hat dort also Schreibrecht.
-rwsr-xr-x root shadow
Datei "/etc/shadow".
-rw-r----- root shadow
Vorhanden ist Benutzer "xyz" in Gruppe "abc".
Dateien:
-rw-rw--- progx appl
Andere Benutzer haben also keinen Zugriff (z. B. "/var/mail/mik").
Programme:
-r-x--s--x
Das Programm soll von mehreren Benutzern genutzt werden können. Der Benutzer "xyz" lässt das Programm also unter seiner UID laufen. Das Programm läuft während der Programmausführung unter SGID (also unter Gruppe "appl" - ohne das setGID-bit würde es unter UID und GID des Benutzers laufen). Das x-bit am Ende wird benötigt, damit der Benuter "xyz" das Programm überhaupt ausführen kann.
Enthaltene Dateien dürfen von jedem Benutzer gelöscht werden.
drwxrwxrwx
Enthaltene Dateien dürfen ausschliesslich vom Dateibesitzer gelöscht werden. Dieses flag (sog. "sticky bit") kann mit "chmod 1777" ausschliesslich durch den Verzeichnisbesitzer gesetzt oder verändert werden.
drwxrwxrwt
Tipps
Anzeige aller Dateien, deren setUID-bit gesetzt ist.
# find / -perm +4000
Anzeige aller Dateien im Verzeichnis "/usr", die dem Benutzer "root" gehören und deren setUID-bit gesetzt ist. Fehlermeldungen werden unterdrückt.
# find /usr \( -perm -4000 -a -user root \) -print 2>/dev/null
Anzeige aller Dateien im Verzeichnis "/usr", die dem Benutzer "root" gehören und deren setUID-bit gesetzt ist. Anzeige aller Informationen. Fehlermeldungen werden unterdrückt.
find /usr \( -perm -4000 -a -user root \) -ls 2>/dev/null
Anzeige aller Dateien in $PATH, deren setUID-bit gesetzt ist.
# find $(echo $PATH | tr ':' ' ') -type f -perm +4000
Um sich vor SUID- und SGID-basierten Angriffen zu schützen:
- Nur wenige Programme müssen SUID-gesetzt sein. Diesen Programmen sollte eine eigene Gruppe zugewiesen werden.
- SUID-Dateien sollen keinesfalls schreibbar sein.
- Der Modus von SUID-Programmen, die nicht unbedingt SUID-gesetzt sein müssen, sollte geändert werden ("chmod -s program").
- Unnütze oder unwichtige SUID-Programme sollten deinstalliert oder gelöscht werden.
Zugriffsrechte können beim Kopieren mit cp oder beim Packen mit zip (unabsichtlich) verändert werden!
Der Befehl "cp -r source destination" ist unbrauchbar: er kopiert rekursiv, wobei
- die umask zählt (fällt weg bei "cp -pr source destination")
- ändert die Dateibesitzer und -gruppen (fällt mit "cp -pr source destination" nur teilweise weg)
- kann Links nicht behandeln, diese gehen also verloren
Dieser Befehl ist also insbesondere für Systembereiche unbrauchbar.
Ein besserer Befehl ist der folgende. Er behält die bestehenden Zugriffsrechte bei (Option "p"), schreibt nach stdout und kopiert dabei ausschliesslich Dateien, die nicht mit Punkt anfangen (um diese zu kopieren muss "tar cpf - ." verwendet werden). Der zweite Teil des Befehls behält die bestehenden Zugriffsrechte bei (Option "p") und liest von stdin.
$ (cd /source; tar cpf - *) | (cd /target; tar xpf -)
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | ger | Zugriffsrechtwbm | Enzyklopädischer Artikel |