Wird das Notebook geklaut, ist das ärgerlich genug. Wie gut, wenn der Dieb dann zumindest mit den darauf gespeicherten persönlichen Daten nichts anfangen kann, weil sie in einem verschlüsselten Dateisystem lagern.
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 defaults
Vor 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].
BestCrypt
Wem das Patchen des eigenen Kernels nicht ganz geheuer ist, kann sich mit einer kommerziellen Lösung “freikaufen”. Die Software BestCrypt der finnischen Firma Jetico, Inc. [8] existiert sowohl für Linux als auch für Windows. Dank eigener Kernel-Module funktioniert die Linux-Ausgabe auch ohne Neukompilieren des Kernels ab der Version 2.4.3.
30 Tage lang darf BestCrypt kostenlos ausprobiert werden; wer die Software anschließend weiter nutzen möchte, bezahlt für eine Einzellizenz inklusive einjähriger Update-Möglichkeit 49,95 US-Dollar [9]. Jetico liefert den Quellcode aus – gerade im sensiblen Bereich der Datenverschlüsselung eine vertrauensbildende Maßnahme, lassen sich so doch Hintertürchen im Programmcode und ähnliches durch Gutachten Dritter ausschließen.
Dieser Sourcecode aus dem Paket BestCrypt-1.2-4.tar.gz von http://www.jetico.com/linux/ muss zunächst kompiliert werden. Das funktioniert allerdings nur, wenn die Kernel-Header-Dateien installiert sind, die sich in Paketen namens kernel-headers, linux-kernel-include o. ä. befinden – bei neueren SuSE-Ausgaben muss man sogar das komplette kernel-source-Paket installieren.
Nach dem Auspacken des Archivs mit tar -xvzf BestCrypt-1.2-4.tar.gz gibt man im neu angelegten Verzeichnis bcrypt das Kommando make ein. Für die Installation des Programms bctool, des dazugehörigen Werkzeugsets, der Manpage und der Kernel-Module mit make install benötigt man root-Rechte. Dieser Befehl legt zudem die Block-Devices/dev/bcrypt0 bis /dev/bcrypt15 an.
brw-r—– 1 root operator 3, 1 Feb 17 2000 hda1
Will man all dies rückgängig machen, deinstalliert ein mitgeliefertes Shell-Skript die Software wieder. Auch für den dann im bcrypt-Verzeichnis auszuführenden Befehl ./uninstall.sh braucht man root-Rechte.
Kasten 2: BestCrypt für RPM-Nutzer
Statt das BestCrypt-Tar-Archiv am Paket-Manager vorbei zu installieren, greifen Besitzer RPM-basierter Distributionen wie SuSE und Red Hat besser auf das Quelltext-RPM-Paket http://www.jetico.com/linux/BestCrypt-1.2-5.src.rpm zurück, aus dem sich auf einfache Weise das Binär-rpm-Paket BestCrypt-1.2-4.rpm bauen lässt:
rpm --rebuild BestCrypt-1.2-4.src.rpm
Dieses liegt anschließend unter /usr/src/redhat/rpm/RPMS/i386 (Red Hat) oder /usr/src/packages/RPMS/i386 (SuSE) und lässt sich auf der Kommandozeile mit
rpm -i BestCrypt-1.2-4.rpm
einspielen.
Verschlüsselte Container
Anschließend bringt root BestCrypt mit dem Befehl
/etc/init.d/bcrypt start
zum Laufen. Zum Beenden tauscht man das Argument start durch stop aus. Da die Installationsroutine bereits Links auf dieses Init-Skript in den Initialisierungsverzeichnissen der in Frage kommenden Runlevel angelegt hat, startet BestCrypt auch beim nächsten Booten automatisch mit. Dies schlägt allerdings fehl, wenn der verwendete Kernel das nachträgliche Laden von Modulen nicht gestattet, was bei selbstgebauten Betriebssystemkernen der Fall sein kann.
Wie bei der SuSE-Variante des verschlüsselten Loopback-Dateisystems speichert BestCrypt sein Filesystem als Datei, den sogenannten Container, der wie ein anderes Gerät gemountet werden kann – im Unterschied zur SuSE-Lösung dürfen auch unprivilegierte User solche Daten-Behältnisse anlegen. Gibt der Admin in Form der BestCrypt-Installation seinen Segen dazu, lassen sich somit Daten zumindest teilweise vor root verstecken.
An Verschlüsselungsalgorithmen stehen Gost, Blowfish, Twofish, Cast, IDEA und DES mit variablen Schlüssellängen zur Verfügung; bis auf das einfache DES-Verfahren mit nur 56 Bit Schlüssellänge gelten sie alle als sicher. Beispielhaft setzen wir im folgenden den Rijndael-Algorithmus [10] ein. Wer einen anderen nutzen möchte, findet das entsprechende Argument für die bctool-Option -a in der Manpage (man bctool) aufgelistet.
bcnew -s 10M -a rijndael -d "Meine Dateien" privat
erstellt im aktuellen Verzeichnis einen zehn MByte großen, mit Rijndael verschlüsselten neuen Container privat, der die Beschreibung Meine Dateien trägt. Die Größe der Datei hinter der Option -s kann in MByte (Suffix M) oder kByte (Suffix k) angegeben werden. Sie will wohl überlegt sein, da sie sich nachträglich nicht mehr ändern lässt. BestCrypt fragt nach dem gewünschten Passwort, das aus mehr als sechs Zeichen bestehen und zur Sicherheit wiederholt werden muss.
Noch fehlt dem Container ein Dateisystem, in dem sich Dateien ablegen lassen. Hier hat man die Wahl unter allen vom Kernel unterstützten Dateisystemen. Soll auf den Container von Windows aus zugegriffen werden, wählt man die Option -t msdos bzw. -t vfat; ansonsten bietet sich ein Linux-Dateisystem an:
bcformat -t ext2 privat
formatiert den Container in der Datei privat mit Ext2FS. Falls kein Dateisystem gewählt wird, benutzt BestCrypt als Standard FAT16.
Um in diesem verschlüsselten Dateisystem Daten abzulegen, muss es in ein Verzeichnis eingehängt werden:
mkdir crypted bcmount privat crypted
Stimmt das abgefragte Passwort für den Container privat, kann man anschließend im Verzeichnis crypted Daten ablegen. Unlesbar macht man diese, indem man das Dateisystem mit
bcumount crypted
aus dem Mountpoint crypted aushängt. Das geht natürlich nur, wenn niemand mehr auf darin abgelegte Daten zugreift.
Optionsschwemme
Auf BestCrypt-Container lässt es sich nicht nur bequemer zugreifen als auf verschlüsselte Loop-Devices. Sie bieten auch wesentlich mehr Möglichkeiten. So zeigt bcinfo privat die beim Erstellen des Containers privat eingegebene Beschreibung an. bcpasswd privat ändert das Passwort des Containers und bctool add_passwd privat fügt ein weiteres gültiges Passwort hinzu, welches sich mit bctool del_passwd privat wieder löschen lässt. bcreencrypt privat -a blowfish schließlich ändert nachträglich sogar das Verschlüsselungsverfahren. Im Beispiel kommt von nun an der Blowfish-Algorithmus zum Einsatz. Wie bei gewöhnlichen Ext2-Dateisystemen überprüft fsck die Integrität des Filesystems im Container, allerdings ruft man dieses Tool nur mittelbar mit bcfsck privat auf.
Ob BestCrypt oder das verschlüsselte Loop-Dateisystem – beide schützen die Daten nur so lange vor den Blicken Fremder, solange sie nicht in den Dateibaum eingehängt werden. Ist das Dateisystem einmal gemountet, muss der User selbst darauf achten, dass die Rechte der darin abgelegten Dateien anderen Usern den Zugriff verbieten, und auch das hilft nichts gegen schnüffelnde Administratoren mit root-Rechten. Die Sicherheit verschlüsselter Dateisysteme relativiert sich auch dadurch, dass es Datenspuren auf der Swap-Partition oder im /tmp-Verzeichnis findigen Angreifern erlauben, die Verschlüsselung einfach zu umgehen.
Glossar
-
Loop-Device
-
Ein virtuelles Gerät, das es bei entsprechender Verknüpfung mit einer Datei erlaubt, in dieser ein eigenes Dateisystem anzulegen und wie ein Filesystem auf einem physikalischen Datenträger zu behandeln. Mit seiner Hilfe kann man zum Beispiel eine CD-Image-Datei wie eine Diskette oder Festplattenpartition mounten und ihren Inhalt einsehen.
-
Kernel-Header
-
Header-Dateien im Allgemeinen machen anderen Programmen oder Programmteilen Funktionen, Datentypen, Variablen usw. bekannt. So enthalten die Header-Dateien des Kernels die Beschreibung all jener Kernel-Funktionen, auf die andere Programme, darunter vor allem Kernel-Module, zugreifen dürfen.
-
Block-Devices
-
Bei blockorientierten Geräten tauschen das Gerät und das Betriebssystem die Daten in Blöcken statt in einzelnen Zeichen (wie bei den zeichenorientierten Geräten oder “Character-Devices”) aus. Block-Devices (dazu zählen z. B. Festplatten(partitionen)) erkennt man daran, dass der Befehl ls -l die sie repräsentierenden Dateien im /dev-Verzeichnis mit einem “b” am Anfang der Zeile versieht:
Infos
[1] GnuPG: http://www.gnupg.org/
[2] Patricia Jung: “Signier-Party”, LinuxUser 06/2003, S. 71 ff.
[3] Jörg Mudrack, Patricia Jung: “Schloss für die Post”, LinuxUser 05/2002, S. 28 f.
[4] PGP: http://www.pgpi.org/
[5] http://www.counterpane.com/twofish.html
[6] http://www.kerneli.org/howto/
[7] http://sourceforge.net/projects/wipe/







