Duplicity unter Ubuntu-Server

Duplicity sichert Dateien und Ordner inkrementell und legt sie in GnuPG-verschlüsselten Volumes im Tar-Format lokal oder in der Cloud ab. Dieser Blog-Artikel zeit Euch, wie Duplicity unter Ubuntu Server 24.04 LTS funktioniert.

Einführung

Duplicity ist ein Backup-Tool für Linux und andere Unix-ähnliche Systeme. Duplicity ist Open Source und unter der GNU General Public License, version 2 lizenziert. Das wesentliche Ziel ist es, verschlüsselte, sichere und effiziente Backups zu erstellen. Duplicity kombiniert die Fähigkeit, nur geänderte Daten (inkrementelle Backups) zu sichern, mit einer GnuPG-Verschlüsselung, um Deine Daten vor unbefugtem Zugriff zu schützen.

Duplicity Homepage

Duplicity Homepage

Die wichtigsten Funktionen sind:

  • Inkrementelle Backups: Nach einem ersten vollständigen Backup sichert Duplicity nur Änderungen, wodurch Speicherplatz und Bandbreite gespart werden.

  • Asymmetrische Verschlüsselung: Alle Backups werden auf Wunsch mit GnuPG verschlüsselt, sodass sie selbst bei einem Datenleck sicher bleiben.

  • Unterstützung von Cloud-Speicher: Duplicity kann Backups auf WebDAV, FTP, S3, Google Drive und vielen anderen Speicherlösungen ablegen.

  • Einfache Wiederherstellung: Beim Wiederherstellen kombiniert Duplicity automatisch das vollständige Backup mit den benötigten inkrementellen Sicherungen.

Wir werden jetzt folgendes tun:

  1. Duplicity installieren.

  2. Die asymmetrische Verschlüsselung einrichten

  3. Mit Duplicity ein verschlüsseltes Backup auf einem WebDAV-Server ablegen.

  4. Dieses Backup anschießend wiederherstellen.

Duplicity installieren

Die Installation ist denkbar einfach:

$ sudo apt update && sudo apt install duplicity

Möchtest Du die exakte Version Deiner Duplicity-Installation ermitteln, dann tippe folgendes ein:

$ duplicity --version

Die Antwort sollte in etwa so aussehen:

duplicity 2.1.4

Mit Duplicity arbeiten

Asymmetrische Verschlüsselung vorbereiten

Um unsere zukünftigen Backups zu verschlüsseln, benötigen wir ein GnuPG-Schlüsselpaar. GnuPG (GNU Privacy Guard) ermöglicht asymmetrische Kryptografie auf Basis von OpenPGP (Pretty Good Privacy) und ist unter Ubuntu bereits vorinstalliert.

Ein GnuPG-Schlüsselpaar besteht aus zwei Schlüsseln, die für sichere Verschlüsselung und Authentifizierung verwendet werden:

  • Privater Schlüssel (Private Key): Das ist dein persönlicher, geheimer Schlüssel. Er wird verwendet, um verschlüsselte Daten zu entschlüsseln, die mit deinem öffentlichen Schlüssel verschlüsselt wurden. Er darf niemals weitergegeben oder öffentlich gemacht werden!

  • Öffentlicher Schlüssel (Public Key): Dieser Schlüssel ist dafür gedacht, öffentlich geteilt zu werden. Andere verwenden ihn, um Dir Daten zu senden, die nur mit deinem privaten Schlüssel entschlüsselt werden können.

Wenn Du noch kein GnuPG-Schlüsselpaar besitzt, kannst Du es wie folgt erzeugen:

  1. Erstelle das GnuPG-Schlüsselpaar:

    $ gpg --gen-key
    

    Folge den Anweisungen. Du wirst nach einem Namen und einer E-Mail-Adresse gefragt. Beide Angaben dienen jeweils als ID für Dein GnuPG-Schlüsselpaar (Du kannst eine von beiden auch weglassen). Abschließend musst Du ein Kennwort vergeben, dass Dein Schlüsselpaar verschlüsselt. Dieses Kennwort musst Du Dir unbedingt merken.

  2. Lass Dir jetzt Deinen öffentlichen GnuPG-Schlüssel anzeigen:

    $ gpg --list-keys
    

    Es erscheint eine Ausgabe wie diese hier:

    pub   ed25519 2025-01-02 [SC] [expires: 2028-01-02]
          3BD935DD96CA85379C400D6E53DDFE525312E01C
    uid           [ultimate] ich <meine-email@beispiel.de>
    sub   cv25519 2025-01-02 [E] [expires: 2028-01-02]
    

    Den langen Hex-Wert (in unserem Beispiel 3BD935DD96CA85379C400D6E53DDFE525312E01C) merke Dir, dies ist ID des öffentlichen Schlüssels. Du brauchst ihn später für Duplicity.

  3. Exportiere den öffentlichen Schlüssel in eine Datei, wenn Du diesen weitergeben möchtest:

    $ gpg --export --armor meine-email@beispiel.de > gpg-public-key.asc
    
  4. Exportiere den privaten Schlüssel in eine Datei, und kopiere diese oder deren Inhalt an einen sicheren Ort (z.B. einen Password-Manager). Du benötigst diesen Schlüssel, wenn Du Backups auf einem anderen Rechner als diesen hier wieder herstellen möchtest:

    $ gpg --export-secret-keys --armor meine-email@beispiel.de > gpg-private-key.asc
    

    Vergiss nicht, anschließend die Datei zu löschen.

    $ shred -u gpg-private-key.asc
    

