Restic Backups via SFTP auf Synology NAS speichern

Die Schritte wurden auf einem DS118 mit der Beta Version von DSM 7 durchgeführt.

SSH Zugriff auf Synology erlauben

In der Systemsteuerung unter Terminal & SNMP zunächst SSH generell aktivieren:

Von Haus aus dürfen sich nur Benutzer via SSH anmelden, die Mitglied der Administrator-Gruppe sind. Über ein händisches editieren der /etc/passwd lässt sich auch einem anderen Benutzer eine Shell zuweisen, das hält aber nur maximal bis zum nächsten Reboot. Dann wird die Anpassung wieder überschrieben. Beides ist unschön, die dauerhafte Lösung ist die mit der Gruppe. Dazu unter Benutzer & Gruppe im Gruppentab die administrators öffnen und den Backupuser hinzufügen:

Eine weitere Alternative, bei der man um die Admingruppe herumkommt, ist durch etwas Bastelei ebenfalls möglich, s. hier: https://blog.emeidi.com/2017/11/25/normalen-benutzern-den-ssh-login-auf-synology-diskstations-erlauben/ Das ist aus Perspektive der Sicherheit die beste Lösung.

Nun ist ein Anmelden via SSH für den Benutzer möglich. Beim Login wird er nach seinem Passwort gefragt. Für Restic ist notwendig, dass die Authentifizierung via Public Key eingerichtet ist, damit eine Anmeldung ohne Passwort möglich ist.

Public Key Authentifizierung einrichten

Zunächst muss man auf dem SSH Client ein Schlüsselpaar erstellen, sofern das nicht schon erledigt ist. Hier ein Beispiel für die Erstellung nach dem modernen ED25519 Verfahren:

backup@client:~$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/backup/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/backup/.ssh/id_ed25519
Your public key has been saved in /home/backup/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:Xu5m........................................LzE backup@client
The key's randomart image is:
+--[ED25519 256]--+
|        .oo      |
|       ..o       |
|       .o        |
|      .  .       |
|   ... .S o.     |
|  E.o=o. oo.o    |
|  .*+**...oo .   |
| oo.B**++oo      |
|  o*B*o+.+.      |
+----[SHA256]-----+

Die Passphrase muss dabei leer bleiben.

Die Schlüssel werden standardmäßig in einem neuen Ordner .ssh innerhalb des Benutzerverzeichnisses erstellt. Der öffentliche Schlüssel heißt i.d.R. id_ed25519.pub, der private entsprechend nur id_ed25519. Den öffentlichen Schlüssel kopiert man sich in die Zwischenablage. Dieser Public Key muss nun auf dem SSH Server als erlaubter Schlüssel hinterlegt werden. Dazu loggt man sich auf dem NAS via SSH mit einem Administratorkonto per SSH ein (noch mit Passwort). Die Datei mit den erlaubten Schlüsseln gehört ebenfalls im Homeverzeichnis des entsprechenden Nutzers in den Ordner .ssh und nennt sich authorized_keys.

Nehmen wir an, der Benutzer auf dem NAS heißt "backup". Dann ist in der Standardeinstellung das Homeverzeichnis /volume1/homes/backup. Dort wird jetzt der notwendige Ordner und die passende Datei erstellt:

admin@nas:~# mkdir /volume1/homes/backup/.ssh
admin@nas:~# touch /volume1/homes/backup/.ssh/authorized_keys

In die Datei authorized_keys fügt man nun den Public Key des Clients ein, der weiter oben in die Zwischenablage kopiert wurde.

Berechtigungen setzen

SSH ist extrem pingelig, was die Berechtigungen für die Keyfiles angeht. Sollten Sie nicht stimmen, ist ein Anmelden via Public Key nicht möglich und es erscheint die Aufforderung zur Passworteingabe. Daher müssen die Berechtigungen gesetzt werden. Bei Synology sind selbst die Berechtigungen der Homeverzeichnisse zu lax, sodass man hier bereits anfangen muss. Für den User backup ergeben sich folgende Korrekturen:

admin@nas:~# chmod 755 /volume1/homes/backup
admin@nas:~# chmod 700 /volume1/homes/backup/.ssh
admin@nas:~# chmod 600 /volume1/homes/backup/.ssh/authorized_keys

Jetzt passt alles und ein Einloggen vom vorbereiteten Client aus sollte jetzt via Public Key ohne Eingabe des Benutzerpasswortes funktionieren. Damit sind die Vorraussetzungen für Restic erfüllt.

Restic Syntax

Da Restic das Arbeiten via SFTP von Haus aus beherrscht, muss lediglich der Pfad zum Repository entsprechend angegeben werden. Zum Initialisieren beispielsweise so:

user@client:~$ restic -r sftp:/backup@<NAS-IP-Adresse>:/<Pfad-zum-Repository> init

Wichtig ist natürlich, dass der User backup auch die Berechtigungen hat, im angegebenen Zielverzeichnis zu schreiben.

Man könnte nun meinen, der <Pfad-zum-Repository> müsste mit /volume1 beginnen, da unter /volume1 die freigegebenen Verzeichnisse liegen. Das ist jedoch nicht der Fall. Es scheint ein Feature von Synology zu sein, dass man genau das weglassen muss. Möchte man ein Repository erstellen, das auf der Festplatte unter /volume1/mein-ordner/restic liegt so lautet der korrekte Pfad zum Repository sftp:/backup@<NAS-IP-Adresse>:/mein-ordner/restic.

Diese Besonderheit gilt übrigens nur bei SFTP. Wenn man via SCP eine Datei zum NAS kopieren möchte, muss hier der vollständige Pfad inkl. /volume1 angegeben werden.

Sicherheit Linux DiskStation DSM Synology Public-Key SSH Restic SFTP

Vorheriger Post