Verschlüsseltes Backup: Unterschied zwischen den Versionen

Aus
K (Anmerkungen)
(umgestellt auf autorun)
Zeile 52: Zeile 52:
== Fertiges Script ==
== Fertiges Script ==
Das folgende Script automatisiert den kompletten Vorgang (die Punkte 5. bis 7), zusätzlich mit:
Das folgende Script automatisiert den kompletten Vorgang (die Punkte 5. bis 7), zusätzlich mit:
* automatisches Ausführen beim Anstecken der Platte (mittels [http://www.synology-forum.de/showthread.html?t=18360 autorun])
* Fehlerprüfungen
* Fehlerprüfungen
* Logging (es wird eine Logdatei pro Woche angelegt)
* Logging (es wird eine Logdatei pro Woche angelegt)
* Mailbenachrichtigung
* Mailbenachrichtigung
* Auswerfen des Datenträgers nach Abschluss des Backups
* Auswerfen des Datenträgers nach Abschluss




Das erste Script findet sich auf der DS und steuert das Mounten:
Das Backup wird mittels [http://www.synology-forum.de/showthread.html?t=18360 autorun] gestartet. Daher brauchen wir ein passendes autorun-Skript (<code>/volumeSATA/satashare/autorun</code>):
<pre style="margin-left:20px">#!/bin/sh
<pre style="margin-left:20px">#!/bin/sh
/volume1/backupSATA $1
exit $?</pre>
Dieses startet das Mount-Skript, welches sich auf der DS befindet (weil dort Angaben zur Verschlüsselung drin sind).


logfile="/volume1/backup/backup-sata-`date +%Y-%V`.log"
device="/volumeSATA/satashare"


if [ -e $device/do.backup ]
Das zweite Script findet sich auf der DS (<code>/volume1/backupSATA</code>) und steuert das Mounten:
<pre style="margin-left:20px">#!/bin/sh
 
if [ -z "$1" ]
then
then
         echo "device connected, starting backup"
         exit 1
else
        echo "no device connected, aborting backup"
        return
fi
fi
logfile="/volume1/backup/backup-sata-`date +%Y-%V`.log"
device=$1


echo "########################################################################" >> $logfile
echo "########################################################################" >> $logfile
Zeile 77: Zeile 82:
echo "" >> $logfile
echo "" >> $logfile


mount -t ecryptfs $device/@backup@ $device/backup \
/bin/mount -t ecryptfs $device/@backup@ $device/backup \
-o rw,ecryptfs_sig=d1a01d50c3f21e00,ecryptfs_fnek_sig=d1a01d50c3f21e00,ecryptfs_cipher=aes,ecryptfs_key_bytes=32
-o rw,ecryptfs_sig=d1a01d50c3f21e00,ecryptfs_fnek_sig=d1a01d50c3f21e00,ecryptfs_cipher=aes,ecryptfs_key_bytes=32
if [ $? -eq 0 ]
if [ $? -eq 0 ]
Zeile 85: Zeile 90:
         echo "Error while mounting the encrypted filesystem" >> $logfile
         echo "Error while mounting the encrypted filesystem" >> $logfile
         echo "" >> $logfile
         echo "" >> $logfile
         synomail SATABackupFailed
         /usr/syno/bin/synomail SATABackupFailed
         return
         exit 1
fi
fi


Zeile 95: Zeile 100:
echo "" >> $logfile
echo "" >> $logfile


umount $device/backup >> $logfile
/bin/umount $device/backup >> $logfile
if [ $? -eq 0 ]
if [ $? -eq 0 ]
then
then
Zeile 102: Zeile 107:
         echo "Error while unmounting the encrypted filesystem" >> $logfile
         echo "Error while unmounting the encrypted filesystem" >> $logfile
         echo "" >> $logfile
         echo "" >> $logfile
         synomail SATABackupFailed
         /usr/syno/bin/synomail SATABackupFailed
         return
         exit 1
fi
fi


echo "" >> $logfile
echo "" >> $logfile
df -h $device >> $logfile
/bin/df -h $device >> $logfile
echo "" >> $logfile
echo "" >> $logfile
echo "Backup finished on `date +%Y-%m-%d` `date +%k:%M:%S`" >> $logfile
echo "Backup finished on `date +%Y-%m-%d` `date +%k:%M:%S`" >> $logfile
echo "" >> $logfile
echo "" >> $logfile


synosata -umount sdg1
/usr/syno/bin/synomail SATABackupSuccess
if [ $? -eq 0 ]
exit 100</pre>
then
        echo "Drive unmounted" >> $logfile                                                                         
        echo "" >> $logfile
else
        echo "Error while unmounting the drive" >> $logfile
        echo "" >> $logfile
        synomail SATABackupFailed
        return
fi
echo 1 > /sys/block/sdg/device/delete
 
synomail SATABackupSuccess</pre>




Das zweite Script findet sich auf der Platte selbst ("<code>/volumeSATA/satashare/backup/run.backup</code>"). Dadurch können verschiedene Platten mit unterschiedlichen Backupaufgaben verwenden werden. Zusätzlich dient die Datei "<code>/volumeSATA/satashare/do.backup</code>" als Sicherheitsmechanismus. Wenn diese nicht existert, passiert auch nicht, für den Fall, dass mal eine andere Platte angeschlossen ist.
Das dritte Script findet sich auf der Platte selbst ("<code>/volumeSATA/satashare/backup/run.backup</code>"). Dadurch können verschiedene Platten mit unterschiedlichen Backupaufgaben verwenden werden.
<pre style="margin-left:20px">echo ""
<pre style="margin-left:20px">echo ""
echo "-- homes ---------------------------------------------------------------"
echo "-- homes ---------------------------------------------------------------"
rsync -avh --delete --exclude=#recycle --exclude=Thumbs.db /volume1/homes/ $1/backup/homes
/usr/syno/bin/rsync -avh --delete --exclude=#recycle --exclude=Thumbs.db /volume1/homes/ $1/backup/homes


...</pre>
...</pre>
Zeile 139: Zeile 132:


Die folgenden Stellen muss man ggf. anpassen:
Die folgenden Stellen muss man ggf. anpassen:
* 1. Script - "<code>/volume1/backup/backup-sata-`date +%Y-%V`.log</code>": Das ist die Logdatei. Hier muss ggf. der Pfad angepasst werden.
* 2. Script - "<code>/volume1/backup/backup-sata-`date +%Y-%V`.log</code>": Das ist die Logdatei. Hier muss ggf. der Pfad angepasst werden.
* 1. Script - "<code>/volumeSATA/satashare</code>: Dies ist das Gerät, auf dem die Backups landen sollen. An dem Pfad müssen sich die beiden Verzeichnisse  "@backu@" und "backup" befinden.
* 2. Script - "<code>d1a01d50c3f21e00</code>": Das ist der Schlüssel. Da er vom verwendeten Passwort abhängt muss er entsprechend angepasst werden.
* 1. Script - "<code>d1a01d50c3f21e00</code>": Das ist der Schlüssel. Da er vom verwendeten Passwort abhängt muss er entsprechend angepasst werden.
* 2. Script - "<code>synomail ...</code>": Die Mailbenachrichtigung erfolgt über die eingebaute Funktion der DS, also muss sie auch in der Systemsteuerung konfiguriert sein. Die Texte sind in "/usr/syno/synoman/webman/texts/ger/mails" (bzw. die Sprache, die für die DS eingestellt ist), hier müssten die beiden Einträge "SATABackupFailed" und "SATABackupSuccess" hinzugefügt werden. Alternativ die Zeilen rausnehmen (keine Mail) oder durch eine [[Statusmail von der Diskstation|alternative Variante]] ersetzen.
* 1. Script - "<code>synomail ...</code>": Die Mailbenachrichtigung erfolgt über die eingebaute Funktion der DS, also muss sie auch in der Systemsteuerung konfiguriert sein. Die Texte sind in "/usr/syno/synoman/webman/texts/ger/mails" (bzw. die Sprache, die für die DS eingestellt ist), hier müssten die beiden beiden Einträge "SATABackupFailed" und "SATABackupSuccess" hinzugefügt werden. Alternativ die Zeilen rausnehmen (keine Mail) oder durch eine [[Statusmail von der Diskstation|alternative Variante]] ersetzen.
* 3. Script: Dieses muss man an seine Gegebenheiten anpassen, welches Backupprogramm, welche Verzeichnisse, .... Wichtig ist, dass immer absolute Pfadangaben zu den Programmen verwendet werden müssen, da bei Ausführen der Suchpfad ggf. eingeschränkt ist.
* 1. Script - "<code>synosata -umount sdg1</code>" + der darauf folgende if-Block + "<code>echo 1 > /sys/block/sdg/device/delete</code>": Damit wird die externe Platte am eSATA-Anschluss [http://www.synology-forum.de/showthread.html?t=17384 ausgeworfen]. Das ist ein nicht offiziell von Synology unterstützter Befehl, kann also in zukünftigen Versionen ggf. nicht mehr funktionieren.
* 2. Script: Dieses muss man an seine Gegebenheiten anpassen, welches Backupprogramm, welche Verzeichnisse, ....





Version vom 12. Februar 2011, 09:18 Uhr

Die hier beschriebenen Methode dient zur Verschlüssung eines Backups mit Hilfe von eCryptfs. Dieses ist seit DSM 2.3 mit in der Standard-Firmware enthalten. Sie kann prinzipiell für alle an der DS angeschlossenen Datenträger verwendet werden (interne, USB, eSATA).


Voraussetzungen


Vorgehen

1. Erstellen eines verschlüsselten Ordners, ganz normal übers DSM.

Der Name ist egal, wir brauchen davon nur den Schlüssel, daher kann der Ordner auch versteckt werden und es braucht auch keiner Rechte drauf. Wichtig ist, den Ordner zu verschlüsseln. Das verwendete Passwort sollte man sich gut merken, da man es im Falle eines Ausfalls der DS wieder benötigt.
Da der Schlüssel nur für die externen Platten verwendet wird, kann er auch dauerhaft auf der DS liegen. Dieser Ordner darf nicht gelöscht werden, weil dann auch der Schlüssel verloren geht.
Dieser Schritt ist nur ein einziges Mal durchzuführen.
Anmerkung: Die Schlüsselverwaltung ist scheinbar etwas fragil. Änderungen an den Freigaben können dazu führen, dass der mount-Befehl nicht mehr funktioniert (mit der nichtssagenden Fehlermeldung "No such file or directory"). In dem Fall den Ordner löschen und erneut anlegen.

2. Die externe Platte anhängen.

3. Konsole auf die DS öffnen.

4. Auf der externen Platte die notwendigen Verzeichnisse anlegen.

DS> cd /volumeSATA/satashare/
DS> mkdir @backup@
DS> mkdir backup
Auch dieser Schritt ist nur ein einziges Mal durchzuführen.

5. Das verschlüsselte Dateisystem mounten.

Die notwendigen Daten erfährt man durch die Eingabe von "mount".
DS> mount
...
/volume1/@test@ on /volume1/test type ecryptfs (rw,ecryptfs_sig=d1a01d50c3f21e00,
ecryptfs_fnek_sig=d1a01d50c3f21e00,ecryptfs_cipher=aes,ecryptfs_key_bytes=32)
(Die Zeile wurde zur besseren Lesbarkeit umgebrochen. Anstelle von "test" den oben angelegten Ordnernamen suchen. Die Buchstaben-Ziffer-Kombination - im Beispiel "d1a01d50c3f21e00" - hängt vom jeweiligen Passwort ab.)
Relevant ist der Teil in Klammern. Daraus ergibt sich dann folgender Befehl (alles in einer Zeile):
DS> mount -t ecryptfs /volumeSATA/satashare/@backup@ /volumeSATA/satashare/backup -o rw,ecryptfs_sig=d1a01d50c3f21e00,
ecryptfs_fnek_sig=d1a01d50c3f21e00,ecryptfs_cipher=aes,ecryptfs_key_bytes=32
Im Verzeichnis "@backu@" landen die verschlüsselten Daten, daher sollte man dort selber nichts anfassen. Der Zugriff erfolgt über das Verzeichnis "backup".

6. Durchführen des Backups.'

Jetzt kann man in "/volumeSATA/satashare/backup" ein Backup durchführen, hierbei kann man das Backupprogamm seiner Wahl verwenden (rsync, rsnapshot oder was auch immer).

7. Das verschlüsselte Dateisystem aushängen, wenn das Backup abgeschlossen ist und der Datenträger entfernt werden soll.

DS> umount /volumeSATA/satashare/backup/


Fertiges Script

Das folgende Script automatisiert den kompletten Vorgang (die Punkte 5. bis 7), zusätzlich mit:

  • automatisches Ausführen beim Anstecken der Platte (mittels autorun)
  • Fehlerprüfungen
  • Logging (es wird eine Logdatei pro Woche angelegt)
  • Mailbenachrichtigung
  • Auswerfen des Datenträgers nach Abschluss


Das Backup wird mittels autorun gestartet. Daher brauchen wir ein passendes autorun-Skript (/volumeSATA/satashare/autorun):

#!/bin/sh
/volume1/backupSATA $1
exit $?

Dieses startet das Mount-Skript, welches sich auf der DS befindet (weil dort Angaben zur Verschlüsselung drin sind).


Das zweite Script findet sich auf der DS (/volume1/backupSATA) und steuert das Mounten:

#!/bin/sh

if [ -z "$1" ]
then
        exit 1
fi

logfile="/volume1/backup/backup-sata-`date +%Y-%V`.log"
device=$1

echo "########################################################################" >> $logfile
echo "" >> $logfile
echo "Starting backup on `date +%Y-%m-%d` `date +%k:%M:%S`" >> $logfile
echo "" >> $logfile

/bin/mount -t ecryptfs $device/@backup@ $device/backup \
-o rw,ecryptfs_sig=d1a01d50c3f21e00,ecryptfs_fnek_sig=d1a01d50c3f21e00,ecryptfs_cipher=aes,ecryptfs_key_bytes=32
if [ $? -eq 0 ]
then
        echo "Encrypted filesystem mounted" >> $logfile
else
        echo "Error while mounting the encrypted filesystem" >> $logfile
        echo "" >> $logfile
        /usr/syno/bin/synomail SATABackupFailed
        exit 1
fi

$device/backup/run.backup $device >> $logfile 2>&1

echo "" >> $logfile
echo "------------------------------------------------------------------------" >> $logfile
echo "" >> $logfile

/bin/umount $device/backup >> $logfile
if [ $? -eq 0 ]
then
        echo "Encrypted filesystem unmounted" >> $logfile
else
        echo "Error while unmounting the encrypted filesystem" >> $logfile
        echo "" >> $logfile
        /usr/syno/bin/synomail SATABackupFailed
        exit 1
fi

echo "" >> $logfile
/bin/df -h $device >> $logfile
echo "" >> $logfile
echo "Backup finished on `date +%Y-%m-%d` `date +%k:%M:%S`" >> $logfile
echo "" >> $logfile

/usr/syno/bin/synomail SATABackupSuccess
exit 100


Das dritte Script findet sich auf der Platte selbst ("/volumeSATA/satashare/backup/run.backup"). Dadurch können verschiedene Platten mit unterschiedlichen Backupaufgaben verwenden werden.

echo ""
echo "-- homes ---------------------------------------------------------------"
/usr/syno/bin/rsync -avh --delete --exclude=#recycle --exclude=Thumbs.db /volume1/homes/ $1/backup/homes

...


Anmerkungen

Die folgenden Stellen muss man ggf. anpassen:

  • 2. Script - "/volume1/backup/backup-sata-`date +%Y-%V`.log": Das ist die Logdatei. Hier muss ggf. der Pfad angepasst werden.
  • 2. Script - "d1a01d50c3f21e00": Das ist der Schlüssel. Da er vom verwendeten Passwort abhängt muss er entsprechend angepasst werden.
  • 2. Script - "synomail ...": Die Mailbenachrichtigung erfolgt über die eingebaute Funktion der DS, also muss sie auch in der Systemsteuerung konfiguriert sein. Die Texte sind in "/usr/syno/synoman/webman/texts/ger/mails" (bzw. die Sprache, die für die DS eingestellt ist), hier müssten die beiden Einträge "SATABackupFailed" und "SATABackupSuccess" hinzugefügt werden. Alternativ die Zeilen rausnehmen (keine Mail) oder durch eine alternative Variante ersetzen.
  • 3. Script: Dieses muss man an seine Gegebenheiten anpassen, welches Backupprogramm, welche Verzeichnisse, .... Wichtig ist, dass immer absolute Pfadangaben zu den Programmen verwendet werden müssen, da bei Ausführen der Suchpfad ggf. eingeschränkt ist.


Getestet mit

  • Merthos: DS1010 - DSM 2.3, externe Platte am eSATA-Anschluss (LogiLink QuickPort Docking Station) - ohne Auswerfen der Platte
  • Merthos: DS1010 - DSM 3.0, externe Platte am eSATA-Anschluss (LogiLink QuickPort Docking Station)


Wiederherstellung

Sofern auf der DS noch alles OK ist (ursprünglicher verschlüssselter Ordner noch vorhanden):

1. Externe Platte anhängen.

2. Konsole auf die DS öffnen.

3. Das verschlüsselte Dateisystem mounten.

DS> mount -t ecryptfs /volumeSATA/satashare/@backup@ /volumeSATA/satashare/backup -o rw,ecryptfs_sig=d1a01d50c3f21e00,
ecryptfs_fnek_sig=d1a01d50c3f21e00,ecryptfs_cipher=aes,ecryptfs_key_bytes=32

4. Daten aus "/volumeSATA/satashare/backup" wiederherstellen, manuell kopieren oder wieder rsync, ....

5. Nach Abschluss das verschlüsselte Dateisystem wieder aushängen.

DS> umount /volumeSATA/satashare/backup/


Wenn der verschlüssselter Ordner auf der DS weg ist bzw. man eine neue DS hat

1. Verschlüsselten Ordner übers DSM anlegen. Hierbei das gleiche Passwort wie ursprünglich eingeben.

2. Punkte 1-5 wie vorstehend.


Wenn man keine DS mehr besitzt

Wie hier beschrieben vorgehen. Auch hierbei ist das ursprünglich eingegebene Passwort notwendig.