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_keysmit 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, nichtchmod.
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?
- Prüfen, wer Besitzer ist und unter welchem Benutzer PHP läuft:
ls -laundps -o user= -p $(pgrep -f php-fpm | head -1). - 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. - Braucht eine zweite Kennung Schreibzugriff, beide in eine gemeinsame Gruppe aufnehmen und 664 bzw. 775 vergeben, für Team-Verzeichnisse mit setgid (2775).
- 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
| Wert | Symbolisch | Einsatzzweck |
|---|---|---|
| 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. |
| 700 | drwx------ | Private Verzeichnisse und Skripte, etwa ~/.ssh oder ein Backup-Skript. |
| 750 | drwxr-x--- | Verzeichnis, das nur Besitzer und Gruppe betreten dürfen. In Plesk für httpdocs (Gruppe psaserv). |
| 755 | drwxr-xr-x | Standard für Verzeichnisse und ausführbare Programme. |
| 775 | drwxrwxr-x | Gemeinsames Verzeichnis für eine Gruppe, in das alle Mitglieder schreiben. |
| 777 | drwxrwxrwx | Alle dürfen alles. Auf Webservern praktisch nie richtig, siehe unten. |
| 1777 | drwxrwxrwt | Gemeinsames Temp-Verzeichnis wie /tmp: alle legen an, löschen nur Eigenes. |
| 2775 | drwxrwsr-x | Team-Verzeichnis: neue Dateien erben die Gruppe des Verzeichnisses. |
| 4755 | -rwsr-xr-x | Programm 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 Verzeichnishttpdocsselbst hat die Gruppepsaservund die Rechte 750, damit nginx und Apache es betreten können. Ändere das nicht perchown -Rauf 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.phpPlesk 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.