Abgesperrter Datenbereich
Verschlüsselte virtuelle Dateisysteme mit dem SuSE-Kryptofilesystem und BestCrypt
Ob man persönliche Daten auf einem Mehrbenutzersystem vor Schnüfflern schützen möchte oder Vorsorge trifft für den Fall, dass der Datenträger abhanden kommt – das Stichwort heißt "Verschlüsselung". Umsetzen lässt es sich mit GnuPG [1--3] oder PGP [4]. Doch da dabei jede zu schützende Datei vor und nach dem Benutzen ver- bzw. entschlüsselt werden muss, erfordern diese Verfahren ein hohes Maß an Disziplin und Leidensfähigkeit. Faulere Naturen greifen zu verschlüsselten virtuellen Dateisystemen, bei denen der Anwender bei der normalen Arbeit gar nicht merkt, dass er es mit verschlüsselt auf der Festplatte liegenden Daten zu tun hat.
Da hierzu im offiziellen Kernel bisher keine Möglichkeit vorgesehen ist, muss der User selbst Hand anlegen und meist sogar die Kernel-Quellen modifizieren ("patchen"). Doch es geht auch einfacher: Wenn der Distributor entsprechende Patches bereits eingespielt hat oder mit einer kommerziellen Lösung namens BestCrypt.
Seit Version 7.2 enthält der Distributionskernel der SuSE-Distribution das Modul loop_fish2, das den Twofish-Algorithmus [5] zur Verschlüsselung benutzt. Von Version 8.1 angefangen ermöglicht es das grafische Konfigurationswerkzeug YaST2, neu angelegte oder leere Daten-Partitionen (mit Ausnahme von / und /usr, sonst könnte der Rechner nicht mehr booten) zu verschlüsseln. Diese Option schaltet einfaches Anklicken des Häkchens Dateisystem verschlüsseln im Partitionierungsdialog bei der Installation ein. Dieser ist im YaST auch später noch unter System / Partitionieren zugänglich (Abbildung 1), doch selbst dann verhilft er bereits in Gebrauch befindlichen Partitionen nicht zu nachträglicher Verschlüsselung.
Der Weg zum Ziel
Das heißt jedoch nicht, dass damit alles verloren wäre: Man braucht lediglich ein wenig Platz in einem existierenden Filesystem – genau soviel, wie Sie Platz für die verschlüsselt abzulegenden Dateien einplanen. Zudem lädt root das benötigte Kernel-Modul nach:
modprobe loop_fish2
Anschließend erstellt der Befehl
dd if=/dev/urandom of=/tmp/cryptfile bs=1024 count=10000
die Datei, die später das verschlüsselte Dateisystem aufnimmt. Im Beispiel ist dies die 10 MByte große Datei /tmp/cryptfile.
Nun verknüpft root das erste Loop-Device mit der neuen Datei und legt das Verschlüsselungsverfahren auf Twofish fest:
# losetup -e twofish /dev/loop0 /tmp/cryptfile Password:
Beim Festlegen des Passworts für das verschlüsselte Dateisystem gilt es aufzupassen: Anders als gewohnt, muss hier bereits der erste Versuch stimmen – losetup wünscht keine Wiederholung. Befindet sich /dev/loop0 bereits anderweitig in Benutzung, kann man auf loop1 bis loop15 ausweichen.
Auch ein nicht gepatchter Kernel bietet übrigens die Möglichkeit, mit -e xor anstelle von SuSEs Twofish das äußerst schwache und daher nicht alltagstaugliche XOR-Verschlüsselungsverfahren zu benutzen.
Noch fehlt der erzeugten Datei ein Dateisystem, in der sich Dateien ablegen lassen. Ein herkömmliches Ext2FS erzeugt root mit
mke2fs /dev/loop0
Dieses hängt man mit
mount -t ext2 /dev/loop0 /mnt/crypted
unterhalb eines beliebigen existierenden bzw. vorher (mit mkdir /mnt/crypted) erstellten Verzeichnisses ein. Danach kann root darin wie in jedem anderen Verzeichnis arbeiten. Um das verschlüsselte Dateisystem wieder unlesbar zu machen, wird das Loop-Device wie ein normales Gerät ausgehängt und wieder freigegeben:
umount /mnt/crypted losetup -d /dev/loop0
Auch für normale User
Selbst wer auf seinem Rechner root ist, sollte nicht ständig als solcher arbeiten und sucht daher nach einer Möglichkeit, als nicht-privilegierter Benutzer Daten auf dem verschlüsselten Dateisystem abzulegen. Zunächst verschiebt root die Behälter-Datei aus /tmp ins Home-Verzeichnis des Besitzers, um ein versehentliches Löschen beim Aufräumen von /tmp zu verhindern, und übergibt die Eigentumsrechte an den User:
mv /tmp/cryptfile /home/username / chown username /home/username /cryptfile
Soll das Krypto-Filesystem bereits beim Booten eingehängt werden, trägt root es in die /etc/cryptotab ein:
/dev/loop0 /home/username /cryptfile /mnt/crypted ext2 twofish defaults
Dieser Eintrag sorgt dafür, dass das Passwort für das verschlüsselte Dateisystem beim Booten abgefragt und dieses daraufhin eingehängt wird. Zudem benötigt der unprivilegierte User entsprechende Rechte am Mount-Verzeichnis, die man etwa mit
chown username /mnt/crypted chmod 700 /mnt/crypted
setzt. Dennoch sollte sich niemand in Sicherheit wiegen: Solange das Filesystem gemountet ist, können alle Nutzer auf dem System die darin liegenden Daten entsprechend der gesetzten Rechte einsehen. Der Kryptoschutz bezieht sich nur auf den nicht eingehängten Zustand!
Etwas mehr Sicherheit bietet die Option, das verschlüsselte Loop-Filesystem nur bei Bedarf vom User selbst einhängen zu lassen. Dies geschieht durch einen alternativen Eintrag in /etc/fstab:
/home/username /cryptfile /mnt/crypted ext2 loop,encryption=twofish,noauto,user 0 0
Damit das Modul loop_fish2 beim Systemstart automatisch lädt, fügt root folgende Zeile in die Datei /etc/init.d/boot.local ein:
modprobe loop_fish2
Nun kann der zuständige User das Filesystem bei Bedarf mit
mount /mnt/crypted
einhängen – vorausgesetzt, er oder sie kennt das Passwort.
Doch man muss nicht auf SuSE umsteigen, um mit Hilfe eines Loop-Devices zu verschlüsselten Dateisystemen zu kommen. Vorausgesetzt, man scheut das Kernelpatchen [6] nicht, funktioniert der Vorgang auch auf anderen Distributionen ähnlich wie unter SuSE. Sobald man den Kernel um die "CryptoAPI" erweitert, stehen neben Twofish sogar weitere Verschlüsselungsalgorithmen zur Verfügung, Dass dieser Kernelpatch und das dazugehörige Werkzeugset nicht im offiziellen Kernel steckt, begründet sich in restriktiven oder unklaren gesetzlicher Bestimmungen in verschiedenen Ländern – darunter Frankreich und die USA. Das Risiko, die Verbreitung von Linux durch rechtlich in manchen Teilen der Welt problematische Funktionalität einzuschränken, wollte Linus Torvalds nicht eingehen.
Nach der Installation des gepatchten Kernels lädt man anstelle von SuSEs loop_fish2 die Module cryptoapi und cryptoloop sowie cipher-x (das x ersetzt man durch das gewünschte Verfahren (twofish, blowfish)) – und verfährt weiter wie gehabt.
Kasten 1: Verschlüsseltes SuSE-Home-Verzeichnis
So mancher Laptop-Besitzer mag nach Lektüre dieses Artikels auf die Idee kommen, sein Home-Verzeichnis nachträglich zu verschlüsseln. Dazu braucht er erst einmal eines: Platz auf der Festplatte. Als root legt er außerhalb des bisherigen Home-Verzeichnisses eine passend große Behälter-Datei an, erzeugt darin ein Dateisystem, und übergibt sie dem unprivilegierten User:
dd if=/urandom of=/home/userhome bs=1024 count=100000 losetup -e twofish /dev/loop0 /home/userhome mke2fs /home/userhome chown username /home/userhome
Anschließend sorgt er in /etc/cryptotab dafür, dass das verschlüsselte Dateisystem beim Systemstart ins Home-Verzeichnis des Users eingehängt wird:
/dev/loop0 /home/userhome /home/username
ext2 twofish defaultsVor dem Neustart kopiert er alle Dateien aus dem alten, unverschlüsselten Home-Verzeichnis an einen anderen Ort. Beim nächsten Start bleibt das System im Textmodus stehen, um nach dem Passwort für das verschlüsselte Dateisystem zu fragen. Bei falscher Eingabe wird das alte Home-Verzeichnis benutzt, bei korrekter Passworteingabe das verschlüsselte, bisher noch leere, eingehängt. Auf die Daten im unverschlüsselten Home-Verzeichnis kann man erst wieder zugreifen, wenn das verschlüsselte Dateisystem ausgehängt wird. Doch dank der vor dem Booten erstellten Datenkopie lässt sich das verschlüsselte Home mit den bisher abgelegten Daten füllen. Diese Kopie wird man später löschen.
Um andere User auszusperren, streicht man – falls nicht schon geschehen – alle Leserechte, Schreib- und Verzeichniswechselrechte für sie:
chmod 700 /home/username
Wenn alles wie gewünscht funktioniert, darf man nicht vergessen, die unverschlüsselten Daten aus dem alten Home-Verzeichnis zu löschen – diese können schließlich potentielle Laptop-Diebe noch zu Gesicht bekommen. Ins alte Home-Verzeichnis gelangt man, indem root das verschlüsselte Home-Verzeichnis mit
umount /home/username
aushängt bzw. es beim Systemstart durch die Verweigerung des richtigen Passworts gar nicht erst einhängt. Wer ganz sicher sein will, dass sich die Daten auch nicht nachträglich rekonstruieren lassen, überschreibt sie mit Nullen. Dazu gibt es eine große Auswahl an Programmen, beispielsweise das Open-Source-Programm wipe [7].



