Der Befehl chmod (change mode) ändert die Zugriffsrechte von Dateien und Verzeichnissen. Damit legst du fest, wer eine Datei lesen, schreiben oder ausführen darf.
Das Berechtigungsmodell
Jede Datei hat drei Berechtigungsebenen:
- Eigentümer (u) – Der Benutzer, dem die Datei gehört
- Gruppe (g) – Alle Mitglieder der zugewiesenen Gruppe
- Andere (o) – Alle übrigen Benutzer im System
Für jede Ebene gibt es drei mögliche Rechte:
| Recht | Buchstabe | Bedeutung bei Dateien | Bedeutung bei Verzeichnissen |
|---|---|---|---|
| Lesen | r | Inhalt anzeigen | Inhalt auflisten (ls) |
| Schreiben | w | Inhalt ändern | Dateien erstellen/löschen |
| Ausführen | x | Als Programm starten | In Verzeichnis wechseln (cd) |
Berechtigungen anzeigen
Mit ls -l siehst du die aktuellen Berechtigungen:
ls -l skript.sh
Die Ausgabe sieht etwa so aus:
-rwxr-xr-- 1 max entwickler 2048 Jan 15 10:30 skript.sh
Die ersten zehn Zeichen zeigen den Dateityp und die Berechtigungen:
-– Dateityp (hier: normale Datei,dwäre ein Verzeichnis)rwx– Eigentümer: lesen, schreiben, ausführenr-x– Gruppe: lesen und ausführenr--– Andere: nur lesen
Syntax des chmod-Befehls
chmod [OPTIONEN] MODUS DATEI...
OPTIONEN– Zusätzliche Einstellungen wie-Rfür rekursive ÄnderungenMODUS– Die neuen Berechtigungen (symbolisch oder numerisch)DATEI– Eine oder mehrere Dateien bzw. Verzeichnisse
Die symbolische Methode
Bei der symbolischen Methode beschreibst du Änderungen mit Buchstaben und Operatoren:
chmod [ugoa][+-=][rwx] DATEI
Benutzerklassen:
u– Eigentümer (user)g– Gruppe (group)o– Andere (others)a– Alle (all), entsprichtugo
Operatoren:
+– Recht hinzufügen-– Recht entfernen=– Rechte genau setzen (alle anderen werden entfernt)
Beispiele mit der symbolischen Methode
Ausführungsrecht für den Eigentümer hinzufügen:
chmod u+x backup.sh
Schreibrecht für Gruppe und Andere entfernen:
chmod go-w config.txt
Gruppe erhält nur Leserecht (alle anderen Gruppenrechte werden entfernt):
chmod g=r protokoll.log
Mehrere Änderungen kombinieren:
chmod u=rwx,g=rx,o=r install.sh
Dieser Befehl setzt: Eigentümer kann alles, Gruppe kann lesen und ausführen, Andere können nur lesen.
Rechte vom Eigentümer auf die Gruppe übertragen:
chmod g=u projekt.py
Die numerische Methode
Die numerische Methode verwendet Zahlen von 0 bis 7. Jede Ziffer ergibt sich aus der Addition der Rechte:
| Recht | Wert |
|---|---|
| Lesen (r) | 4 |
| Schreiben (w) | 2 |
| Ausführen (x) | 1 |
| Kein Recht | 0 |
Eine dreistellige Zahl steht für: Eigentümer, Gruppe, Andere.
Beispielrechnung für 754:
- Eigentümer: 4+2+1 = 7 (rwx)
- Gruppe: 4+0+1 = 5 (r-x)
- Andere: 4+0+0 = 4 (r–)
Häufige Berechtigungskombinationen
| Wert | Rechte | Typische Verwendung |
|---|---|---|
755 | rwxr-xr-x | Ausführbare Skripte |
644 | rw-r–r– | Normale Dateien |
700 | rwx—— | Private Verzeichnisse |
600 | rw——- | Sensible Konfigurationsdateien |
Beispiele mit der numerischen Methode
Skript ausführbar machen:
chmod 755 deploy.sh
Konfigurationsdatei nur für Eigentümer lesbar:
chmod 600 ~/.ssh/config
Standardrechte für neue Dateien setzen:
chmod 644 dokument.txt
Berechtigungen rekursiv ändern
Mit der Option -R änderst du Berechtigungen für ein Verzeichnis und alle enthaltenen Dateien und Unterverzeichnisse:
chmod -R 755 /var/www/projekt
Vorsicht: Überlege genau, bevor du Berechtigungen rekursiv änderst. Ein falscher Befehl kann viele Dateien gleichzeitig betreffen.
Dateien und Verzeichnisse unterschiedlich behandeln
Für Webprojekte ist es üblich, Verzeichnissen Ausführungsrechte zu geben (zum Betreten), Dateien aber nicht. Mit find lässt sich das trennen:
Verzeichnisse auf 755 setzen:
find /var/www/projekt -type d -exec chmod 755 {} \;
Dateien auf 644 setzen:
find /var/www/projekt -type f -exec chmod 644 {} \;
Berechtigungen von einer anderen Datei übernehmen
Mit der Option --reference übernimmst du die Berechtigungen einer Referenzdatei:
chmod --reference=vorlage.sh neues-skript.sh
Das ist praktisch, wenn du die Rechte einer bestehenden Datei exakt kopieren möchtest.
Spezielle Berechtigungen
Neben den Standard-Rechten gibt es drei spezielle Bits:
| Bit | Wert | Bedeutung |
|---|---|---|
| Setuid | 4000 | Datei wird mit Rechten des Eigentümers ausgeführt |
| Setgid | 2000 | Datei wird mit Rechten der Gruppe ausgeführt; bei Verzeichnissen erben neue Dateien die Gruppe |
| Sticky | 1000 | Bei Verzeichnissen: nur der Eigentümer kann Dateien löschen |
Sticky-Bit für ein Verzeichnis setzen:
chmod 1777 /tmp/shared
Setgid für ein Projektverzeichnis:
chmod 2775 /var/www/team-projekt
Numerische Berechtigungen anzeigen
Mit stat kannst du die Berechtigungen als Zahl anzeigen:
stat -c "%a %n" skript.sh
Ausgabe:
755 skript.sh
Symbolische Links
Symbolische Links haben immer die Berechtigungen 777. Wenn du chmod auf einen Symlink anwendest, ändert das die Berechtigungen der Zieldatei, nicht des Links selbst.
chmod 644 mein-link
Dieser Befehl ändert die Rechte der Datei, auf die mein-link zeigt.
Zusammenfassung
Der Befehl chmod ist das zentrale Werkzeug zur Verwaltung von Dateiberechtigungen auf der Kommandozeile. Die symbolische Methode eignet sich gut für einzelne Änderungen, während die numerische Methode schneller ist, wenn du alle Rechte auf einmal setzen möchtest. Mit chown und chgrp kannst du zusätzlich den Eigentümer und die Gruppe einer Datei ändern.