WordPress kann nicht nur per Weboberfläche, oder auch aus der Ferne über ein Smartphone administriert werden. Die Administration von WordPress kann auch über die Kommandozeile erfolgen und bietet sich somit als eine sichere Alternative an. WordPress per SSH nutzen und administrieren sollte Standard jedes Bloggers sein.
Wissenswertes
Circa 95% der Angriffe auf WordPress erfolgen meist auf Gewaltbasis (( Brutforce)) über die Weboberfläche mit Hilfe von Botnetzen.
XML-RPC schließe ich hier der Einfachheit ohne Erklärung mit ein.
Auf jede erdenkliche Art wird versucht WordPress so weit zu sichern, dass sich kein Fremder Zugang verschaffen kann. Sei es mit Hilfe des Hypertext-Zugriffs unter NCSA-kompatiblen Webservern, das Benutzen von Einmalpasswörtern oder die typischen administrativen Rituale im Serverraum.
Listen mit den essentiellen Sicherheitsplugins, sowie Toplisten der besten Sicherheitstips bringen immer wieder auf Webseiten gern gesehene Gäste.
Zu Recht.
Die restlichen Prozent teilen sich in die Lücken auf dem Speicherplatz im Web, den Fehlern im Code der Installation und der Fahrlässigkeit des Benutzers auf.
Was passiert aber, wenn man die Weboberfläche für die Administration nicht mehr zugängig macht, sie nur noch im Nötigsten temporär freischaltet und den Rest an einem Ort vornimmt auf den der normale Schwarzhut keinen Zugang hat?
Dies würde das Risiko um circa 95% minimieren und das hört sich für mich mehr als verlockend an.
Jeder Kommandozeilenbegabte sollte dies eigentlich mal ausprobiert haben.
Was bietet wp-cli
- Updates für Core, Plugins, Themes
- Administrative arbeiten an der Datenbank
- Erstellen, Löschen, Updates von Posts, Seiten, Benutzern
- Installation, De- und Aktivierung, Installation, Löschung, Statusausgabe etc von Plugins
- Installation, De- und Aktivierung, Installation, Löschung, Statusausgabe etc von Themes
- Multisitefähigkeit
- Exportieren von Einträgen, Einstellungen, dem ganzen Blog
- Bash und zsh completion
- etc
Vielleicht ist einigen drush, das Kommandozeilenwerkzeug von Drupal, bekannt. Genau diese Aufgabe übernimmt wp-cli unter WordPress. Eigentlich hoffe ich darauf, dass es bald in den Core von WordPress Einzug hält.
Vorrausetzungen für wp-cli
- Eine UNIX-ähnliche Umgebung (Linux, FreeBSD, AIX, HP-UX, Cygwin, OS X)
- PHP 5.3.2 oder neuer
- WordPress 3.4 oder neuer
- curl
- git
Ein Zugang auf eine Kommandozeile per SSH. Telnet würde ich nicht empfehlen.
Installation von wp-cli
Für die Installation habe ich einfach die Testumgebung von WordPress auf Basis von Debian genutzt. Dort musste zuvor noch curl und git installiert werden.
root@wptest:~# curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && mv wp-cli-phar wp-cli && chmod +x wp-cli
Ergibt die Ausgabe, dass nun mustache in Version v2.4.1, php-cli-tools v0.9.3 und wp-cli in der Version v0.11.2 installiert werden.
Der in der Ausgabe angebotene Test ergibt:
root@wptest:~# ./wp-cli --info PHP version: 5.4.32-nmm1 php.ini used: /etc/php54/cli/php.ini WP-CLI root dir: phar://wp-cli.phar WP-CLI global config: WP-CLI project config: WP-CLI version: 0.17.0
Funktionsweise
Um wp-cli zu nutzen muss man sich entweder in dem WordPresshauptberzeichnis befinden, oder dieses per Pfadangabe mitteilen. Geschieht dies nicht, ist folgende Fehlermeldung zu sehen:
Error: This does not seem to be a WordPress install. Pass --path=`path/to/wordpress` or run `wp core download` wp plugin update-all Success: Updated 0/0 plugins.
Im Hauptverzeichnis ergibt der Aufruf für das Updaten der installierten Plugins ein:
root@wptest:/var/www/wordpress# wp plugin update-all Success: Updated 0/0 plugins.
Um nun zum Beispiel ein Plugin zu installieren, hier jetpack reicht ein:
root@wptest:/var/www/wordpress# wp plugin install jetpack Installing Jetpack by WordPress.com (2.5) Downloading install package from TOLLESPLUGINIMDOWNLOAD Unpacking the package... Installing the plugin... Plugin installed successfully.
Möglich sind die Installation mit per Name, URL, oder auch als Datei.
Siehe dazu auch wp help plugin install
Um dieses zu aktivieren:
root@wptest:/var/www/wordpress# wp plugin activate jetpack Success: Plugin 'jetpack' activated.
Das gleich gilt natürlich auch für die Deaktivierung und Deinstallation:
root@wptest:/var/www/wordpress# wp plugin deactivate jetpack Success: Plugin 'jetpack' deactivated. root@wptest:/var/www/wordpress# wp plugin delete jetpack Success: Deleted 'jetpack' plugin
Um nun alle Informationen von wp-cli erhalten reicht ein wp help.
Um nun alle Informationen von wp-cli über das management von Plugins zu erhalten gibt man ein wp help plugins ein.
Gekürzte Ausgabe von wp in der Shell
NAME wp DESCRIPTION Manage WordPress through the command-line. SYNOPSIS wp SUBCOMMANDS cache Manage the object cache. cap Manage user capabilities. cli Get information about WP-CLI itself. comment Manage comments. core Download, install, update and otherwise manage WordPress proper. db Perform basic database operations. eval Execute arbitrary PHP code after loading WordPress. eval-file Load and execute a PHP file after loading WordPress. export Export content to a WXR file. help Get help on a certain command. import Import content from a WXR file. media Manage attachments. network-meta Manage network custom fields. option Manage options. plugin Manage plugins. post Manage posts. post-meta Manage post custom fields. rewrite Manage rewrite rules. role Manage user roles. scaffold Generate code for post types, taxonomies, etc. search-replace Search/replace strings in the database. shell Interactive PHP console. site Perform site-wide operations. term Manage terms. theme Manage themes. transient Manage transients. user Manage users. user-meta Manage user custom fields. GLOBAL PARAMETERS --config= Path to the wp-cli config file --path= Path to the WordPress files --- ✂ ---
Update von wp-cli
root@wptest:/var/www/wordpress# cd ~/.wp-cli root@wptest:~/.wp-cli# php composer.phar self-update You are using the latest composer version. root@wptest:~/.wp-cli# php composer.phar require 'wp-cli/wp-cli=@stable' ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files
Fazit
Wer sich ein wenig mit wp-cli beschäftigt findet ein mehr als starken Partner in der Administration von WordPressinstallationen und vor allem ein Mehrwert an Sicherheit.
Da durch eine SSH-Verbindung der Verkehr geschützt ist, kann auch von Unterwegs z.B. mit Hilfe von JuiceSSH ein Kommentar freigegeben, oder ein Update vorgenommen ohne sichere Pfade zu verlassen.
Mein Beitrag zum Thema Security in WordPress