Da Linux/Unix ein Mehrbenutzersystem ist, ist es wichtig, dass definiert wird welcher Benutzer wie auf welche Dateien zugreifen darf. Daher bieten Linux/Unix-Dateisysteme die Möglichkeiten Zugriffsrechte für Dateien festzulegen. Welche Rechte es gibt, wie diese funktionieren und wie man die Berechtigungen einstellt, wird in diesem Artikel erläutert.
Die Grundlagen
Jede Datei hat einen Besitzer, d.h. einen Benutzer dem die Datei gehört. Zusätzlich wird jeder Datei auch eine Benutzergruppe zugewiesen, zu der die Datei gehört. Daraus ergeben sich drei Benutzerklassen, für die Rechte festgelegt werden können:
- Der Besitzer (user) der Datei.
- Die Benutzergruppe (group) zu der die Datei gehört. Eine Datei kann immer nur einer Gruppe gehören.
- Die Anderen (others), also alle Benutzer die weder Mitglied der Gruppe sind, der die Datei gehört, noch der Besitzer der Datei sind.
Für jede dieser drei Benutzerklassen können separat Berechtigungen wie Lese und Schreibrechte festgelegt werden. Wenn ein Benutzer auf eine Datei zugreifen möchte, wird überprüft ob er in einer der drei Benutzerklassen die Berechtigung dazu hat, ist das nicht der Fall, wird ihm der Zugriff verweigert.
Ein Beispiel:
Die Datei Artikel.doc hat folgende Berechtigungen definiert: Der Besitzer darf Lesen und Schreiben, die Gruppe Redakteure hat nur Leserechte, alle anderen haben gar keine Rechte, d.h. sie dürfen weder Lesen, Schreiben, noch Ausführen (dazu später mehr).
Ein Benutzer der Gruppe Redakteure liest den Artikel, das darf er, denn die Gruppe Redakteure hat ja Leserechte. Er findet einen Fehler in dem Artikel und möchte ihn korrigieren, hier wird er eine Fehlermeldung sehen, denn nur der Besitzer darf schreibend auf die Datei zugreifen.

Eine typische Fehlermeldung, die beim Speichern einer Datei erscheint, wenn man keine Schreibrechte dafür besitzt.
Es ist noch zu beachten, das der Administrator (root) immer alle Rechte hat.
Die Zugriffsrechte
Es gibt drei grundlegende Rechte die vergeben werden können: Lesen, Schreiben und Ausführen. Unter Linux ist fast alles eine Datei, daher können diese Berechtigungen auch auf Verzeichnisse, oder zum Beispiel Gerätedateien angewendet werden. Für Dateien und Verzeichnisse haben die einzelnen Rechte allerdings unterschiedliche Bedeutungen.
Für Dateien
- Lesen: Erlaubt es die Datei zu lesen.
- Schreiben: Die Datei darf verändert werden.
- Ausführen: Man kann die Datei ausführen (wichtig für Programme).
Für Verzeichnisse
- Lesen: Es ist möglich die Namen der Dateien und Verzeichnisse in dem Verzeichnis zu erfahren. Weitere Dateieigenschaften wie Größe, Besitzer, letzter Zugriff, etc. können mit der Leseberechtigung allerdings nicht ausgelesen werden.
- Schreiben: Man kann Dateien erstellen, umbenennen und löschen.
- Ausführend: Erlaubt einem den Zugriff auf Dateien in dem Verzeichnis, sofern man den Namen der Datei kennt. Erlaubt es auch, Dateieigenschaften auszulesen und in das Verzeichnis zu wechseln (
cd).
Das Schreibrecht bei Verzeichnissen macht nur Sinn, wenn auch das Ausführrecht vergeben wird, denn ansonsten kann man trotzdem keine Dateien erstellen/umbenennen/löschen, da man ja keinen Zugriff darauf hat.

