QVINTVS · SCRIBET

TrueCrypt mit beliebigem Dateisystem im Container

TrueCrypt bietet ja standardmäßig nur FAT, ext2, ext3 und ext4 als Dateisystem für die verschlüsselten Container und Partitionen an. Was aber, wenn man ein anderes Dateisystem benutzen möchte?

Auch das ist kein Beinbruch, aber mit der graphischen Benutzeroberfläche von TrueCrypt meines Wissens nach nicht möglich. Ich werde in diesem Posting einen kleinen Dateicontainer erstellen und mit dem Dateisystem XFS beschreiben, danach ein paar Daten darauf speichern und lesen.

Insgesamt gestaltet sich der Erstellungsprozess eines solchen Containers relativ einfach. Zuerst wird er “gewöhnlich” über das Textinterface von TrueCrypt erstellt:

√ quintus@hades => ~/test
$ truecrypt --text --create
Volume type:
 1) Normal
 2) Hidden
Select [1]: 1

Enter volume path: ./testcontainer

Enter volume size (sizeK/size[M]/sizeG): 50M

Encryption algorithm:
 1) AES
 2) Serpent
 3) Twofish
 4) AES-Twofish
 5) AES-Twofish-Serpent
 6) Serpent-AES
 7) Serpent-Twofish-AES
 8) Twofish-Serpent
Select [1]: 4

Hash algorithm:
 1) RIPEMD-160
 2) SHA-512
 3) Whirlpool
Select [1]: 

Bis dahin nichts besonders. Ich habe TrueCrypt angewiesen, im Text-Modus (--text) einen neuen Container zu erstellen (--create). Daraufhin hat TrueCrypt dieselben Fragen gestellt, wie es auch im normalen Prozess vorkommt. Ich habe mich für einen gewöhnlichen Container (kein Hidden Volume) mit dem Namen ./testcontainer entschieden, der eine Größe von 50 Mebibyte erhält und AES-Twofish verschlüsselt wird (welchen Verschlüsselungsalgorithmus man wählt, ist eine eine Wissenschaft für sich und wird von mir hier nicht weiter ausgeführt). Da ich mich mit Hash-Algorithmen nicht auskenne, habe ich hier einfach TrueCrypts Standard stehengelassen (die Standardwerte werden, sofern vorhanden, immer bei der Aufforderung in eckigen Klammern [ und ] angezeigt).
Nun beginnt der spannende Teil:

Filesystem:
 1) None
 2) FAT
 3) Linux Ext2
 4) Linux Ext3
 5) Linux Ext4
Select [2]: 1

Hier muss man sich für “None” entscheiden, wenn man später ein eigenes Dateisystem aufspielen will. Man könnte freilich auch ein anderes wählen und später überschreiben, aber das ist unnötige Arbeit.
Jetzt werden noch Passwort und Keyfiles abgefragt sowie ein Haufen Zufallswerte eingefordert, die im Textinterface in Form von Tastendrücken eingegeben werden (die graphische Modus verlangt hier nach Mausbewegungen):

Enter password: 
Re-enter password: 

Enter keyfile path [none]: 

Please type at least 320 randomly chosen characters and then press Enter:


Done: 100,000%  Speed:   50 MB/s  Left: 0 s         

The TrueCrypt volume has been successfully created.

Wir haben jetzt also einen Container, der aber noch kein Dateisystem enthält. Der nächste Schritt ist es, ihn zu mappen1 und dann zu formatieren. Hier lässt sich ein Defizit von TrueCrypts graphischer Benutzeroberfläche festmachen, denn diese versucht immer, das Mappen und Mounten des Containers in einem Schritt durchzuführen, was zu folgender Fehlermeldung führt:

Incorrect password or not a TrueCrypt volume.

Auch hier muss also über das Kommandozeilentool gearbeitet werden.

√ quintus@hades => ~/test
$ truecrypt --text --filesystem=none --slot=3 ./testcontainer 
Enter password for /home/quintus/test/testcontainer: 
Enter keyfile [none]: 
Protect hidden volume (if any)? (y=Yes/n=No) [No]: 
√ quintus@hades => ~/test
$ ls /dev/mapper
control  truecrypt1  truecrypt1_0  truecrypt3  truecrypt3_0

--filesystem=none ist wichtig, da TrueCrypt sonst genauso wie in der graphischen Benutzeroberfläche vorgeht und Mappen und Mounten zugleich durchführen will:

Error: mount: Sie müssen den Dateisystemtyp angeben

--slot=3 benutze ich, damit ich sicher weiß, wohin TrueCrypt den gemappten Container schiebt. Es befolgt dabei nämlich folgende Regel: Stelle den gemappten Container über /dev/mapper/truecrypt{slot} zur Verfügung, wobei slot automatisch gewählt wird, wenn nicht angegeben.
Die restlichen Fragen belasse ich bei ihren Standardwerten, weil ich weder Keyfiles benutzt habe noch ein Hidden Volume erstellt habe, und nach Beendigung des Befehls ist unser TrueCrypt-Container gemappt.
Um die weiteren Einträge in /dev/mapper brauchen wir uns nicht zu kümmern, nach oben angegebener Regel ist das uns interessierende Device /dev/mapper/truecrypt3.

Da wir nun eine Device-Datei haben, können wir die gewöhnlichen Maßnahmen ergreifen, um das Device zu formatieren:

√ quintus@hades => ~/test
$ sudo mkfs.xfs /dev/mapper/truecrypt3
Passwort: 
meta-data=/dev/mapper/truecrypt3 isize=256    agcount=2, agsize=6368 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=4096   blocks=12736, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =Internes Protokoll     bsize=4096   blocks=1200, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =keine                  extsz=4096   blocks=0, rtextents=0

Fertig, schon ist der gemappte Container mit XFS formatiert. Jetzt können wir ihn mounten und ein paar Daten draufschreiben:

√ root@hades => /home/quintus/test
# mount -t xfs /dev/mapper/truecrypt3 /mnt
√ root@hades => /home/quintus/test
# echo test > /mnt/atest
√ root@hades => /home/quintus/test
# cat /mnt/atest
test

Gewundert hat mich allerdings, dass ich “echt” root sein musste, sudo wurde zurückgewiesen:

√ quintus@hades => ~/test
$ echo This is a test > /mnt/myfile.txt
bash: /mnt/myfile.txt: Keine Berechtigung

Das hängt aber, denke ich, nicht mit TrueCrypt, sondern mit XFS zusammen. Andere Dateisysteme gebärden sich vermutlich nicht so.

Zu guter Letzt hängt man das TrueCrypt-Volume wieder aus und unmappt es:

√ root@hades => /home/quintus/test
# umount /dev/mapper/truecrypt3
√ root@hades => /home/quintus/test
# truecrypt -d ./testcontainer

Auf diese Art und Weise lässt sich TrueCrypt zu jedem Dateisystem überreden. Viel Spaß damit!

Valete.


1 Ein Device “mappen” heißt, ein virtuelles Dateisystem zu erstellen/abzurufen und als “reguläre” Device-Datei darzustellen. Dieses Mapping ist ein Features des Linux-Kernels und kann bei einigen Dingen, wie zum Beispiel ganzen Dateisystemen in Containern, sehr praktisch sein. “Mounten” hingegen nennt man das Einhängen des Dateisystems auf einem Device (sei es nun echt oder gemappt) in den Verzeichnisbaum.