dmcrypt
Ayant besoin de protéger mes données personnelles sur un laptop avec Debian, je me suis interressé à dmcrypt qui est déjà dans le noyau Linux 2.6. Je ne vais pas réécrire les docs déjà existantes sur le sujet :
http://deb.riseup.net/storage/encryption/dmcrypt/
et
http://gentoo-wiki.com/SECURITY_dmcrypt
mais plutôt revenir sur certains points et les compléter.
L'objectif est de crypter le homedir éxistant seulement. Le plus simple étant de créer un système de fichier dans un fichier (mitch.img) et non dans une partition à part entière. Cette dernière solution est très souvent proposée lorsque l'on cherche une solution pour chiffrer son homedir, mais présente l'inconvénient de créer une partition par utilisateur.
C'est parti donc pour dmcrypt et la création d'un homedir chiffré.
Pré-requis
Création du fichier mitch.img et du device
# dd if/dev/urandom of=/home/mitch.img bs=1M count=5000
# losetup /dev/loop0 /home/mitch.img
Chiffrement de la partition et création du système de fichier
Plutôt que de chiffrer la partition et de chiffrer la clé qui a chiffrer la partition dans un fichier /home/mitch.key ensuite, il est préférable de créer une clé aléatoire chiffrée et de l'utiliser pour chiffrer la partition :
# openssl rand -base64 64 | head -n 1| openssl aes-256-ecb > /home/mitch.key
Là, il est demandé le mot de passe de chiffrement de la clé privé qui servira dans le chiffrement/déchiffrement de la partition.
Remarque : cette solution évitera de taper la clé de chiffrement dans la ligne de commande qui créera la partition chiffrée. Ainsi, rien nest présent dans les fichier d'historique.
Il suffit ensuite de chiffrer la partition de la manière suivante :
# openssl enc -d -aes-256-ecb -in /home/mitch.key | cryptsetup mitch /dev/loop0
Remarque : le mot de passe utilisé lors de la phase de login sera utilisé pour déchiffré la clé dans le fichier mitch.key, il doit être le même que celui du login. Le device chiffré à été mappé sur/dev/mapper/mitch. Il reste ensuite à créer le filesystem, par exemple :
# mkfs.ext3 /dev/mapper/mitch
Remarque : Par la suite, il s'agit d'une partition formatée à part entière, donc pour copier les données déja éxistantes, il suffit de la monter qq part, et d'y copier les données du homedir en gardant les droits.
Pour finir, démonter le tout, et automatiser le montage et déchiffrement au login (et inversement).
# cryptsetup remove mitch
# losetup -d /dev/loop0
Login
Comme très bien décrit dans les url pré-citées, le montage/déchiffrement est automatisable au login avec libpam-mount. Ajouter à la fin de /etc/security/libpam_mount.conf (description des volume à monter lors du login par utilisateur) :
volume mitch crypt - /home/mitch.img /home/mitch loop,cipher=aes aes-256-ecb /home/mitch.key
Ajouter dans les fichiers /etc/pam.d/SERVICE (common-auth/common-session/gdm ...) pour préciser d'utiliser le module pam-mount dans les bonnes circonstances :
@include common-pammount
Terminer, en ajustant les droits des fichiers crées :
# chown -R mitch:mitch /home/mitch /home/mitch.img /home/mitch.key
# chmod 600 /home/mitch.key
# chmod 700 /home/mitch
C'est prêt :)
Remarque : le mot de passe de login déchiffrant la clé privée, il est donc important de penser à changer le mot de passe de la clé lorsque l'on change celui du login, par exemple :
# echo `openssl enc -d -aes-256-ecb -in /home/mitch.key`| openssl aes-256-ecb > /home/mitch.key
