alix apu auswahl backup bewegung buecher c cfengine checklisten computernetz debian dvcs ebtables email epub fairphone2 fedora firewall fossilscm grep hardware i2c iproute iptables ipv6 kalender kpartx latex laufen lighttpd linux lua lur monotone mount mysql openvpn openwrt paketfilter perl postfix pxelinux python qubes-os rfc rpm rs232 schreiben script seriell shell software stehen sysadmin systemd troubleshoot ubuntu uci vcs virtualbox virtuell vpn wine xen

Backup mit duply

Ich sichere meine Server oft mit duply, einem Skript, das hilft, Daten über das Netz oder lokal zu sichern. Das kann ich mit Dutzenden anderen Skripts und Programmen auch, mal mehr und mal weniger komfortabel. Das Besondere an duply ist aber, dass ich die Dateien außerhalb meines Einflußbereiches speichern kann, ohne mir Sorgen um meine Daten machen zu müssen, denn duply verwendet GnuPG um die Daten zu schützen.

Dabei kann ich auf die unterschiedlichsten Mechanismen, wie zum Beispiel FTP, SMB, SSH, rsync, zurückgreifen, um die Daten an ihren Speicherort zu bringen.

Aus diesem Grund verwende ich duply am häufigsten, um Daten off-site zu lagern. Zum Beispiel die Konfiguration meiner Server zu Hause via WebDAV auf angemietetem Webspace oder Konfiguration und Daten meines Webservers auf vom Provider bereitgestelltem Platz.

Dabei ist duply schnell eingerichtet, wenn man vom Erzeugen des GPG-Schlüssels absieht, das auf einer virtuellen Maschine schon mal mehrere Stunden dauern kann. Dann erzeuge ich den Schlüssel doch besser auf einem Rechner mit genügend Zufall an Bord.

Installieren

Die Installation ist sehr einfach. Als erstes besorge ich duply, das geht am bequemsten aus den Repositories meiner Linux-Distribution. Andernfalls müsste ich die zusätzlich benötigte Software selbst zusammensuchen.

Auf Debian und davon abgeleiteten Linux-Distributionen geht das mit:

# apt install duply

Auf Fedora verwende ich:

# dnf install duply

Damit bin ich eigentlich fertig mit der Installation. Je nachdem, wie ich das Backup kopiere, benötige ich vielleicht noch das passende Programm dafür.

GPG Schlüssel

Gleichzeitig mit der Installation oder auch schon vorher fange ich an, den GPG-Schlüssel zu generieren:

# gpg --gen-key

Dabei verwende ich die folgenden Parameter bei den Rückfragen von gpg:

1            (RSA)
4096         (Bits)
0            (does not expire)
y

Den Namen des Schlüssels, Kommentar und E-Mail wähle ich entsprechend dem Rechnernamen nach folgendem Schema:

Host $name (Backup) < backup @ mamawe.net >

Je nach vorhandener Entropie und der Geschwindigkeit, mit der die nötige Menge davon für die Zufallszahlen bereitsteht, kann es jetzt etwas länger dauern.

Konfigurieren

In der Zwischenzeit kann ich duply konfigurieren. Dazu lasse ich mir zunächst Templates für die Konfigurationsdateien generieren.

Tipp:

Will ich die Backup-Konfiguration zentral unter /etc/ ablegen, muss ich das Verzeichnis /etc/duply/ vor dem ersten Aufruf von duply anlegen. Andernfalls landet die Konfiguration in $HOME/.duply/, das heißt für root in /root/.duply/.

# mkdir /etc/duply
# duply $name create

Ich verwende für $name meist den Namen des Rechners, der gesichert werden soll. Prinzipiell kann ich auch mehrere Konfigurationen für duply mit jeweils verschiedenem Namen anlegen.

Duply erzeugt mir nun das Verzeichnis /etc/duply/$name/, dass die zwei Dateien conf und exclude enthält, die ich anpassen muss.

conf

Die Datei conf enthält ein Template für die Konfiguration.

Die wichtigsten Variablen darin sind:

  • GPG_KEY - die ID des GPG-Schlüssel, den ich eigens für dieses Backup erzeugt habe. Ich verwende für jeden Server einen anderen Schlüssel, dazu unten mehr.

  • GPG_PW - das Passwort, dass ich beim Erzeugen des GPG-Schlüssel verwendet habe. Dieses kann sehr lang und einzigartig sein, da ich es üblicherweise nur beim Erstellen des Schlüssels und in dieser Datei eingeben muss.

  • GPG_OPTS - hier setze ich --trust-model always, da ich sonst das Vertrauen für den Schlüssel in GnuPG explizit beim ersten Aufruf von duply setzen muss.

  • TARGET - diese URL gibt an, wohin und auf welchem Weg ich die Daten kopiere. Falls ich Backups von mehreren Servern auf dem gleichen Ziel speichere, muss ich dafür sorgen, dass sich diese Variable wenigstens im Zielverzeichnis unterscheidet, weil sonst die Sicherungsdateien der verschiedenen Server durcheinanderkommen. Habe ich für jedes Backup einen eigenen Schlüssel, macht mich GPG auf Konflikte aufmerksam, weil es die Dateien der anderen Sicherungen nicht entschlüsseln kann.

  • SOURCE - markiert das Verzeichnis, unterhalb dessen gesichert werden soll. Bei mir ist das meist /. Die Dateien, die in die Sicherung aufgenommen oder von ihr ausgeschlossen werden, gebe ich in der Datei exclude an.

  • MAX_AGE - legt fest, wie lange ein Backup maximal aufgehoben wird.

