La solution repose donc dans pam_mount, ce
module PAM
vous permet de faire monter un volume au moment de l'ouverture de
session. C'est le truc parfait : pas de question posée au boot et
lorsque vous n'êtes plus loggué, votre volume est démonté, c'est une
bonne chose pour les gens qui ne font pas confiance en root (même si
root, c'est moi-même).
pam_mount est capable de gérer le montage de partition NFS, Samba, NCP
et surtout, ce qui nous intéresse, les volumes chiffrés. Il dispose de
deux modes d'utilisations : pour monter le volume chiffré, il peut
utiliser comme "clef de déchiffrement" le mot de passe système (celui du
fichier shadow par exemple) mais ça voudrait dire que vous devrez
conserver à vie votre mot de passe (car c'est la clef de chiffrement).
Ce n'est donc même pas imaginable !
L'autre méthode consiste à utiliser un fichier contenant la clef générée (ou non) aléatoirement et à chiffrer ce fichier par le mot de passe système. Plus clairement, cela veut dire qu'à l'ouverture de session, pam_mount va déchiffrer le fichier avec votre mot de passe système pour récupérer la clef de déchiffrement du fichier. Vous avez besoin d'aspirine ?
Cette méthode permet à l'utilisateur de modifier son mot de passe lorsqu'il le veut, en contre partie, il doit ré-écrire le fichier pour rechiffrer la clef du volume avec son nouveau mot de passe système.
Résumé pour mettre en place tout ça
- Avoir ce qu'il faut dans le noyau (cryptoloop, device-mapper, cyphers, etc.) :
# apt-get install libpam-mount
- Ajouter la ligne "
@include common-pammount" dans/etc/pam.d/où il faut. -
Ajouter la ligne suivante dans /etc/security/pam_mount.conf (coupée en deux mais faut pas) pour l'utilisateur foobar :
volume foobar local - /vol/foobar /home/foobar loop,encryption=aes,keybits=256 \ aes-256-ecb /etc/mounts/foobar.key -
Maintenant, il faut créer et initialiser le volume chiffré :
On génère 32 octets aléatoirement, ce sera notre clef de chiffrement pour notre volume. Ensuite, nous chiffrons cette chaîne de caractères avec le mot de passe système.
# export PASS_LOGIN=maman-ours # dd if=/dev/urandom bs=1c count=32 | \ openssl enc -aes-256-ecb -pass env:PASS_LOGIN > /etc/mounts/foobar.keyIl nous reste enfin à créer un système de fichier sur notre volume.
# openssl enc -d -aes-256-ecb -in /etc/mounts/foobar.key | \ losetup -e aes -k 256 -p0 /dev/loop7 /vol/foobar enter aes-256-ecb decryption password: [MOT DE PASSE LOGIN] # mkfs.ext2 /dev/loop7 # losetup -d /dev/loop7
C'est terminé !
Résultat :
% mount |grep foobar % su - foobar Password: foobar@shibby:~$ mount |grep foobar /vol/foobar on /home/foobar type ext2 (rw,loop=/dev/loop0,encryption=aes,keybits=256) foobar@shibby:~$ logout % mount |grep foobar
Génial non ?
Pour rajouter un peu plus de sécurité, chiffrons le swap :
# apt-get install cryptsetup # cat > /etc/crypttab swap /dev/hda7 /dev/urandom swap # grep swap /etc/fstab /dev/mapper/swap none swap sw 0 0
Zoup, c'est terminé !