Dateisystem, Benutzer und Rechte
Linux organisiert Dateien in einem gemeinsamen Verzeichnisbaum. Benutzerkonten, Gruppen und Zugriffsrechte bestimmen, wer Dateien lesen, verändern oder ausführen darf. Auf dieser Seite lernst Du die wichtigsten Verzeichnisse und die grundlegenden Berechtigungen kennen.
Der Linux-Verzeichnisbaum
Das Wurzelverzeichnis / ist der Ausgangspunkt aller absoluten Pfade. Weitere Dateisysteme, beispielsweise auf zusätzlichen Datenträgern, werden an Einhängepunkten in diesen Baum eingebunden.
| Verzeichnis | Aufgabe |
|---|---|
/bin |
Grundlegende Benutzerprogramme; auf vielen aktuellen Systemen ein symbolischer Link auf /usr/bin |
/etc |
Systemweite Konfigurationsdateien |
/home |
Üblicher Speicherort für persönliche Verzeichnisse normaler Benutzer |
/var |
Veränderliche Daten, beispielsweise Protokolle, Warteschlangen und Anwendungsdaten |
/usr |
Installierte Programme, Bibliotheken und gemeinsam genutzte Daten; kein Verzeichnis für persönliche Benutzerdateien |
/lib |
Grundlegende Bibliotheken und gegebenenfalls Kernelmodule; auf vielen Systemen ein Link auf /usr/lib |
/mnt |
Üblicher Einhängepunkt für vorübergehend manuell eingebundene Dateisysteme |
/dev |
Gerätedateien, über die Programme auf Geräte und bestimmte Kernel-Schnittstellen zugreifen |
/root |
Persönliches Verzeichnis des Administratorkontos root |
/tmp |
Temporäre Dateien; eine dauerhafte Aufbewahrung ist nicht vorgesehen |
/proc |
Virtuelles Dateisystem mit Informationen zu Prozessen und zum Kernel |
/sys |
Virtuelles Dateisystem mit Informationen und Schnittstellen zu Geräten und Kernel-Subsystemen |
/run |
Flüchtige Laufzeitdaten seit dem Systemstart |
Nicht jedes Benutzerkonto hat ein persönliches Verzeichnis unter /home. Das gilt insbesondere für Systemkonten und root. Die genaue Verzeichnisaufteilung hängt von der Distribution ab.
Benutzer, Gruppen und Eigentümer
Jede Datei und jedes Verzeichnis hat einen Eigentümer und eine zugeordnete Gruppe. Das klassische Berechtigungsmodell unterscheidet drei Klassen:
| Kürzel | Klasse | Bedeutung |
|---|---|---|
u |
Eigentümer | Benutzerkonto, dem die Datei gehört |
g |
Gruppe | Benutzer, die der zugeordneten Gruppe angehören |
o |
Andere | Benutzer, die weder Eigentümer noch Mitglied dieser Gruppe sind |
Ohne zusätzliche ACLs gilt die jeweils passende Klasse: Für den Eigentümer gelten die Eigentümerrechte, sonst gegebenenfalls die Gruppenrechte, andernfalls die Rechte für andere. Die Rechte werden nicht einfach aus allen drei Klassen addiert.
Mit id zeigst Du Deine Benutzer- und Gruppenzugehörigkeiten an. Administratorrechte werden üblicherweise gezielt über sudo verwendet. root kann viele gewöhnliche Dateirechte umgehen; zusätzliche Einschränkungen wie schreibgeschützte Dateisysteme oder Sicherheitsrichtlinien können trotzdem gelten.
Benutzer und Gruppen sind nicht mit einem eigenen rollenbasierten Berechtigungsmodell gleichzusetzen. Du kannst Gruppen jedoch organisatorisch für Aufgaben wie die gemeinsame Arbeit an Projektdateien einsetzen.
Berechtigungen anzeigen
ls -l zeigt bei einem Verzeichnis normalerweise dessen Einträge an. Mit ls -ld betrachtest Du die Eigenschaften des Verzeichnisses selbst.
Beispiel für ein Verzeichnis:
drwxr-x---
│└─┬─┘└┬┘└┬┘
│ │ │ └── Andere: keine Rechte
│ │ └───── Gruppe: lesen und durchsuchen
│ └───────── Eigentümer: lesen, schreiben und durchsuchen
└──────────── Dateityp: Verzeichnis
Das erste Zeichen beschreibt den Dateityp: d steht für ein Verzeichnis, - für eine reguläre Datei und l für einen symbolischen Link. Weitere Dateitypen sind möglich.
Danach folgen jeweils drei Positionen für Eigentümer, Gruppe und andere. r, w und x kennzeichnen gesetzte Rechte; - bedeutet, dass das jeweilige Recht fehlt.
Datei- und Verzeichnisrechte unterscheiden
| Recht | Bei einer regulären Datei | Bei einem Verzeichnis |
|---|---|---|
r – Lesen |
Dateiinhalt lesen | Namen der enthaltenen Einträge auflisten |
w – Schreiben |
Dateiinhalt verändern | Zusammen mit x Einträge anlegen, löschen oder umbenennen, vorbehaltlich weiterer Einschränkungen |
x – Ausführen/Durchsuchen |
Datei als Programm ausführen, sofern Format und weitere Voraussetzungen passen | Verzeichnis betreten und auf bekannte Eintragsnamen zugreifen |
Zum üblichen Anzeigen von Dateiinformationen innerhalb eines Verzeichnisses benötigst Du neben r auch x. Beim Zugriff über einen Pfad brauchst Du das Durchsuchungsrecht für die beteiligten übergeordneten Verzeichnisse.
Wichtig: Schreibrecht auf ein Verzeichnis erlaubt nicht automatisch, die Inhalte der darin liegenden Dateien zu verändern. Dafür zählen die Dateirechte. Umgekehrt kann eine schreibgeschützte Datei grundsätzlich gelöscht werden, wenn die erforderlichen Rechte auf dem übergeordneten Verzeichnis vorhanden sind und keine zusätzliche Einschränkung wie das Sticky-Bit entgegensteht.
Rechte mit chmod ändern
Als Eigentümer kannst Du die Rechte Deiner Dateien ändern. Für fremde Dateien benötigst Du normalerweise Administratorrechte.
| Befehl | Wirkung |
|---|---|
chmod 640 datei.txt |
Eigentümer: lesen/schreiben; Gruppe: lesen; andere: keine Rechte |
chmod 750 projekt |
Eigentümer: alle drei Rechte; Gruppe: lesen/durchsuchen; andere: keine Rechte |
chmod u+x skript.sh |
Fügt dem Eigentümer das Ausführungsrecht hinzu |
chmod g+w datei.txt |
Fügt der Gruppe das Schreibrecht hinzu |
chmod o-rwx datei.txt |
Entfernt alle drei Rechte für andere |
Bei der numerischen Schreibweise steht r für 4, w für 2 und x für 1. Die Werte werden je Klasse addiert: 6 = 4 + 2 bedeutet lesen und schreiben, 5 = 4 + 1 lesen und ausführen beziehungsweise durchsuchen.
640 und 750 sind Beispiele für unterschiedliche Freigaben, keine universellen Vorgaben. Eine normale Textdatei benötigt meist kein Ausführungsrecht. Verwende daher nicht pauschal dieselben Rechte für Dateien und Verzeichnisse.
Eigentümer und Gruppe ändern
| Befehl | Wirkung |
|---|---|
sudo chown benutzer datei.txt |
Ändert den Eigentümer |
sudo chown benutzer:gruppe datei.txt |
Ändert Eigentümer und Gruppe |
chgrp gruppe datei.txt |
Ändert die zugeordnete Gruppe, sofern Du Eigentümer und Mitglied der Zielgruppe bist |
Ersetze benutzer und gruppe durch vorhandene Namen. Für einen Gruppenwechsel außerhalb Deiner erlaubten Gruppenzugehörigkeiten sind normalerweise Administratorrechte erforderlich.
Sonderrechte und zusätzliche Sicherheitsmechanismen
| Mechanismus | Bedeutung |
|---|---|
| Setgid auf Verzeichnissen | Neue Einträge übernehmen die Gruppe des Verzeichnisses; allein dadurch erhalten sie noch keine gemeinsamen Schreibrechte |
| Sticky-Bit auf Verzeichnissen | Beschränkt das Löschen und Umbenennen fremder Einträge, beispielsweise in /tmp |
| Setuid/Setgid auf ausführbaren Dateien | Kann beim Programmstart die effektive Benutzer- beziehungsweise Gruppen-ID ändern; die Wirkung hängt vom System und den Ausführungsbedingungen ab |
| ACLs | Ergänzen Zugriffsrechte für zusätzliche Benutzer und Gruppen; Werkzeuge sind getfacl und setfacl |
| SELinux/AppArmor | Zusätzliche Sicherheitsrichtlinien, die Zugriffe unabhängig von gewöhnlichen Dateirechten einschränken können |
chmod, chown und chgrp ersetzen keine Werkzeuge zur Verwaltung von ACLs oder SELinux-/AppArmor-Richtlinien. Das Sticky-Bit erlaubt bei einem entsprechend geschützten Verzeichnis normalerweise nur dem Eigentümer des Eintrags, dem Eigentümer des Verzeichnisses oder einem ausreichend privilegierten Prozess, den Eintrag zu löschen oder umzubenennen.
Kleine Übung
Lege für die Übung ein neues Verzeichnis mit einem noch nicht verwendeten Namen an:
Die Rechte der Datei sollten nun als -rw-r----- erscheinen. Vergleiche anschließend die Eigenschaften des aktuellen Verzeichnisses mit ls -ld .. Damit erkennst Du den Unterschied zwischen den Rechten der Datei und denen ihres übergeordneten Verzeichnisses.
Weitere Informationen findest Du im GNU-Handbuch zu Dateirechten und im Filesystem Hierarchy Standard.