Crypter/Chiffrer une partition avec dm-crypt et luks
Par Yoann le vendredi, 21 août 2009, 22:20 - L1nuX and c0 - Lien permanent
Surement un effet Hadopi, le cryptage c'est à la mode en ce momment !
Puisque les articles fleurisses dans les magazines papier & web, pourquoi pas ici ? :-)
Je vais vous décrire dans ce billet, comment crypter une partition sur votre distribution linux préféré Debian (ou Ubuntu .. ?) à l'aide de dm-crypt et luks (Linux Unified Key Setup).
ATTENTION !!!
- Il n'est pas possible de crypter une partition existante sans en effacer les données
- Si vous avez des données sur la partition que vous souhaitez crypter sauvegarder les avant !!!
- TOUTES LES DONNEES DES PARTITIONS QUE VOUS ALLEZ CRYPTER SERONT EFFACEES
LUKS
Le projet LUKS, vise à standardiser le chiffrement de systèmes de fichiers. Les partitions LUKS peuvent être accédées aussi bien sous linux que sous Windows grâce à l’outil gratuit FreeOTFE.
- http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup
- http://en.wikipedia.org/wiki/FreeOTFE
Préparation du système
Le kernel
Le kernel doit être, ou avoir été, compilé avec les options suivantes :
Pour un noyau 2.6.27, ces deux options se trouvent dans la rubrique Device drivers --> Multiple devices driver support (RAID and LVM).
- CONFIG_BLK_DEV_DM (Device mapper support)
- CONFIG_DM_CRYPT (Crypt target support)
Pour un noyau 2.6.27, ces trois options se trouvent dans la rubrique Cryptographic API.
- CONFIG_CRYPTO_SHA256 (SHA224 and SHA256 digest algorithm)
- CONFIG_CRYPTO_SHA512 (SHA384 and SHA512 digest algorithms)
- CONFIG_CRYPTO_AES (AES cipher algorithms)
Rassurez-vous c'est le cas sur les kernel par default au moins sur Debian 5.0 & Ubuntu 8.04
Chargement des modules necessaires
modprobe aes
modprobe dm-mod
modprobe dm_crypt
Chargement des modules au boot de la machine
echo aes >> /etc/modules
echo dm_mod >> /etc/modules
echo dm_crypt >> /etc/modules
Installation des packages necessaire
aptitude install cryptsetup
Préparation du disque
Création de la partition à l'aide de fdisk
fdisk /dev/sdb
- pour supprimer toutes les partitions : d (a repéter pour toutes les partitions)
- puis pour ajouter une nouvelle parition : n (les valeurs par default concernant les tailles, utilise tout l'espace du disque)
- et enfin : w (pour enregistrer les changements)
Supprimer toutes les données de la partition Nous allons supprimé toutes les trace des données qui sont actuellement sur la partition. Il existe des outils dit de "forensic" comme TCT, qui peuvent retrouver des données effacées. Une donnée sur un disque dur disparait au bout d'environ sept écritures au même endroit, il existe un outil nommé shred qui effectue se genre de chose.
shred -n 10 -v /dev/sdb1
Shred n'etant pas efficace pour la génération d'entropie (reproduit toujours la même séquence), on va donc généré de l'entropie depuis /dev/urandom
dd if=/dev/urandom of=/dev/sdb1
Crypter le disque
Initialisez la partition
cryptsetup --verbose --verify-passphrase luksFormat /dev/sdb1
On vous demandera de saisir une passphrase qui elle seul permettra de decrypter les données de la partition.
Prenez soins de bien la noter et quel soit assé compliqué.
Ouvrir le nouveau volume crypté L'opération consiste à mapper notre partition (crypté) avec une partition virtuelle (dé-crypté). On vous demandera bien-sûr lors de cette opération la passphrase permettant de dé-crypté la partition.
cryptsetup luksOpen /dev/sdb1 data
La partition mapper (donc dé-crypté) ici data se trouvera dans /dev/mapper/
Pour vérifier que le volume est bien ouvert :
ls -l /dev/mapper | grep data
Création du système de fichier (ext3 dans notre exemple) sur la partition crypté
mkfs.ext3 /dev/mapper/data
Monter la partition
mkdir /mnt/data/
mount /dev/mapper/data /mnt/data/
Pour vérifier que le point de montage est bien visible :
df -h
Ouvrir & monter la partition crypté au boot de la machine
ATTENTION !!!
Vous noterez bien que je ne dis pas ici Ouvrir & monter automatiquement.
Si vous decidez de monter votre partition au demarrage, la passphrase vous sera demandé avant même de charger les différents services (y compris réseau & bien sûr ssh). Pensez-y si vous le faite sur un serveur distant !!
Le fichier /etc/crypttab (à créer au besoin) décrit les périphériques de bloc chiffrés qui sont configurés au démarrage du système. Nous y ajoutons notre partition crypté
echo "data /dev/sdb1 none luks" >> /etc/crypttab
- data : correspond à notre mapping
- /dev/sdb1 : correspond à la partition crypté
- none : indique que nous n'utilisons pas de fichier de clef
- luks : indique le type de cryptage utilisé
Modifier le fichier /etc/fstab : echo "/dev/mapper/data /data ext3 defaults 1 2" >> /etc/fstab
Ouvrir & monter la partition crypté manuellement Si vous utilisez une partition crypté sur un serveur, il vous faudra utiliser cette methode manuelle :
cryptsetup luksOpen /dev/sdb1 data
mount -a
Dé-monter & Fermer la partition crypté On commence par demonter la partition :
umount /mnt/data/
Puis par fermer le mapping :
cryptsetup luksClose data