System: SUSE Leap 42.1
Ich möchte meine privaten Daten auf einem root-Server im Internet sichern, aber sicher sein, dass die Daten dort verschlüsselt auf der Platte liegen.
Die verschlüsselte Partition soll nur während des Backups gemountet werden.
Meine Lösung beinhaltet ein Skript auf dem root-Server und eines auf dem Rechner, dessen Daten gesichert werden sollen.
Das Passwort soll nicht auf dem root-Server liegen, aber ich möchte es nicht
immer von Hand eingeben müssen. Deshalb ist es in dem Skript auf dem Client, denn wer
da Zugriff drauf hat, hat auch Zugriff auf die Daten. Auf dem Rootserver ist das Passwort
vermutlich während des Backups über ps
zu sehen, aber wenn jemand dort während des Backups
unerlaubten root-Zugriff hat, kommt er auch an die Daten und habe ich vermutlich noch andere
Probleme mit dem root-Server. Da ist das mit dem ps
auch egal.
Im Wesentlichen will ich sicher sein, dass die Backup-Partition nur beim Backup gemountet ist und bei ausgebauten Platten die Daten nicht lesbar sind. Wenn jemand just beim Backup unberechtigt Zugriff auf den Rechner hat - dumm gelaufen.
#!/bin/bash # SSH-Key, falls einer verwendet wird: # ssh-agent und ssh-add sollte verwendet werden, sonst muss man für jedes # zu sicherndes Verzeichnis die Passphrase vom SSH-Key eingeben SHKEY="/home/user1/.ssh/id_ed25519-derbackupschluessel" # Was nicht gesichert werden soll EXCLUDEFILE=$(mktemp -t excludebackup.XXXXXXXXXX) # echo $TMPFILE # Dateien, die nicht ins Backup sollen: cat > $EXCLUDEFILE <<EOF .cache/ [cC]ache/ .thumbnails/ .ssh/ .pgp/ .gnupg/ Trash/ lost+found/ EOF function mountcrypt { # Set up the crypt device and mount it: ssh -A -i $SSHKEY root@1.2.3.4 "/root/bin/backup-server-mount.sh passwortfuerdiepartition" } # exit 0 function rsyncbackup { # Backup the directories for i in /home/user1 /home/user2 /more/directories do rsync -e "ssh -i $SSHKEY" --exclude-from="$EXCLUDEFILE" -axR -v --del $i root@1.2.3.4:/backup done } function umountcrypt { # Umount the crypt device and close it ssh -A -i $SSHKEY root@1.2.3.4 "/root/bin/backup-server-umount.sh" # Clean up sleep 2 rm -f $TMPFILE } trap umountcrypt SIGINT SIGTERM EXIT # Here we go: mountcrypt rsyncbackup # nicht nötig, trap macht das schon: # umountcrypt
Das Skript heißt z.B. backup-mount.sh, und es gibt ein Sym-Link mit backup-umount.sh darauf.
Je nach dem, wie es aufgerufen wird, wird die eine oder die andere Funktion ausgeführt.
#!/bin/bash BASENAME=$(basename $0) # echo $BASENAME case $BASENAME in *-mount.sh) # LUKS-Device entschluesseln und mounten if cryptsetup status backup | grep backup | grep -v "is active and is in use" then echo -n "$1" | cryptsetup luksOpen --key-file - /dev/blockdevice backup mount /dev/mapper/backup /backup fi ;; *-umount.sh) # LUKS-Device unmounten und schließen umount /dev/mapper/backup cryptsetup luksClose backup ;; *) echo "Something went wrong" ;; esac