Duply: Unterschied zwischen den Versionen
K (Textersetzung - „Verschlüsselung:“ durch „“) |
Keine Bearbeitungszusammenfassung |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{DISPLAYTITLE:duply}} | {{DISPLAYTITLE:duply}} | ||
'''duply''' erstellt inkrementelle verschlüsselte Backups | '''duply''' erstellt inkrementelle verschlüsselte Backups | ||
= Beschreibung = | == Beschreibung == | ||
* Frontend für [https://de.wikipedia.org/wiki/Duplicity_(Software) duplicity]. | * Frontend für [https://de.wikipedia.org/wiki/Duplicity_(Software) duplicity]. | ||
* Backups können lokal oder einem anderen System gespeichert werden. | * Backups können lokal oder einem anderen System gespeichert werden. | ||
* Unterstützte Protokolle: <tt>ftp, ssh, s3, rsync, cifs, webdav, http</tt>. | * Unterstützte Protokolle: <tt>ftp, ssh, s3, rsync, cifs, webdav, http</tt>. | ||
= Installation = | == Installation == | ||
# apt install duply | # apt install duply | ||
= Syntax = | == Syntax == | ||
== Parameter == | === Parameter === | ||
== Optionen == | === Optionen === | ||
== Umgebungsvariablen == | === Umgebungsvariablen === | ||
== Exit-Status == | === Exit-Status === | ||
= Konfiguration = | == Konfiguration == | ||
= | === Verschlüsselung konfigurieren === | ||
== Verschlüsselung konfigurieren == | ==== Schlüssel erstellen ==== | ||
=== Schlüssel erstellen === | |||
siehe [[GPG#Schl.C3.BCssel_erstellen|GPG]] | siehe [[GPG#Schl.C3.BCssel_erstellen|GPG]] | ||
== Profil erstellen == | === Profil erstellen === | ||
# duply <backupname> create | # duply <backupname> create | ||
Ein duply-Profil wird im Home-Verzeichnis des Benutzers unter '''~/.duply/''' angelegt und besteht aus den folgenden Dateien: | Ein duply-Profil wird im Home-Verzeichnis des Benutzers unter '''~/.duply/''' angelegt und besteht aus den folgenden Dateien: | ||
* gpg-key.asc (nur wenn ein gpg-key exportiert wurde.) | * gpg-key.asc (nur wenn ein gpg-key exportiert wurde.) | ||
* conf | * conf | ||
* pre und post | * pre und post | ||
* exclude | * exclude | ||
== Konfiguration == | === Konfiguration === | ||
=== Verschlüsselung einrichten=== | ==== Verschlüsselung einrichten==== | ||
====Voraussetzung==== | =====Voraussetzung===== | ||
Key-ID und das Passwort des GPG-Keys müssen dafür hinterlegt werden. | Key-ID und das Passwort des GPG-Keys müssen dafür hinterlegt werden. | ||
GPG_KEY='_GPG_KEY_ID_' | GPG_KEY='_GPG_KEY_ID_' | ||
GPG_PW='_GPG_PASSWORD_' | GPG_PW='_GPG_PASSWORD_' | ||
====Key-ID anzeigen lassen==== | =====Key-ID anzeigen lassen===== | ||
Private-Key | Private-Key | ||
gpg --list-secret-keys --keyid-format LONG | gpg --list-secret-keys --keyid-format LONG | ||
Zeile 57: | Zeile 54: | ||
uid [ ultimativ ] Robert Quies (Es grünt so grün, wenn Spaniens Blüten blühn.) <raqju@web.de> | uid [ ultimativ ] Robert Quies (Es grünt so grün, wenn Spaniens Blüten blühn.) <raqju@web.de> | ||
ssb rsa4096/B2E20485FF7FC772 2020-11-04 [E] [verfällt: 2021-11-04] | ssb rsa4096/B2E20485FF7FC772 2020-11-04 [E] [verfällt: 2021-11-04] | ||
Public-Key | Public-Key | ||
# gpg --list-keys --keyid-format LONG | # gpg --list-keys --keyid-format LONG | ||
Zeile 70: | Zeile 67: | ||
sub rsa4096/B2E20485FF7FC772 2020-11-04 [E] [verfällt: 2021-11-04] | sub rsa4096/B2E20485FF7FC772 2020-11-04 [E] [verfällt: 2021-11-04] | ||
===Kompression und Art der Verschlüsselung festlegen=== | ====Kompression und Art der Verschlüsselung festlegen==== | ||
Zusätzlich können in '''GPG_OPTS=''' weitere Optionen zur Kompression und Art der Verschlüsselung gesetzt werden. | Zusätzlich können in '''GPG_OPTS=''' weitere Optionen zur Kompression und Art der Verschlüsselung gesetzt werden. | ||
*Es soll mit dem freien Komprimierungsprogramm '''bzip2''' komprimiert werden und dem symmetrischen Verschlüsselungsverfahren '''A'''dvanced '''E'''ncryption '''S'''tandard, auch Rijndael-Algorithmus genannt, mit einer Schlüssellänge von '''256''' verschlüsselt werden. | *Es soll mit dem freien Komprimierungsprogramm '''bzip2''' komprimiert werden und dem symmetrischen Verschlüsselungsverfahren '''A'''dvanced '''E'''ncryption '''S'''tandard, auch Rijndael-Algorithmus genannt, mit einer Schlüssellänge von '''256''' verschlüsselt werden. | ||
GPG_OPTS='--compress-algo=bzip2 --personal-cipher-preferences AES256' | GPG_OPTS='--compress-algo=bzip2 --personal-cipher-preferences AES256' | ||
=== De-/Aktivieren der Überprüfung GPG-Key und GPG-Passphrase === | ==== De-/Aktivieren der Überprüfung GPG-Key und GPG-Passphrase ==== | ||
* duply prüft vor jeder Aktion ob der GPG-Key gültig ist und die Passphrase korrekt ist. | * duply prüft vor jeder Aktion ob der GPG-Key gültig ist und die Passphrase korrekt ist. | ||
* Dies kann durch die Option '''GPG_TEST='disabled'''' unterbunden werden. | * Dies kann durch die Option '''GPG_TEST='disabled'''' unterbunden werden. | ||
Aktiviert | Aktiviert | ||
Zeile 85: | Zeile 82: | ||
# GPG_TEST='disabled' | # GPG_TEST='disabled' | ||
===Ziel und Quelle des Backups festlegen=== | ====Ziel und Quelle des Backups festlegen==== | ||
====Allgemeine Syntax des hosts==== | =====Allgemeine Syntax des hosts===== | ||
scheme://[user:password@]host[:port]/[/]path | scheme://[user:password@]host[:port]/[/]path | ||
====Protokolle und Syntax zur Datenübertragung==== | =====Protokolle und Syntax zur Datenübertragung===== | ||
* duply versteht alle gängigen Protokolle zur Datenübertragung. | * duply versteht alle gängigen Protokolle zur Datenübertragung. | ||
* In der conf-Datei befindet sich meistens eine Liste der wichtigsten unterstützten Protokolle und deren Syntax. | * In der conf-Datei befindet sich meistens eine Liste der wichtigsten unterstützten Protokolle und deren Syntax. | ||
file://[/absolute_]path | file://[/absolute_]path | ||
Zeile 113: | Zeile 110: | ||
Sonderzeichen müssen [https://de.wikipedia.org/wiki/URL-Encoding urlencoded] eingetragen werden, außer bei den Parametern '''TARGET_USER, TARGET_PASS''' | Sonderzeichen müssen [https://de.wikipedia.org/wiki/URL-Encoding urlencoded] eingetragen werden, außer bei den Parametern '''TARGET_USER, TARGET_PASS''' | ||
====Ziel des Backups festlegen==== | =====Ziel des Backups festlegen===== | ||
TARGET='scheme://user[:password]@host[:port]/[/]path' | TARGET='scheme://user[:password]@host[:port]/[/]path' | ||
*Es soll das Protokoll '''ssh''' zur Datenübertragung genutzt werden. | *Es soll das Protokoll '''ssh''' zur Datenübertragung genutzt werden. | ||
*Username: '''user''' | *Username: '''user''' | ||
*Passwort: '''KohlIstKrempe969''' | *Passwort: '''KohlIstKrempe969''' | ||
Zeile 125: | Zeile 122: | ||
TARGET='<nowiki>ssh://user:KohlIstKrempe969@foxtom.net:22/home/user/backup_PC1</nowiki>' | TARGET='<nowiki>ssh://user:KohlIstKrempe969@foxtom.net:22/home/user/backup_PC1</nowiki>' | ||
====Quelle des Backups festlegen==== | =====Quelle des Backups festlegen===== | ||
Root-Verzeichnis für das Backup setzen. | Root-Verzeichnis für das Backup setzen. | ||
SOURCE= | SOURCE= | ||
Soll ein Backup aus mehreren Unterordnern von '''/''' bestehen (Bsp.: /etc /var /home sollen gesichert werden), so muss die SOURCE Variable auf '''/''' gesetzt werden.'' | Soll ein Backup aus mehreren Unterordnern von '''/''' bestehen (Bsp.: /etc /var /home sollen gesichert werden), so muss die SOURCE Variable auf '''/''' gesetzt werden.'' | ||
SOURCE='/' | SOURCE='/' | ||
In der Regel wird SOURCE='/' gesetzt. | In der Regel wird SOURCE='/' gesetzt. | ||
Dateien, die in die Sicherung aufgenommen oder von ihr ausgeschlossen werden, werden in der Datei [[Backup:duply#exclude|'''exclude''']] angegeben. | Dateien, die in die Sicherung aufgenommen oder von ihr ausgeschlossen werden, werden in der Datei [[Backup:duply#exclude|'''exclude''']] angegeben. | ||
===Maximales Alter eines Backups festlegen=== | ====Maximales Alter eines Backups festlegen==== | ||
Hier ist anzumerken, dass duply keine Backups löscht, sofern man es nicht anfordert. | Hier ist anzumerken, dass duply keine Backups löscht, sofern man es nicht anfordert. | ||
Mit '''MAX_AGE''' wird das maximale Alter von Backups bestimmt. | Mit '''MAX_AGE''' wird das maximale Alter von Backups bestimmt. | ||
Zeile 143: | Zeile 140: | ||
MAX_AGE=1Y | MAX_AGE=1Y | ||
===Anzahl der vollständigen Backups festlegen=== | ====Anzahl der vollständigen Backups festlegen==== | ||
Mit '''MAX_FULL_BACKUPS''' kann bestimmt werden, wie viele Full-Backups duply maximal behält. | Mit '''MAX_FULL_BACKUPS''' kann bestimmt werden, wie viele Full-Backups duply maximal behält. | ||
Es sollen fünf sein. | Es sollen fünf sein. | ||
MAX_FULL_BACKUPS=5 | MAX_FULL_BACKUPS=5 | ||
===Maximales Alter der vollständigen Backups festlegen=== | ====Maximales Alter der vollständigen Backups festlegen==== | ||
Alternativ kann mit '''MAX_FULLBKP_AGE''' spezifiert werden, wie alt ein Full-Backup sein darf, bevor ein neues Full-Backup erstellt wird. | Alternativ kann mit '''MAX_FULLBKP_AGE''' spezifiert werden, wie alt ein Full-Backup sein darf, bevor ein neues Full-Backup erstellt wird. | ||
Es soll zwei Wochen alt sein. | Es soll zwei Wochen alt sein. | ||
Zeile 156: | Zeile 153: | ||
DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE" | DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE" | ||
=== Größe der Backup-Pakete bei der Übertragung ändern === | ==== Größe der Backup-Pakete bei der Übertragung ändern ==== | ||
Um den durch eventuelle Übertragungsfehler entstehenden Zeitverlust einzuschränken, teilt duply standardmäßig seine Backups in 25 MB große Dateien. | Um den durch eventuelle Übertragungsfehler entstehenden Zeitverlust einzuschränken, teilt duply standardmäßig seine Backups in 25 MB große Dateien. | ||
Dies kann mit '''VOLSIZE''' geändert werden. | Dies kann mit '''VOLSIZE''' geändert werden. | ||
Backup-Pakete sollen 10 MB groß sein. | Backup-Pakete sollen 10 MB groß sein. | ||
Zeile 167: | Zeile 164: | ||
DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE" | DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE" | ||
== Dateien == | === Dateien === | ||
= Anwendungen = | == Anwendungen == | ||
=== Anwendung === | ==== Anwendung ==== | ||
'''GPG_KEY='C676563899DE35FA'''' | '''GPG_KEY='C676563899DE35FA'''' | ||
'''GPG_PW='NerzManta9'''' | '''GPG_PW='NerzManta9'''' | ||
'''GPG_OPTS='--compress-algo=bzip2 --personal-cipher-preferences AES256'''' | '''GPG_OPTS='--compress-algo=bzip2 --personal-cipher-preferences AES256'''' | ||
'''GPG_TEST='disabled'''' | '''GPG_TEST='disabled'''' | ||
'''TARGET='<nowiki>ssh://user:KohlIstKrempe969@foxtom.net:22/home/user/backup_PC1</nowiki>'''' | '''TARGET='<nowiki>ssh://user:KohlIstKrempe969@foxtom.net:22/home/user/backup_PC1</nowiki>'''' | ||
Zeile 180: | Zeile 177: | ||
'''MAX_FULL_BACKUPS=5''' | '''MAX_FULL_BACKUPS=5''' | ||
'''MAX_FULLBKP_AGE=2W''' | '''MAX_FULLBKP_AGE=2W''' | ||
'''DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE"''' | '''DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE"''' | ||
'''VOLSIZE=10''' | '''VOLSIZE=10''' | ||
'''DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE"''' | '''DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE"''' | ||
==Pre- und Post-Skripte== | ===Pre- und Post-Skripte=== | ||
* duply erlaubt die Verwendung von Pre- und Post-Skripten. | * duply erlaubt die Verwendung von Pre- und Post-Skripten. | ||
* Das pre-Skript wird direkt vor dem Backup ausgeführt, das post-Skript direkt nach dem Backup. | * Das pre-Skript wird direkt vor dem Backup ausgeführt, das post-Skript direkt nach dem Backup. | ||
* Mit diesen Skripten können beispielsweise Snapshots von LVM-Volumes oder Dumps von SQL Datenbanken gemacht und in das Backup einbezogen werden. | * Mit diesen Skripten können beispielsweise Snapshots von LVM-Volumes oder Dumps von SQL Datenbanken gemacht und in das Backup einbezogen werden. | ||
* Die files <tt>pre</tt> und <tt>post</tt> müssen im jeweiligen duply Verzeichnis liegen (Bsp.: /home/user/.duply/backup/) und ausführbar sein. | * Die files <tt>pre</tt> und <tt>post</tt> müssen im jeweiligen duply Verzeichnis liegen (Bsp.: /home/user/.duply/backup/) und ausführbar sein. | ||
* Werden die pre/post Scripte nicht wie erhofft ausgeführt (z.B. bei den Sicherchungs-Methoden "full/incr"), können diese explizit angegeben werden: <tt>pre_incr_post</tt> | * Werden die pre/post Scripte nicht wie erhofft ausgeführt (z.B. bei den Sicherchungs-Methoden "full/incr"), können diese explizit angegeben werden: <tt>pre_incr_post</tt> | ||
; Beispiel | ; Beispiel | ||
Hier ein Beispiel für ein PRE/POST Skript welches vor dem Backup einen SQL-Dump aller Datenbanken erstellt und diesen nach dem Backup wieder löscht. | Hier ein Beispiel für ein PRE/POST Skript welches vor dem Backup einen SQL-Dump aller Datenbanken erstellt und diesen nach dem Backup wieder löscht. | ||
; pre-Datei | ; pre-Datei | ||
Zeile 200: | Zeile 197: | ||
/bin/rm /tmp/sqldump-$(date '+%F') | /bin/rm /tmp/sqldump-$(date '+%F') | ||
==exclude== | ===exclude=== | ||
* duply arbeitet standardmäßig mit einer Whitelist. | * duply arbeitet standardmäßig mit einer Whitelist. | ||
* Um gewisse Verzeichnisse oder Dateien von einem Backup zu inkludieren muss die Datei <tt>exclude</tt> im duply Verzeichnis erstellt werden. | * Um gewisse Verzeichnisse oder Dateien von einem Backup zu inkludieren muss die Datei <tt>exclude</tt> im duply Verzeichnis erstellt werden. | ||
* Die Syntax erlaubt das Hinzufügen von Verzeichnissen und Dateien mit einem <tt>+ /pfad/zur/datei</tt>. | * Die Syntax erlaubt das Hinzufügen von Verzeichnissen und Dateien mit einem <tt>+ /pfad/zur/datei</tt>. | ||
* Um ein Verzeichnis zu exkludieren muss in der <tt>exclude</tt> ein <tt>- /pfad/zum/Verzeichnis</tt> eingefügt werden. | * Um ein Verzeichnis zu exkludieren muss in der <tt>exclude</tt> ein <tt>- /pfad/zum/Verzeichnis</tt> eingefügt werden. | ||
* Zudem erlaubt duply die Verwendung von Wildcards. | * Zudem erlaubt duply die Verwendung von Wildcards. | ||
* Die hier dargestellte <tt>exclude</tt> Datei sichert die Verzeichnisse <tt>/etc/, /root/, /var/www/</tt> und exkludiert alle anderen Verzeichnisse. | * Die hier dargestellte <tt>exclude</tt> Datei sichert die Verzeichnisse <tt>/etc/, /root/, /var/www/</tt> und exkludiert alle anderen Verzeichnisse. | ||
+ /etc/ | + /etc/ | ||
+ /root/ | + /root/ | ||
Zeile 212: | Zeile 209: | ||
- ** | - ** | ||
== Parameter == | === Parameter === | ||
* duply bietet eine Vielzahl von Kommandozeilenparametern für die Sicherung und Wiederherstellung von Daten. | * duply bietet eine Vielzahl von Kommandozeilenparametern für die Sicherung und Wiederherstellung von Daten. | ||
* Die gesamte Liste ist in der Manpage von duply zu finden. | * Die gesamte Liste ist in der Manpage von duply zu finden. | ||
* Beim Einsatz von mehreren Parameter werden diese durch einen Unterstrich ('''_''') getrennt. | * Beim Einsatz von mehreren Parameter werden diese durch einen Unterstrich ('''_''') getrennt. | ||
* Mit <tt>/usr/bin/duply /root/.duply/test full_verify_purge --force</tt> wird ein volles Backup erstellt, verifiziert und alte Backups gelöscht. | * Mit <tt>/usr/bin/duply /root/.duply/test full_verify_purge --force</tt> wird ein volles Backup erstellt, verifiziert und alte Backups gelöscht. | ||
* Backups welche die <tt>MAX_AGE</tt> überschritten haben werden mit <tt>purge</tt> angezeigt und durch die zusätzliche Option <tt>--force</tt> gelöscht. | * Backups welche die <tt>MAX_AGE</tt> überschritten haben werden mit <tt>purge</tt> angezeigt und durch die zusätzliche Option <tt>--force</tt> gelöscht. | ||
* Der Befehl <tt>/usr/bin/duply /root/.duply/test incr</tt> führt ein inkrementelles Backup aus. | * Der Befehl <tt>/usr/bin/duply /root/.duply/test incr</tt> führt ein inkrementelles Backup aus. | ||
==cronjob== | ===cronjob=== | ||
* Bei duply handelt es sich nicht um einen Dienst (Daemon), sondern um ein Skript, das z.B. regelmäßig via Cron ausgeführt werden kann. | * Bei duply handelt es sich nicht um einen Dienst (Daemon), sondern um ein Skript, das z.B. regelmäßig via Cron ausgeführt werden kann. | ||
; Beispiel | ; Beispiel | ||
Zeile 227: | Zeile 224: | ||
0 0 * * 1-6 /usr/bin/duply /root/.duply/test incr | 0 0 * * 1-6 /usr/bin/duply /root/.duply/test incr | ||
* In dieser Konfiguration wird Sonntags um 0:00 ein Full-Backup erstellt und alte Backups gelöscht. | * In dieser Konfiguration wird Sonntags um 0:00 ein Full-Backup erstellt und alte Backups gelöscht. | ||
* Montag bis Samstag wird jeden Tag ein inkrementelles Backup durchgeführt. | * Montag bis Samstag wird jeden Tag ein inkrementelles Backup durchgeführt. | ||
* Neue cronjobs können mit '''crontab -e''' erstellt werden. | * Neue cronjobs können mit '''crontab -e''' erstellt werden. | ||
* Kommandos und Konfigurationsdateien müssen mit absolutem Pfad angegeben werden. | * Kommandos und Konfigurationsdateien müssen mit absolutem Pfad angegeben werden. | ||
= Fehlerbehebung = | == Fehlerbehebung == | ||
== Volume was signed by key ''X'' not ''Y'' == | === Volume was signed by key ''X'' not ''Y'' === | ||
=== OSError: Socket is closed === | |||
ssh: Exception (client): Signature verification (ssh-rsa) failed. | |||
ssh: Traceback (most recent call last): | |||
ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 2130, in run | |||
ssh: self.kex_engine.parse_next(ptype, m) | |||
ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 64, in parse_next | |||
ssh: return self._parse_kexecdh_reply(m) | |||
ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 130, in _parse_kexecdh_reply | |||
ssh: self.transport._verify_key(peer_host_key_bytes, sig) | |||
ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 1942, in _verify_key | |||
ssh: raise SSHException( | |||
ssh: paramiko.ssh_exception.SSHException: Signature verification (ssh-rsa) failed. | |||
ssh: | |||
Attempt of put Nr. 1 failed. OSError: Socket is closed | |||
= Sicherheit = | == Sicherheit == | ||
= Dokumentation = | == Dokumentation == | ||
== RFC == | === RFC === | ||
== Man-Pages == | === Man-Pages === | ||
== Info-Pages == | === Info-Pages === | ||
== Projekt-Homepage == | === Projekt-Homepage === | ||
= Links = | == Links == | ||
== Siehe auch == | === Siehe auch === | ||
# [[GPG]] | # [[GPG]] | ||
# [[GPG-Agent]] | # [[GPG-Agent]] | ||
# [[pinentry-curses]] | # [[pinentry-curses]] | ||
== Weblinks == | === Weblinks === | ||
# [https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply] | # [https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply] | ||
# [https://wiki.archlinux.org/index.php/Duply#Configuration https://wiki.archlinux.org/index.php/Duply#Configuration] | # [https://wiki.archlinux.org/index.php/Duply#Configuration https://wiki.archlinux.org/index.php/Duply#Configuration] | ||
# [https://www.gnupg.org/howtos/de/GPGMiniHowto.html https://www.gnupg.org/howtos/de/GPGMiniHowto.html] | # [https://www.gnupg.org/howtos/de/GPGMiniHowto.html https://www.gnupg.org/howtos/de/GPGMiniHowto.html] | ||
# [http://duply.net/ duply.net] | # [http://duply.net/ duply.net] | ||
== Einzelnachweise == | === Einzelnachweise === | ||
<references /> | <references /> | ||
= Testfragen = | == Testfragen == | ||
<div class="toccolours mw-collapsible mw-collapsed"> | <div class="toccolours mw-collapsible mw-collapsed"> | ||
''Testfrage 1'' | ''Testfrage 1'' |
Version vom 14. August 2022, 09:31 Uhr
duply erstellt inkrementelle verschlüsselte Backups
Beschreibung
- Frontend für duplicity.
- Backups können lokal oder einem anderen System gespeichert werden.
- Unterstützte Protokolle: ftp, ssh, s3, rsync, cifs, webdav, http.
Installation
# apt install duply
Syntax
Parameter
Optionen
Umgebungsvariablen
Exit-Status
Konfiguration
Verschlüsselung konfigurieren
Schlüssel erstellen
siehe GPG
Profil erstellen
# duply <backupname> create
Ein duply-Profil wird im Home-Verzeichnis des Benutzers unter ~/.duply/ angelegt und besteht aus den folgenden Dateien:
- gpg-key.asc (nur wenn ein gpg-key exportiert wurde.)
- conf
- pre und post
- exclude
Konfiguration
Verschlüsselung einrichten
Voraussetzung
Key-ID und das Passwort des GPG-Keys müssen dafür hinterlegt werden.
GPG_KEY='_GPG_KEY_ID_' GPG_PW='_GPG_PASSWORD_'
Key-ID anzeigen lassen
Private-Key
gpg --list-secret-keys --keyid-format LONG
Konsole
# gpg --list-secret-keys --keyid-format LONG gpg: "Trust-DB" wird überprüft gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: Tiefe: 0 gültig: 1 signiert: 0 Vertrauen: 0-, 0q, 0n, 0m, 0f, 1u gpg: nächste "Trust-DB"-Pflichtüberprüfung am 2021-11-04 /root/.gnupg/pubring.kbx ------------------------ sec rsa4096/F47E1B7450082D11 2020-11-04 [SC] [verfällt: 2021-11-04] 60E3D3C9ED78CE4A40322BBAF47E1B7450082D11 uid [ ultimativ ] Robert Quies (Es grünt so grün, wenn Spaniens Blüten blühn.) <raqju@web.de> ssb rsa4096/B2E20485FF7FC772 2020-11-04 [E] [verfällt: 2021-11-04]
Public-Key
# gpg --list-keys --keyid-format LONG
Konsole
# gpg --list-keys --keyid-format LONG /root/.gnupg/pubring.kbx ------------------------ pub rsa4096/F47E1B7450082D11 2020-11-04 [SC] [verfällt: 2021-11-04] 60E3D3C9ED78CE4A40322BBAF47E1B7450082D11 uid [ ultimativ ] Robert Quies (Es grünt so grün, wenn Spaniens Blüten blühn.) <raqju@web.de> sub rsa4096/B2E20485FF7FC772 2020-11-04 [E] [verfällt: 2021-11-04]
Kompression und Art der Verschlüsselung festlegen
Zusätzlich können in GPG_OPTS= weitere Optionen zur Kompression und Art der Verschlüsselung gesetzt werden.
- Es soll mit dem freien Komprimierungsprogramm bzip2 komprimiert werden und dem symmetrischen Verschlüsselungsverfahren Advanced Encryption Standard, auch Rijndael-Algorithmus genannt, mit einer Schlüssellänge von 256 verschlüsselt werden.
GPG_OPTS='--compress-algo=bzip2 --personal-cipher-preferences AES256'
De-/Aktivieren der Überprüfung GPG-Key und GPG-Passphrase
- duply prüft vor jeder Aktion ob der GPG-Key gültig ist und die Passphrase korrekt ist.
- Dies kann durch die Option GPG_TEST='disabled' unterbunden werden.
Aktiviert
GPG_TEST='disabled'
Deaktiviert
# GPG_TEST='disabled'
Ziel und Quelle des Backups festlegen
Allgemeine Syntax des hosts
scheme://[user:password@]host[:port]/[/]path
Protokolle und Syntax zur Datenübertragung
- duply versteht alle gängigen Protokolle zur Datenübertragung.
- In der conf-Datei befindet sich meistens eine Liste der wichtigsten unterstützten Protokolle und deren Syntax.
file://[/absolute_]path ftp[s]://user[:password]@other.host[:port]/some_dir hsi://user[:password]@other.host/some_dir cf+http://container_name imap[s]://user[:password]@host.com[/from_address_prefix] rsync://user[:password]@other.host[:port]::/module/some_dir rsync over ssh (only keyauth) rsync://user@other.host[:port]/relative_path rsync://user@other.host[:port]//absolute_path for the s3 user/password are AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY s3://[user:password]@host/bucket_name[/prefix] s3+http://[user:password]@bucket_name[/prefix] scp and sftp are aliases for the ssh backend ssh://user</nowiki>[:password]@other.host[:port]/some_dir tahoe://alias/directory webdav[s]://user[:password]@other.host/some_dir
Hinweis Sonderzeichen müssen urlencoded eingetragen werden, außer bei den Parametern TARGET_USER, TARGET_PASS
Ziel des Backups festlegen
TARGET='scheme://user[:password]@host[:port]/[/]path'
- Es soll das Protokoll ssh zur Datenübertragung genutzt werden.
- Username: user
- Passwort: KohlIstKrempe969
- Host: foxtom.net
- Port: 22
- Pfad: home/user/backup_PC1
TARGET='ssh://user:KohlIstKrempe969@foxtom.net:22/home/user/backup_PC1'
Quelle des Backups festlegen
Root-Verzeichnis für das Backup setzen.
SOURCE=
Soll ein Backup aus mehreren Unterordnern von / bestehen (Bsp.: /etc /var /home sollen gesichert werden), so muss die SOURCE Variable auf / gesetzt werden.
SOURCE='/'
In der Regel wird SOURCE='/' gesetzt.
Dateien, die in die Sicherung aufgenommen oder von ihr ausgeschlossen werden, werden in der Datei exclude angegeben.
Maximales Alter eines Backups festlegen
Hier ist anzumerken, dass duply keine Backups löscht, sofern man es nicht anfordert.
Mit MAX_AGE wird das maximale Alter von Backups bestimmt. Das älteste Backup soll maximal ein Jahr alt sein.
MAX_AGE=1Y
Anzahl der vollständigen Backups festlegen
Mit MAX_FULL_BACKUPS kann bestimmt werden, wie viele Full-Backups duply maximal behält.
Es sollen fünf sein.
MAX_FULL_BACKUPS=5
Maximales Alter der vollständigen Backups festlegen
Alternativ kann mit MAX_FULLBKP_AGE spezifiert werden, wie alt ein Full-Backup sein darf, bevor ein neues Full-Backup erstellt wird.
Es soll zwei Wochen alt sein.
MAX_FULLBKP_AGE=2W DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE"
Größe der Backup-Pakete bei der Übertragung ändern
Um den durch eventuelle Übertragungsfehler entstehenden Zeitverlust einzuschränken, teilt duply standardmäßig seine Backups in 25 MB große Dateien.
Dies kann mit VOLSIZE geändert werden.
Backup-Pakete sollen 10 MB groß sein.
VOLSIZE=10 DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE"
Dateien
Anwendungen
Anwendung
GPG_KEY='C676563899DE35FA' GPG_PW='NerzManta9' GPG_OPTS='--compress-algo=bzip2 --personal-cipher-preferences AES256' GPG_TEST='disabled' TARGET='ssh://user:KohlIstKrempe969@foxtom.net:22/home/user/backup_PC1' SOURCE='/' MAX_AGE=1Y MAX_FULL_BACKUPS=5 MAX_FULLBKP_AGE=2W DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE" VOLSIZE=10 DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE"
Pre- und Post-Skripte
- duply erlaubt die Verwendung von Pre- und Post-Skripten.
- Das pre-Skript wird direkt vor dem Backup ausgeführt, das post-Skript direkt nach dem Backup.
- Mit diesen Skripten können beispielsweise Snapshots von LVM-Volumes oder Dumps von SQL Datenbanken gemacht und in das Backup einbezogen werden.
- Die files pre und post müssen im jeweiligen duply Verzeichnis liegen (Bsp.: /home/user/.duply/backup/) und ausführbar sein.
- Werden die pre/post Scripte nicht wie erhofft ausgeführt (z.B. bei den Sicherchungs-Methoden "full/incr"), können diese explizit angegeben werden: pre_incr_post
- Beispiel
Hier ein Beispiel für ein PRE/POST Skript welches vor dem Backup einen SQL-Dump aller Datenbanken erstellt und diesen nach dem Backup wieder löscht.
- pre-Datei
/usr/bin/mysqldump --all-databases -u root -ppw> /tmp/sqldump-$(date '+%F')
- post-Datei
/bin/rm /tmp/sqldump-$(date '+%F')
exclude
- duply arbeitet standardmäßig mit einer Whitelist.
- Um gewisse Verzeichnisse oder Dateien von einem Backup zu inkludieren muss die Datei exclude im duply Verzeichnis erstellt werden.
- Die Syntax erlaubt das Hinzufügen von Verzeichnissen und Dateien mit einem + /pfad/zur/datei.
- Um ein Verzeichnis zu exkludieren muss in der exclude ein - /pfad/zum/Verzeichnis eingefügt werden.
- Zudem erlaubt duply die Verwendung von Wildcards.
- Die hier dargestellte exclude Datei sichert die Verzeichnisse /etc/, /root/, /var/www/ und exkludiert alle anderen Verzeichnisse.
+ /etc/ + /root/ + /var/www/ - **
Parameter
- duply bietet eine Vielzahl von Kommandozeilenparametern für die Sicherung und Wiederherstellung von Daten.
- Die gesamte Liste ist in der Manpage von duply zu finden.
- Beim Einsatz von mehreren Parameter werden diese durch einen Unterstrich (_) getrennt.
- Mit /usr/bin/duply /root/.duply/test full_verify_purge --force wird ein volles Backup erstellt, verifiziert und alte Backups gelöscht.
- Backups welche die MAX_AGE überschritten haben werden mit purge angezeigt und durch die zusätzliche Option --force gelöscht.
- Der Befehl /usr/bin/duply /root/.duply/test incr führt ein inkrementelles Backup aus.
cronjob
- Bei duply handelt es sich nicht um einen Dienst (Daemon), sondern um ein Skript, das z.B. regelmäßig via Cron ausgeführt werden kann.
- Beispiel
0 0 * * 7 /usr/bin/duply /root/.duply/test full_verify_purge --force 0 0 * * 1-6 /usr/bin/duply /root/.duply/test incr
- In dieser Konfiguration wird Sonntags um 0:00 ein Full-Backup erstellt und alte Backups gelöscht.
- Montag bis Samstag wird jeden Tag ein inkrementelles Backup durchgeführt.
- Neue cronjobs können mit crontab -e erstellt werden.
- Kommandos und Konfigurationsdateien müssen mit absolutem Pfad angegeben werden.
Fehlerbehebung
Volume was signed by key X not Y
OSError: Socket is closed
ssh: Exception (client): Signature verification (ssh-rsa) failed. ssh: Traceback (most recent call last): ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 2130, in run ssh: self.kex_engine.parse_next(ptype, m) ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 64, in parse_next ssh: return self._parse_kexecdh_reply(m) ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 130, in _parse_kexecdh_reply ssh: self.transport._verify_key(peer_host_key_bytes, sig) ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 1942, in _verify_key ssh: raise SSHException( ssh: paramiko.ssh_exception.SSHException: Signature verification (ssh-rsa) failed. ssh: Attempt of put Nr. 1 failed. OSError: Socket is closed
Sicherheit
Dokumentation
RFC
Man-Pages
Info-Pages
Projekt-Homepage
Links
Siehe auch
Weblinks
- https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply
- https://wiki.archlinux.org/index.php/Duply#Configuration
- https://www.gnupg.org/howtos/de/GPGMiniHowto.html
- duply.net
Einzelnachweise
Testfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5