WordPress gehackt: die ersten Stunden
Abschalten, sichern, Passwörter tauschen, dann erst suchen. Die Reihenfolge, die den Befall wirklich beendet, und warum Aufräumen der falsche erste Schritt ist.
WordPress: Wartung und Rettung
Updates, Backups und Benutzerverwaltung ohne Klickerei im Backend. Eine Einführung in WP-CLI für alle, die WordPress betreuen.
WP-CLI ist eine Sammlung von Kommandozeilen-Werkzeugen für WordPress. Damit erledigst du auf der Konsole in Sekunden, was im Backend viele Klicks kostet: Updates einspielen, Datenbanken sichern, Texte in der ganzen Datenbank ersetzen, Benutzer anlegen, Plugins installieren.
Ich bin dazu gekommen, als ich von eigenen Servern zum Hosting bei All-Inkl gewechselt bin. In den größeren Paketen ist SSH dabei, und da ich ohnehin gern auf der Konsole arbeite, war der Schritt naheliegend.
Ein Update, das ich früher in jeder Installation einzeln durchgeklickt habe, läuft heute in einer Zeile. Bei zwanzig Seiten ist das der Unterschied zwischen einem Nachmittag und einer Kaffeepause.
Daniel Weihmann
Hier am Beispiel von All-Inkl, das läuft bei anderen Hostern mit SSH-Zugang ähnlich. Zuerst im Kundenmenü SSH aktivieren, dann per SSH-Client einloggen. Das Passwort ist dasselbe wie beim Haupt-FTP-Zugang des Accounts.

Nach dem Login liegst du im Hauptverzeichnis, etwa /www/htdocs/w1234567. Dort:
mkdir wp-cli
cd wp-cli
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
Damit du nicht jedes Mal den vollen Pfad tippen musst, legst du eine Abkürzung an. Ersetze dabei w1234567 durch deinen Accountnamen:
echo "alias wp='/www/htdocs/w1234567/wp-cli/wp-cli.phar'" >> ~/.user_bashrc
source ~/.user_bashrc
Ein kurzer Test zeigt, ob es sitzt:
wp help
wp cli update

Wechsel ins Verzeichnis der Domain und hol dir die aktuelle Version:
wp core download --locale=de_DE
Danach die Verbindung zur Datenbank einrichten. Der Befehl legt die wp-config.php an und erzeugt gleich die Sicherheitsschlüssel:
wp config create --dbname=DATENBANK --dbuser=BENUTZER --dbpass='PASSWORT' --locale=de_DE

Die Installation selbst ließe sich mit wp core install ebenfalls in einer Zeile erledigen. Ich mache diesen Schritt trotzdem im Browser, weil ich vorher noch von Hand in die wp-config.php schreibe, etwa einen eigenen Tabellen-Präfix, ein anderes Upload-Verzeichnis und ein paar Grenzwerte.

Du willst WP-CLI nutzen, aber der Server macht nicht mit?
Erzähl mir, welchen Hoster du hast. Ich richte den Zugang ein oder übernehme die Arbeiten für dich, die du lieber nicht selbst auf der Kommandozeile machen willst.
Plugins installieren und direkt aktivieren, auch mehrere hintereinander:
wp plugin install antispam-bee --activate
wp plugin list
wp plugin update --all
Alles auf einen Stand bringen, WordPress selbst, Plugins, Themes und die Datenbankstruktur:
wp core update
wp core update-db
wp plugin update --all
wp theme update --all
Ein Datenbank-Backup, bevor irgendetwas davon passiert:
wp db export sicherung-$(date +%F).sql
Und der Befehl, der die meiste Zeit spart: Texte in der gesamten Datenbank ersetzen, etwa beim Umzug von einer Testadresse auf die richtige Domain. Erst mit --dry-run ansehen, was passieren würde, dann ohne ausführen:
wp search-replace 'https://alt.example.de' 'https://www.example.de' --dry-run
wp search-replace 'https://alt.example.de' 'https://www.example.de'
Das erledigt auch serialisierte Daten korrekt, an denen ein einfaches Suchen und Ersetzen in der SQL-Datei scheitert. Genau dafür lohnt sich WP-CLI schon allein.
WP-CLI fragt nicht nach. Was du eintippst, passiert sofort und in der ganzen Datenbank. Deshalb kommt vor jedem verändernden Befehl ein Export.
Daniel Weihmann
Ein Fall, der öfter vorkommt, als man denkt: Das Administratorpasswort ist weg, die Wiederherstellung per Mail funktioniert nicht, weil der Mailversand klemmt. Über die Konsole ist das in zwei Zeilen erledigt:
wp user list
wp user update 1 --user_pass='NeuesPasswort'
Ähnlich hilfreich, wenn die Seite nach einem Update weiß bleibt: Alle Plugins auf einmal deaktivieren, dann einzeln wieder einschalten, bis der Übeltäter feststeht.
wp plugin deactivate --all
wp plugin activate NAME
WP-CLI braucht SSH-Zugang. Bei einfachen Hostingpaketen gibt es den nicht, dann bleibt nur das Backend. Außerdem läuft nicht bei jedem Anbieter dieselbe PHP-Fassung auf der Konsole wie im Web, was zu Fehlermeldungen führen kann, die im Browser nie auftreten. Wenn dir das begegnet: Der Hoster stellt meist eine eigene Aufrufvariante für die richtige Version bereit.
Nachschlagen kannst du alles unter wp-cli.org und in der Befehlsübersicht von WordPress.
Wenn du das alles lieber jemanden machen lässt, der es täglich tut: Ich übernehme bestehende Installationen und halte sie sauber, siehe WordPress: Wartung und Rettung.
WordPress: Wartung und Rettung
Abschalten, sichern, Passwörter tauschen, dann erst suchen. Die Reihenfolge, die den Befall wirklich beendet, und warum Aufräumen der falsche erste Schritt ist.
WordPress erzeugt eine robots.txt selbst, und die ist selten die, die du willst. Wie du sie richtig setzt, ohne dich auszusperren.
Von den Grundeinstellungen bis zu Snippets: was an einer WordPress-Seite tatsächlich über die Auffindbarkeit entscheidet.
Wenn du das nicht selbst umsetzen willst, übernehme ich es. Ein Telefonat reicht, um zu klären, ob sich das für dich lohnt.