Kategorien
Backup Content Management Systeme

Backups und Updates in Joomla

Neulich war es wieder soweit. Ein Update für Joomla erschien. Es war ein Sicherheitsupdate für die Version 3.4.x. Laut Ankünding des Projekts hatten 460 Freiwillige mehr als 260 Fehler im Programm beseitigt, einige davon sicherheitsrelevant. Das ist lobenswert und gut und jeder der eine Joomla Site betreibt, sollte dieses Update so schnell wie möglich einspielen.

Ein paar Tage später erschien wieder eine Version (3.4.3). Der Grund dafür war sehr einfach. Das Joomla Team hatte in bester Absicht eine Programmierklasse umbenannt. Diese Änderung führte in seltenen Fällen und in bestimmten Konfigurationen zu Problemen, die im schlimmsten Fall zum völligen Ausfall der Site führten.

Auch wenn das für die Betroffenen im Einzelfall unter Umständen hart ist, sollte jedem Website Betreiber klar sein, dass so etwas mal passieren kann. Joomla ist da kein Einzelfall. Vermutlich hatte jedes grössere Projekt schon mal so einen Fall.

Sie könnten sich gegen diese Art von Fehlern vielleicht schützen, wenn Sie ein beispielsweise ein gespiegeltes Testsystem betreiben, auf dem Sie das Update ausprobieren können oder einfach ein paar Tage abwarten.
Das führt allerdings dazu, dass Ihre produktive Joomla Site weiterhin unsicher UND online bleibt und somit anfällig für Hacks ist.

Beim CMS Drupal gab es in diesem Zusammenhang den Fall #drupalgeddon, bei dem die Zeit zwischen der Ankündigung und dem Einspielen des Updates eine entscheidende Rolle spielte, bei TYPO3 gab es Infektionen hunderter von Seiten ohne dass die Ursache wirklich bekannt war. Es gäbe viele weitere Beispiele.
Am Ende steht die Erkenntis: Spielen Sie ein Update ein, nachdem Sie davon erfahren haben!

Jedes CMS weist Sie vor dem Updatevorgang daraufhin, doch bitte ein Update von Datenbank und Dateien vorzunehmen. Im Artikel Ein Backup mit Duply hatte ich das Thema schon mal als allgemeingültige Lösung angesprochen, stelle aber fest, dass viele CMS Betreiber das Thema Backup & Restore recht stiefmütterlich behandeln.

Backups und Updates in Joomla

Daher heute ein Artikel zum Thema Joomla mit den Antworten auf die Fragen

  1. Woher weiss ich, dass es ein Sicherheits-Update gibt?
  2. Wie mache ich ein Backup?
  3. Wie spiele ich das Update ein?
  4. Und für den Krisenfall: Wie stelle ich die alte Version wieder her

1. Woher weiss ich, dass es ein Joomla Sicherheits-Update gibt?

Wenn Sie regelmässig im Administrationsbereich Ihrer Joomla Site arbeiten, kennen Sie sicherlich diese Meldung. Sie erscheint, wenn es ein Update gibt in roter Schrift.

Joomla - Hinweis auf Updates im Administrationsbereich
Joomla – Hinweis auf Updates im Administrationsbereich
Im linken Bereich sehen Sie Hinweise zu Joomla Core Updates, im rechten Bereich Erweiterungsaktualisierungen.

Wenn Sie nicht regelmässig im Administrationsbereich sind, können Sie die Website joomla.org/announcements.html als Feed abonnieren (Beispielsweise im Selfoss Reader) oder dem Twitter Nutzer @joomla folgen.

Sie können in der Web-Oberfläche von Twitter einen Schalter setzen, dass Sie eine Nachricht auf Ihr Smartphone bekommen, wenn der Joomla Twitter etwas tweetet (In der Twitter App gibt es auch so einen Schalter).

Joomla Twitter
Joomla Twitter

2. Wie mache ich ein Backup?

Sie wissen, dass es ein Update gibt und müssen ein Backup machen.
Auch hier gibt es grundsätzlich drei Möglichkeiten:

  • Sie vertrauen auf das Backup Ihres Hosting Providers (NOVATREND)
  • Sie kümmern sich auf Ihrem Server selbst darum (beispielsweise Duply)
  • Sie haben eine individuelle Lösung pro Website

