Damit wir eine Änderungen der Konfiguration der gemounteten Verzeichnisse oder Umgebungsvariablen vornehmen können, muss der Container angehalten werden.
Sarte die Docker app auf der Synology, wähle „Container“ auf der linked Seite und schalte den Container an der rechten Seite aus.
Dann markiere den Container und klicke auf „Bearbeiten“
Nun kannst du in den Bereichen „Volume“ gemountete Verzeichnisse anpassen, und unter „Umgebung“ die Umgebungsvariablen anpassen.
Dann speichere den Container und starte ihn erneut.
restic (2) – sftp Server vorbereiten – Der Login muss mit einem SSL Zertifikat ohne Password möglich sein, damit restic über rclone darauf zugreifen kann.
Jetzt konfigurieren wir den restic Docker Container, den wir im dritten Schritt (restic (3) – Docker auf Synology) runtergeladen hatten.
Starte Docker auf der Synology und gehe zum Bereich „Image“, wähle den Container aus und klicke „Starten“
Dann wähle „Erweiterte Einstellungen“
Im Bereich „Volume“ mappen wir den private Key, die rclone-Konfiguration, und die Daten, die wir sichern wollen.
Private Key: „Datei hinzufügen“ – wähle /volume1/docker/certificate.pem mit dem Mount-Pfad /volume1/docker/certificate.pem
rclone-Konfiguration: „Ordner hinzufügen“ – wähle /volume1/docker/rclone mit dem Mount-Pfad /root/.config/rclone
Zu sichernde Daten: „Ordner hinzufügen“ – wähle das zu sichernde Verzeichnis, z.B. /volume1/homes mit dem Mount-Pfad /data/homes. Alles, was unter /data gemounted ist, wird gesichert, d.h. du kannst weitere Verzeichnisse unter /data mounten, wenn du magst.
/data/homes und /volume1/docker/certificate.pem können „Schreibgeschützt“ werden. Aber das rclone Konfigurationsverzeichnis muss für den restic Container beschreibbar sein.
Dann wechsele zu „Umgebung“ und gibt die Umgebungsvariablen an. Dabei sind RESTIC_REPOSITORY und RESTIC_PASSWORD erforderlich.
MAILX_ARGS – Optional. If specified, the content of /var/log/backup-last.log is sent via mail after each backup using an external SMTP. To have maximum flexibility, you have to specify the mail/smtp parameters by your own. Have a look at the mailx manpage for further information. Example value: -r 'from@example.de' -s 'Result of the last restic backup run' -S smtp='smtp.example.com:587' -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user='username' -S smtp-auth-password='password' 'to@example.com'.
BACKUP_CRON ist per Default so eingestellt, dass ein Backup alle 6 Stunden ausgeführt wird. Wenn es stündlich sein soll ändere den Wert in „0 * * * *„. Crontab Guru erklärt die Werte. Die Uhrzeiten sind in der UTC Zeitzone.
Wenn du die Umgebungsvariablen gesetzt hast, klicke auf „Übernehmen“
Klicke auf „Weiter“
Klicke auf „Fertig“
Testen des Containers
In der Docker software klicke auf „Container“ im rechten Menü, markiere den restic Container und klicke auf „Details“
Gehe auf „Terminal“ und wähle „Erstellen“ > „Mit Befehl starten“
Gib den Befehl „sh“ ein, damit wir eine Kommandozeile (shell) bekommen und klicke „OK“
Wähle nun „sh“ auf der rechten Seite. Dann erscheint ein Terminal Fenster. Hier kannst du Befehle wie „ls“ zum Anzeigen der Dateien und Ordner im root Verzeichnis nutzen, oder eben auch das Backup manuell starten mit /bin/backup. Du solltest eine Ausgabe wie die Folgende sehen:
Damit haben wir nun restic Backup fertig eingerichtet. Im nächsten Artikel restic (6) – restic Backup beschreibe ich, wie man die Einrichtung anpassen kann.
restic (2) – sftp Server vorbereiten – Der Login muss mit einem SSL Zertifikat ohne Password möglich sein, damit restic über rclone darauf zugreifen kann.
Melde dich auf deiner Synology in einem Terminal an und werde root:
$ sudo su -
Installiere rclone
# curl https://rclone.org/install.sh | sudo bash
Erstelle einen Ordner rclone unter /volume1/docker, in dem wir die rclone Konfigurationsdateien speichern werden. Dieses Verzeichnis werden wir später dem restic Docker Container zur Verfügung stellen.
# mkdir /volume1/docker/rclone
Privaten Schlüssel einrichten
Kopiere den privaten Schlüssel certififcate.pem, den wir in restic (2) – sftp Server vorbereiten erstellt hatten, in die Datei /volume1/docker/certificate.pem. Du kannst die Datei mit cat anlegen und dann via copy-paste den Inhalt von deinem Windows Rechner übertragen. Mit Ctrl-D beendest du die Eingabe und speicherst die Datei.
Stelle sicher, dass nur du den Inhalt des privaten Schlüssels sehen kannst:
# chmod 400 /volume1/docker/certificate.pem
Teste den Schlüssel mit sftp am Domain Factory server. ssh-username ist dein Nutzername auf dem server und 1111111111.hostingkunde.de ist der Hostname.
# sftp -i /volume1/docker/certificate.pem ssh-username@1111111111.hostingkunde.de
Connected to 1111111111.hostingkunde.de.
sftp>
Du siehst nun ohne Kennworteingabe den sftp> Prompt. Mit „quit“ beendest du sftp.
sftp> quit
rclone konfigurieren
Wir erstellen eine rclone Konfiguration, die wir in der Datei /volume1/docker/rclone/rclone.conf speichern:
# rclone config --config /volume1/docker/rclone/rclone.conf
2021/12/28 20:44:50 NOTICE: Config file "/volume1/docker/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q>
Mit „n“ erstellen wir die neue Konfiguration.
n/s/q> n
name>
Wir geben „domain-factory“ als Namen an.
name> domain-factory
Option Storage.
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value.
1 / 1Fichier
\ "fichier"
2 / Alias for an existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, SeaweedFS, and Tencent COS
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Better checksums for other remotes
\ "hasher"
7 / Box
\ "box"
8 / Cache a remote
\ "cache"
9 / Citrix Sharefile
\ "sharefile"
10 / Compress a remote
\ "compress"
11 / Dropbox
\ "dropbox"
12 / Encrypt/Decrypt a remote
\ "crypt"
13 / Enterprise File Fabric
\ "filefabric"
14 / FTP Connection
\ "ftp"
15 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
16 / Google Drive
\ "drive"
17 / Google Photos
\ "google photos"
18 / Hadoop distributed file system
\ "hdfs"
19 / Hubic
\ "hubic"
20 / In memory object storage system.
\ "memory"
21 / Jottacloud
\ "jottacloud"
22 / Koofr
\ "koofr"
23 / Local Disk
\ "local"
24 / Mail.ru Cloud
\ "mailru"
25 / Mega
\ "mega"
26 / Microsoft Azure Blob Storage
\ "azureblob"
27 / Microsoft OneDrive
\ "onedrive"
28 / OpenDrive
\ "opendrive"
29 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
30 / Pcloud
\ "pcloud"
31 / Put.io
\ "putio"
32 / QingCloud Object Storage
\ "qingstor"
33 / SSH/SFTP Connection
\ "sftp"
34 / Sia Decentralized Cloud
\ "sia"
35 / Sugarsync
\ "sugarsync"
36 / Tardigrade Decentralized Cloud Storage
\ "tardigrade"
37 / Transparently chunk/split large files
\ "chunker"
38 / Union merges the contents of several upstream fs
\ "union"
39 / Uptobox
\ "uptobox"
40 / Webdav
\ "webdav"
41 / Yandex Disk
\ "yandex"
42 / Zoho
\ "zoho"
43 / http Connection
\ "http"
44 / premiumize.me
\ "premiumizeme"
45 / seafile
\ "seafile"
Storage>
Als Storage Option wählen wir „33“ für sftp.
Storage> 33
Option host.
SSH host to connect to.
E.g. "example.com".
Enter a string value. Press Enter for the default ("").
host>
Dann geben wir den sftp Hostnamen ein:
host> 1111111111.hostingkunde.de
Option user.
SSH username, leave blank for current username, root.
Enter a string value. Press Enter for the default ("").
user>
Nun den Usernamen auf dem entfernten Host
user> ssh-username Option port. SSH port, leave blank to use default (22). Enter a string value. Press Enter for the default (""). port>
Als Port nehmen wir den default Wert und drücken direkt die Eingabetaste.
port> Option pass. SSH password, leave blank to use ssh-agent. Choose an alternative below. Press Enter for the default (n). y) Yes type in my own password g) Generate random password n) No leave this optional password blank (default) y/g/n>
Das Kennwort bleibt leer, also der Default Wert „n“
y/g/n> Option key_pem. Raw PEM-encoded private key. If specified, will override key_file parameter. Enter a string value. Press Enter for the default (""). key_pem>
Auch den Private Key lassen wir hier leer und drücken die Eingabetaste
key_pem> Option key_file. Path to PEM-encoded private key file. Leave blank or set key-use-agent to use ssh-agent. Leading ~ will be expanded in the file name as will environment variables such as ${RCLONE_CONFIG_DIR}. Enter a string value. Press Enter for the default (""). key_file>
Nun geben wir den Pfad zur Datei mit dem privaten Key an.
key_file> /volume1/docker/certificate.pem
Option key_file_pass.
The passphrase to decrypt the PEM-encoded private key file.
Only PEM encrypted key files (old OpenSSH format) are supported. Encrypted keys
in the new OpenSSH format can't be used.
Choose an alternative below. Press Enter for the default (n).
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank (default)
y/g/n>
Wir haben keine Passphrase, also gleich die Eingabtaste drücken.
y/g/n> Option pubkey_file. Optional path to public key file. Set this if you have a signed certificate you want to use for authentication. Leading ~ will be expanded in the file name as will environment variables such as ${RCLONE_CONFIG_DIR}. Enter a string value. Press Enter for the default (""). pubkey_file>
Wir brauchen keinen public Key hier. Eingabetaste drücken.
pubkey_file> Option key_use_agent. When set forces the usage of the ssh-agent. When key-file is also set, the ".pub" file of the specified key-file is read and only the associated key is requested from the ssh-agent. This allows to avoid Too many authentication failures for *username* errors when the ssh-agent contains many keys. Enter a boolean value (true or false). Press Enter for the default ("false"). key_use_agent>
Wir nutzen ssh-agent nicht, gleich die Eingabetaste drücken
key_use_agent>
Option use_insecure_cipher.
Enable the use of insecure ciphers and key exchange methods.
This enables the use of the following insecure ciphers and key exchange methods:
- aes128-cbc
- aes192-cbc
- aes256-cbc
- 3des-cbc
- diffie-hellman-group-exchange-sha256
- diffie-hellman-group-exchange-sha1
Those algorithms are insecure and may allow plaintext data to be recovered by an attacker.
Enter a boolean value (true or false). Press Enter for the default ("false").
Choose a number from below, or type in your own value.
1 / Use default Cipher list.
\ "false"
2 / Enables the use of the aes128-cbc cipher and diffie-hellman-group-exchange-sha256, diffie-hellman-group-exchange-sha1 key exchange.
\ "true"
use_insecure_cipher>
Wir benutzen keine unsicheren Cipher. So nehmen wir den Default Wert und drücken die Eingabetaste
use_insecure_cipher> Option disable_hashcheck. Disable the execution of SSH commands to determine if remote file hashing is available. Leave blank or set to false to enable hashing (recommended), set to true to disable hashing. Enter a boolean value (true or false). Press Enter for the default ("false"). disable_hashcheck>
Wir behalten die Prüfung des Hash Wertes bei. So nehmen wir den Default Wert und drücken die Eingabetaste
disable_hashcheck>
Edit advanced config?
y) Yes
n) No (default)
y/n>
Wir benötigen keine weiteren Details der Advanced Config. So nehmen wir den Default Wert und drücken die Eingabetaste
y/n>
--------------------
[domain-factory]
type = sftp
host = 1111111111.hostingkunde.de
user = ssh-username
port = 22
key_file = /volume1/docker/certificate.pem
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d>
Wir bestätigen die Eingabe mit „y“ (default mit Eingabetaste)
y/e/d>
Current remotes:
Name Type
==== ====
domain-factory sftp
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>
Wir beenden die Konfiguration mit „q“
e/n/d/r/c/s/q> q
#
Jetzt testen wir rclone mit dem test memory flags (Man page: „Load all the objects at remote:path into memory and report memory stats.“)
# rclone test memory --config=/volume1/docker/rclone/rclone.conf domain-factory
2021/12/28 21:07:00 NOTICE: 1 objects took -104 bytes, -104.0 bytes/object
2021/12/28 21:07:00 NOTICE: System memory changed from 16073736 to 16073736 bytes a change of 0 bytes
Es gabe keine Fehlermeldung. Alles ist gut. Wir können weiter machen und den restic Docker Container im nächsten Schritt konfigurieren (restic (5) – restic Docker Container).
restic (2) – sftp Server vorbereiten – Der Login muss mit einem SSL Zertifikat ohne Password möglich sein, damit restic über rclone darauf zugreifen kann.
restic kann auf vielfältige Weise installiert werden, aber es gibt kein Binary für Synology, and die gängigen Installer (yum, apk, etc.) sind auf Synology nicht verfügbar. Die verbleibende Option ist einen restic Docker Container zu nutzen. Das werden wir hier tun.
Docker installieren
Öffne das Synology Paketzentrum, suche nach „Docker“ und installiere das Paket.
Öffne Docker, gehe zu „Registrierung“ und suche nach „restic“
Wähle „lobaro/restic-backup-docker“ aus und klicke „Download“
Lade den Container mit dem Tag „latest“ herunter, klicke auf „Auswählen“
Die Installation von Docker erzeugt das Verzeichnis /volume1/docker auf der Synology. Das Verzeichnis benutzen wir für die sftp und rclone Konfiguration in den folgenden Schritten.
Bevor wir den Container konfigurieren und starten, müssen wir zunächst den sftp Client und rclone einrichten (restic (4) – rclone für sftp). Das machen wir morgen.
restic (2) – sftp Server vorbereiten – Der Login muss mit einem SSL Zertifikat ohne Password möglich sein, damit restic über rclone darauf zugreifen kann.
Bevor rclone eine sftp-Verbindung zum Domain Factory Server aufbauen kann, müssen die SSH Zertifikate erstellt werden.
Der Login zum sftp Server muss mit einem SSL Zertifikat ohne Password möglich sein, damit restic über rclone darauf zugreifen kann. In diesem Artikel beschreibe ich, wie man so ein Zertifikat erstellt und mit PuTTY auf Windows testen kann.
Melde dich auf dem sftp Server an. Ich gehe davon aus, dass die ssh Werkzeuge installiert sind.
Erstellen des Public/Private Key Paars
Erstelle den Unterordner .ssh/pem/ auf dem Server, wo du deine Datein später sichern willst:
$ cd .ssh
$ mkdir pem
$ cd pem
Dann erstelle das Zertifikat. Nennen wir es „certificate“. Die Passphrase bleibt leer. Das ist wichtig, damit der Key später mit rclone funktioniert.
$ ssh-keygen -t rsa -b 2048 -f certificate
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in certificate.
Your public key has been saved in certificate.pub.
The key fingerprint is:
SHA256:b1Dt6aizXC17uu4ht9N/YbRsVywr3e4wKYgapM3ye/scwk 653365@sh22197
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| o . . .|
| o + o . o.|
| = + o|
| E . X *.|
| + = o O.. o o|
| = =.=.+ .=. .|
|. o ===o o ... |
+----[SHA256]-----+
Das generierte Zertifikat besteht dann aus einem Public Key „certificate.pub“ und einem Private Key „certificate“.
$ ls
certificate certificate.pub
Den Private Key bennen wir in certificate.pem um, damit er als solcher auch als Private Key im pem-Format erkennbar ist.
$ mv certificate certificate.pem
$ ls
certificate.pem certificate.pub
Dann fügen wir den Public Key zu den erlauben Keys (authorized keys) hinzu, damit das Zertifkat für eine Anmeldung genutzt werden kann:
$ cat certificate.pub >> ~/.ssh/authorized_keys
Testen des Public/Private Key Paars
Kopiere den Private Key certificate.pem auf den Windows 10 Rechner. Ich habe dazu den Inhalt von certificate.pem angezeigt …
$ cat certificate.pem
… und mit copy-paste eine Textdatei auf meinem Windows Rechner mit demselben Namen erstellt.
Im Juni 2021 wurde im Chaosradio Podcast in der Folge CR270 Daten archivieren, wiederherstellen und löschen die Backupsoftware restic vorgestellt. „Backups done right!“ ist der restic Slogan. Die Vorstellung im Podcast hat mich dazu inspiriert, meine Daten endlich vernünftig auf entfernten System zu sichern und dazu restic zu nutzen.
Zu Hause habe ich einen Windows 10 PC. Meine Daten sind auf einer Synology DS220 mit gespiegelten Platten (RAID 1). Zusätzlich nutze ich die Synology Cloud Sync Software, um meine Daten auf Dropbox und Microsoft OneDrive zu synchroniseren.
Aber alle diese Maßnahmen ersetzen kein externes Backup, weil ein Verlust der Daten zum Beispiel durch eine Ransomware Verschlüsselung durch die Spiegelungen auf allen Medien passiert. Wenn auf einer Seite eine Datei gelöscht wird, ist sie überall gelöscht. In Microsoft OneDrive kann man alte Dateiversionen wiederherstellen, aber ich bevorzuge ein separates Backup.
restic bietet sich an, weil es freie Software ist, die seit einigen Jahren ausgereift ist. In den folgenden Artikeln werde ich beschreiben, wie ich mit restic die Daten von meiner Synology auf externen Cloud Speichern sichere. Die beiden Beispiele sind ein sftp Server von Domain Factory und Microsoft OneDrive.
restic wird auf Synology in einem Docker container des Typs lobaro / restic-backup-docker laufen und rclone verwenden, um auf die jeweiligen Backup Server zuzugreifen. Für den ersten Teil mit dem Domain Factory sftp Server sieht das so aus:
restic (2) – sftp Server vorbereiten – Der Login muss mit einem SSL Zertifikat ohne Password möglich sein, damit restic über rclone darauf zugreifen kann.