In den nächsten Tagen steht eine Reise an. Mit dabei sein wird der alte, robuste EeePC 701 mit Xubuntu 8.10 und einer SD-Karte für mein Heimatverzeichnis. In einigen Ländern muss man die Notebooks hochfahren und sich anmelden. Ab und an klickt der Immigration Officer dann durch das Dateisystem und schaut ob verdächtige Dateien vorliegen. Ich stelle hier ein Setup vor, bei dem das Heimatverzeichnis eines Nutzers verschlüsselt auf einer eigenen Partition liegt und beim Login dieses Nutzers eingebunden wird. Andere — evtl. per Auto-Login angemeldete — User hängen die verschlüsselte Partition nicht ein. Das beugt Problemen bei Verlusten des Netbooks vor und mit ein wenig Geschick lässt sich bei einer oberflächlichen Kontrolle die Existenz des verschlüsselten Heimatverzeichnisses verbergen.
Bei einer näheren Kontrolle wird jedoch die verschlüsselte Partition gefunden werden. Die Verschlüsselung selbst ist zwar so stark wie Ihr Login-Passwort, in der Praxis entscheidet über die Knackbarkeit der Verschlüsselung aber die Tiefe der “Kryptanalyse” des bereisten Staates: Wer Länder bereist, die Gartenschlauch-Kryptanalyse betreiben, sollte ein aufwendigeres Verschlüsselungsmodell mit geschachtelten Containern (TrueCrypt) verwenden, welches allerdings umständlicher zu nutzen ist.
Software-Installation und Vorbereitung der Partition
Zunächst muss etwas Software nachinstalliert werden:
sudo apt-get install cryptsetup libpam-mount
Rebooten Sie anschließend, um sicherzustellen, dass alle Bibliotheken richtig geladen werden.
Nun geht es um die Identifikation der Partition. Prüfen Sie mit fdisk -ul die Partitionierung des Ziellaufwerkes und stellen Sie sicher, dass es nicht gemoutet ist. Mein Ziellaufwerk war die im Kartenslot steckende SD-Karte, deren erste Partition ich mit fdisk mit einer normalen Linux-Partition versah. Hier die Partitionierung:
Platte /dev/sdb: 4029 MByte, 4029677568 Byte
233 Köpfe, 63 Sektoren/Spuren, 536 Zylinder, zusammen 7870464 Sektoren
Einheiten = Sektoren von 1 × 512 = 512 Bytes
Disk identifier: 0x00000000
Gerät boot. Anfang Ende Blöcke Id System
/dev/sdb1 63 7867943 3933940+ 83 Linux
Verschlüsseln der Zielpartition
Zunächst sollten die ersten Megabyte der Zielpartition mit Zufallszahlen überschrieben werden. In diesem Bereich sitzen später die LUKS-Schlüssel, die sich nicht von den umgebenden Daten abheben sollten:
sudo dd if=/dev/urandom of=/dev/sdb1 bs=1M count=2
Im nächsten Schritt wird die Verschlüsselung der Partition vorbereitet. Sie erhält noch kein Dateisystem. Geben Sie das Passwort an, welches später als Login-Passwort verwendet werden wird:
sudo cryptsetup luksFormat -c aes-cbc-essiv:sha256 -s 256 -y /dev/sdb1
Mit dem Subkommando luksOpen wird die verschlüsselte Partition als Gerätedatei verfügbar gemacht. Ich verwendete /dev/mapper/mattias, weil die verschlüsselte Partition mein Heimatverzeichnis aufnehmen soll.
sudo cryptsetup luksOpen /dev/sdb1 mattias
Eine verschlüsselte Partition sollte möglichst kein Muster erkennen lassen und keine Reste der früher enthaltenen unverschlüsselten Daten aufweisen. Recht pragmatisch ist es daher, Nullen als Eingabe zu nutzen, die verschlüsselt ein scheinbar zufälliges Muster ergeben. Wenn nicht große Teile des Ziellaufwerkes mit Daten belegt werden, erleichtert die Kenntnis der Plaintext-Daten (hier der Ansammlung von Nullen) das Knacken des Schlüssels. Um auf Nummer sicher zu gehen können Sie statt /dev/zero daher /dev/urandom als Eingabedatenstrom verwenden — allerdings dauert dann das “randomisieren” deutlich länger:
sudo dd if=/dev/zero of=/dev/mapper/mattias bs=8192
Nun endlich kann die verschlüsselte Partition mit einem Dateisystem versehen und gemountet werden:
sudo mkdir /tmp/home_mattias
sudo mkfs.ext3 /dev/mapper/mattias
sudo mount /dev/mapper/mattias /tmp/home_mattias
Kopieren der Daten
Damit sichergestellt ist, dass keine meiner Dateien geöffnet sind, habe ich zunächst ein Root-Passwort vergeben, rebootet und mich dann auf einer Konsole ([Strg]+[Alt]+[F2]) als Root angemeldet:
sudo passwd
Das Kopieren der Dateien erledigt nun rsync, fancy zum Zuschauen, “trailing slashes” nicht vergessen:
rsync -avHP /home/mattias/ /tmp/home_mattias/
Nun können die Überreste des unverschlüsselten Heimatverzeichnisses auf der Systempartition gelöscht werden. Nach dem Aushängen des Dateisystems muss übrigens die verschlüsselte Gerätedatei abgemeldet werden — sonst droht Datenverlust:
umount /tmp/home_mattias/
cryptsetup luksClose mattias
rm -rf /home/mattias
mkdir /home/mattias
chown -R mattias:mattias /home/mattias
Sollte die Gefahr bestehen, dass sensible Daten zurückgeblieben sind, nullen Sie einfach die freien Festplattenbereiche:
dd if=/dev/zero of=/home/nix.nul bs=8192
sync
rm /home/nix.nul
Konfiguration von pam_mount
Zuerst müssen die “Pluggable Authentication Modules” konfiguriert werden. Um “pam_mount” zu aktivieren genügt es, an die Datei /etc/pam.d/common-session die folgende Zeile anzuhängen:
@include common-pammount
Im nächsten Schritt wird die Datei /etc/security/pam_mount.conf.xml angepasst, damit beim Login die Partition mit dem verschlüsselten Heimatverzeichnis gemountet wird. Mit nur einem Volume sah der Dateianfang bei mir so aus — relevant ist vor allem die mit <volume … beginnende Zeile:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<!--
See pam_mount.conf(5) for a description.
-->
<pam_mount>
<!-- Volume definitions -->
<volume user="mattias" fstype="crypt" path="/dev/sdb1" mountpoint="/home/mattias" options="fsck" />
<!-- pam_mount parameters: General tunables -->
That’s it! Nun noch einmal rebooten und per Passwort mit dem neuen verschlüsselten Heimatverzeichnis einloggen.
Feintuning zum Schluss
Der verschlüsselte User ist wertlos, wenn es sich um den einzigen Nutzer handelt. Ich habe daher einen zusätzlichen Nutzer ms mit einfachem Passwort angelegt. Diesem User habe ich Zugangsdaten zu oft von mir benutzten WLANs und einen Satz sinnvolle Bookmarks verpasst. Da dieser Nutzer auch dazu dienen soll, Gäste surfen zu lassen, ohne dass die SDD des EeePC vollläuft, habe ich mich für einen kleinen Trick mit dem temporären Dateisystem entschieden. Zunächst wird /tmp auf ein tmpfs gelegt, was ein Eintrag in der /etc/fstab bewerkstelligt:
tmpfs /tmp tmpfs defaults 0 0
Nun sorgt ein kleines Script /etc/init.d/sync-dummy.sh dafür, dass der Inhalt des von /home/ms nach /home/ms.bak verschobenen Heimatverzeichnisses des Dummy-Users beim Systemstart nach /tmp kopiert wird:
#!/bin/bash
case $1 in
start )
rsync -avHP /home/ms.bak/ /tmp/home_ms/
;;
esac
Das Script muss jetzt noch ausführbar gemacht und im Runlevel 2 verlinkt werden:
chmod a+x /etc/init.d/sync-dummy.sh
cd /etc/rc2.d
ln -s ../init.d/sync-dummy.sh S95sync-dummy
Damit beim Login auch wirklich das auf tmpfs liegende Heimatverzeichnis verwendet wird, müssen die Pfade in der /etc/passwd noch angepasst werden. Da sich möglicherweise in einigen Konfigurationsdateien harte Referenzen auf /home befinden, ist es ratsam, das alte Heimatverzeichnis durch einen Softlink zu ersetzen:
cd /home/
ln -sf /tmp/home_ms ms
Weiter gedacht
Mit Sicherheit ist die vorgestellte Methode nicht die simpelste. Wenn es schnell gehen soll, dürfte die simple Auswahl eines verschlüsselten Heimatverzeichnisses bei der Installation am ehesten befriedigende Resultate bringen. Vorteil der hier vorgestellten Methode ist jedoch, dass die SD-Karte mit dem Heimatverzeichnis nicht im Netbook verbleiben muss, das Gerätchen funktioniert dennoch unverdächtig. Sollte dann beispielsweise der Zoll den EeePC konfiszieren, werden die Forensiker schnell feststellen, dass die — hoffentlich gut versteckte — SD-Karte fehlt. Und was nicht da ist, kann keiner Kryptanalyse unterzogen werden.
In vielen Fällen ist es mit dem Heimatverzeichnis nicht getan. Wer eine Swap-Partition verwendet, sollte diese auch verschlüsseln oder auf Swap-Dateien auf einem verschlüsselten Datenträger umstellen. Zudem schreiben einige Programme temporäre Daten nach /var/tmp, in diesem Fall sollten Sie auch dieses Verzeichnis auf ein tmpfs legen.
Zu bedenken ist zudem, dass die Wiederherstellung eines defekten Datenträgers schwieriger wird. Ist der LUKS-Header beschädigt, kann das Recovery gänzlich verunmöglicht werden.
Paranoiker dürfte das hier vorgestellte Verfahren nicht befriedigen, weil ich die Existenz einer verschlüsselten SD-Karte gar nicht zu verbergen versuche. Wer ganz sicher gehen möchte, belässt daher das sperrige Xandros auf dem EeePC, bootet sein mit TrueCrypt versehenes Ubuntu komplett von SD-Karte und verwendet einen inneren Container in einem äußeren verschlüsselten Container. Im Falle von Folter gibt er das Passwort des äußeren Containers preis, in dem unverdächtige Dateien und ein paar Dummy-SSH-Schlüssel liegen. Die wirklich privaten Dateien liegen im inneren Container.
Teilen sich mehrere Nutzer (die einander vertrauen) ein Netbook, kann es sinnvoll sein, einen gemeinsamen Container für das gesamte /home zu verwenden. Statt user kommt dann group in der /etc/security/pam_mount.conf.xml zum Einsatz und ein zweiter der acht Passwort-Slots wird für das Passwort des zweiten Nutzers belegt.
Links
Das perfekte Netbook-Setup
- Installation von Ubuntu/Xubuntu 8.10
- /home reisetauglich verschlüsselt