Ich betrachte hier heute den letzten Punkt und empfehle Ihnen die Erweiterung Akeeba Backup.
Installieren Sie die freie Erweiterung Akeeba Backup Core in Ihrem Joomla. Ich lasse die Umgebungssprache auf English, da ich nur die Basisfunktionen zeigen möchte.

Akeeba Backup - Installation
Akeeba Backup – Installation
Nach der Installation müssen Sie den Configuration Wizard ausführen.
Akeeba Backup - Konfiguration
Akeeba Backup – Konfiguration
Danach können Sie Updates erstellen indem Sie einfach den Button Backup Now klicken.
Akeeba Backup - Backup Now
Akeeba Backup – Backup Now
Sie werden nach einem Namen für das Backup gefragt und können einen optionalen Kommentar hinzufügen. Klicken Sie erneut den Button Backup Now.
Akeeba Backup - Update Beschreibung
Akeeba Backup – Update Beschreibung
Unter Manage Backups können Sie Ihre Backups verwalten.
Akeeba Backup - Manage Backups
Akeeba Backup – Manage Backups
Das ist die absolute Konfigurationsbasis, die notwendig für ein Backup ist.
Die Erweiterung kann natürlich noch viel mehr, lesen Sie dazu den Akeeba Backup Quickstart Guide.

3. Wie spiele ich die Joomla Updates ein?

Das Joomla Update führen Sie aus, indem Sie im Administrationsbereich den Button Jetzt aktualisieren in der System Nachricht klicken.

Joomla - Hinweis auf Updates im Administrationsbereich
Joomla – Hinweis auf Updates im Administrationsbereich
Sie landen auf einer Aktualisierungsseite, die darauf hinweist:

Vor der Joomla!-Aktualisierung ist zu prüfen, ob auch die zusätzlich installierten Erweiterungen mit der neuen Joomla!-Version kompatibel sind.

Nehmen Sie diesen Hinweis ernst und schauen auf den Projektseiten der installierten Komponenten nach, ob Sie Informationen zur Kompatibilität und zum Update Prozess finden.
In meinem Fall ist es leicht. Ich habe keine Zusatzkomponenten installiert und klicke auf den Button Aktualisierung installieren.

Joomla Aktualisierung
Joomla Aktualisierung
Joomla aktualisiert sich automatisch und das Update ist eingespielt.
Besuchen Sie Ihre Website und testen ob alles wie gewohnt funktioniert.
Wenn ja, herzlichen Glückwunsch.

4. Wie stelle ich die alte Version im Krisenfall wieder her?

Wenn Sie nur noch einen weissen Bildschirm statt Ihrer Website sehen oder Probleme bei bestimmten Erweiterungen haben, können Sie Ihr Backup wieder einspielen. Es gibt unterschiedliche Methoden dazu.

Ich möchte hier keine weitere Restore Anleitung beschreiben, da solche Anleitungen schnell veralten.
akeebabackup betreibt einen YouTube Channel und dort finden Sie die wirklich gute Restore Anleitung, die Sie auf einem Root-Server hervorragend nutzen können, vorgeführt von Brian Teeman.

Es gibt auch einen kompletten Videokurs zu diesem Thema.

Der Restore Prozess ist zugegebenermassen nicht besonders benutzerfreundlich, aber das gesamte Thema ist natürlich auch sehr komplex.
Sie sind allerdings in der Lage, auch ohne Joomla Spezial- oder sonstige Programmierkenntnisse, eine komplette Joomla Site aus einem Backup wiederherzustellen.

Fazit

Ja, es macht Arbeit; Ja, es geht nicht automatisch.
Aber: Wenn Sie ein echtes Problem mit einer Joomla Website haben, so werden Sie das Programm akeebabackup schätzen!

Und es gibt noch ein kleines Goodie:
Wenn Sie den Wiederherstellungsprozess einmal verstanden haben, können Sie ihn auch sehr gut zum Transfer von Joomla Sites auf andere Server nutzen und damit viel Zeit sparen ;).


tl;dr: Spielen Sie Updates ein und denken Sie VORHER an Backups.

