Jedes „Permission denied“ hat eine richtige und eine gefährliche Antwort. Die gefährliche ist 777, sie funktioniert immer, und sie heißt: Jeder Prozess auf dem Server kann Ihren Code überschreiben.

Wofür die drei Ziffern stehen

Eigentümer, Gruppe, alle anderen. Lesen ist 4, Schreiben 2, Ausführen 1, und sie addieren sich: 6 ist Lesen und Schreiben, 7 ist alle drei.

  • 644 bei einer Datei — der Eigentümer schreibt, alle lesen.
  • 755 bei einem Verzeichnis — der Eigentümer schreibt, alle dürfen hinein und auflisten.
  • 600 bei einem Geheimnis — der Eigentümer, und sonst überhaupt niemand.

Was eine Website braucht

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 600 wp-config.php

Verzeichnisse brauchen das Execute-Recht, um betreten zu werden; Dateien brauchen es gar nicht. Eine PHP-Datei mit 755 ist nicht lauffähiger — der Webserver liest sie, er führt sie nicht als Programm aus.

Der Eigentümer ist meist das Falsche

Oft liegt der Fehler nicht bei den Rechten, sondern beim Eigentümer. Läuft PHP als ein Benutzer und gehören die Dateien einem anderen, hilft kein Modus unterhalb von 777 — und die richtige Lösung ist der Eigentümer.

ps aux | grep php-fpm | head -2
chown -R youruser:youruser /path/to/site
777 auf einem Upload-Verzeichnis plus ein Server, der dort PHP ausführt: So werden Websites übernommen — jemand lädt eine Datei hoch und bittet den Server dann, sie auszuführen. Uploads dürfen niemals ausführbar sein.

Uploads am Ausführen hindern

location ~* /uploads/.*\.php$ {
    deny all;
}
Besteht ein Plugin auf 777, um zu funktionieren, ist das eine Aussage über das Plugin. Geben Sie ihm 775 mit der richtigen Gruppe und sprechen Sie den Autor darauf an.