{{tag>cryptsetup chiffrement partition luks}} ====== Créer une partition chiffrée ====== Cette page présente comment créer et utiliser une partition chiffrée destinée à héberger du contenu confidentiel. Cette partition n'est qu'une partition de donnée (autrement dit elle ne contient pas de fichiers nécessaire au systeme) et n'a pas pour but d'être montée automatiquement au démarrage. Ce volume chiffré ne sera donc utilisable qu'une fois certains opérations réalisées manuellement, voir suite. Cette installation sera comme d'habitude réalisée sur debian stable (squeeze a l'heure ou j'écris ces lignes) mais devrait être adaptable facilement a d'autres distributions. ===== Prérequis ===== * Installation de crypsetup : apt-get install cryptsetup * Création initiale de la partition : je vais utiliser un //logical volume// LVM, voir [[sysadmin:lvm2|cet article]] mais cela fonctionne également avec une partition physique.\\ Pour créer un volume de 150 Go sur le volumeGoup vg0 on peut par exemple utiliser la commande suivante : lvcreate -n dataz -L 150G vg0 ===== Initialisation de la partition ===== Pour accroître la sécurité de cette partition chiffrée il est recommandé de pré-remplir cette partition avec des données aléatoires qu'il ne soit pas aisé de déterminer ou sont stockées les données chiffrées physiquement sur le disque. Plusieurs méthodes s'offrent a vous, par exemple de la plus rapide (mais moins efficace) à la plus efficace (mais aussi la plus lente ;-)) : * badblocks -v -s -w -t random /dev/vg0/dataz * dd if=/dev/urandom of=/dev/vg0/dataz * shred /dev/vg0/dataz J'ai choisi d'utiliser /dev/urandom pour remplir cette partition de données aléatoires, en utilisant la commande suivante : dd if=/dev/urandom of=/dev/vg0/dataz Attention cette commande est **LONGUE** (un peu plus de 13h42 pour la partition de 150 Go), prévoyez donc un peu de temps, par exemple # dd if=/dev/urandom of=/dev/vg0/dataz dd: écriture vers « /dev/vg0/dataz »: Aucun espace disponible sur le périphérique 314572801+0 enregistrements lus 314572800+0 enregistrements écrits 161061273600 octets (161 GB) copiés, 49342,9 s, 3,3 MB/s ===== Création d'une clef de chiffrement ===== La clef de chiffrement (en particulier sa longueur) dépend de l'algorithme de chiffrement utilisé. Nous allons partir sur un chiffrement AES disponible par défaut sous debian. Après avoir chargé le module qui-va-bien (ici sur une machine 64 bits, sinon utiliser "modprobe aes") : modprobe aes_x86_64 Vous devriez pouvoir vérifier quels algos sont disponibles et quelles longueurs de clefs sont possibles avec la commande suivante : cat /proc/crypto qui devrait vous afficher un résultat similaire à : [...] name : aes driver : aes-asm module : aes_x86_64 priority : 200 refcnt : 1 selftest : passed type : cipher blocksize : 16 min keysize : 16 max keysize : 32 [...] La longueur de clef maximum utilisable en AES est donc de 32 octets, soit 256 bits. Nous allons donc utiliser une clef de 256 bits qui est donc la longueur maximale utilisable ici. Attention cette clef est nécessaire pour tout montage de la partition chiffrée et donc tout accès aux données qu'elle contient. Il faut donc par conséquent veiller à sauvegarder cette clef et ne **surtout pas** la perdre ==== Stockage temporaire de la clef ==== Le but est ne ne pas stocker la clef de facon permanente sur le serveur. Pour cela nous allons créer une partition temporaire en RAM, et y stocker la clef uniquement le temps d'effectuer les opérations qui la nécessitent. j'ai choisi de créer cette partition temporaire dans /root/tmpfs , adaptez les chemins suivants au besoin. * Création du tmpfs :echo "tmpfs /root/tmpfs tmpfs defaults 0 0" >> /etc/fstab * Montage initial : \\ Cette partition sera automatiquement crée et montée au prochain redémarrage, mais il faut pour l'instant le faire à la main :mount /root/tmpfs ==== Génération de la clef ==== La clef de 32 octets (256 bits) sera générée aléatoirement grace à /dev/urandom : dd if=/dev/urandom of=/root/tmpfs/luks_dataz.key bs=32 count=1 chmod 600 /root/tmpfs/luks_dataz.key * Veillez bien à sauvegarder cette clef, par exemple sur une autre machine, une clef USB, ... * Les fichiers contenus dans une partition tmpfs seront perdus lors du démontage de la partition, et donc à l'arrêt de la machine ===== Création de la partition chiffrée ===== Nous avons donc maintenant tout ce qu'il faut pour créer la partition chiffrée a l'aide de //cryptsetup// . Le cipher retenu est donc //aes-cbc-essiv:sha256//, vous pouvez vous assurer que votre version de cryptsetup permet bien de l'utiliser (par défaut sous debian) grâce a la commande "cryptsetup --help". Si ce n'est pas le cas il vous faut recompiler cryptsetup pour ajouter le support du cipher choisi. La commande a utiliser est :cryptsetup --verbose --cipher "aes-cbc-essiv:sha256" --key-size 256 --key-file /root/tmpfs/luks_dataz.key luksFormat /dev/vg0/dataz qui devrait vous donner un résultat similaire à (il vous faut confirmer en tapant "YES") : # cryptsetup --verbose --cipher "aes-cbc-essiv:sha256" --key-size 256 --key-file /root/tmpfs/luks_dataz.key luksFormat /dev/vg0/dataz WARNING! ======== Cette action écrasera définitivement les données sur /dev/vg0/dataz. Are you sure? (Type uppercase yes): YES Opération réussie. ===== Utilisation de la partition chiffrée ===== Il faut tout d'abord ouvrir le conteneur luks en utilisant la clef. Le dernier argument est le nom que vous souhaitez donner pour accéder la partition qui sera disponible en tant que /dev/mapper/$NOM :cryptsetup luksOpen --key-file /root/tmpfs/luks_dataz.key /dev/vg0/dataz dataz Vous pouvez vérifier le bon fonctionnement de ceci avec la commande ls -als /dev/mapper/dataz qui devrait vous retourner quelque chose comme : # ls -als /dev/mapper/dataz 0 lrwxrwxrwx 1 root root 8 9 sept. 15:58 /dev/mapper/dataz -> ../dm-13 La présence de la clef temporairement stockée sur le serveur n'est maintenant plus nécessaire, vous pouvez la supprimer, par exemple en "détruisant" le tmpfs : umount /root/tmpfs Attention là encore de bien avoir sauvegardé cette clef ailleurs. Il est maintenant temps de : * formater cette partition :mkfs.ext3 /dev/mapper/dataz * Puis de la monter pour l'utiliser : mkdir /mnt/dataz mount /dev/mapper/dataz /mnt/dataz Voila, ce volume chiffré est maintenant prêt a être utilisé. N'oubliez pas de désactiver l'indexation de ce volume par des outils comme slocate/mlocate sinon tous les noms des fichiers et répertoires de ce volume seront stockés et accessibles sur une partition non chiffrée. ===== Opérations courantes ===== ==== Cesser d'utiliser le volume chiffré ==== Si vous voulez cesser de l'utiliser, il faut : - Démonter le volume :umount /dev/mapper/dataz - Fermer l'acces au conteneur :cryptsetup luksClose dataz ==== Réutiliser le volume chiffré ==== Pour pouvoir a nouveau l'utiliser, il faudra donc : - recréer la partition tmpfs au besoin :mount /root/tmpfs - déposer le fichier de clef dans le tmpfs (via un moyen sécurisé type SCP) - Ouvrir le conteneur : cryptsetup luksOpen --key-file /root/tmpfs/luks_dataz.key /dev/vg0/dataz dataz - Monter la partition : mount /dev/mapper/dataz /mnt/dataz - Effacer de manière sécurisée la clef stockée temporairement :shred /root/tmpfs/luks_dataz.key rm /root/tmpfs/luks_dataz.key - Démonter la partition tmfs si vous n'en avez plus besoin :umount /root/tmpfs Attention là encore bien sauvegarder votre clef ===== Références ===== * https://wiki.archlinux.org/index.php/System_Encryption_with_LUKS#Using_LUKS_to_Format_Partitions_with_a_Keyfile * http://www.finnie.org/2009/07/26/keyfile-based-luks-encryption-in-debian/ * http://www.debuntu.org/how-to-encrypted-partitions-over-lvm-with-luks-page-2-encrypting-partitions * http://www.hsc.fr/ressources/breves/cryptsetup_luks.html.fr