Kategorien
Backup Server Verschlüsselung

Ein Backup mit Duply

Backup ist so ein Thema, dass man in seiner Vollständigkeit versteht, wenn man kein Backup hat oder es nicht möglich ist, das vorhandene Backup wiederherzustellen. Es gibt zahlreiche Lösungsansätze fuer das Backup/Restore Szenario.

Beispielsweise gibt es für die meisten Content Management Systeme Erweiterungen, die ein Datei- und ein Datenbank Backup auf dem Root-Server erzeugen und danach auf ein Ziel Ihrer Wahl übertragen (z.B. Drupal Backup & Migrate oder WordPress UpdraftPlus Backup and Restoration). Bis zu einem gewissen Umfang (der schwer errechenbar ist, weil er von so vielen Parametern abhängt) klappt das auch gut und zuverlässig.

Das Backup der Datenbank (Dump) funktioniert meist reibungsloser als das der Dateien. Datenbanken sind komprimiert erheblich kleiner als tausende von PDF oder JPG-Dateien, daher kann es bei den Dateien ab einem gewissen Umfang kompliziert werden. Sie werden normalerweise komprimiert und dann als zip oder tar.gz Archiv auf das Ziel übertragen. Alle paar Tage wird ein Vollbackup erzeugt und dazwischen inkrementelle Backups. Die Komprimiererei bei einem Voll-Backup kann auch einen Root-Server schnell an den Rand der Leistungsfähigkeit bringen und für locker mal 30 Minuten beschäftigen. Abhängig von der sonstigen Konfiguration des Systems kann das bedeuten, das manche Services in dieser Zeit sehr langsam laufen. Was aber viel wichtiger ist: Die Backups sind normalerweise nicht verschlüsselt. Genau an dieser Stelle kommt Duply ins Spiel.

Was ist Duply?

Zunächst gibt es das Backup Programm Duplicity. Duplicity ist ein

Encrypted bandwidth-efficient backup using the rsync algorithm

Das hört sich gut an. Es nutzt den rsync Algorithmus, erstellt inkrementelle Backups und das auch noch verschluesselt. Leider ist es etwas aufwendig zu konfigurieren, so dass die Zeitschrift Ct im Jahr 2006 das Script ftplicity schrieb und die Bedienung damit erleichterte (Ct – Hinter Schloss und Siegel).

Aus ftplicity entwickelte sich Duply, ein in der Programmiersprache Python geschriebenes Skript, das die Nutzung von Duplicity vereinfacht.

Beispiel

Nehmen wir an, sie haben viele virtuelle Server auf Ihrem Root-Server. Jeder soll ein eigenes Datei-Backup des Dokumentenverzeichnisses erhalten. Das Backup soll auf einen FTP Server übertragen werden und verschluesselt sein. Wir haben die FTP Zugangsdaten fuer den Ziel-Server und den Pfad des zu sichernden Verzeichnisses auf unserem Root-Server. Es soll alle 7 Tage ein Vollbackup erstellt werden und dazwischen 7 inkrementelle Backups. Eine Wiederherstellung der Dateien in einem anderen Verzeichnis soll möglich sein. Auf dem Root-Server läuft Ubuntu 14.04.

Installation

Wir benötigen zunächst das Paket Duplicity und einen FTPclient (ncFTP), der dann den eigentlich Dateitransfer übernimmt.

apt-get install duplicity ncftp

Erstes Backup

Sie können nun bereits ein Backup erstellen und per FTP übertragen. Den folgenden Befehl müssen Sie nur mit Ihren Zugangsdaten füllen und abschicken.

FTP_PASSWORD=[FTP-Passwort] duplicity [zu-sicherndes-Verzeichnis] ftp://[FTP-User]@[FTP-Host]/[Verzeichnis]

Nach dem Absenden werden Sie nach einem Passwort gefragt. Geben Sie ein beliebiges Passwort ein und merken es sich, Sie benötigen es bei der Wiederherstellung der Daten wieder.

