Webhoster wie Hetzner bieten oft gratis einige Gigabyte Platz auf ihren zentralen Backupservern an, um die eigenen Daten zu sichern. Meist sind diese per ftp/sftp oft aber auch über nfs, cifs (Samba / Netzlaufwerk) ansprechbar. Ungünstig ist dies, da so ggf. sensible Daten, ungeschützt auf einem externen zentralen Server liegen. Außerdem ist das Mounten und Un-mounten mit Backup-Skripten gerne mal fehleranfällig.
Es gibt hier aber eine elegante Lösung für dieses Problem mit dem Dienst autofs von Linux und das auch noch über encfs verschlüsselt.
Ziel ist es einen Ordner zu bekommen der, greift man auf diesen z.B. mit „ls -al“ zu, per cifs einen Ordner vom Backupserver mountet und die dort vorhandenen encfs Daten entschlüsselt anzeigt. Am besten völlig transparent ohne vorherige mount Befehle und ohne das Passwort eingeben zu müssen.
Grundlage hierfür war ein Blog-Eintrag von Jinn Koriech (Jinn Koriech’s Blog) aus 2010. Hier wurde schon fast alles komplett erklärt nur das automatische Mounten des verschlüsselten encFS Images hatte Jinn nicht hinbekommen.
Vorbemerkungen
autofs
Mit autofs kann man virtuelle Ordner anlegen. Wird auf diese Ordner zugegriffen führt das System im Hintergrund ein entsprechender mount Befehl aus. Nach einer bestimmten Zeitspanne lassen sich diese Ressourcen auch wieder automatisch trennen. Ein Beispiel wäre das CD-ROM Laufwerk.
encfs
Encfs ermöglicht es, ohne weiteren Container, Dateien im userspace zu verschlüsseln. Unverschlüsselt sieht man die selbe Anzahl an Ordnern und Dateien nur sind die Namen kryptisch ebenso wie deren Inhalt.
Generell sind alle Beispiele auf Grund eines Ubuntu/Debian Systems entstanden. Genauer gesagt Ubuntu 12.02 LTS. Bei anderen Distributionen müssen also entsprechend Anpassungen vorgenommen werden.
Installation
Wir installieren über die Paketverwaltung, encfs, autofs und die cifs Utilities.
apt-get install encfs autofs5 cifs-utils
Konfiguration
autofs
Die Konfiguration von autofs geschieht über auto.xyz Dateien in /etc/. Die Hauptdatei ist dabei die auto.master welche wir nun editieren. Wir fügen dort eine Zeile ein für unsere eigene neue Konfiguration.
# #/net -hosts /net /etc/auto.hetzner --timeout=150 # ... #+auto.master
Die Zeile mit +auto.master am Ende kommentieren wir aus. Dies bedeutet nun dass für alle Ordner die mit /net beginnen zukünftig unsere neue Konfiguration /etc/auto.hetzner zuständig ist, die wir nun erstellen.
ht-backup / -fstype=cifs,credentials=/etc/backup/samba.auth ://bserver.tld/backup \ /decrypt -fstype=encfsextpw,autofs,credentials=/etc/backup/encfs.sh,rw :/net/ht-backup/
Es handelt sich hierbei um einen sog. Multimount. Das heißt für einen Ordner müssen mehrere Unterordner gemountet werden. Die erste Zeile bindet per cifs den Ordner /backup auf dem Backupserver als /net/ht-backup auf unserem Server ein. Die zweite Zeile bindet per encfs den Ordner /net/ht-backup als /net/ht-backup/decrypt ein.
Damit dies nun funktioniert müssen wir aber noch einiges anpassen.
cifs
Wie oben zu sehen wird auf eine Datei /etc/backup/samba.auth verwiesen. Diese Datei müssen wir erstellen. Der Pfad kann natürlich gerne auch anders lauten. Wichtig ist das hier Benutzername und Passwort für den Backupserver aufgeführt sind und die Datei nur für Root lesbar ist.
username=u1111111 password=P4SSW0RTSECRE7
Wir müssen auch noch einige Ordner auf unserem Backup Server anlegen am besten per ftp/sftp. Die Ordnerstruktur sollte so aussehen:
backup backup/decrypt
Wenn wir uns den Inhalt von /net/ht-backup anschauen sollten wir nun schon den decrypt Ordner sehen.
ls -al /net/ht-backup
Falls nicht hilft ein Blick ins system log.
encfs
Da es für encfs kein so flexibles Mount-Skript gibt erstellen wir uns selbst eines. Ich kann hier keine Gewähr geben das darüber nicht irgendwie Unsinn angestellt werden kann.
Die Datei nennen wir /sbin/mount.encfsextpw wie man sieht, findet sich das encfsextpw auch weiter oben in der Datei /etc/auto.hetzner.
Update 27.01.2017: Erkennung für angehängten „-n“ Parameter durch automount.
#!/bin/bash SOURCE="$1" MOUNTPOINT="$2" AUTOFS=0; NEWOPTIONS="" # Autofs adds -n if already in /etc/mtab if (( $3 == "-n" )) then ARG1="$4" OPTIONS="$5" else ARG1="$3" OPTIONS="$4" fi # Try to find credentions and autofs options IFS=","; read -ra PARAMS <<< "$OPTIONS" for i in "${PARAMS[@]}"; do IFS="="; read -ra MYVAR <<< "$i" if [ ${MYVAR[0]} == "credentials" ]; then EXTPASS=${MYVAR[1]} elif [ ${MYVAR[0]} == "autofs" ]; then AUTOFS=1 else NEWOPTIONS="$NEWOPTIONS$i," fi done; # Save options without special vars OPTIONS=${NEWOPTIONS:0:-1} echo "Autofs: $AUTOFS" >> /tmp/log echo "Options: $OPTIONS" >> /tmp/log if [ $AUTOFS == 1 ]; then # MOunt via autofs (option autofs) MOUNTPOINT_PATH=/$(basename $MOUNTPOINT) encfs --extpass="${EXTPASS}" "$SOURCE" "$MOUNTPOINT" -o "$OPTIONS" else # Regular mount with type encfsextpw encfs --ondemand --idle=1 --extpass="${EXTPASS}" "$SOURCE" "$MOUNTPOINT" -o "$OPTIONS" fi
encfs möchte eine Bash-Datei die das Passwort ausgibt, also erstellen wir diese ebenfalls unter /etc/backup.
#!/bin/sh echo "mySecr3tPw"
Und setzten die Rechte auf ausführbar und lesbar und das nur für Root.
Für einen ersten Test mounten wir nun unseren Ordner nach /mnt.
encfs /net/ht-backup /mnt/
Beim ersten Mal wird ggf. gefragt, welches neue Passwort wir haben möchten. Hier geben wir unser zukünftiges Passwort für die Verschlüsselung ein. Dieses muß identisch sein mit dem aus der Datei /etc/backup/encfs.sh.
Hat dies geklappt können wir wieder umount /mnt ausführen.
Testen
Zum testen können wir nun den Inhalt des decrypt Ordners anzeigen lassen und einmal eine Testdatei erstellen.
ls -al /net/ht-backup/decrypt touch /net/ht-backup/decrypt/testfile mkdir /net/ht-backup/decrypt/testordner ls -al /net/ht-backup/decrypt ls -al /net/ht-backup
Damit legen wir eine Datei und einen Ordner an. Diese sollten auch angezeigt werden. Beim letzten ls Befehl dürfen wir nur cryptische Bezeichnungen für die beiden Dateien sehen.
Hinweise
So lange die Passwörter nur für root lesbar sind ist alles einigermaßen sicher. Nicht root hat auch keinen Zugriff auf den decrypt Ordner. Zu prüfen wäre noch ob andere Benutzer nicht in den /net/ht-backup Ordner selbst schreiben dürfen. Hier müssten ggf. noch Rechte geändert werden.
Backupsoftware
Aktuell verwende ich so ein Setup zusammen mit backup2l. Einer einfachen Lösung für schnelle inkrementelle Server Backups.
Fehler nach OS Upgrade
Sollte nach einem OS Upgrade von Ubuntu 12.04 LTS auf Ubuntu 14.04 LTS (trusty) der decrypt mount point nicht mehr funktionieren lohnt es sich ein Blick in die Debug Meldungen. Hierzu autofs stoppen und automount manuell starten
service autofs stop automount -f -v -d
Dann erscheinen in der Konsole direkt alle Debugging Meldungen. Nun in einer zweiten Shell den Inhalt vom /net/ht-backup/decrypt anzeigen lassen.
Steht in den Debugging Meldungen etwas wie:
spawn_mount: mtab link detected, passing -n to mount
Dann handelt es sich um eine neuere Version von autofs für die unser /sbin/mount.encfsextpw noch nicht vorbereitet war. Die neue Version oben ist inzwischen korrigiert.