Daten sicher in der Synchro-Wolke dank encfs

Dirk hat in einem Beitrag erklärt wie man mit Taskwarrior Aufgaben von Haus aus über Rechner synchronisieren kann. In diesem Zusammenhang hat er auch erwähnt, dass viele Benutzer den Weg gehen Synchronisationsdienste zu nutzen um Verzeichnisse zwischen verschiedenen Rechnern  zu synchronisieren. Natürlich mit dem Nachteil, dass man die Daten dann aus der Hand gibt und anderen zugänglich macht.

Um dafür zu sorgen, dass private Daten auch privat bleiben gibt es natürlich die Möglichkeit diese zu verschlüsseln. Wenn man die Synchronisation nur unter Linux verwendet bietet sich encfs dafür an.
Über encfs habe ich bereits in einem anderen Zusammenhang, nämlich das Backup von verschlüsselten Daten per rsycn, geschrieben.

Für eine Aufgabenverwaltung kann ich es mir sehr gut vorstellen, dass es sehr sinnvoll sein kann die Daten zwischen Rechnern synchron zu halten. Man möchte ja auf jedem seiner Rechner seine Aufgaben verwalten können. Ich verwende selbst kein Taskwarrior (ich finde das Programm sehr mächtig und interessant, leider bin ich selbst zu wenig auf der Kommadozeile unterwegs), aber als Beispiel nehmen wir an, dass Taskwarrior die Daten in ~/.task speichert. Schauen wir uns das Verzeichnis an:

sparrow@terra:~$ ls ~/.task/
data.sqlite
sparrow@terra:~$ cat ~/.task/data.sqlite
Ganz viele Aufgaben

In unserem Beispiel existiert dort nur eine Datei mit dem Namen „data.sqlite“. Das köntne im Normalfall eine Datenbank sein die die entsprechenden Aufgaben enthält. Natürlich ist das hier nur ein Fake, und um zu verdeutlichen, dass es sich um unverschlüsselte Daten handelt enthält die Datei nur den Klartext der oben zu sehen ist.

Synchronisationsdienste funktionieren so, dass es ein bestimmtes Verzeichnis gibt, dass zwischen den Rechnern synchron gehalten wird. Bei Dropbox ist es zum Beispiel so, dass es ein Verzeichnis im Home-Verzeichnis existiert (in der Regel ~/Dropbox) und eine Software dafür sorgt, dass Änderungen an den Dropbox-Server gesendet wird. Andere Rechner des Accounts werden über Änderungen informiert und laden die Änderungen von dort herunter. Ebenso der eigene Rechner wenn ein anderer Daten ändert.

Würden wir also einfach das Verzeichnis in den Dropbox-Ordner veschieben würden die Klardaten auf dem Dropbox-Server ankommen. Das wollen wir natürlich nicht.

Wir müssen also dafür sorgen, dass in den Dropbox-Ordner nur verschlüsselte Daten liegen, an der Stelle wo das Programm allerdings danach sucht muss eine unverschlüsselte Sicht darauf existieren.

Zuerst einmal verschieben wir das bisherige Datenverzeichnis damit an der Stelle gleich die unverschlüsselte Sicht treten kann. Dafür verschieben wir es nach /tmp:

sparrow@terra:~$ mv ~/.task /tmp/

Wir legen uns also ein Verzeichnis im Dropbox Ordner an (wir nennen es „taskdata“) und weisen encfs an dieses Verzeichnis als verschlüsseltes Basisverzeichnis zu verwenden. Eine unverschlüsselte Sicht mounten wir an die Stelle an der das Programm die Daten erwartet (~/.task). Auch dieses Verzeichnis legen wir vorher an.
Normalerweise fragt encfs bei fehlenden Verzeichnissen ob es diese anlegen soll. Das hat bei mir leider nicht korrekt funktioniert, daher lege ich sie per Hand an.

sparrow@terra:~$ mkdir ~/Dropbox/taskdata
sparrow@terra:~$ mkdir ~/.task
sparrow@terra:~$ encfs ~/Dropbox/taskdata ~/.task
Neuer verschlüsselter Datenträger wird erstellt.
Bitte wählen Sie eine der folgenden Optionen:
"x" für den Expertenmodus,
"p" für den vorkonfigurierten Paranoia-Modus,
etwas anderes oder eine Leerzeile wählt den Standard-Modus.
?>

Standard-Modus gewählt.

Konfiguration abgeschlossen. Das angelegte Dateisystem hat die
folgenden Eigenschaften:
Dateisystem Chiffre: "ssl/aes", Version 3:0:2
Dateinamenskodierung: "nameio/block", Version 3:0:1
Schlüssellänge: 192 Bits
Blockgröße: 1024 Byte
Jede Datei enthält acht Byte Vorspann mit einmaligen IV Daten.
Dateinamensverschlüsselung benutzt IV Verkettungsmodus.
File holes passed through to ciphertext.

Nun wird ein Kennwort für das Dateisystem benötigt.
Da es keinen Mechanismus zur Wiederhestellung gibt, müssen Sie
sich an das Kennwort erinnern! Das Kennwort kann mit encfsctl
nächträglich geändert werden.

Neues EncFS-Passwort:
EncFS-Passwort bestätigen:

Das war es schon, die Verschlüsselung ist eingerichtet. Nun kopieren wir die Daten wieder an ihren ursprünglichen Platz zurück und werfen einen Blick in die beiden Verzeichnisse.

sparrow@terra:~$ cp -rav /tmp/.task/. ~/.task/
„/tmp/.task/./data.sqlite“ -> „/home/sparrow/.task/./data.sqlite“
sparrow@terra:~$ ls -la ~/.task
insgesamt 20
drwxr-xr-x   2 sparrow sparrow  4096 25. Nov 23:10 .
drwxr-xr-x 116 sparrow sparrow 12288 25. Nov 23:01 ..
-rw-r--r--   1 sparrow sparrow    20 25. Nov 23:10 data.sqlite
sparrow@terra:~$ cat ~/.task/data.sqlite
Ganz viele Aufgaben
sparrow@terra:~$ ls -la ~/Dropbox/taskdata/
insgesamt 16
drwxr-xr-x  2 sparrow sparrow 4096 25. Nov 23:10 .
drwx------ 19 sparrow entropy 4096 25. Nov 22:58 ..
-rw-r--r--  1 sparrow sparrow 1077 25. Nov 23:02 .encfs6.xml
-rw-r--r--  1 sparrow sparrow   28 25. Nov 23:10 -Iy-6mfMw3JpfTVoEonxVOI8

Wie man sieht gibt es unter ~/.task eine unverschlüsselte Sicht auf die Daten, damit kann das entsprechende Programm problemlos arbeiten. In dem Dropbox-Ordner jedoch, und damit auch auf dem Dropbox-Server, gibt es nur verschlüsselte Daten. Selbst der Dateiname gibt keinerlei Hinweis mehr auf den Inhalt.

Wir schauen was gemountet ist und hängen anschließend die unverschlüsselte Sicht wieder aus:

sparrow@terra:~$ mount | grep encfs
encfs on /home/sparrow/.task type fuse.encfs (rw,nosuid,nodev,default_permissions,user=sparrow)
sparrow@terra:~$ fusermount -u ~/.task
sparrow@terra:~$ mount | grep encfs

Alles was wir jetzt noch haben sind die verschlüsselten Daten im Dropbox-Ordner. Und um später, oder auf einem anderen Rechner, die unverschlüsselte Sicht wieder zu mounten genügt wieder der Befehl mit dem wir vorhin die Verschlüsselung erstellt haben, allerdings gibt es diesmal nicht so viele Ausgaben, denn es müssen keine neuen Schlüssel generiert werden:

sparrow@terra:~$ encfs ~/Dropbox/taskdata ~/.task
EncFS-Passwort:

Dem aufmerksamen Leser ist sicherlich aufgefallen, dass es eine neue Datei in dem Verzeichnis gibt in dem eigentlich die verschlüsselten Daten liegen sollten: „.encfs6.xml“. Diese Datei muss unbedingt aufgehoben werden, und sie liegt daher genau richtig um mit auf synchronisiert zu werden. In ihr befinden sich die benötigten Schlüssel die mit der Passworteingabe freigeschaltet werden. Ohne diese Datei ist ein entschlüsseln der Daten nicht nötig.
Wenn man ganz auf Nummer Sicher gehen will, kann man diese Datei auch nicht mit synchronisieren. Dann muss man sie auf andere Weise zu den entsprechenden Rechnern bringen auf denen entschlüsselt werden soll. Wenn die Datei nicht in dem Verzeichnis der verschlüsselten Daten liegt kann man die Position der Datei über eine Variable festlegen:

sparrow@terra:~$ ENCFS6_CONFIG=/path/to/.encfs6.xml encfs ~/Dropbox/taskdata ~/.task

Natürlich geht einem damit Komfort verloren. Die Daten lassen sich nur noch auf Maschinen entschlüsseln auf denen encfs verfügbar ist. Ich weiß nicht ob es da schon etwas für Handys und Windows-Rechner gibt. Aber ich verzichte gerne auf etwas Komfort und Features und habe dafür meine Daten sicher verschlüsselt, wenn sie schon nicht auf meinen eigenen Maschinen liegen.

Vielleicht hilft das ja dem einem oder anderen Daten verschlüsselt zu synchronisieren.

— der Würschtlmann

3 Gedanken zu “Daten sicher in der Synchro-Wolke dank encfs

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s