root@server1:~# FTP_PASSWORD=*** duplicity /var/www/piwik.serverblogger.ch ftp://****@****/****
NcFTP version is 3.2.5
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase:
Retype passphrase to confirm:
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1420383883.70 (Sun Jan  4 16:04:43 2015)
EndTime 1420383889.16 (Sun Jan  4 16:04:49 2015)
ElapsedTime 5.46 (5.46 seconds)
SourceFiles 7119
SourceFileSize 41831081 (39.9 MB)
NewFiles 7119
NewFileSize 41831081 (39.9 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 7119
RawDeltaSize 38427305 (36.6 MB)
TotalDestinationSizeChange 11915629 (11.4 MB)
Errors 0
-------------------------------------------------

root@server1:~#

Herzlichen Glückwunsch, auf der Ziel FTP-Seite sind tatsächlich Dateien angekommen – Ein erstes Backup!

Sicherungsdateien von Duplicity
Sicherungsdateien von Duplicity
Auf der Handbuchseite man duplicity sehen Sie zahlreiche Parameter, mit denen Sie Ihr Backup verfeinern koennen und bekommen eine Ahnung von der Komplexität des Programms.

Wiederherstellung des Backups (restore)

Nachdem das mit dem Backup recht einfach ging, wollen wir die Daten in einem anderen Verzeichnis wiederherstellen.

FTP_PASSWORD=[FTP-Passwort] duplicity ftp://[FTP-User]@[FTP-Host]/[Verzeichnis] [restore-Verzeichnis]

root@server1:~/backup# FTP_PASSWORD=**** duplicity  ftp://****@****/****/backup /root/backup/test
NcFTP version is 3.2.5
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Sun Jan  4 16:04:38 2015
GnuPG passphrase:
root@server1:~/backup# cd test
root@server1:~/backup/test# ls
logs  public_html

Nach Eingabe des richtigen Passworts wird das Verzeichnis test erstellt und die gesicherten Daten dort wiederhergestellt. Das funktioniert alles sehr schnell und elegant, nun wollen wir es mit Duply automatisieren.

Automatisierung der Backups mit Duply

Bevor wir Duply installieren muss die Sache mit der Passworteingabe automatisiert werden. Dazu erstellen wir uns Schlüssel mit dem Befehl.

gpg --gen-key

Es folgt ein Dialog

root@server1:# gpg --gen-key
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Waehlen Sie DSA and Elgamal aus

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 2

Die Schlüssellaenge von 2048 koennen Sie uebernehmen

DSA keys may be between 1024 and 3072 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits

Der Schlüssel soll nicht verfallen

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all

Antworten Sie mit y

Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Hagen Graf
Email address: hagen@novatrend.ch
Comment: Serverblogger Test
You selected this USER-ID:
    "Hagen Graf (Serverblogger Test) <hagen@novatrend.ch>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

Geben Sie an dieser Stelle wieder Ihr Passwort ein und merken es sich. Dieses Passwort brauchen Sie später in der Duply Konfigurationsdatei. Die nächste Meldung bezieht sich auf einen gpg-agent, der beim Start einer Session die Passphrase abfragt und zur Verfügung stellt. Dieser gpg-agent ist nicht installiert und daher kommt diese Meldung. Sie können sie ignorieren.

gpg: gpg-agent is not available in this session

Jetzt startet die Schlüsselerzeugung.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: WARNING: some OpenPGP programs can't handle a DSA key with this digest size
+++++...+++++....+++++.++++++++++++++++++++++++++++++.+++++++++++++++..+++++.....+++++++++++++++.+++++.+++++....+++++.++++++++++.+++++.++++++++++....+++++++++++++++>+++++................>+++++..................................................................................................+++++

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 288 more bytes)

In meinem Fall brach die Schlüsselerzeugung nach kurzer Zeit ab, weil nicht genug „entropy“ (Zufall) im System vorhanden war. Um die Entropie zu erhoehen, müssen Sie ihr System beschaftigen. Es gibt unterschiedliche Ansaetze (Beispiel). Ich habe es zuerst mit der mehrfachen Ausfuehrung des Befehls ls / -R probiert. Der Screenshot zeigt eine Shell mit der Schlüsselgenerierung, die Shell oben rechts zeigt die Entropie an, unten rechts wird das System beschäftigt.

