Open Source im professionellen Einsatz

Fremde Daten aufs Dateisystem abbilden

Verhandlungskünstler

Userspace-Dateisysteme führen das Unix-Paradigma "Alles ist eine Datei" konsequent fort. Sie verwandeln Datenbanken, SSH-Verbindungen oder E-Mail-Accounts in Dateien. Für die Verschlüsselung lokaler Dateien ist ebenfalls gesorgt. So ersparen sich Anwender das Aufsetzen komplizierter Clients.

Es scheint ein Wesenszug von Computerdaten zu sein, möglichst verstreut aufzutreten: In Datenbanken, auf Fileservern, in Mailboxen oder auf Chipkarten. Und für jedes dieser Speichermedien gibt es extra Software, mit der die User auf ihre Daten zugreifen müssen. Wünschenswert wäre eine einheitliche Schnittstelle zu allen Informationen. Die hier vorgestellten Userspace-Dateisysteme leisten genau dies. Sie stellen Anwendern Daten aus den verschiedensten Quellen im Dateisystem bereit. So reduziert sich die Aufgabe, Informationen von der lokalen Chipkarte zum Computer am anderen Ende der Welt zu schicken, auf den einfachen Aufruf »cp Quelldatei Zielverzeichnis«.

Obwohl sich die zahlreichen Implementierungen im Detail unterscheiden, ist das Prinzip der Userspace-Dateisysteme stets gleich. Ein Kernelmodul hängt sich in das virtuelle Filesystem (VFS) des Kernels ein und fängt Systemaufrufe wie »open()«, »read()« und »write()« ab. Diese leitet es an einen Daemon oder eine Bibliothek weiter. Die kümmern sich dann um die Ausführung des Aufrufs, etwa bei einem »read()« den entsprechenden Befehl über das SSH-Protokoll an den entfernten Rechner zu schicken. Abbildung 1 illustriert diese Funktionsweise anhand von SHFS[1], das eine SSH-Verbindung ins Dateisystem einbindet. Dank des VFS bemerken die Anwendungen gar nicht, aus welcher Quelle die Dateien kommen.

Abbildung 1: Über ein Kernelmodul erhalten Userspace-Filesysteme den Zugriff auf die Systemaufrufe. Das VFS erlaubt die verschiedensten Kombinationen. ProcFS etwa stellt Systeminformationen bereit und NFS beliefert den Anwender mit Daten aus dem Netzwerk.

Abbildung 1: Über ein Kernelmodul erhalten Userspace-Filesysteme den Zugriff auf die Systemaufrufe. Das VFS erlaubt die verschiedensten Kombinationen. ProcFS etwa stellt Systeminformationen bereit und NFS beliefert den Anwender mit Daten aus dem Netzwerk.

Vorteil Userspace

Theoretisch wäre es auch möglich, alle Funktionen direkt in den Kernel zu integrieren. Doch es ist sinnvoller, nur den unabdingbaren Teil der Programmlogik in ein Kernelmodul zu packen. Im Userspace nutzen die Programmierer dann die schon vorhandenen Bibliotheken und Programme. Den Großteil der Logik in den Userspace zu verlagern, eröffnet den Programmierern somit schier unendliche Möglichkeiten.

Mit den beiden Frameworks Fuse[2] und Lufs[3] lassen sich relativ einfach neue Dateisysteme entwickeln. Sie enthalten beide ein Kernelmodul und stellen für es Interfaces bereit. Bei Fuse erstellt der Programmierer ein eigenes Binary, das sich um das Mounten kümmert, in Lufs gibt es das generische Programm »lufsmount«, das eine jeweils passende Shared Library zur Laufzeit einbindet.

Fuse-Framework

Da die meisten Distributoren (außer Debian) keine Fuse-Pakete ausliefern, müssen Anwender die Sourcen von der Website[2] selbst kompilieren. Das geht aber problemlos vonstatten. (Trotz einer Fehlermeldung wie »failed to set capabilities: Operation not permitted« beim Mounten von Fuse-Filesystemen funktioniert das System.) Die Fuse-Suite kommt lediglich mit einem kleinen Beispielprogramm. Eine Liste aller Dateisysteme gibt es auf[4].

Eines davon ist EncFS[5], das Dateien transparent on the fly verschlüsselt. Es benutzt die OpenSSL-Bibliothek und ist einfach zu handhaben. Nach der Installation genügt der Aufruf »encfs Quellverzeichnis Zielverzeichnis«. Alle Dateien, die Anwender nun im Verzeichnis Zielverzeichnis anlegen, verschlüsselt EncFS. Die geschützten Dateiversionen landen im Quellverzeichnis. Nach dem Unmounten verschwinden die Dateien aus Zielverzeichnis wieder . In Listing 1 ist eine Beispielsession dargestellt.

Listing 1: Beispiel
einer EncFS-Session

01 murdoc:/home/mwerner/crypt/encfs$ encfs ~mwerner/crypt/encfs/raw/ ~mwerner/crypt/encfs/work/
02 EncFS Password:
03 murdoc:/home/mwerner/crypt/encfs$ ls work/
04 bar  foo  hello  test1  test2
05 murdoc:/home/mwerner/crypt/encfs$ touch work/diesisteintestencfsisttoll
06 murdoc:/home/mwerner/crypt/encfs$ fusermount -u ~mwerner/crypt/encfs/work/
07 murdoc:/home/mwerner/crypt/encfs$ ls raw/
08 BrzSPmfOyQShlXuiqnK,pTGE  Iqhy2xMtpIgZySpATSWqW8Tq  tSjZO5MKdWKAyinOnicF5amoHFLeHLAAF64usx69QsNm70
09 C5PWTazUPXqZ7A4bO5RyVm2A  m02yh6RPu8g6kw6W-DcSfTDC
10 D8A8qec=                  saoS-CJfXj2Gr,Q,ATWGPnTS
11 murdoc:/home/mwerner/crypt/encfs$

EncFS arbeitet also ähnlich wie die Kernelspace-Implementationen (DM-Crypt, Cryptoloop, Loop-AES). Doch da es im Userspace arbeitet, ist es flexibler: In den oben genannten Kernel-Crypto-Filesystemen müssen Anwender ein Dateisystem mit einer festen Größe anlegen, das sich nicht vergrößern oder verkleinern lässt. Da EncFS auf Verzeichnisebene arbeitet, ist die Größe lediglich durch die Partition bestimmt, auf der das verschlüsselte Verzeichnis liegt. Außerdem gestalten sich Backups leichter, da das Backupprogramm das Dateisystem nicht mounten muss, sondern einfach die verschlüsselten Dateien kopiert.

Angreifern ist es allerdings möglich, die Anzahl, Größe oder Rechte der verschlüsselten Dateien zu sehen. Daher ist EncFS nicht ganz so sicher wie seine Kernel-basierten Kollegen. Im Test wollte es außerdem nicht mit regulären Benutzern zusammenarbeiten, daher war es nötig, als Root zu mounten und die Rechte entsprechend zu setzen.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook