Kategorien
Systemadministration

Mit encfs und autofs ein verschlüsseltes Laufwerk vom Backupserver des Hosters mounten. (Update)

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.

Von Christian Stengel

Geek, PHP Entwickler, Linux Admin

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.