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