Heute möchte ich ein kleines Tutorial online stellen zum Thema "Wie benutzt man Truecrypt auf dem Laptop". Bitte nicht meckern, ein Artikel zu LUKS und dm-crypt folgt :)
Warum Verschlüsseln?
Nuja dafür gibt's natürlich viele Gründe, einer davon trifft auf Laptops natürlich im besonderen zu: Diebstahl. Niemand möchte natürlich, dass seine Daten in fremde Hände fallen nur weil der Laptop abhanden gekommen ist, warum auch immer. Ein nicht so versierter Dieb würde natürlich schon am login Passwort scheitern, aber jeder Mensch der es fertig bringt eine Knoppix CD zu booten hat natürlich sofort vollen Systemzugriff. Man könnte den Laptop mit einem BIOS Passwort davor schützen, dass man überhaupt von CD booten kann, aber auch dies lässt sich umgehen. Da Laptop Festplatten auch nur Standardteile sind die auch in anderen Rechnern, oder mit Adapter sogar an einem Desktop Rechner, laufen. Was bleibt ist eigentlich nur die Verschlüsselung.
Wie Verschlüsseln?
Verschlüsselung macht nur dann Sinn, wenn sie einfach zu benutzen ist, da der Mensch im allgemeinen ja eher faul ist und ein erhöhter Arbeitsaufwand meistens dazu führt, dass man die Möglichkeiten nicht ausnutzt. Da außerdem heutzutage oftmals Passwörter in Konfigurationsdateien abgelegt werden (Firefox Autovervollständigung z.B.) sollten auch diese Dateien zuverlässig Verschlüsselt werden. Die mit Sicherheit einfachste Methode ist also die Verschlüsselung der kompletten Datenpartition auf der Festplatte. In diesem Artikel möchte ich eine relativ zuverlässige Methode beschreiben, wie das ganze mit TrueCrypt realisiert werden kann. Dazu werde ich davon ausgehen, dass der Laptop nur von wenigen Personen benutzt wird, denen jeweils das Entschlüsselungspasswort mitgeteilt wird.
Vorbereitungen
TrueCrypt bauen
Als erstes benötigen wir ein lauffähiges TrueCrypt in unserer Linux Installation. Alle Archlinux Nutzer können einfach pacman benutzen, aber ich gebe hier trotzdem mal eine einfache Step by Step Anleitung an, weil ich nicht weiß wie das bei den anderen Distros aussieht. Danke an die Archlinux Entwickler, da als Grundlage dieser Anleitung die PKGBUILD Scripts verwendet worden sind.
- Erstmal den Source holen:
$ wget http://www.truecrypt.org/downloads/truecrypt-4.3a-source-code.tar.gz
- Entpacken wir das ganze:
$ tar xvzf truecrypt-4.3a-source-code.tar.gz
- Dann bauen wir mal das Kernelmodul, dazu braucht man natürlich die Kernel header, da kommt's jetzt auf die Distribution an.
$ cd truecrypt-4.3a-source-code/Linux/Kernel
$ make KERNEL_SRC=/lib/modules/`uname -r`/build
- Und nun Installieren
$ su -
Password:
# install -Dm600 ../Kernel/truecrypt.ko /lib/modules/`uname -r`/extra/truecrypt.ko
# depmod -a
# modprobe truecrypt
# exit
Nach dem "modprobe" sollte keine Fehlermeldung erscheinen, sonst ist irgendwas falsch gelaufen, dann bitte das Distributionsforum konsultieren :) - Jetzt brauchen wir noch die Command line utils von Truecrypt, so allein mit dem Kernelmodul fangen wir ja nicht besonders viel an.
$ cd ../../..
$ cd truecrypt-4.3a-source-code/Linux/Cli
$ make
- Nun wieder installieren:
$ su -
Password:
# install -Dm755 truecrypt /usr/bin/truecrypt
# install -Dm644 Man/truecrypt.1 /usr/man/man1/truecrypt.1
# exit
- Fertig :)
Daten sichern
Damit die "/home" Partition verschlüsselt werden kann muss sie leider formatiert werden, dabei gehen alle Daten verloren! Zum Daten Sichern unter Linux empfiehlt sich in diesem fall wohl am besten das gute alte tar.
- Überprüfen wir mal wo wir genug Platz haben:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.4G 4.3G 5.1G 47% /
none 248M 0 248M 0% /dev/shm
/dev/sda4 37G 2.3G 34G 7% /home
- Wie man sieht kann ich /home als Ziel für meine tar Datei nehmen
$ su -
Password:
# cd /home
# tar cvf home.tar *
- Diese home.tar sollten wir nun irgendwohin sichern. Brennen, auf nen anderen Rechner uploaden, externe Festplatten sind auch ne gute Wahl.
Verschlüsselte Partition erstellen
Nun kommt der "lustige" Part, wir werfen TrueCrypt an und erstellen eine Verschlüsselte Partition.
- Erstmal überprüfen wir ob TrueCrypt auch richtig funktioniert:
$ truecrypt --test
Self-tests of all algorithms passed.
- Nun erstellen wir die Partition. Ich lasse hier alles auf default und wähle, dass ich die Partition nicht formatieren möchte (Bei "Filesystem" "None" wählen). Später wird nach dem Passwort gefragt, hier sollte man ein sicheres Passwort aus Buchstaben, Zahlen und Sonderzeichen wählen. Aber Vorsicht, dieses Passwort muss bei jedem Login eingegeben werden, sollte also einfach zu merken und schnell zu Tippen sein. Wenn man direkt vor seinem Rechner sitzt kann man natürlich bei der Frage nach der Maus auch mit "ja" antworten um sich unsinniges Tippen zu ersparen.
$ su -
# truecrypt -c
Volume type:
1) Normal
2) Hidden
Select [1]: 1
Enter file or device path for new volume: /dev/sda4
Filesystem:
1) FAT
2) None
Select [1]: 2
Hash algorithm:
1) RIPEMD-160
2) SHA-1
3) Whirlpool
Select [1]: 1
Encryption algorithm:
1) AES
2) Blowfish
3) CAST5
4) Serpent
5) Triple DES
6) Twofish
7) AES-Twofish
8) AES-Twofish-Serpent
9) Serpent-AES
10) Serpent-Twofish-AES
11) Twofish-Serpent
Select [1]: 1
Enter password for new volume '/dev/sda4':
Re-enter password:
Enter keyfile path [none]:
TrueCrypt will now collect random data.
Is your mouse connected directly to computer where TrueCrypt is running? [Y/n]: n
Please type at least 320 randomly chosen characters and then press Enter:
...
Done: xx.xx MB Speed: xx.xx MB/s Left: x:xx:xx
Volume created.
- Gut, nun ist die Partition Verschlüsselt, enthält aber noch kein Dateisystem. Da müssen wir natürlich was gegen unternehmen.
Erstmal weisen wir den devicemapper an das TrueCrypt Volume zu laden:
# truecrypt -N 1 /dev/sda4
Für ext3 benutzen wir dann folgende Kommandos (Journal einschalten, 1% reservierte Blöcke):
# mkfs.ext3 -L home -j -m 1 /dev/mapper/truecrypt1
Für xfs z.B. folgendes (Journal size 66MB aus Geschwindigkeitsgründen):
# mkfs.xfs -l size=66m -L home /dev/mapper/truecrypt1
- Nun mounten wir die erstellte Partition:
# mount /dev/mapper/truecrypt1 /home
Daten zurücksichern
Da wir nun erstmal "fertig" sind mit der Partition sichern wir die Daten mal zurück.
- Erstmal holen wir uns unsere tar Datei wieder.
- Dann wird das Ding entpackt:
# cd /home
# tar xvf home.tar
# rm home.tar
- Jetzt sollte man probieren ob man sich wieder normal einloggen kann (nicht rebooten!!!)
- Falls soweit alles geklappt hat muss die /etc/fstab geändert werden (wie man ja sieht hat sich der Device Name geändert durch das Zwischenschalten des Devicemappers)
# vi /etc/fstab
Hier die Zeile (für xfs, andere Dateisysteme entsprechend anders):
/dev/sda4 /home xfs noatime,nodiratime,logbufs=8 0 1
in folgendes umschreiben:
/dev/mapper/truecrypt1 /home xfs noatime,nodiratime,logbufs=8 0 1
Integration in die grafische Benutzeroberfläche
Was jetzt folgt ist KDE bzw. KDM spezifisch, sollte aber analog für GNOME und GDM auch funktionieren, nur liegen hierfür die Dateien woanders. Wenn's jemand nachbaut kann er ja nen Kommentar schreiben ;)
- Erstmal müssen wir herausfinden wo in unserer Distribution die kdm config Dateien liegen. Oftmals liegen die in /etc/X11/kdm, /etc/x11/xdm oder auch /usr/share/config/kdm oder wie bei Arch /opt/kde/share/config/kdm.
- Interessant für uns sind die beiden Dateien: Xsetup und Xstartup. Beide sind Standardmäßig leer und werden nun von uns gefüllt.
- Xsetup sollte dann folgendes enthalten:
home=`mount | cut -d " " -f 3 | grep -c home`
if [ "$home" != "0" ] ; then
killall -9 kwin
killall -9 compiz
umount /home
truecrypt -d /dev/sda4
fi
Damit bewirken wir, dass beim Ausloggen des Users bzw. vor dem (wieder-)Erscheinen des Login Dialogs "/home" zuverlässig ungemountet (was für ein Wort :s ) wird. Ich kille hier "kwin" und "compiz", da es bei mir leider ein paar Fälle gab in denen kwin sich nicht beendet hat und ".Xsession-errors" im Home des letzten angemeldeten Users noch geöffnet war. Das verhindert natürlich das unmounten. Außerdem wird der Code nur dann ausgeführt, wenn /home überhaupt gemounted ist. - Xstartup sollte dann so aussehen:
pass=`kdialog --password "Please enter disk decryption password"`
truecrypt -N 1 -p "$pass" /dev/sda4
unset pass
mount /home
Ganz optimal ist das ganze noch nicht, da das Passwort kurzzeitig in der Prozessliste auftaucht, solange TrueCrypt benötigt um sich zu initialisieren. Aber da ich bei einem Laptop davon ausgehen kann, dass niemand von "außerhalb" eingeloggt ist dürfte das Nebensächlich sein. - Wenn man nun KDM neu startet (wiedermal Distro spezifisch, notfalls rebooten) sollte nach dem Login ein Dialogfeld auftauchen in dem man das Entschlüsselungspasswort angeben muss. Gibt man hier etwas falsches an wird die Session sofort wieder beendet und man landet wieder beim Login screen.
Fazit
Eigentlich recht einfach das Ganze und im normalen Betrieb bemerkt man die Leistungseinbußen kaum. Leider kann TrueCrypt soweit ich weiß die oft bereits verbauten TPM Chips oder die Verschlüsselungsbeschleunigungsfunktionen der CPU nicht nutzen (z.B. VIA Padlock) und ist daher Leistungsmäßig dm-crypt unterlegen.
Die Verschlüsselung via TrueCrypt lässt sich auch mit Key-Files kombinieren. Ein solches File könnte man z.B. auf einen USB Stick packen und beim Login ebenfalls abfragen. Die Implementation dieser Variante überlasse ich mal dem gewillten Nachbauer als Übung.
Ich bin auf jeden Fall nun überzeugt, dass meine Daten sicher sind, und ich hoffe, dass mein Laptop niemals gestohlen wird :)
1 Kommentare:
Danke Johannes!
Bin durch google hier vorbeigekommen und ich denke es werden weitere folgen...
Ich hab das ganze mit keyfiles auf sidux/Debian unstable zum Laufen gebracht.
Bei mir gab es den unschönen Nebeneffekt, dass sobald kdialog ins Spiel kam .ICEauthority dem Nutzer root gehört und KDE danach mangels Schreibrechte den Start verweigerte.
Sobald der USB Stick nicht angesteckt ist bzw. etwas Falsches eingeben wird, wird ein sauberes unverdächtiges KDE geladen, praktisch für Reisen in die USA oder UK.
Hier das Script was in /etc/kde3/kdm/Xstartup aufgerufen wird [worksforme^(TM)]:
#!/bin/bash
USBDEV=/dev/sdb1
USBDST=/mnt/stuff
USBID='1234:5678'
CDEV=/dev/sda7
fixperm()
{
MYOWNER=`ls -la $HOME/.Xauthority | awk {'print $3":"$4'}`
/bin/chown $MYOWNER $HOME/.ICE* $HOME/.DCOPserver*
}
if ( ! /bin/mount | grep -q "$USBDEV on $USBDST"); then
/bin/mount -o ro $USBDEV $USBDST &>/dev/null
fi
if ( ! /usr/sbin/lsusb | grep -q $USBID ); then
exit 0
fi
MYINPUT=`kdialog --password "Key Password"`
MYKF=`echo $MYINPUT | cut -d " " -f 1`
MYPW=`echo $MYINPUT | cut -d " " -f 2`
fixperm
[ -f $USBDST/$MYKF ] || exit 0
/usr/local/bin/truecrypt -t --cache --non-interactive --fs-options=noatime -k $USBDST/$MYKF $CDEV --protect-hidden=no -p $MYPW /home &>/dev/null
umount $USBDEV &> /dev/null
kdialog ist unheimlich langsam, daher nur eine Abfrage für die Datei und das Passwort.
Gruß
BoneStorm
Kommentar veröffentlichen