Die meistverbreitete FEHLKONFIGURATION von WordPress wird normalerweise vorgenommen, um Updates von WordPress oder Plugins automatisch vornehmen zu können. Hierzu muss der Webserver Schreibrechte auf einige Verzeichnisse unter dem Ordner wp-content erhalten. Sollte nun eine Schwachstelle in WordPress oder im Webserver gefunden werden, durch die man als unbefugter Angreifer Dateien in ein Verzeichnis schreiben kann (gab es bereits mehrfach), kann so die Kontrolle über die gesamte WordPress Installation übernommen werden. Damit hätte der Angreifer die Möglichkeit z.B. Spam oder Urheberrechtlich geschütztes Material über die Domain zu verbreiten. Wo wird sich dann wohl die Staatsanwaltschaft melden?
Schritt 1: absichern der Dateistruktur
Berechtigungen für Verzeichnisse setzen
find /pfad/zur/installation/ -type d -exec chmod 755 {} \;
Berechtigungen für Dateien setzen
find /pfad/zur/installation/ -type f -exec chmod 644 {} \;
Verzeichnissen und Dateien Besitzer und Gruppe zuweisen
chown -R benutzer:www-data /pfad/zur/installation/ chown -R www-data:www-data /pfad/zur/installation/wp-content/uploads/
Damit sind die Berechtigungen so gesetzt, dass der Besitzer der Verzeichnisse und der Dateien schreiben darf, die Gruppe und alle anderen aber nur lesend zugreifen können. Der Besitzer sollte in diesem Fall nicht der Webserver sein, sondern ein normaler Benutzer. Zum Beispiel der Benutzer, der auch per (S)FTP die Dateien hoch lädt. In meinem Fall wird der Webserver mit dem Benutzer www-data
ausgeführt, der auch der Gruppe www-data
angehört. Das ist bei vielen Installationen Standard.
Eine Besonderheit bildet hier das Unterverzeichnis wp-content/uploads
. In dieses Verzeichnis muss vom Webserver geschrieben werden können, damit man Bilder für Artikel usw. hoch laden kann. Man muss nun sicher stellen, dass in diesem Verzeichnis und in den Unterverzeichnissen durch den Webserver keine Scriptdateien ausgeführt werden können. Darum kümmern wir uns im nächsten Abschnitt.
Schritt 2: absichern des Uploads-Verzeichnises
Ich gehe davon aus, dass der Apache Webserver zur Anwendung kommt. Für andere Webserver gilt diese Konfiguration nicht. Nutzt dann bitte analog die Konfigurationsoptionen eures Webservers.
Wir editieren nun die Konfigurationsdatei, die für die Auslieferung unserer WordPress Seite verantwortlich ist.
vi /etc/apache2/sites-available/eure-konfigurationsdatei
Es wird hier wahrscheinlich schon einen Abschnitt </Directory>
geben. Findet den abschließenden Tag </Directory>
. Fügt darunter folgendes ein:
<Directory /var/www/blog/wp-content/uploads> # Uploads von .htaccess Dateien ignorieren. Wichtig! AllowOverride None SetHandler none SetHandler default-handler Options -ExecCGI php_flag engine off RemoveHandler .cgi .php .php3 .php4 .php5 .phtml .pl .py .pyc .pyo <Files *> AllowOverride None SetHandler none SetHandler default-handler Options -ExecCGI php_flag engine off RemoveHandler .cgi .php .php3 .php4 .php5 .phtml .pl .py .pyc .pyo </Files> </Directory>