Linux wurde von Anfang an als Multiuser-System konzipiert, also für die
gleichzeitige Benutzung durch mehrere Anwender.
Zu Beginn einer Arbeitssitzung muss sich der Benutzer am System
anmelden. Dazu verfügt der Anwender über
einen eigenen Benutzernamen mit zugehörigem Passwort. Diese
Benutzerunterscheidung gewährleistet, dass Unbefugte keinen Einblick in für
sie gesperrte Inhalte erhalten können. Auch größere Veränderungen am System,
zum Beispiel die Installation von Programmen, sind einem Benutzer in der
Regel nicht oder nur sehr beschränkt möglich. Nur root,
der Administrator, verfügt über
praktisch unbegrenzte Rechte und hat unlimitierten Zugriff auf alle Dateien.
Wer dieses Konzept umsichtig nutzt und sich nur bei Bedarf mit der Allmacht
des root einloggt, kann die Gefahr
eines unbeabsichtigten Datenverlustes stark eingrenzen: Da im Normalfall nur
der Administrator Systemdateien löschen oder Festplatten formatieren darf,
kann die Bedrohung durch Trojanische Pferde oder versehentlich eingegebene
destruktive Befehle stark eingegrenzt werden.
Grundsätzlich gehört jede Datei in Linux-Dateisystemen je einem Benutzer und einer Gruppe. Jeder dieser beiden Eigentümerparteien, aber auch Anderen können vom Besitzer Schreib-, Lese- sowie Ausführrechte zugewiesen werden.
Als Gruppe werden Zusammenschlüsse von Benutzern mit bestimmten kollektiven
Rechten bezeichnet. So ist eine solche Gruppe eine an einem bestimmten
Projekt arbeitende Arbeitsgruppe, nennen wir sie
projekt3. Jeder Benutzer unter Linux ist Mitglied in
mindestens einer Gruppe, standardmäßig ist das die Gruppe users. Es können nahezu beliebig viele
Gruppen vom Benutzer root angelegt
werden. Jeder Benutzer kann mit dem Befehl groups
herausfinden, in welchen Gruppen er Mitglied ist.
Betrachten wir nun die Rechtestruktur im Dateisystem genauer und beginnen mit den Dateien. Die Ausgabe von ls -l kann beispielsweise aussehen wie in Beispiel 19.1, „Beispielausgabe der Zugriffsrechte von Dateien“.
Beispiel 19.1. Beispielausgabe der Zugriffsrechte von Dateien
-rw-r----- 1 tux projekt3 14197 Jun 21 15:03 Roadmap
Wie Sie anhand der dritten und vierten Spalte erkennen können,
gehört diese Datei dem Benutzer tux, als Gruppe ist
projekt3 zugeordnet. Um deren Rechte auf die Datei
ersehen zu können, betrachten wir die erste Spalte genauer.
- | rw- | r-- | --- |
Typ | Benutzerrechte | Gruppenrechte | Rechte für andere Benutzer |
Diese Spalte gliedert sich in ein anführendes sowie neun in Dreiergruppen
aufgeteilte Zeichen. Der erste der zehn steht für den Typ des gelisteten
Dateisystembestandteils. Der Bindestrich - zeigt,
dass es sich um eine normale Datei handelt. Hier könnte genauso gut ein
Verzeichnis (d), ein Querverweis (l), ein Block- (b) bzw. Character-Gerät
(c) stehen.
Die nachfolgenden drei Blöcke folgen einem einheitlichen Schema: Das
erste von jeweils drei Zeichen zeigt an, ob die jeweilige Fraktion über
Lesezugriff auf die Datei verfügt (r) oder nicht
(-). Ein w in der mittleren
Einheit symbolisiert, dass Schreibzugriff auf das jeweilige Objekt
erlaubt ist, steht dort ein Bindestrich (-), so ist
dieser nicht möglich. Darüber hinaus könnte in der jeweils rechten Spalte
ein x dargestellt sein, welches für einen
Ausführungszugriff stünde. Da es sich in diesem Beispiel um eine nicht
ausführbare Datei handelt, ist dieses Recht nicht gegeben.
In unserem Beispiel hat also tux als Besitzer der Datei
Roadmap sowohl Lesezugriff (r)
als auch Schreibzugriff (w), kann sie aber nicht
ausführen (kein x). Die Mitglieder der Gruppe
projekt3 können die Datei nur lesen, aber weder
verändern noch ausführen. Andere Benutzer haben keinerlei Zugriff auf
diese Datei. Differenziertere Rechte können über ACLs
(Access Control Lists) gesetzt werden. Siehe
hierzu Abschnitt 19.3.6, „Access Control Lists“
und das entsprechende Kapitel im
Administrationshandbuch.
Wenden wir uns nun den Zugriffsrechten für Verzeichnisse zu, deren Typ
d ist. Hier haben die einzelnen Rechte eine etwas
andere Bedeutung. Ein kleines Beispiel zur Verdeutlichung:
Beispiel 19.2. Beispielausgabe der Zugriffsrechte bei Verzeichnissen
drwxrwxr-x 1 tux projekt3 35 Jun 21 15:15 Projektdaten
In Beispiel 19.2, „Beispielausgabe der Zugriffsrechte bei Verzeichnissen“ sind Besitzer
(tux) und Besitzergruppe
(projekt3) des Verzeichnisses
Projektdaten leicht zu erkennen. Im Gegensatz zu den
Dateirechten aus Rechte auf Dateien bedeutet hier das gesetzte
Leserecht (r) jedoch, dass der Inhalt des
Verzeichnisses angezeigt werden kann. Das Schreibrecht (w)
steht darüber hinaus für die Berechtigung, neue Dateien
anlegen zu dürfen, das Exekutivrecht (x) erlaubt das
Wechseln in diesen Ordner. Bezogen auf obiges Beispiel bedeutet dies,
dass neben dem Benutzer tux
auch die Mitglieder der Gruppe projekt3
in das Verzeichnis Projektdaten wechseln
(x), den Inhalt anzeigen
(r) und Dateien dort anlegen oder
löschen dürfen (w). Alle übrigen Benutzer sind
hingegen mit weniger Rechten ausgestattet, sie dürfen in das Verzeichnis
wechseln (x) bzw. durchsuchen (r),
jedoch keine neuen Dateien dort anlegen (w nicht
gesetzt).
Die Zugriffsrechte einer Datei bzw. eines Verzeichnisses können vom
Besitzer (und natürlich von root) mit dem Befehl
chmod
verändert werden, der zusammen mit Parametern für die zu ändernden
Zugriffsrechte sowie die Namen der zu modifizierenden Dateien eingegeben
wird.
Die beiden Parameter setzen sich zusammen aus
den betroffenen Benutzern:
u
user, der Besitzer der
Datei
g
group, die Gruppe des
Besitzers
o
others, sonstige Benutzer (wird
kein Parameter angegeben, gelten die Änderungen für alle
Kategorien)
einem Zeichen für Entzug (-),
Gleichsetzung (=) bzw. Hinzufügen
(+)
den bereits bekannten Abkürzungen für
r
read, lesen
w
write, schreiben
x
execute, ausführen
sowie, durch Leerzeichen getrennt, für den bzw. die Namen der betreffenden Datei(en).
Möchte nun zum Beispiel der Benutzer tux
in Beispiel 19.2, „Beispielausgabe der Zugriffsrechte bei Verzeichnissen“ auch anderen Benutzern den
Schreibzugriff (w) auf das Verzeichnis
Projektdaten gewähren, so kann er
dies durch den Befehl chmod o+w Projektdaten
bewerkstelligen.
Will er jedoch allen außer sich selbst das Schreibrecht entziehen, nimmt
er das Kommando chmod go-w Projektdaten. Um allen
Benutzern das Anlegen einer Datei im Verzeichnis
Projektdaten zu verbieten, gibt man chmod
-w Projektdaten ein. Nun kann nicht einmal der Besitzer mehr
auf seine Datei schreiben, ohne das Schreibrecht vorher
wiederherzustellen.
Weitere wichtige Kommandos, die die Eigentumsverhältnisse der
Dateisystembestandteile regeln, sind chown
(Change Owner) und chgrp (Change Group).
Der Befehl chown dient dazu, den Besitzer
einer angegebenen Datei zu ändern. Allerdings darf nur root diese Änderung vornehmen.
Angenommen, die Datei Roadmap aus
Beispiel 19.2, „Beispielausgabe der Zugriffsrechte bei Verzeichnissen“ soll nicht mehr
tux, sondern dem Benutzer
geeko gehören, so lautet der
entsprechende Befehl – als root eingegeben: chown geeko
Roadmap.
Ähnlich funktioniert der Befehl chgrp, der die
Gruppenzugehörigkeit einer Datei ändert. Dabei ist zu beachten, dass der
Datei-Besitzer Mitglied in der Gruppe sein muss, die er als neu zu
bestimmen wünscht. So könnte beispielsweise unser Benutzer
tux aus
Beispiel 19.1, „Beispielausgabe der Zugriffsrechte von Dateien“ durch die Eingabe des Befehls
chgrp projekt4 Projektdaten die
Besitzergruppe der Datei Projektdaten
auf projekt4 abändern,
soweit er Mitglied in dieser Gruppe ist.
Es gibt Situationen, in denen die Zugriffsrechte als zu restriktiv
erscheinen. Hierfür gibt es unter Linux zusätzliche Einstellungen, welche
die aktuelle Benutzer- und Gruppenidentität für eine bestimmte Aktion
vorübergehend ändern können.
Beispielsweise benötigt das Programm passwd
für den Zugriff auf /etc/passwd
normalerweise Root-Rechte. Diese
Datei enthält wichtige Informationen wie die Home-Verzeichnisse
von Benutzern und Benutzer- und Gruppen-IDs. Daher
kann ein normaler Benutzer passwd
nicht ändern, da es zu gefährlich wäre, allen Benutzern
direkten Zugriff zu dieser Datei zu gewähren.
Als Lösung bietet sich der Setuid-Mechanismus an. Setuid (Set User ID) ist
ein spezielles Dateiattribut, welches das System anweist damit markierte
Programme unter einer vorgegebenen Benutzer-Kennung auszuführen. Betrachten
wir das Programm passwd:
-rwsr-xr-x 1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd
Wie Sie sehen, ist das s-Bit
für die Benutzerrechte gesetzt. Durch das
Setuid-Bit wird der Befehl passwd
als root
ausgeführt, wenn er von irgendeinem Benutzer
gestartet wird.
Das Setuid-Attribut gilt für den Benutzer, es gibt jedoch auch eine äquivalente Eigenschaft für die Gruppe: Das Setgid-Attribut. Ein Programm läuft dann unter der Gruppenkennung, unter des es gespeichert wurde, egal welcher Benutzer es gestartet hat. Daher werden bei einem Verzeichnis mit Setgid-Bit alle neu angelegten Dateien und Unterverzeichnisse der Gruppe zugewiesen, der das Verzeichnis gehört. Betrachten wir ein Beispiel-Verzeichnis:
drwxrws--- 2 tux archive 48 Nov 19 17:12 backup
Wie Sie sehen, ist das s-Bit
für die Gruppenrechte gesetzt.
Der Besitzer des Verzeichnisses und Mitglieder der
Gruppe archive
haben Zugriff auf dieses Verzeichnis. Benutzer,
die nicht Mitglieder dieser Gruppe sind, werden
der entsprechenden Gruppe zugewiesen. Die effektive
Gruppen-ID aller hier gespeicherten Dateien ist somit
archive.
Zum Beispiel hat ein Backup-Programm, dass unter der
Gruppen-ID archive
läuft, selbst ohne Root-Rechte Zugriff auf dieses
Verzeichnis.
Zusätzlich zu den Setuid- und Setgid-Bits gibt es noch das so genannte
Sticky-Bit. Hierbei muss man unterscheiden, ob es
einem ausführbarem Programm oder einem Verzeichnis angehört. Für Dateien ist
dieses Bit heute nicht mehr weit im Gebrauch und hat nur noch historische
Bedeutung.
Wird dagegen einem Verzeichnis dieses Attribut zugewiesen, verhindert dies,
dass Benutzer sich ihre Dateien gegenseitig löschen. (In Verzeichnissen mit
Sticky-Bit dürfen Benutzer nur Dateien entfernen, die sie selbst besitzen).
Typische Beispiele sind die Verzeichnisse /tmp und
/var/tmp:
drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp
In Erweiterung zum traditionellen Rechtekonzept für Dateien und Verzeichnisse, wie es in den vorangehenden Abschnitten erläutert wurde, kennt Linux die so genannten ACLs Access Control Lists. Mit ihrer Hilfe kann neben dem Eigentümer und der besitzenden Gruppe auch weiteren Benutzern und Gruppen Zugriff erteilt werden.
Sie erkennen Verzeichnisse oder Dateien mit erweiterten Zugriffsrechten nach einem einfachen ls -l Kommando so:
-rw-r--r--+ 1 tux projekt3 517 2003-01-08 18:12 Roadmap
Auf den ersten Blick hat sich an der Ausgabe des ls
Kommandos nicht viel geändert. Die Datei Roadmap gehört
dem Benutzer tux, der zur Gruppe
projekt3 gehört. tux besitzt sowohl
Lese- als auch Schreibrechte an dieser Datei, die Gruppe greift lesend zu
und der Rest der Welt ebenso. Einziger Hinweis auf einen Unterschied zu
einer Datei ohne ACL ist das zusätzliche + in der ersten
Spalte mit den Berechtigungsbits.
Details über die konkrete ACL erhalten Sie mit dem Kommando
getfacl auf Ihre Beispieldatei
Roadmap:
# file: Roadmap # owner: tux # group: projekt3 user::rw- user:jane:rw- effective: r-- group::r-- group:djungle:rw- effective: r-- mask::r-- other::---
Die ersten drei Zeilen liefern keinerlei neue Informationen, die Sie mit
einem ls -l nicht auch erhalten hätten. Hier geht es
lediglich um Dateiname, Besitzer und Gruppe. Die Zeilen 4 bis 9 geben die
eigentlichen ACL-Einträge ACL entries wieder.
Die herkömmlichen Dateirechte sind eine Untermenge derer, die sich mit Hilfe
von ACLs festlegen lassen. Die Beispiel-ACL sieht für den Besitzer der
Datei, sowie für den Benutzer jane Schreib- und
Lesezugriff vor, ist also eine Erweiterung (Zeilen 4 und 5). Gleiches gilt
entsprechend für die Gruppen. Die Gruppe des Dateibesitzers hat Lesezugriff
(Zeile 6), für die Gruppe djungle ist Lese- und
Schreibzugriff vorgesehen. Der Eintrag mask in Zeile 8
beschränkt die Zugriffsrechte für den Benutzer jane und
die Gruppe djungle effektiv auf reinen Lesezugriff.
Sämtliche anderen Benutzer oder Gruppen sind nicht zugriffsberechtigt (Zeile
9).
Weitergehende Informationen zu ACLs finden Sie im Administrationshandbuch.