Die Namen der Dateien werden zwar angezeigt, es ist aber nicht möglich weitere Dateieigenschaften herauszufinden, da der Benutzer nur Leserechte für >verzeichnis< hat.
Es gibt auch noch andere Arten von Dateien für die Zugriffsrechte vergeben werden können, im Alltag arbeitet man allerdings eher selten mit diesen. Im
/dev-Verzeichnis (Geräte) finden sich beispielsweise auch Blockgeräte-Dateien (block device), mittels derer man direkt auf Geräte wie zum Beispiel Festplatten zugreifen kann. Auch für diese Dateien können Zugriffsrechte festgelegt werden. Normalerweise hat nur root Lese- und Schreibrechte auf Festplatten, denn wenn jeder direkten Zugriff auf die Festplatte hätte, könnte ja auch jeder einfach die Festplatte neu formatieren, oder Dateien von anderen Benutzern lesen.
Zusätzliche Berechtigungen bzw. Attribute
Neben diesen drei grundlegenden Berechtigungen gibt es noch drei weitere Rechte bzw. Datei-Attribute die vergeben werden können. Diese haben nur bei Verzeichnissen und ausführbaren Dateien eine Bedeutung, und auch da sind die Bedeutungen wieder unterschiedlich.
Für ausführbare Dateien
- Setze Besitzer-ID (auch setuid/SUID genannt): Bei der Ausführung wird die ID des Besitzers als effektive Benutzer-ID verwendet.
- Setze Gruppen-ID (setgid/SGID): Die effektive Gruppen-ID ist die der Benutzergruppe, der die Datei gehört.
- Sticky-Attribut: Wird von Linux ignoriert. Auf anderen (älteren) Unix-Systemen bewirkt es, das ausführbare Dateien auch nach der Ausführung noch im Speicher bleiben, so das sie bei der nächsten Ausführung nicht wieder erst von der Festplatte gelesen werden müssen.
Für Verzeichnisse
- Setze Besitzer-ID: Bei Verzeichnissen keine Wirkung.
- Setze Gruppen-ID: Neu erstellte Dateien und Verzeichnisse innerhalb des Verzeichnisses erhalten die selbe Gruppe wie das Verzeichnis. Normalerweise würden sie die primäre Gruppe des Benutzers erhalten, der die Dateien/Verzeichnisse erstellt.
- Sticky-Attribut: Benutzer können keine Dateien/Verzeichnisse löschen/umbenennen/verschieben die nicht ihnen gehören, auch wenn sie Schreibrechte haben. Ausgenommen davon ist nur der Besitzer des Verzeichnisses (und natürlich root).
Was hat es mit der (effektiven) Benutzer-ID auf sich?
Jeder Benutzer und jede Gruppe hat eine ID (Identifikationsnummer, z.B. 1000). Wenn ein Programm versucht auf eine Datei oder ein Gerät zuzugreifen, wird anhand der effektiven ID überprüft ob es dazu berechtigt ist. Die effektive Benutzer/Gruppen-ID ist normalerweise die gleiche wie die vom Benutzer der das Programm ausführt/seiner primären Gruppe. Mit dem SUID/SGID-Attribut ist es allerdings möglich die effektive ID zu ändern.
| ID | Bedeutung |
|---|---|
| Benutzer-ID | Die ID des Benutzers der das Programm ausführt. |
| effektive Benutzer-ID | Die Benutzer-ID, die verwendet wird um auf Dateien/Geräte/etc. zuzugreifen. |
| Gruppen-ID | Die ID der primären Gruppe des Benutzers. |
| effektive Gruppen-ID | Die Gruppen-ID, die verwendet wird um auf Dateien/Geräte/etc. zuzugreifen. |
Bei manchen Programmen kann es nötig (und sinnvoll) sein, sie mit den Rechten anderer Benutzer auszuführen. Ein Beispiel für ein solches Programm ist das ping-Programm, da, um einen Ping zu senden, root-Rechte benötigt werden. Das Programm ping gehört normalerweise root, und das SUID-Attribut ist gesetzt. So wird das Programm mit der effektiven Benutzer-ID von root ausgeführt, und auch normale Benutzer können Pings versenden.
Das SUID/SGID-Attribut sollte man allerdings nur verwenden wenn man wirklich weiß, was man da tut. So lassen sich nämlich auch große Sicherheitslücken erzeugen.
Anzeigen von Zugriffsrechten
Mit dem Befehl ls -l kann man sich die Zugriffsrechte einer Datei oder eines Verzeichnisses anzeigen lassen. Die Ausgabe des Befehls ist aber nicht unbedingt selbsterklärend. Zur Bedeutung der einzelnen Spalten und Zeichen:
Die Art der Datei
Das erste Zeichen der ersten Spalte zeigt an um welche Art von Datei es sich handelt, folgende Typen gibt es:
| Zeichen | Dateityp |
|---|---|
| - | Normale Datei |
| d | Verzeichnis |
| l | Ein Link bzw. eine Verknüpfung |
| s | Ein Socket |
| c | Zeichenbasierte Geräte (z.B. USB-Schnittstelle) |
| b | Blockgeräte (z.B. Festplatten) |
| p | Pipe |
Die Zugriffsberechtigungen
Die restlichen 9 Zeichen der ersten Spalte zeigen die Zugriffsberechtigungen der Datei an. Dabei zeigen immer drei Zeichen die Berechtigungen für eine Benutzerklasse an: Besitzer (Zeichen 1-3), Gruppe (4-6), Andere (7-9).
| Zeichen | Bedeutung |
|---|---|
| r | Lesen |
| w | Schreiben |
| x | Ausführen |
| s | SUID/SGID-Attribut |
| S | (wird angezeigt, wenn das SUID/SGID-Attribut gesetzt ist, es sich aber nicht um eine ausführbare Datei handelt.) |
| t | Sticky-Attribut |
| T | (Sticky-Attribut bei normalen Dateien, wird unter Linux ignoriert.) |
Ein – zeigt an, das die entsprechende Berechtigung nicht erteilt wurde, hier noch ein paar Beispiele:
drw-rw-rwt Ein Verzeichnis. Besitzer, Gruppe und Andere dürfen: Lesen, Schreiben.
Sticky-Attribut gesetzt.
-rwsr-x--- Eine normale (ausführbare) Datei, der Besitzer darf
Lesen, Schreiben, Ausführen. Die Gruppe Lesen, Ausführen.
SUID-Attribut ist gesetzt.
---------- Eine normale Datei, niemand darf irgendetwas.
-r-xr-S--- Eine normale (ausführbare) Datei, der Besitzer darf Lesen, Ausführen.
Die Gruppe darf Lesen, aber nicht ausführen. SGID-Attribut gesetzt.Die SUID/SGID/Sticky-Attribute werden an der gleichen Stelle wie das Ausführen-Recht angezeigt. Auf dem ersten Blick mag das verwirrend sein, da man ja nicht mehr sieht ob die Ausführ-Berechtigung gegeben ist. Ist die Ausführberechtigung nicht gegeben, werden Großbuchstaben angezeigt, ansonsten Kleinbuchstaben.
Besitzer und Gruppe
Spalte 3 zeigt den Besitzer, und Spalte 4 die Gruppe der Datei an.
Dateiberechtigungen ändern
Mit dem Befehl chmod können die Berechtigungen einer Datei verändert werden. Die Syntax des Befehls ist im Grunde ziemlich einfach.
chmod <Benutzerklasse><Operator><Berechtigungen> <Datei> chmod <a,u,g,o><+,-,=><r,w,x,X,s,t,u,g,o> <Datei>
Zuerst gibt man an, für welche Benutzerklasse die Berechtigungen verändert werden sollen: a für Alle, u für Besitzer, g für Gruppe, o für Andere. Wird keine Benutzerklasse angegeben, wird a (Alle) angenommen, dabei wird allerdings die umask beachtet (dazu später mehr).
Der Operator gibt an ob die Berechtigungen hinzugefügt (+), abgezogen (-) oder so gesetzt (=) werden sollen.
Die Buchstaben r,w,x bei den Berechtigungen bedeuten wie beim ls-Befehl Lesen, Schreiben, Ausführen. Die anderen Buchstaben haben folgende Bedeutung:
| Buchstabe | Bedeutung |
|---|---|
| X | Ausführberechtigung, aber nur wenn es sich um ein Verzeichnis handelt oder die Datei bereits Ausführrechte hat. |
| s | SUID- bzw. SGID-Attribut. |
| t | Sticky-Attribut. |
| u | Berechtigungen die der Besitzer bereits hat. |
| g | Berechtigungen die die Gruppe bereits hat. |
| o | Berechtigungen die die Anderen bereits haben. |
Ein paar Beispiele:
# Gibt allen (Besitzer, Gruppe, Andere) die Ausführberechtigung. chmod a+x datei # Gibt Besitzer und Gruppe Lese- und Schreibberechtigung. chmod ug=rw datei # Aktiviert das Sticky-Attribut chmod a+t verzeichnis
Ein nützlicher Parameter von chmod ist R zum rekursiven Ändern der Berechtigungen.
chmod -R a=rw verzeichnis
Es ist auch möglich die neuen Berechtigungen in oktaler Schreibweise anzugeben, ein Beispiel:
chmod 0775 <Datei>
Besitzer und Gruppe ändern
Mit dem Befehl chown kann der Besitzer einer Datei geändert werden. Der Befehl kann auch dazu benutzt werden die Gruppe zu ändern, alternativ kann dazu auch der Befehl chgrp verwendet werden. Der neue Besitzer bzw. die neue Gruppe kann entweder als Name (z.B. antu) oder als ID (z.B. 1000) angegeben werden.
# Besitzer der Datei ändern, Gruppe bleibt unverändert chown <Neuer Besitzer> <Datei> # Ändert Besitzer und Gruppe einer Datei chown <Neuer Besitzer>:<Neue Gruppe> <Datei> # Ändert Besitzer und Gruppe. Die neue Gruppe ist automatisch # die primäre Gruppe des neuen Besitzers. chown <Neuer Besitzer>: <Datei> # Ändert nur die Gruppe chown :<Neue Gruppe> <Datei> chgrp <Neue Gruppe> <Datei>
Auch chown unterstützt den Parameter R zum rekursiven Ändern des Besitzers.
Die numerische/oktale Schreibweise
Jeder Berechtigung ist auch eine Zahl zugeordnet. Das erlaubt es einem, die Berechtigungen auch in oktaler Schreibweise anzugeben. Wenn man das erstmal kann, geht das meist schneller als die übliche Schreibweise.
Keine Rechte hat den Wert 0, Ausführen 1, Schreiben 2, und Lesen 4, die Rechte die man vergeben möchte werden einfach addiert. Eine 0 würde bedeuten, das gar keine Rechte vergeben wurden, eine 7 bedeutet das alle Rechte gegeben sind. Am Ende hat man 3 Zahlen von 0-7, je eine Zahl für jede Benutzerklasse.
Ein Beispiel:
Der Besitzer darf Lesen und Schreiben: 2 (Schreiben) + 4 (Lesen) = 6
Die Gruppe darf nur Lesen: 4
Die Anderen dürfen ebenfalls nur Lesen: 4
Ergebnis: 644 (Besitzer, Gruppe, Andere)
Dazu kommen allerdings noch die besonderen Attribute, für diese gibt es noch eine Zahl vor den anderen drei Zahlen. Das Sticky-Attribut hat den Wert 1, das SGID-Attribut den Wert 2, und SUID hat den Wert 4, die 0 steht für kein Attribut.
Ein Beispiel:
0777 Kein Attribut, Besitzer/Gruppe/Andere dürfen Lesen/Schreiben/Ausführen.
4755 SUID-Attribut, Besitzer darf alles, Gruppe/Andere nur Lesen und Ausführen.
Die Standardberechtigungen
Eine neu erstellte Datei bzw. ein neu erstelltes Verzeichnis bekommt automatisch die Berechtigungen 0666 (alle dürfen Lesen/Schreiben) bzw. bei Verzeichnissen 0777 (alle dürfen Lesen, Schreiben, Ausführen), abzüglich der umask. Mit der sog. umask kann eingestellt werden welche Berechtigungen neu erstellte Dateien/Verzeichnisse standardmäßig bekommen.
Verzeichnis: 0777 (drwxrwxrwx) - 0022 (----w--w-) = 0755 (drwxr-xr-x) Datei: 0666 (-rw-rw-rw-) - 0022 (----w--w-) = 0644 (-rw-r--r--)

