Chiffrer une partition d'un disque
On peut se demander à quoi sert le chiffrage des partitions d'un disque sous Linux. Après tout, avec la gestion des droits on peut empêcher un utilisateur d'accéder à certain endroit du disque.
Maintenant, imaginez que vous travaillez pour une entreprise et que vous possédez des données confidentielles (les documents du dernier prototype de 'chez_pas_quoi', ...). En cas de vol de vos machines, un intrus peut lire le contenu du disque dur, avec un autre système d'exploitation, ou avec un autre Linux dont il aura les droits d'administrateur.
Heureusement, les données confidentielles auront été cachées dans une partition chiffrée du disque dur, et donc non accessible sans la clé de cryptage que vous aurez judicieusement choisie.
Les préparations
- Il faut d'abord choisir une clé de chiffrage difficile à trouver. Souvent une suite de chiffres et de lettres minuscules/majuscules mélangées n'ayant aucune signification, constitue une véritable clé, difficilement cassable. Sont à proscrire les noms, les prénoms, les dates, ou tout autre événement lié à votre vie ou à la vie de l'entreprise.
- Une partition vide. Cette partition doit être complètement vide de données afin de pouvoir la reformater dans un autre système de fichier. Il vous faudra donc utiliser un logiciel tel que
Gnu/Parted
,QtParted
,Fdisk
,LVM
pour créer votre partition, ou utiliser un fichier à l'aide de l'interface Loop. Dans les exemples ci-dessous nous utiliserons un volume logique issu de LVM. Il aura été créé à l'aide de la commandelvcreate -L10G -n secure-close debian
- Posséder un noyau 2.6 compiler avec le support Device-Manager, et DM-Crypt, ainsi que les utilitaires dmsetup et cryptsetup que vous installez sous Gnu/Debian Sarge à l'aide de la commande :
apt-get install dmsetup cryptsetup openssl
Préparation de la partition
Cas d'une partition
Si vous stockez des données chiffrées sur une partition contenant à l'origine des données non cryptées ou des blancs, il sera très facile de repérer les données chiffrées et les données claires, de voir la quantité de données chiffrées, voire même de les décrypter plus facilement. Nous allons donc nettoyer
la partition en y écrivant des données aléatoires[1] :
dd if=/dev/urandom of=/dev/debian/secure-close
Cas d'un fichier
Vous pouvez aussi décider d'enregistrer vos données chiffrées dans un fichier (parce que vous n'avez plus d'espace libre pour une nouvelle partition par exemple). Pour cela, vous pouvez utiliser les commandes suivantes. Il vous faudra alors utiliser le périphérique /dev/loop0 dans la suite de l'article.
dd if=/dev/urandom of=/home/secure_close.img bs=1M count=10000
losetup /dev/loop0 /home/secure_close.img
Chiffrement de la partition et création du système de fichier
Nous allons maintenant ouvrir notre partition en tant que système chiffré et formater son contenu. Vous pourrez formater la partition avec le système de fichier de votre choix (ReiserFS
, Ext3FS
, Ext2FS
, XFS
, ....)
Sous Gnu/Debian Sarge :
openssl rand -base64 64 | head -n 1 | openssl aes-256-ecb > /home/secure_close.key
Cette ligne de commande va créer une clé de chiffrage dans le fichier secure_close.key et le protéger à l'aide de votre mot de passe. Cela vous permettra de changer votre mot de passe, sans reformater la partition. Cette commande vous demandera alors votre mot de passe, il ne faut maintenant plus l'oublier.
Maintenant nous allons chiffrer la partition à proprement parlé :
openssl enc -d -aes-256-ecb -in /home/secure_close.key | cryptsetup create secure-open /dev/debian/secure-close
Vous pourrez alors retrouver votre partition déchiffrée dans /dev/mapper/secure-open. Il ne vous reste plus qu'a créer le système de fichier, monter la partition et copier les fichiers à protéger. (Vous pouvez utiliser aussi un utilitaire d'effacement spécialisé pour écraser les fichiers avec un contenu aléatoire avant de réellement le supprimer.)
Sous Debian etch/sid :
Sous Debian etch/sid, il est possible d'utiliser Luks pour le chiffrage. Cela permet de stocker la clé au début de la partition, et de pouvoir la modifier ultérieurement sans reformater. Cela permet de ne plus avoir de fichier séparé avec la clé. Pour formater une partition au format Luks et ainsi l'initialiser avec le mot de passe de protection, il faut utiliser la commande suivante (Attention à ne pas oublier le mot de passe) :cryptsetup luksFormat /dev/debian/secure-closeAprès cela, on se retrouve avec une partition chiffré vierge. Il faut donc l'ouvrir pour pouvoir ensuite y installer un système de fichier et des fichiers. Pour cela, on utilise la commande suivante qui va associer à notre partition chiffrée une partition déchiffrée (virtuelle)
cryptsetup luksOpen /dev/debian/secure-close secure-open
Préparation et protection des données
mke2fs -j /dev/mapper/secure-open
mount -t ext3 /dev/mapper/secure-open /mnt
cp -a dossiers_confidentiels/* /mnt/
Une fois que vous avez fini, vous pouvez démonter la partition, et supprimer l'accès au contenu déchiffré.
umount /mntSi vous n'utilisez pas Luks (sous Gnu/Debian Sarge) :
cryptsetup remove secure-openSi vous utilisez Luks, la commande est
cryptsetup luksClose secure-open
Et si vous avez créé un périphérique loop
:
losetup -d /dev/loop0
Utilisation courante :
Dans une utilisation courante vous allez monter la partition quand vous voudrez y accéder, et la démonter quand vous ne l'utiliserez plus. Le montage de la partition se fait à l'aide des commandes ci-dessous, si vous n'utilisez pas Luks :
[bash]openssl enc -d -aes-256-ecb -in /home/secure_close.key | cryptsetup create secure-open /dev/debian/secure-closeet à partir de la commande suivante si vous utilisez Luks
mount -t ext3 /dev/mapper/secure-open /mnt
cryptsetup luksOpen /dev/debian/secure-close secure-open
mount -t ext3 /dev/mapper/secure-open /mnt
Le démontage de la partition est identique :
umount /mntou
cryptsetup remove secure-open
umount /mnt
cryptsetup luksClose secure-open
Changement de mot de passe
Quand vous souhaitez changer de mot de passe, vous pouvez utiliser la commande suivante :
Sans Luksecho `openssl enc -d -aes-256-ecb -in /home/secure_close.key` | openssl aes-256-ecb > /home/secure_close.keyAvec Luks
cryptsetup luksDump /dev/debian/secure-closepour voir quels sont les slots utilisés. puis
cryptsetup luksAddKey /dev/debian/secure-close
cryptsetup luksDelKey [ancien slot]
Un script pour le montage et le démontage automatique
Voici un script que vous pouvez utiliser en root ou à l'aide de la commande sudo pour monter et démonter vos partitions chiffrer[3] :
#!/bin/sh
if [ -e /dev/mapper/secure-open ] ; then
umount /home/secure 2> /dev/null
if [ $? != 0 ] ; then
kdialog --title KSecure --error "Impossible de démonter le périphérique"
fi
if [ -e /dev/mapper/secure-open ] ; then
/sbin/cryptsetup remove secure-open
kdialog --title KSecure --msgbox "Suppression du périphérique accomplie"
fi
else
password=`kdialog --title KSecure --password "Clé de déchiffrement"`
if [ -z $password ] ; then
password="nopassword"
fi
echo "$password" | \
openssl enc -d -aes-256-ecb -in ~/compte/secure.cle -kfile /dev/stdin | \
/sbin/cryptsetup create secure-open /dev/debian/secure-close 2> /dev/null
mount /home/secure 2> /dev/null
if [ $? -ne 0 ] ; then
kdialog --title KSecure --error "Clé incorrecte"
/sbin/cryptsetup remove secure-open
fi
fi