Wer mit Linux- oder macOS-Servern arbeitet, stoesst frueher oder spaeter auf eine kryptische Fehlermeldung wie Permission denied oder auf einen Befehl wie chmod 755 deploy.sh. Dahinter steckt das Rechtesystem von Unix-Dateisystemen – ein einfaches, aber oft missverstandenes Konzept. Dieser Artikel erklaert, was die Zahlen und Buchstaben bedeuten und wie du sie richtig setzt.
Die drei Grundrechte: read, write, execute
Jede Datei und jedes Verzeichnis unter Unix kennt genau drei Arten von Zugriff:
- r (read, Lesen): Den Inhalt einer Datei lesen bzw. den Inhalt eines Verzeichnisses auflisten.
- w (write, Schreiben): Eine Datei aendern oder im Verzeichnis Dateien anlegen und loeschen.
- x (execute, Ausfuehren): Eine Datei als Programm starten bzw. in ein Verzeichnis wechseln (
cd).
Wichtig: Bei Verzeichnissen hat das x-Bit eine andere Bedeutung als bei Dateien – es erlaubt nicht das Ausfuehren, sondern das Betreten. Deshalb haben Ordner fast immer ein x-Bit gesetzt, auch wenn man sie nicht "ausfuehrt".
Drei Empfaenger: User, Group, Other
Diese drei Rechte existieren jeweils dreifach – fuer drei Klassen von Nutzern:
- User (u): der Besitzer der Datei, meist die Person, die sie angelegt hat.
- Group (g): alle Mitglieder der Gruppe, der die Datei zugeordnet ist.
- Other (o): alle uebrigen Nutzer des Systems.
In der Ausgabe von ls -l siehst du das als neunstelligen Block, zum Beispiel rwxr-xr-x. Die ersten drei Zeichen gelten fuer den Besitzer, die naechsten drei fuer die Gruppe, die letzten drei fuer alle anderen. Ein Bindestrich bedeutet "Recht nicht gesetzt".
Die oktale Notation: warum 755?
Statt der Buchstaben verwendet man oft eine dreistellige Zahl. Jede Ziffer steht fuer eine Nutzerklasse, und jedes Recht hat einen Wert: read = 4, write = 2, execute = 1. Man addiert einfach die Werte der gesetzten Rechte.
- 7 = 4 + 2 + 1 = rwx (lesen, schreiben, ausfuehren)
- 6 = 4 + 2 = rw- (lesen, schreiben)
- 5 = 4 + 1 = r-x (lesen, ausfuehren)
- 4 = 4 = r-- (nur lesen)
- 0 = --- (kein Zugriff)
So wird aus rwxr-xr-x die Zahl 755: der Besitzer darf alles (7), Gruppe und andere duerfen lesen und ausfuehren (5). Wenn du dir bei einer Umrechnung unsicher bist, nimm den chmod-Rechner – er wandelt eine oktale Zahl wie 755 sofort in die rwx-Schreibweise um und umgekehrt, ohne dass du im Kopf addieren musst.
Typische Rechte im Alltag
- 644 (rw-r--r--): Standard fuer normale Dateien – Besitzer schreibt, alle anderen lesen nur.
- 755 (rwxr-xr-x): Standard fuer Verzeichnisse und ausfuehrbare Skripte.
- 600 (rw-------): nur der Besitzer hat Zugriff – ideal fuer private Schluessel wie SSH-Keys.
- 700 (rwx------): privates Verzeichnis, das nur der Besitzer betreten darf.
Der gefuerchtete Befehl chmod 777 setzt fuer alle drei Klassen volle Rechte. Das ist fast immer ein Fehler: Auf einem Webserver oeffnet es Tueren fuer Angreifer, weil jeder Prozess die Datei aendern darf. Wer mit chmod 777 ein Problem "loest", verschiebt es meist nur.
Symbolische Schreibweise
Neben der Zahl versteht chmod auch eine symbolische Form, die gezielt einzelne Bits aendert, ohne den Rest zu ueberschreiben. chmod u+x skript.sh fuegt dem Besitzer das Ausfuehrrecht hinzu, chmod go-w datei entzieht Gruppe und anderen das Schreibrecht. Das ist praktisch, wenn du nur eine Kleinigkeit drehen willst und die bestehenden Rechte nicht kennst.
Haeufige Fehlerquellen
Ein klassischer Stolperstein: Ein Shell-Skript laesst sich nicht starten, weil das x-Bit fehlt. Hier hilft chmod +x skript.sh. Ein anderer Fall sind SSH-Keys – OpenSSH verweigert die Nutzung, wenn der private Schluessel zu offene Rechte hat. Hier sind 600 Pflicht.
Bei der Server-Konfiguration lohnt es sich, Rechte bewusst und sparsam zu vergeben. Wer tiefer in die Welt der Terminal-Befehle einsteigen will, findet in unserem Beitrag zu den Grundlagen des Linux-Terminals einen guten Einstieg. Fuer weitere kleine Helfer rund um Entwicklung und Konfiguration lohnt ein Blick in unsere Webtools-Sammlung.
Fazit
chmod ist kein Hexenwerk: Drei Rechte, drei Nutzerklassen, ein Additionssystem. Wer einmal versteht, dass 7 = rwx und 4 = read bedeutet, liest jede Zahl fluessig. Fuer schnelle Umrechnungen ist der chmod-Rechner der bequemste Weg, beide Schreibweisen sicher ineinander zu uebersetzen.