21.3. Benutzer und Zugriffsrechte

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.

21.3.1. Rechte im Dateisystem

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.

Rechte auf Dateien

Betrachten wir nun die Rechtestruktur im Dateisystem genauer und beginnen mit den Dateien. Die Ausgabe von ls -l kann beispielsweise aussehen wie in Beispiel 21.1. “Beispielausgabe der Zugriffsrechte von Dateien”.

Beispiel 21.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-----
TypBenutzerrechteGruppenrechteRechte 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 sog. ACLs Access Control Lists gesetzt werden, siehe hierzu 21.3.6. “Access Control Lists” und das Kapitel Access Control Lists unter Linux im Administrationshandbuch.

Rechte auf Verzeichnisse

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 21.2. Beispielausgabe der Zugriffsrechte bei Verzeichnissen

drwxrwxr-x 1 tux projekt3 35 Jun 21 15:15  Projektdaten

In Beispiel 21.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 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).

21.3.2. Dateiberechtigungen anpassen

Ändern von Zugriffsrechten

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

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

  2. einem Zeichen für Entzug (-), Gleichsetzung (=) bzw. Hinzufügen (+)

  3. den bereits bekannten Abkürzungen für

    • r read, lesen

    • w write, schreiben

    • x execute, ausführen

  4. sowie, durch Leerzeichen getrennt, für den bzw. die Namen der betreffenden Datei(en).

Möchte nun zum Beispiel der Benutzer tux in Beispiel 21.2. “Beispielausgabe der Zugriffsrechte bei Verzeichnissen” auch anderen Benutzern den Schreibzugriff (w) auf das Verzeichnis Projektdaten gewähren, so kann er dies durch den folgenden 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.

Ändern von Eigentumsrechten

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 21.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 21.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. Für root stellt diese Beschränkung kein Problem dar.

21.3.3. Das Setuid-Bit

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 cdrecord zum Schreiben von CDs (oder DVDs) für den Zugriff auf den Brenner eigentlich Root-Rechte. Ein normaler Benutzer könnte somit keine CDs erstellen. Jedem Benutzer deshalb direkten Zugriff auf alle Geräte zu ermöglichen wäre jedoch zu gefährlich.

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 /usr/bin/cdrecord:

-rwxr-x---  1 root root  281356 2002-10-08 21:30 cdrecord

Setzen Sie das Setuid-Bit mit dem Befehl chmod u+s /usr/bin/cdrecord. Durch den Befehl chgrp users /usr/bin/cdrecord wird das Programm cdrecord der Gruppe users zugeordnet.

Als Zugriffsrechte erhalten wir:

-rws--x---  1 root users  281356 2002-10-08 21:30 cdrecord

Durch das Setuid-Bit können somit alle Benutzer, die der Gruppe users angehören, das Programm verwenden. Effektiv bedeutet dies, dass das Programm als Benutzer root ausgeführt wird.

[Warning]Warnung

Beachten Sie, dass es eine Angriffsmöglichkeit für Ihren Rechner darstellt, wenn Sie einem Programm das Setuid-Bit gewähren. Dies sollten Sie nur in Ausnahmefällen tun, wenn Sie das Programm genau kennen und dessen Risiken abschätzen können.

21.3.4. Das Setgid-Bit

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:

drwxrwxr--   2 root  archive    48 Nov 19 17:12 backup

Nun setzen wir das Setgid-Bit mit dem Befehl chmod g+s /test

Die Zugriffsrechte sehen danach wie folgt aus:

drwxrwsr--   2 root  archive    48 Nov 19 17:12 backup

21.3.5. Das Sticky-Bit

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

21.3.6. Access Control Lists

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 im Kapitel Access Control Lists unter Linux.


SUSE LINUX 9.2