Der Zugriff auf Dateien und Verzeichnisse wird über ein Berechtigungssystem geregelt. Jede Datei gehört einem Besitzer und einer Gruppe, und für drei Benutzerklassen werden separate Zugriffsrechte vergeben.
Das Berechtigungsmodell
Jede Datei hat Berechtigungen für drei Benutzerklassen:
- Besitzer (u) – Der Benutzer, dem die Datei gehört
- Gruppe (g) – Alle Mitglieder der zugewiesenen Gruppe
- Andere (o) – Alle übrigen Benutzer
Für jede Klasse gibt es drei Berechtigungstypen:
- Lesen (r) – Dateiinhalt anzeigen oder Verzeichnisinhalt auflisten
- Schreiben (w) – Datei ändern oder Dateien im Verzeichnis erstellen/löschen
- Ausführen (x) – Datei als Programm starten oder in Verzeichnis wechseln
Berechtigungen anzeigen
Mit ls -l siehst du die Berechtigungen einer Datei:
ls -l datei.txt
Die Ausgabe sieht so aus:
-rw-r--r-- 1 dominic users 4096 Jan 16 10:00 datei.txt
Die ersten zehn Zeichen zeigen den Dateityp und die Berechtigungen:
-rw-r--r--
│└┬┘└┬┘└┬┘
│ │ │ └── Andere: nur lesen (r--)
│ │ └───── Gruppe: nur lesen (r--)
│ └──────── Besitzer: lesen und schreiben (rw-)
└────────── Dateityp: normale Datei (-)
Das erste Zeichen gibt den Dateityp an: - für normale Dateien, d für Verzeichnisse, l für symbolische Links.
Berechtigungen bei Dateien vs. Verzeichnissen
Die gleichen Buchstaben haben bei Dateien und Verzeichnissen unterschiedliche Bedeutungen:
| Berechtigung | Bei Dateien | Bei Verzeichnissen |
|---|---|---|
r (Lesen) | Inhalt anzeigen | Dateien auflisten mit ls |
w (Schreiben) | Inhalt ändern | Dateien erstellen und löschen |
x (Ausführen) | Als Programm starten | Mit cd hineinwechseln |
Berechtigungen ändern mit chmod
Der Befehl chmod ändert Dateiberechtigungen. Nur der Besitzer oder root kann die Berechtigungen einer Datei ändern.
chmod [OPTIONEN] MODUS DATEI...
Du kannst Berechtigungen auf zwei Arten angeben: symbolisch oder numerisch.
Symbolische Methode
Die symbolische Schreibweise verwendet Buchstaben und Operatoren:
chmod [ugoa][+-=][rwx] datei
u,g,o,a– Benutzerklasse (user, group, others, all)+,-,=– Berechtigung hinzufügen, entfernen oder setzenr,w,x– Lesen, Schreiben, Ausführen
Beispiele:
Ausführungsrecht für die Gruppe setzen:
chmod g+x script.sh
Schreibrecht für alle entfernen:
chmod a-w datei.txt
Besitzer bekommt alle Rechte, Gruppe nur Lesen, Andere nichts:
chmod u=rwx,g=r,o= datei.txt
Rekursiv Ausführungsrecht für Andere entfernen:
chmod -R o-x verzeichnis/
Numerische Methode
Die numerische Schreibweise verwendet eine dreistellige Zahl. Jede Ziffer steht für eine Benutzerklasse (Besitzer, Gruppe, Andere) und ist die Summe der Berechtigungswerte:
| Berechtigung | Wert |
|---|---|
| Lesen (r) | 4 |
| Schreiben (w) | 2 |
| Ausführen (x) | 1 |
Berechnung:
rwx= 4 + 2 + 1 = 7rw-= 4 + 2 + 0 = 6r-x= 4 + 0 + 1 = 5r--= 4 + 0 + 0 = 4
Häufige Kombinationen:
chmod 755 script.sh # rwxr-xr-x – Besitzer alles, Rest lesen/ausführen
chmod 644 datei.txt # rw-r--r-- – Besitzer lesen/schreiben, Rest nur lesen
chmod 700 privat/ # rwx------ – Nur Besitzer hat Zugriff
Numerische Berechtigungen anzeigen
Mit stat siehst du die Berechtigungen in numerischer Form:
stat -c "%a %n" datei.txt
Ausgabe:
644 datei.txt
Sonderberechtigungen
Neben den Standardrechten gibt es drei Sonderberechtigungen, die mit einer vierten Ziffer am Anfang gesetzt werden:
| Bit | Wert | Bedeutung |
|---|---|---|
| setuid | 4 | Programm läuft mit Rechten des Besitzers |
| setgid | 2 | Programm läuft mit Rechten der Gruppe; neue Dateien in Verzeichnissen erben die Gruppe |
| Sticky | 1 | In Verzeichnissen kann nur der Besitzer seine Dateien löschen |
Beispiel: Das Sticky-Bit wird bei /tmp verwendet, damit Benutzer nur ihre eigenen Dateien löschen können:
chmod 1777 /tmp
Die Sonderbits erscheinen in der ls -l Ausgabe als s oder t anstelle von x.
Besitzer und Gruppe ändern
Mit chown änderst du den Besitzer einer Datei:
chown neuer_besitzer datei.txt
chown neuer_besitzer:neue_gruppe datei.txt
Mit chgrp änderst du nur die Gruppe:
chgrp neue_gruppe datei.txt
Zusammenfassung
Dateiberechtigungen bestimmen, wer Dateien lesen, schreiben oder ausführen darf. Mit ls -l zeigst du die aktuellen Berechtigungen an, mit chmod änderst du sie. Die numerische Schreibweise wie chmod 755 ist kompakt, die symbolische wie chmod u+x ist lesbarer.