Es gibt noch etliche weitere Variablen, die ich anpassen kann. Diese sind in den Kommentaren im Template erklärt.

exclude

Die Datei exclude soll steuern, welche Dateien gesichert werden und welche nicht. Dabei bedeutet + am Anfang der Zeile, dass das nachfolgende Verzeichnis gesichert werden soll. Ein - am Anfang der Zeile bedeutet, die nachfolgend beschriebenen Verzeichnisse und Dateien sollen ausgelassen werden.

Bei mir sieht die Datei meist etwa so aus:

+ /etc/
+ /home/
+ /root/
+ /usr/local/
+ /var/local/
- **

pre

Existiert eine ausführbare Datei namens pre im Konfigurationsverzeichnis, so führt duply diese aus, bevor es die Dateien sichert. Das ist eine gute Gelegenheit backup-mysql aufzurufen, um einen aktuellen Abzug der Datenbank in der Sicherung zu haben.

Bei mir sieht diese Datei etwa so aus:

#!/bin/sh

LOCALDIR=/etc/local

test -d $LOCALDIR || mkdir -p $LOCALDIR
if test -d $LOCALDIR; then
  dpkg --get-selections > $LOCALDIR/dpkg-selections
fi

[ -x /usr/local/sbin/backup-mysql ] && su backup -c /usr/local/sbin/backup-mysql

exit 0

Mit dpkg --get-selections lege ich eine aktuelle Liste der installierten Software an, so dass ich den Rechner aus einer Sicherung leichter wiederherstellen kann.

Das Programm backup-mysql rufe ich mit su auf, damit die Datenbank nicht als root gesichert wird, während duply für die Systemsicherung unter UID 0 läuft.

Testen

Bin ich mit der Konfiguration fertig und ist der GnuPG-Schlüssel generiert, sichere ich damit erstmalig:

# duply $name backup_verify

Mit

# duply $name status

sehe ich anschließend, ob alles glatt ging. Zusätzlich kann ich mir die Liste der gesicherten Dateien mit

# duply $name list

ausgeben lassen.

Funktioniert das Backup von Kommandozeile, kann ich es in die crontab eintragen:

32 2 * * 1-6 root test -x /usr/bin/duply && /usr/bin/duply $name backup_verify_purge --force >> /var/log/duply-last.log 2>&1
32 2 * * 0 root test -x /usr/bin/duply && /usr/bin/duply $name full_verify_purge --force >> /var/log/duply-last-full.log 2>&1

Damit bekomme ich pro Woche einen Vollbackup und sechs inkrementelle Backups.

Abschließende Hinweise

Ich verwende aus zwei Gründen für jeden Server einen eigenen GPG-Schlüssel:

  1. Wird der GPG-Schlüssel eines Servers kompromittiert, so sind die Backups der anderen Server davon meist nicht betroffen.

  2. Habe ich versehentlich die Variable TARGET in der Datei conf bei zwei Servern gleich gesetzt, bekomme ich das recht schnell mit, weil GPG die Dateien des jeweils anderen Servers nicht entschlüsseln kann.

Ein wichtiger Punkt, über den ich mir Gedanken machen muss ist das Verzeichnis /etc/duply/$name/ und sein Inhalt.

Im Normalfall brauche ich mich nicht um dieses Verzeichnis zu kümmern, duply legt dort beim ersten Sichern automatisch eine Kopie des verwendeten Schlüssels (public, private) ab. Solange der Server läuft, holt sich duply von dort alle benötigten Informationen und den Schlüssel.

Ist der Server jedoch defekt, komme ich ohne den Inhalt dieses Verzeichnisses nicht an die Backups heran. Darum muss ich das Verzeichnis nebst Inhalt vom Server kopieren und an einer sicheren Stelle verwahren.

Sicher bedeutet hier einerseits, dass es mir nicht verloren gehen darf und andererseits, dass es keinem Unbefugten in die Hände fallen darf.

Damit wäre das wichtigste zu duply gesagt, die Man-Page enthält noch viele weitere Informationen. Auch im Thomas-Krenn-Wiki findet sich eine gute Anleitung zu duply.


Fehlersuche
Posted 2017-07-31
Checkliste MySQL-Backup
Posted 2017-06-03
Virtuelle Umgebung für Python
Posted 2017-05-13
Manuel
Posted 2017-04-27
Fairphone 2 Problem mit Slim Case
Posted 2017-04-02
Transparentes VPN-Gateway
Posted 2017-03-09
Eine Ubuntu 16.04 Xen DomU aufsetzen
Posted 2017-01-22
Wo platziere ich mein VPN Gateway?
Posted 2016-12-29
Kalender 2017
Posted 2016-11-21