Chiffrer une partition d'un disque

Posté le 24. August 2006 dans SysAdmin

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 commande

    lvcreate -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 partition2

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-close

Aprè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 /mnt

Si vous n'utilisez pas Luks (sous Gnu/Debian Sarge) :

cryptsetup remove secure-open

Si 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 :

openssl enc -d -aes-256-ecb -in /home/secure_close.key | cryptsetup create secure-open /dev/debian/secure-close
mount -t ext3 /dev/mapper/secure-open /mnt

et à partir de la commande suivante si vous utilisez Luks

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 /mntcryptsetup remove secure-open

ou

umount /mntcryptsetup luksClose secure-open

Changement de mot de passe

Quand vous souhaitez changer de mot de passe, vous pouvez utiliser la commande suivante :

Sans Luks

echo `openssl enc -d -aes-256-ecb -in /home/secure_close.key` | openssl aes-256-ecb > /home/secure_close.key

Avec Luks

cryptsetup luksDump /dev/debian/secure-close

pour voir quels sont les slots utilisés.puis

cryptsetup luksAddKey /dev/debian/secure-closecryptsetup 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 chiffrer3 :

#!/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

  1. Attention, cela détruira le contenu de la partition que vous assainissez.

  2. Les différentes commandes sont inspirés du site http://docisland.blogspot.com/.

  3. Vous pourrez trouver un script pour le format Luks dans les commentaires ou dans la partie Script du site.