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:

RechtBuchstabeBedeutung bei DateienBedeutung bei Verzeichnissen
LesenrInhalt anzeigenInhalt auflisten (ls)
SchreibenwInhalt ändernDateien erstellen/löschen
AusführenxAls Programm startenIn 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, d wäre ein Verzeichnis)
  • rwx – Eigentümer: lesen, schreiben, ausführen
  • r-x – Gruppe: lesen und ausführen
  • r-- – Andere: nur lesen

Syntax des chmod-Befehls

chmod [OPTIONEN] MODUS DATEI...
  • OPTIONEN – Zusätzliche Einstellungen wie -R für rekursive Änderungen
  • MODUS – 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), entspricht ugo

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:

RechtWert
Lesen (r)4
Schreiben (w)2
Ausführen (x)1
Kein Recht0

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

WertRechteTypische Verwendung
755rwxr-xr-xAusführbare Skripte
644rw-r–r–Normale Dateien
700rwx——Private Verzeichnisse
600rw——-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:

BitWertBedeutung
Setuid4000Datei wird mit Rechten des Eigentümers ausgeführt
Setgid2000Datei wird mit Rechten der Gruppe ausgeführt; bei Verzeichnissen erben neue Dateien die Gruppe
Sticky1000Bei 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 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.

Verwandte Artikel