Das Problem: Ich hab einen tollen 8 GB USB-Stick. Den möchte ich als "tragbaren Ordner" verwenden, um Dateien auf verschiedenen Linuxrechnern zur Verfügung zu haben. Die kleinen USB-Dinger gehen aber auch mal gerne verloren. Ich will natürlich nicht, dass irgendwer mit meinen Daten hausieren geht, darum möchte ich einen Teil des Sticks als verschlüsselte Partition anlegen. Ein Teil bleibt unverschlüsselt zum Austausch mit anderen Leuten und Betriebssystemen.
Cryptsetup gibt es wohl für alle Linux Distributionen, meist heißt das Paket auch so (oder util-linux-crypto).
Die Vorgehensweise:
Der eingesteckte USB-Stick auf meinem Rechner ist der Device /dev/sda. Als erstes lese ich die vorhandene Partitionstabelle aus. (Eher aus Neugier, als aus Notwendigkeit.)
fdisk -l /dev/sda
Als nächstes mache ich mich ans neu Partitionieren - zwei Partitionen. Die erste soll mit FAT32 formatiert werden, die zweite wird verschlüsselt. Zuvor hänge ich den Device natürlich aus.
umount /media/disk
fdisk /dev/sda
Eigentlich verwende ich ja lieber cfdisk, das mit der vorhandenen Partitionstabelle aber nicht zurecht kam. Allerdings habe ich festgestellt, dass fdisk auch recht komfortabel ist.
So sieht das Ergebnis aus:
fdisk -l /dev/sda
Platte /dev/sda: 8178 MByte, 8178891776 Byte
33 heads, 63 sectors/track, 7683 cylinders
Einheiten = Zylinder von 2079 × 512 = 1064448 Bytes
Gerät boot. Anfang Ende Blöcke Id System
/dev/sda1 1 3842 3993727+ b W95 FAT32
/dev/sda2 3843 7683 3992719+ 83 Linux
Und schon wird die erste Partition formatiert:
mkfs.vfat -n "offen" -F 32 /dev/sda1
Dann wird auf der zweiten Partition der Lukscontainer erstellt:
cryptsetup luksFormat /dev/sda2
Cryptsetup hat noch jede Menge Optionen (siehe manpage). Beim "luksFormat" wird das erste von acht möglichen Passwörtern angelegt. (Das heißt, mehrere User könnten sich so eine verschlüsselte Partition teilen, ohne auch das Passwort teilen zu müssen.)
Dieser Lukscontainer kann jetzt geöffnet werden, cryptsetup fragt nach dem Passwort:
cryptsetup luksOpen /dev/sda2 foobar
Erst wenn der Container geöffnet ist, kann darin ein Dateisystem angelegt werden:
mke2fs -L "sehrsicher" -m 0 /dev/mapper/foobar
"foobar" ist der zuvor gewählte Name. Das könnte auch ein ganz anderer sein, er ist ohnehin nur temporär.
Jetzt kann das neu erstellte Dateisystem eingehängt werden:
mount /dev/mapper/foobar /mnt
Sieheda, es ist ein ext2. Man kann in so einem Lukscontainer natürlich auch beliebige andere Dateisysteme anlegen.
Jetzt das Ganze noch sauber aushängen:
umount /mnt
cryptsetup luksClose foobar
Ausstecken, einstecken,... nun wird sda1 automatisch gemountet, sda2 erfordert das Passwort.
Im Idealfall wird gleich mit den gesetzten Labelnamen ("offen" und "sehrsicher") gemountet.
Blöderweise gehört das ext2 Dateisystem jetzt aber root, das Problem ist aber schnell gelöst:
chown meinusername /media/sehrsicher
Das wird beim nächsten Anstecken des Sticks wieder übernommen.
Was ist wo?
/dev/sda2 --> ist die nicht lesbare Partition
/dev/mapper/luks_crypto_a3e7
usw... --> ist der luks-Container
/dev/dm-0 --> ist das ext2 Dateisystem
Was, wenn es nicht automatisch klappt?
Aktuellere device mapper Versionen streiken angeblich manchmal. Solange man das Passwort nicht vergessen hat, kann man den verschlüsselten Container immer von Hand öffnen:
- Prüfen, ob eh nix gemountet ist, sonst umount
- # cryptsetup luksOpen /dev/sda2 temp-name-irgendwas
...Passwort...
Dann sollte der /dev/dm-N auftauchen, eventuell einer mit höherer Nummer
- # mount /dev/dm-N /media/sehrsicher
In diesem Fall muss es den Ordner "sehrsicher" in /media natürlich geben.
Anmerkung zu ext2
Das ext2 Dateisystem will anständig ausgehängt werden, ruppiges Abziehen des USB-Sticks ist nicht optimal.
War ich doch mal Schwein, hilft ein schneller fsck:
umount /media/sehrsicher
e2fsck -n /dev/dm-0