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
Uploads am Ausführen hindern
location ~* /uploads/.*\.php$ {
deny all;
}