Die umask bestimmt, mit welchen Berechtigungen Dateien und Verzeichnisse standardmäßig angelegt werden.
umask in der Datei /etc/profile (systemweit) bzw. ~/.bashrc (nur für einen Benutzer) konfiguriert werden.
Mit dem Befehl umask <Neue umask> lässt sich die umask für die aktuelle Sitzung verändern, umask ohne Parameter zeigt die aktuelle umask an. Alternativ kann man sich die umask auch mit umask -S anzeigen lassen, dann wird sie in der Schreibweise u=rwx,g=rwx,o=rwx angezeigt.
Zugriffssteuerungslisten: ACLs
Zugriffssteuerungslisten (engl. Access Control Lists) sind eine Erweiterung zur klassischen Zugriffssteuerung unter Linux. Sie erlauben es, die Berechtigungen noch feiner einzustellen. Es kann genau festgelegt werden, welche Benutzer oder Gruppen welche Rechte haben, man ist nicht auf 3 Benutzerklassen beschränkt. Für den alltäglichen Gebrauch reicht die klassische Zugriffssteuerung jedoch meist aus. Eine guter Artikel zum Thema Zugriffssteuerung mit ACLs findet sich hier: Wie nutzt man ACLs richtig?



Dateiberechtigungen unter Linux…
In diesem Artikel werden die Dateiberechtigungen und Zugriffsrechte unter Linux erklärt. Auch spezielle Attribute und der Unterschied zwischen Dateien und Verzeichnissen werden erläutert. Auch die Programme ls, chmod, chown, und chgrp werden beschrie…