debian crypto par julien - mars 2007
Ce petit article décris la mise en place d'une partition cryptée comme répertoire home sur une debian etch. Le système de crypto utilisé est dm_crypt (http://www.saout.de/misc/dm-crypt/). Il s'agit d'un système de pseudo device intégré au noyau qui fait interface entre le device classique (/dev/hda, par exemple) et le système de fichier. Toutes les actions effectuées sur le système de fichier sont ainsi cryptées par le pseudo device avant d'etre écrites sur le device réel.
Toutes les versions du noyau depuis au moins la 2.6.4 incluent par défaut le support de dm_crypt. DM_CRYPT est souvent compilé comme module par défaut dans les distributions. Vérifiez par vous même :
$ grep DM_CRYPT /boot/config-2.6.17.7 CONFIG_DM_CRYPT=m
Il faut également s'assurer du support de l'algorithme de cryptographie symétrique AES (Advanced Encryption Standard, la référence internationale pour la crypto symétrique). Pour les fana de crypto, rien de tel que le document officiel de spécification :p http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.pdf
modinfo nous confirme le support d'AES dans le noyau
#grep AES /boot/config-2.6.17.7 CONFIG_CRYPTO_AES_586=m # modinfo /lib/modules/`uname -r`/kernel/arch/i386/crypto/* filename: /lib/modules/2.6.17.7/kernel/arch/i386/crypto/aes-i586.ko alias: aes author: Fruhwirth Clemens, James Morris, Brian Gladman, Adam Richter license: Dual BSD/GPL description: Rijndael (AES) Cipher Algorithm, i586 asm optimized depends: vermagic: 2.6.17.7 preempt mod_unload 386 gcc-4.0
note : attention a l'architecture utilisée dans le chemin, ici i386
Si vous n'avez pas le support de DM_CRYPT ou d'AES, il ne vous reste plus qu'a recompiler votre noyau avec make-kpkg :)
Après, il suffit de charger les modules aes, dm_mod et dm_crypt et de les ajouter dans /etc/sysctl.conf pour qu'ils soit chargés à chaque démarrage.
DM_CRYPT a besoin de 2 outils majeurs : dmsetup et cryptsetup :
dmsetup permet de manipuler les pseudo device :
The Linux Kernel Device Mapper is the LVM (Linux Logical Volume Management) Team's implementation of a minimalistic kernel-space driver that handles volume management, while keeping knowledge of the underlying device layout in user-space. This makes it useful for not only LVM, but EVMS, software raid, and other drivers that create "virtual" block devices.
et cryptsetup est une interface pour manipuler le support de la crypto dans le noyau
Since kernel 2.6.4, encrypted filesystem support is provided by the device mapper target dm-crypt. This utility provides a command-line interface for configuring this facility. It has integrated support for LUKS.
on fais donc un petit apt-get install dmsetup cryptsetup pour installer les packages.
Une fois ces packages installer, on peut vérifier que la pseudo interface de controle est créée :
# ls -l /dev/mapper/control crw-rw---- 1 root root 10, 63 2007-03-07 21:51 /dev/mapper/control
cryptsetup est donc l'interface qui permet de manipuler les partitions cryptées. La commande create va nous permettre d'initialiser le système :
# cryptsetup -y create home /dev/hda5 Enter passphrase: Verify passphrase:
Simple ! TROP simple ! l'argument -y nous permet de vérifier la passphrase, le reste est trivial !
La pseudo interface est créé dans /dev/mapper/home, la dernière partie du chemin étant le nom que l'on choisi à la création. On peut donc créer un système de fichier sur cette pseudo interface :
#mkfs.xfs /dev/mapper/home
et l'ajouter dans le fstab
# <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/home /home xfs defaults 0 1
Forcément, la partition ne se montera pas si vous ne fournissez pas le mot de passe ! Il faut donc créer un script dans /etc/rc2.d qui sera lancé avant le lancement du serveur X :
#vim /etc/rc2.d/S50cryptstart #! /bin/sh cryptsetup create home /dev/hda5 mount -a
Et oui, c'est la même commande que pour la création. Il demande le mot de passe une fois et créé le pseudo device. Le mount -a permet de charger les partitions par defaults qui ne sont pas encore chargées (attention si vous en avez plusieurs).
Youhou, ca marche et c'est crypté ! Un pti test montre des résultats plutôt bons :
# hdparm -tT /dev/mapper/homejulien /dev/mapper/homejulien: Timing cached reads: 282 MB in 2.01 seconds = 140.32 MB/sec HDIO_DRIVE_CMD(null) (wait for flush complete) failed: Inappropriate ioctl for device Timing buffered disk reads: 34 MB in 3.00 seconds = 11.33 MB/sec HDIO_DRIVE_CMD(null) (wait for flush complete) failed: Inappropriate ioctl for device
J'ai pas creusé le pourquoi des messages ioctl, a mon avis c'est pas méchant mais si quelqu'un à la soluce….
Note : Ca fait maintenant plusieurs mois que j'utilise ce système sur mon home et il marche parfaitement :)
Et pour les sources, merci à cep sur le forum ubuntu-fr pour son article et aussi à Adamgomaa pour ce howto ultra fournit : https://help.ubuntu.com/community/EncryptedFilesystemHowto
~~DISCUSSION~~