WordPress per SSH nutzen und administrieren

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.

wp-cli

 

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