Chiffrer une partition d'un disque
Par Ulrich VANDENHEKKE le jeudi, août 24 2006, 16:24 - Logiciels libres - Lien permanent
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,LVMpour 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
Il y a 12 commentaires
je viens de parcourrir ta documentation et j'ai quelques soucis.
Voila, je suis en master 2 Sécurité des Systèmes Informatiques et j'ai un projet de fin d'études à réaliser. Il consiste, entre autres, à sécuriser les données d'utilisateurs.
Pour celà, nous avons installé un serveur de clefs couplé à un annuaire LDAP et nous devons sécuriser les données du home des utilisateurs sous Debian.
Style :
/home
---/toto
------/donnéesNonCryptées
------/donnéesCryptées
---/autreUser
------ etc...
Cependant je ne vois pas comment crypter seulement un dossier de chaque home. Pourrais-tu me conseiller, car il me semble que tu maitrises bien dmcrypt.
Merci d'avance.
Nicolas
Bonjour,
Deux solutions sont possible :
- Si vous voulez que chaque home de chaque utilisateurs soit chiffré et monté au moment de la connexion avec le mot de passe de l'utilisateur, vous pouvez regarder du coté de
-
La seconde solution, c'est de chiffrer un fichier (mis dans la partie
Par ailleurs dans la version instable de Debian, la version de cryptsetup utilise LUKS. Voici une modification du scripte que j'ai fais (pas forcément bien sécurisé), passant par kdialog pour demander le mot de passelibpam-mount. Il vous faudra alors faire un fichier chiffré par utilisateur ainsi qu'un fichier contenant la clé (chiffré avec le mot de passe de l'utilisateur) par utilisateur également. Pour installerlibpam-mountetdmsetup, vous pouvez utilisez, sous Debian la commande suivante : Ensuite à la fin du fichier/etc/pam.d/common-auth, vous ajoutez, s'il n'existe pas déjà : Pareil pour le fichier/etc/pam.d/common-sessionEt mettre dans le fichier/etc/login.def: Et dans le cas d'un utilisateur s'appelant phoenix, vous pouvez ajoutez la ligne suivante dans le fichier/etc/security/pam_mount.conf: Le problème de cette solution, c'est que c'est le dossier utilisateur complet qui est chiffré et non un des dossiers de l'utilisateur. Je ne pense pas que cela corresponde vraiment à ce que vous cherché, mais peut peut-être vous aider.donnéesNonCryptées) qui sera monté par l'utilisateur lui-même, ou un scripte qui à la possibilité de connaître le mot de passe. Le but sera alors d'écrire un script qui demandera le mot de passe à l'utilisateur ou qu'il ira récupérer par LDAP par exemple si celui-ci est accessible par ce moyen. Une fois le mot de passe obtenue, le script peut utiliser les outils pour monter le fichier/home/$LOGNAME/donneesNonCryptees/$LOGNAME.partdans/home/$LOGNAME/donneesCrypteescomme expliqué au dessus. Ensuite on peux utilisersudopour permettre à l'utilisateur d'appeler la commande avec les droits de l'administrateur (donc d'utiliser cryptsetup) sans mot de passe, mais il faut veiller qu'il n'y ai pas de faille dans le script. Si la base LDAP connais le mot de passe, vous pouvez modifier le script pour qu'il aille chercher le mot de passe sur l'annuaire LDAP au lieu de le demander à l'utilisateur. Tu peux ainsi ajouter cette commande dans le fichier/etc/bash.bashrcpour qu'elle soit exécuté automatiquement lorsque l'utilisateur se connecte. (Il faut aussi à penser à démonter la partition lorsque l'utilisateur se déconnecte.)[bash] #!/bin/sh DISK=$1 DISKOPEN="$DISK-open" DISKCLOSE="$DISK-close" if [ -e /dev/mapper/$DISKOPEN ] ; then umount /dev/mapper/$DISKOPEN 2> /dev/null if [ $? != 0 ] ; then kdialog --title KSecure --error "Impossible de démonter le périphérique $DISK" fi if [ -e /dev/mapper/$DISKOPEN ] ; then /sbin/cryptsetup luksClose $DISKOPEN kdialog --title KSecure --msgbox "Suppression du périphérique $DISK accomplie" fi else password=`kdialog --title KSecure --password "Clé de déchiffrement de $DISK"` if [ -z $password ] ; then password="nopassword" fi echo "$password" | \ /sbin/cryptsetup luksOpen /dev/debian/$DISKCLOSE $DISKOPEN 2> /dev/null mount /dev/mapper/$DISKOPEN 2> /dev/null if [ $? -ne 0 ] ; then kdialog --title KSecure --error "Clé incorrecte" fi fiBonjour,
les noms aussi ... 
c'est marrant mais les lignes de commande de création de la partition chiffrée avec cryptsetup, openssl, head, me disent quelque chose
Ce n’est pas faux, ton site me dit aussi quelque chose.

Je m'en suis inspiré (de lui mais aussi de d'autre) pour faire des essais sur mon propre disque, après avoir pris des notes. Mais ensuite je n'ai pas retrouvé d'où j'avais pris mes notes
Ensuite j'en ai fais un scripte, si cela t'intéresse.
C'est de la musique ? LOL Si c'est un accord parfait, tu chiffres 5, pour son premier renversement, tu chiffres 6, pour le 2ème renversement tu chiffres 6 et 4, ;-( pour un accord de septième, tu chiffres 5 et 7, 8-O 7+ si c'est une septième majeure, etc... ;-( Demande à Aliénor LOL , elle comprend mieux que toi.... ;-(
Gros Bisous à Tertous, dominique ;-(
Maiiiiis nooooonnnnn ! Rien avoir avec la musique, mais avec les partitions d'un disque dur
Bien plus intéressant 
Bonjour,
J'ai suivi ton document pour chiffrer une partition.
N'étant pas informaticien, j'ai buté assez rapidement sur des problèmes.
Je me permets d'écrire pour faire part de mon expérience de simple utilisateur néophyte.
Sur debian testing (etch) :
# apt-get install dm-setup dm-crypt
ne donne rien, les paquets n'existent pas.
#apt-get install dmsetup cryptsetup
fonctionne sur debian etch
La ligne :
#openssl enc -d aes-256-ecb -in /home/secure_close.key | cryptsetup secure-open /dev/debian/secure-close
ne fonctionne pas, cryptsetup est invoqué sans options
Je suppose (cf. man) que ce doit être :
#[...] cryptsetup create secure-open /dev/debian/secure-close
voila, après ça je suis arrivé au bout de la manip.
Merci pour c'est aide en ligne.
mx
Oui, c'est vrai
Sur mon ordinateur personnel, je suis sur la distribution instable de Debian. Et il est vrai que mes scripts ont évolué avec la distribution mais pas mon blog
.
Je vais essayé d'éclaircir ce point pendant mes vacances, les commandes ci-dessous concernant sarge (avec des peut-être des erreurs), si je ne me trompe (voir même woody)
Enfin cela reste à vérifier, je verrais des tests chez moi, et modifier l'article en conséquence
Merci pour tes précisions
L'article a été corrigé pour prendre en compte les remarques et l'évolution des distributions. Les commandes concernés bien sarge mais était un peu fausse.
J'ai aussi ajouté une partie sur Luks qui est apparu avec etch
merci
saut, sympa ton blog ! vraiment agréable de lire ttes billets. pour en revenir à ce billet, parfois cedrtaines parenthèsés en disent bien + que le reste de la phrase:v"attention a ne pas oublier le mot de passe"