↑ ↓ auswählen, Enter öffnen, Esc schließen

chmod-Rechner

Rechte anklicken oder Oktalwert eingeben. Der Rechner zeigt die symbolische Schreibweise, erklärt jede Stelle und liefert die passenden Befehle.

Rechte berechnen

Schnellwahl

3 oder 4 Stellen, jede von 0 bis 7.

-rwxr-xr-x
Rechte nach Benutzerklasse
WerLesen (4)Schreiben (2)Ausführen (1)Summe
Besitzer7
Gruppe5
Andere5
Sonderbits

Unkritisch
Andere Benutzer können höchstens lesen oder ausführen, aber nichts verändern.

  • 7 Besitzer: lesen, schreiben und ausführen
  • 5 Gruppe: lesen und ausführen
  • 5 Andere: lesen und ausführen
Einzeln, oktal
chmod 755 datei
Einzeln, symbolisch
chmod u=rwx,g=rx,o=rx datei
Rekursiv nur Verzeichnisse
find /var/www/vhosts/example.de/httpdocs -type d -exec chmod 755 {} +
Rekursiv nur Dateien
find /var/www/vhosts/example.de/httpdocs -type f -exec chmod 644 {} +

Die rekursiven Befehle wenden den gewählten Wert nur auf Verzeichnisse bzw. nur auf Dateien an. Typisch ist 755 für Verzeichnisse und 644 für Dateien. Die URL merkt sich den Wert (zum Beispiel #755), du kannst sie also direkt weitergeben.

Was bedeutet chmod 777?

chmod 777 gibt jedem Benutzer auf dem System das Recht, eine Datei zu lesen, zu verändern und auszuführen. Bei einem Verzeichnis darf jeder Dateien darin anlegen, umbenennen und löschen, auch fremde. Die drei Siebenen stehen für Besitzer, Gruppe und alle anderen, und 7 ist die Summe aus Lesen (4), Schreiben (2) und Ausführen (1).

Der Befehl taucht in Foren oft als schnelle Lösung für „Permission denied“ auf. Er beseitigt die Fehlermeldung tatsächlich, weil danach niemand mehr ausgesperrt ist. Genau das ist das Problem:

  • Jeder Prozess darf schreiben. Auf einem Server mit mehreren Websites kann ein gehacktes WordPress im Nachbar-Abo Dateien in deinem Verzeichnis ablegen oder verändern.
  • Eingeschleuster Code bleibt unbemerkt. Uploads, Caches und Plugin-Verzeichnisse mit 777 sind ein beliebter Ablageort für Webshells.
  • Manche Software verweigert den Dienst. SSH ignoriert einen authorized_keys mit zu offenen Rechten, suPHP und einige PHP-Handler brechen bei world-writable Dateien ab.
  • Die eigentliche Ursache bleibt. Meist stimmt der Besitzer nicht, zum Beispiel nach einem Upload als root. Das behebt chown, nicht chmod.

Ehrliche Einordnung: 777 ist auf einem Webserver praktisch nie die richtige Antwort. Die einzige gängige Ausnahme sind gemeinsame Temp-Verzeichnisse wie /tmp, und die haben zusätzlich das Sticky-Bit (1777), damit niemand fremde Dateien löschen kann.

Was stattdessen?

  1. Prüfen, wer Besitzer ist und unter welchem Benutzer PHP läuft: ls -la und ps -o user= -p $(pgrep -f php-fpm | head -1).
  2. Besitzer korrigieren: chown benutzer:gruppe datei. Läuft PHP als Besitzer der Dateien (in Plesk mit PHP-FPM der Standard), reicht 644 bzw. 755 auch für Uploads.
  3. Braucht eine zweite Kennung Schreibzugriff, beide in eine gemeinsame Gruppe aufnehmen und 664 bzw. 775 vergeben, für Team-Verzeichnisse mit setgid (2775).
  4. Für einzelne zusätzliche Benutzer gezielt ACLs setzen: setfacl -m u:www-data:rx verzeichnis.

So funktionieren die Zahlen

Jede Stelle des Oktalwerts ist die Summe aus 4 (lesen), 2 (schreiben) und 1 (ausführen). Die drei Stellen gelten von links nach rechts für Besitzer, Gruppe und Andere. 6 bedeutet also lesen und schreiben, 5 lesen und ausführen.

Bei Verzeichnissen haben die Rechte eine andere Bedeutung: Lesen erlaubt das Auflisten des Inhalts, Schreiben das Anlegen, Umbenennen und Löschen von Dateien darin, Ausführen das Betreten (also cd und der Zugriff auf Dateien darin). Ein Verzeichnis ohne x ist darum praktisch gesperrt, auch wenn r gesetzt ist.

Eine optionale vierte Stelle vorne steht für die Sonderbits: 4 setuid (Programm läuft als Besitzer), 2 setgid (bei Verzeichnissen: neue Dateien erben die Gruppe), 1 Sticky-Bit (bei Verzeichnissen: nur der Besitzer einer Datei darf sie löschen). In der symbolischen Darstellung erscheinen sie als s bzw. t an der Stelle des x, als Großbuchstabe S oder T, wenn das x selbst fehlt.

Gängige Werte und wofür man sie braucht

WertSymbolischEinsatzzweck
600-rw-------Private Dateien: SSH-Schlüssel, .my.cnf, wp-config.php (wenn PHP als Besitzer läuft).
640-rw-r-----Konfiguration, die eine Gruppe lesen muss, etwa wp-config.php mit Webserver-Gruppe oder Logdateien.
644-rw-r--r--Standard für Dateien im Webspace: HTML, CSS, Bilder, PHP-Dateien.
664-rw-rw-r--Dateien, die mehrere Benutzer derselben Gruppe bearbeiten.
700drwx------Private Verzeichnisse und Skripte, etwa ~/.ssh oder ein Backup-Skript.
750drwxr-x---Verzeichnis, das nur Besitzer und Gruppe betreten dürfen. In Plesk für httpdocs (Gruppe psaserv).
755drwxr-xr-xStandard für Verzeichnisse und ausführbare Programme.
775drwxrwxr-xGemeinsames Verzeichnis für eine Gruppe, in das alle Mitglieder schreiben.
777drwxrwxrwxAlle dürfen alles. Auf Webservern praktisch nie richtig, siehe unten.
1777drwxrwxrwtGemeinsames Temp-Verzeichnis wie /tmp: alle legen an, löschen nur Eigenes.
2775drwxrwsr-xTeam-Verzeichnis: neue Dateien erben die Gruppe des Verzeichnisses.
4755-rwsr-xr-xProgramm läuft mit den Rechten des Besitzers, etwa /usr/bin/passwd. Nicht für eigene Skripte.

Empfehlungen für WordPress und Plesk

  • Verzeichnisse 755, Dateien 644. Das reicht für WordPress inklusive Updates und Uploads, solange PHP unter dem Besitzer der Dateien läuft.
  • wp-config.php 600 oder 640. 600, wenn PHP als Besitzer läuft (Plesk mit PHP-FPM). 640, wenn ein Webserver-Prozess über die Gruppe lesen muss.
  • Besitzer in Plesk: Dateien und Unterverzeichnisse gehören dem Systembenutzer des Abonnements mit der Gruppe psacln. Das Verzeichnis httpdocs selbst hat die Gruppe psaserv und die Rechte 750, damit nginx und Apache es betreten können. Ändere das nicht per chown -R auf dem ganzen Abo.
  • Kein 777 für wp-content/uploads oder Caches. Wenn WordPress dort nicht schreiben kann, stimmt fast immer der Besitzer nicht.

Rechte im WordPress-Verzeichnis eines Plesk-Abos zurücksetzen (Pfad und Benutzer anpassen):

find /var/www/vhosts/example.de/httpdocs -mindepth 1 -exec chown abo-benutzer:psacln {} +
find /var/www/vhosts/example.de/httpdocs -type d -exec chmod 755 {} +
find /var/www/vhosts/example.de/httpdocs -type f -exec chmod 644 {} +
chmod 600 /var/www/vhosts/example.de/httpdocs/wp-config.php

Plesk bringt außerdem eine eigene Reparatur mit, die Besitzer und Rechte eines Abos auf die Plesk-Vorgaben zurücksetzt: plesk repair fs example.de. Sie fragt vor jeder Änderung nach.

Als Lesezeichen speichern: Mit Strg + D (Mac: ⌘ + D) ist der chmod-Rechner beim nächsten „Permission denied“ einen Klick entfernt.

Erst lesen, dann ausführen.

Die Befehle auf myline.de greifen direkt in Server, Dateien und Datenbanken ein. Ein falscher Pfad oder Platzhalter kann Daten unwiderruflich löschen oder einen Server unerreichbar machen.

  • Alle Befehle werden ohne Gewähr bereitgestellt und sind nicht auf jedem System getestet.
  • Vor dem Ausführen verstehen, was ein Befehl tut, und jeden Platzhalter prüfen.
  • Vorher ein Backup anlegen und möglichst zuerst auf einem Testsystem ausprobieren.
  • Die Ausführung erfolgt auf eigene Verantwortung. Eine Haftung für Schäden ist ausgeschlossen, soweit gesetzlich zulässig.