Hinter Schloss und Siegel

Seite 2: ftplicity

Inhaltsverzeichnis

Die Kommandozeilen-Arbeit mit duplicity, das eine umfangreiche englischsprachige Manpage mitbringt, ist recht mühsam: Man muss mit jedem Aufruf Umgebungsvariablen übergeben und teils längliche und immer gleiche Optionen eintippen. Unser Wrapper-Skript ftplicity reduziert die stets wiederkehrende Tipparbeit auf ein Minimum. Der Grundgedanke von ftplicity ist, dass man alle Backup- und Restore-Vorgänge in derselben Arbeitsumgebung durchführt: Zugangsdaten zum FTP-Server, GPG-Schlüssel, Passwörter sowie Angaben zum Basisverzeichnis und zu den vom Backup ausgenommenen Dateien und Verzeichnissen ändern sich in der Regel nicht mehr.

Ein vollständiges Server-Backup erfordert Root-Rechte, weshalb im Folgenden davon ausgegangen wird, dass Sie als Root arbeiten. Das Skript können Sie ruhigen Gewissens beispielsweise unter /usr/local/bin ablegen und für alle Nutzer les- und ausführbar machen. Alle vertraulichen Daten wie GPG-Passwort und FTP-Zugangsdaten landen im Konfigurationsverzeichnis .ftplicity im Home-Verzeichnis des ausführenden Nutzers. Zur Sicherheit führt ftplicity bei jedem Aufruf ein

chmod -R go-rwx ~/.ftplicity

aus, um es vor unbefugtem Zugriff zu schützen. ftplicity legt dort beim ersten Aufruf eine Beispielkonfiguration in der Datei conf an.

Für ein Server-Backup sollten Sie sich zunächst als Root mit gpg --gen-key einen GPG-Schlüssel erzeugen, der ausschließlich für das Backup verwendet wird. Seine achtstellige Key-ID sowie das verwendete Passwort sind in die Variablen GPG_KEY und GPG_PW in der config-Datei einzutragen.

Die Variable QUELLE enthält das Basisverzeichnis für das Backup. Die Voreinstellung "/" ist für Root-Server geeignet, die sich nach einem Plattencrash mit möglichst wenig Aufwand in den vorherigen Zustand versetzen lassen sollen. Für ZIEL und ZIEL_PW tragen Sie die Zugangsdaten für Ihren FTP-Backup-Server ein, die Sie von Ihrem Provider erfahren. Es ist sinnvoll, auf dem FTP-Server ein eigenes Unterverzeichnis für Backups anzulegen, um leichter mit unterschiedlichen Versionen der Backups hantieren zu können.

Abschließend ist im Konfigurationsverzeichnis noch die Datei exclude zu erstellen. Sie enthält eine Liste von Verzeichnissen und Dateien – je ein Name pro Zeile – die vom Backup ausgenommen bleiben. Beim Backup des gesamten Dateisystems dürfen /dev, /proc und /sys nicht mitgesichert werden, da es beim Auslesen mancher Spezialdateien zu schwerwiegenden Problemen kommt. Ebenfalls sinnvoll ist der Ausschluss der Verzeichnisse /tmp, /var/tmp und /var/run. Beim Auslesen von Socket- oder Pipe-Dateien kann es zu Fehlermeldungen kommen. Diese sind nicht kritisch, lassen sich aber durch entsprechende Einträge in exclude abstellen.

Das Joker-Zeichen "*" hat dieselbe Bedeutung wie in der Shell: Es passt auf jeden Datei- und Verzeichnisnamen mit dem passenden Muster innerhalb des angegebenen Verzeichnisses. Der spezielle Joker "**" erfasst Unterverzeichnisse in beliebiger Tiefe. "/home/user/*.mp3" nimmt beispielsweise "/home/user/a.mp3" und "/home/user/b.mp3" vom Backup aus, nicht jedoch "/home/user/tmp/x.mp3". "/home/**.mp3" hingegen schließt sämtliche Dateien (und Verzeichnisse) mit der Endung ".mp3" aus, die sich in den Tiefen des /home-Verzeichnisses verstecken.

Beginnt eine Zeile in der exclude-Datei mit einem Pluszeichen gefolgt von einer Leerstelle, wird der nachfolgende Eintrag in das Backup aufgenommen, auch wenn ihn ein weiter hinten in der Liste stehender Eintrag ausschließen würde. Die Reihenfolge innerhalb der exclude-Datei ist also ebenfalls wichtig.

Sehr nützlich sind noch die beiden Dateien pre und post: Diese startet das Skript vor beziehungsweise nach einen Backup, sofern sie vorhanden und ausführbar sind. Dort können Sie zur Vor- und Nachbereitung des Backups notwendige Schritte durchführen lassen wie beispielsweise einen kritischen Dienst vorübergehend anhalten oder einen Dump einer stark frequentierten MySQL-Datenbank erstellen.