Entropie erhöhen
Entropie erhöhen
Nach ein paar Minuten erfolgloser Beschäftigung habe ich dann das Paket stress installiert (apt-get install stress) und mit dem Befehl stress -c 4 -m 2 -d 1 -t 40s vierzig Sekunden „Stress“ in CPU, Hauptpeicher und auf der Festplatte erzeugt (Stress Test Your Ubuntu Computer with ‘Stress’).

Die Schlüsselerzeugung ging daraufhin weiter.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++.+++++++++++++++.+++++++++++++++.+++++.++++++++++++++++++++.+++++..++++++++++++++++++++>++++++++++>+++++...............................................................................+++++^^^
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key ******* marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048D/6986FD72 2015-01-04
      Key fingerprint = 43C1 DA7D 7CAE A2BC 34CF  6665 BB91 22E0 6986 FD72
uid                  Hagen Graf (Serverblogger Test) <hagen@novatrend.ch>
sub   2048g/27AC130F 2015-01-04

Merken Sie sich den Key, der im gelb markierten Bereich steht.

wget http://downloads.sourceforge.net/project/ftplicity/duply%20%28simple%20duplicity%29/1.9.x/duply_1.9.1.tgz
tar xvfz duply_1.9.1.tgz
cp duply_1.9.1/duply /usr/local/bin

Nun müssen Sie ein Profil erstellen.

duply [name-des-profils] create

Ich möchte wieder die Piwik Installation sichern und geben folgendes ein

root@server1:~# duply piwik.serverblogger.ch create

Congratulations. You just created the profile 'piwik.serverblogger.ch'.
The initial config file has been created as
'/root/.duply/piwik.serverblogger.ch/conf'.
You should now adjust this config file to your needs.

Sie müssen nun die Konfigurationsdatei bearbeiten

nano /root/.duply/piwik.serverblogger.ch/conf

Diese Werte müssen Sie anpassen

GPG_KEY='*****' // Der gelb markierte Key von oben
GPG_PW='*****' // ihr Passwort bei der key-Erzeugung
TARGET='ftp://****@****/****/****'  // FTP Zugangsdaten
TARGET_PASS='*****' // FTP Passwort
SOURCE='/var/www/piwik.serverblogger.ch' // zu sichernden Verzeichnis
MAX_AGE=1M // Nach 1 Monat werden alle aelteren Backups geloescht
TEMP_DIR=/tmp // Das temporaere Verzeichnis

OPTIONAL

Wenn Sie die Datenbank (MySQL Dump) mit sichern wollen, können Sie sich eine Datei mit dem Namen pre anlegen

/root/.duply/piwik.serverblogger.ch/pre

Inhalt der Datei

mysqldump -u [Benutzername] -p[Passwort] piwik > piwik.sql

Backup mit Duply

Mit dem Befehl duply [profilname] backup koennen Sie nun ein Backup ausühren. In meinem Fall

duply piwik.serverblogger.ch backup

Ein Vollbackup wird mit full aufgerufen

duply piwik.serverblogger.ch full

Ein inkrementelles Backup mit incr

duply piwik.serverblogger.ch incr

Sie sollten nun nicht nach einem Passwort gefragt werden! Mit duply -h können Sie sich die Hilfeseite anzeigen lassen.

Automatisierung

Der letzte Schritt ist nun der Eintrag in der Crontab um den Backup Befehl regelmässig auszuführen.

crontab -e

Sonntags um 0:00 wird ein volles Backup erstellt und alte Backups gelöscht. Von Montag bis Samstag wird jeweils um 0:00 Uhr ein inkrementelles Backup durchgeführt.

# do a full backup on sunday  & delete old backups

0 0 * * 7 /usr/bin/duply /root/.duply/piwik.serverblogger.ch full_verify_purge --force

# run the incremental backup each night at 00:00h

0 0 * * 1-6 /usr/bin/duply /root/.duply/piwik.serverblogger.ch incr

Restore mit Duply

Die Wiederherstellung funktioniert ebenso einfach wie das Backup

duply [Profilname] restore [Zielverzeichnis]

Andere Plattformen

Mit Duplicity und Duply können Sie auf auf andere Ziele sichern, beispielsweise S3 Amazon Web Services, Google Cloud Storage, Rackspace Open Cloud, und Dropbox.


tl;dr: Backups sind hilfreich und nicht schwer!