Jetzt hast Du die asymmetrische Verschlüsselung eingerichtet.

Backup auf WebDAV erstellen

Als Test wollen wir einen lokalen Ordner als verschlüsseltes Backup auf einem WebDAV-Server sichern:

  1. Richte die Ziel-URL und die Zugangsdaten als Umgebungsvariablen ein:

    $ export WEBDAV_PATH="mein-webdav-server.de/backup"
    $ export WEBDAV_USER="mein-benutzername"
    $ export WEBDAV_PASS="mein-kennwort"
    
  2. Starte das Backup mit der Schlüssel-ID von weiter oben:

    $ duplicity backup --encrypt-key 3BD935DD96CA85379C400D6E53DDFE525312E01C /mein/zu-sichernder-ordner webdavs://$WEBDAV_USER:$WEBDAV_PASS@$WEBDAV_PATH
    

Dies erstellt ein verschlüsseltes Backup in deinem WebDAV-Ordner.

Möchtest Du ohne Verschlüsselung testen, ersetze den Parameter --encrypt-key mit --no-encryption:

$ duplicity backup --no-encryption /mein/zu-sichernder-ordner webdavs://$WEBDAV_USER:$WEBDAV_PASS@$WEBDAV_PATH

Wiederherstellung von Backups

Die Wiederherstellung ist genauso einfach. Angenommen, Du möchtest alles von WebDAV zurückholen:

$ duplicity restore webdavs://$WEBDAV_USER:$WEBDAV_PASS@$WEBDAV_PATH /mein/ordner-zum-wiederherstellen

Wichtig zu Wissen: Eine Wiederherstellung funktioniert nur mit einem leeren Zielordner.

Wenn Deine Backups verschlüsselt sind, fragt Duplicity nach deinem GnuPG-Kennwort. Möchtest Du ein verschlüsseltes Backup auf einem anderen Rechner wiederherstellen, musst Du zunächst Deinen privaten GnuPG-Schlüssel auf diesem Rechner importieren:

$ gpg --import gpg-private-key.asc

Mit folgendem Befehl kannst Du überprüfen, ob der soeben importierte Schlüssel auch verfügbar ist:

$ gpg --list-secret-keys

Was kann man noch alles machen?

Automatisierung mit Cron

Wer hat schon Zeit, Backups manuell zu machen? Du kannst das Ganze mit einem Cron-Job automatisieren:

  1. Öffne Deine crontab-Datei:

    $ crontab -e
    
  2. Füge einen Job hinzu, um Duplicity täglich auszuführen:

    0 2 * * * duplicity backup --encrypt-key 3BD935DD96CA85379C400D6E53DDFE525312E01C /mein/zu-sichernder-ordner webdavs://$WEBDAV_USER:$WEBDAV_PASS@$WEBDAV_PATH
    

Dieses Beispiel läuft täglich um 2 Uhr morgens. Passe es an Deine Bedürfnisse an.

Weitere Optionen

Die folgenden Parameter können bei einem Aufruf von Duplicity nützlich sein:

  • --dry-run: Möchtest Du sehen, was Duplicity tun würde, ohne es wirklich auszuführen? Verwende diese Option.

  • --full-if-older-than: Erzwingt ein vollständiges Backup, wenn das letzte vollständige Backup älter als X ist.

    Beispiel:

    $ duplicity --full-if-older-than 7D /mein/zu-sichernder-ordner webdavs://$WEBDAV_USER:$WEBDAV_PASS@$WEBDAV_PATH
    

    Dies erstellt alle 7 Tage ein vollständiges Backup.

  • remove-older-than: Löscht alte Backups.

    Beispiel:

    $ duplicity remove-older-than 30D --force webdavs://$WEBDAV_USER:$WEBDAV_PASS@$WEBDAV_PATH
    

    Dies entfernt Backups, die älter als 30 Tage sind. Mit --force kannst Du die Bestätigungsaufforderung überspringen.

  • --exclude und --include: Feineinstellungen für das, was gesichert werden soll.

    Beispiel:

    $ duplicity --exclude /mein/zu-sichernder-ordner/temp /mein/zu-sichernder-ordner webdavs://$WEBDAV_USER:$WEBDAV_PASS@$WEBDAV_PATH
    

    Dies nimmt den Unterordner temp vom Backup aus.

Eine Dokumentation aller Befehle und Optionen von Duplicity findest Du in den Man Pages.

Fazit

Wie so oft bei Linux, ist Duplicity ist ein Werkzeug, dass sich auf genau eine Aufgabe konzentriert und versucht, diese möglichst gut umzusetzen. In Verbindung mit einem Cron-Job lassen sich wunderbar regelmäßige Cloud-Backups im Hintergrund erstellen.

Und nicht die goldene Administrationsregel vergessen, die da lautet: Backup, Backup, Backup!.

Teile diesen Artikel