MICRO-HOWTO: CRYPTER UN SYSTÈME DE FICHIERS AVEC DM-CRYPT
AUTEUR
mike dentifrice
fluor@poivron.org
http://dentifrice.poivron.org/
DOCUMENT
Version: 0.1
Date: 2004-03-28 (màj: 2004-06-15)
Licence: Creative Commons
NonCommercial-ShareAlike 1.0
BLAH
A partir du noyau 2.6.4 apparaît dm-crypt, qui sonne le glas de
cryptoloop. Pour celleux qui veulent se mettre à la page (et en auront
été préalablement convaincu-e-s par la lecture assidue des divers
documents théoriques et techniques dispos sur le sujet, que je ne vais
pas paraphraser ici), voici comment procéder, en trois coups de cuiller
à pot.
Il s'agit ici de crypter une partition /home chiffrée avec
l'algorithme AES, sous Debian GNU/Linux en version testing (sarge).
Testé sur powerpc (idem pour i386). C'est facile, et ça marche
parfaitement.
HOWTO
- réserver une partition pour /home lors du partitionnement du
disque dur. Par la suite, il est plus simple de ne pas la monter
avant d'avoir mis en place le mécanisme de crypto, et d'utiliser un
/home temporaire situé sur la partition racine.
- télécharger les sources du noyau Linux 2.6.4 sur kernel.org
(`wget
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.4.tar.bz2`).
- configurer le noyau (`make menuconfig`), en prenant soin
d'intégrer le support de device-mapper et dm-crypt, ainsi que
l'algorithme de chiffrement AES, en dur (pas en modules): dans "Device
Drivers" -> "Multi-device support (RAID and LVM)", sélectionner
"Device mapper support" puis "Crypt target support"; dans
"Cryptographic Options", sélectionner "AES cipher algorithms".
- compiler le noyau (`make-kpkg kernel_image`) et l'installer
(`dpkg -i ../kernel-image-2.6.4_10.00.Custom_powerpc.deb` dans
mon cas).
- installer l'outil de pilotage du device-mapper en userspace
(`apt-get install dmsetup`). Si le système n'utilise ni devfs
ni udev, en télécharger aussi les sources sur ftp://sources.redhat.com/pub/dm/,
les désarchiver (`tar xvvfj device-mapper.1.00.08.tgz`), et
exécuter le script "device-mapper.1.00.08/scripts/devmap_mknod.sh"
(pour créer le périphérique /dev/mapper/control).
- télécharger les sources de cryptsetup (`wget
http://www.saout.de/misc/dm-crypt/cryptsetup-0.1.tar.bz2`), le compiler et
l'installer (`./configure ; make ; sudo make install`). Le script
'configure' indiquera probablement des librairies manquantes. Dans ce cas,
installer les paquetages correspondants (libgcrypt7-dev, libcppopt-dev,
libgcrypt11, g++, libpopt-dev, libdevmapper-dev).
- télécharger les sources de hashalot (sur http://www.paranoiacs.org/~sluskyb/hacks/hashalot/),
le compiler et l'installer (là encore, avec le trio classique
`./configure ; make ; sudo make install`).
- adapter lilo ou grub, et rebooter sur le noyau 2.6.4.
- vérifier que le périphérique de contrôle de device-mapper existe
(`ls -l /dev/mapper/control`), et que l'algo de chiffrement AES
est supporté (`cat /proc/crypto`).
- créer un volume 'home' associé à la partition à crypter (dans mon
cas, '/dev/hda4'): `sudo cryptsetup -y create home /dev/hda4`.
Entrer une phrase de passe, et la confirmer (confirmation demandée par
le paramètre -y). Si tout se passe bien, '/dev/mapper/home' permet
désormais d'écrire/crypter et lire/décrypter sur '/dev/hda4', avec
l'algorithme AES (sélectionné par défaut, -c pour changer), une clef
de 256 bit (taille par défaut, -s pour changer) hashée avec ripemd160
(par défaut si hashalot est installé, -h pour changer).
- créer un système de fichiers sur '/dev/mapper/home' (`sudo
mkfs.ext3 /dev/mapper/home`), puis le monter (`sudo mount
/dev/mapper/home /mnt`). Un répertoire 'lost&found' devrait
apparaître dans '/mnt'.
- copier le contenu éventuel de '/home' sur la partition cryptée
(`cp -ax /home/* /mnt/`), puis la démonter (`sudo umount
/mnt`), pour la remonter à son emplacement final (`sudo mount
/dev/mapper/home /home`).
- éditer '/etc/fstab' pour que cette partition soit automatiquement
montée sur '/home' au prochain démarrage, en ajoutant la ligne
'/dev/mapper/home /home ext3 defaults,user,exec,suid 0 1'.
- pour que son contenu soit accessible, il faut au préalable, à
chaque démarrage, recréer le mapping avec cryptsetup. Pour ce faire,
créer un petit script 'cryptinit' dans '/etc/init.d', contenant ces
lignes (en changeant le chemin vers l'exécutable 'cryptsetup', si
différent):
#!/bin/bash
if [ -b /dev/mapper/home ] ; then
/usr/bin/cryptsetup remove home
fi
/usr/bin/cryptsetup -h ripemd160 create home /dev/hda4
- rendre le script exécutable (`chmod +x
/etc/init.d/cryptinit`) et s'assurer que celui-ci sera lancé
suffisamment tôt dans la procédure d'initialisation (avant que les
partitions listées dans '/etc/fstab' ne soient montées), mais après la
configuration du clavier (à moins de vouloir taper sa phrase de passe
en qwerty :P). Pour ce faire, établir un lien symbolique de
'/etc/rcS.d/S08cryptinit' vers '/etc/init.d/cryptinit' (`cd
/etc/rcS.d ; ln -s ../init.d/cryptinit S08cryptinit`).
- redémarrer, taper sa phrase de passe, et voilà, c'est la
joie!
VRAC
- bien entendu, si vous n'utilisez pas 'sudo' (mais franchement,
vous devriez :P), exécutez les lignes de commandes précédées par
`sudo` en tant que root.
- si vous entrez une mauvaise phrase de passe, cryptsetup ne
bronchera pas et affichera "/dev/mapper/home is active" si vous
l'interrogez avec `sudo cryptsetup status home`, mais vous ne
pourrez pas monter la partition et accéder à vos données. Dans ce cas,
il faut supprimer le mapping erronné, et recommencer (`sudo
cryptsetup remove home`, puis `sudo cryptsetup create home
/dev/hda4`). Pas de panique, donc, seul le mapping change, ce qui
ne suppose aucune perte de données.
LIENS
dm-crypt: a device-mapper
crypto target (page "officielle")
wiki dm-crypt
Linux: Replacing
Cryptoloop With 'dm-crypt'