Comment chiffrer une partition système Linux (ici Ubuntu)

par Korben -

Après ce premier tuto qui explique comment chiffrer une partition système Windows avec Truecrypt, j’en viens directement à mon but premier : Le faire sous linux… enfin, sous Ubuntu pour être plus précis car c’est l’OS que j’utilise…mais vous pouvez probablement l’adapter pour d’autres types de linux.

Pour info, je pensais au début que ça allait être fastoche… Il existe bel et bien une option de chiffrement sous Ubuntu mais cela ne concerne que le répertoire /home. Moi je voulais chiffrer tout le système…

Evidement, avec Truecrypt, ce n’est pas possible alors j’ai du ruser… Cherchant toujours la solution de facilité, j’ai vu que l’Alternate CD d’Ubuntu proposait cela mais au final après plusieurs bidouillage, pas moyen de le faire passer en install via clé USB (oui j’ai bien monté ma clé dans /cdrom mais après il y a eu des erreurs d’écritures qui m’ont gonflé).

Du coup, j’ai décidé de tout faire à la mano… Pour chiffrer votre ordinateur sous Linux, vous devrez donc utiliser LVM et bien sûr formater le disque dur… Attention donc ! J’ai fais la manip plusieurs fois donc je pense qu’elle est assez rodée pour être communiquée mais je ne me prétend pas expert en chiffrement donc si vous avez des remarques et améliorations à apporter à ce modeste tuto, je serai ravi d’éditer mon article pour l’améliorer. Merci.

Allez, c’est partiiiiiiiiiii ! (excusez les captures écrans un peu roots mais j’ai fait ça sur un vrai ordi (NC10) et pas une machine virtuelle)

Première étape, je boote sur le LiveCD ou plus exactement sur une clé USB qui contient l’image du LiveCD (réalisée avec Unetbootin).

Première chose à faire, passer le clavier en français… C’est important si vous ne maitrisez pas les claviers Qwerty. Il faut aller dans Système -> Préférences -> Clavier puis cliquer sur l’onglet “Agencements” et ajouter “France” pour l’appliquer à l’ensemble du système. Comme on est sur un liveCD, ça ne sera pas conservé en mémoire si vous rebootez…

On active ensuite la connexion wifi puis on démarre une console… (Applications -> Accessoires -> Terminal)

Je me mets en root :

sudo su

Je lance un update

apt-get update

j’installe ensuite lvm et cryptsetup qui me serviront à chiffrer le disque dur

apt-get install lvm2 cryptsetup

J’active ensuite le module dm-crypt qui servira au chiffrement/déchiffrement

modprobe dm-crypt

On va ensuite créer nos partitions… Il y aura en fait 2 partitions :

  • /dev/sda1 qui ne sera pas chiffrée et qui sera la partoche de boot (/boot). Il faut savoir que c’est là le point faible de cette méthode. Comme /boot n’est pas chiffrée, un attaquant peut placer un keylogger ou un trojan à ce niveau là, qui saura faire ce qu’il faut lorsque vous entrerez ensuite votre mot de passe. La solution de chiffrement LVM est donc suffisante en cas de vol de votre ordinateur mais si vous le prêtez, il est potentiellement faillible… Je reviendrai vers vous dans quelques semaines (mois ?) avec une solution qui réglera ce problème (c’est en cours de développement)
  • /dev/sda2 qui contiendra à la fois la partition système et la partition de swap. Toutes les 2 seront chiffrées

Petite parenthèse, si vous souhaitez supprimer de manière sécurisée ce qui se trouve sur sda, vous pouvez le faire en utilisant la commande shred. Plus vous faites de passes (ici 7), plus ça sera long et sûr qu’on ne pourra rien récupérer ensuite.

shred –n 7 /dev/sda

On va ensuite chiffrer la partition. Avec quel algo ? Et bien pour savoir ce qu’on a notre disposition, il suffit de faire un

cat /proc/crypto

Comme pour le tuto windows, je vais utiliser un AES mais si vous voulez en savoir plus sur les algos de chiffrement (j’suis pas expert là dedans), je vous invite à allez lire ça et ça.

Je vais donc créer la partition chiffrée en aes sur /dev/sda2

cryptsetup -c aes-xts-plain -s 512 luksFormat /dev/sda2

512 est le maximum avec cet algo mais c’est bien suffisant…

Cryptsetup demandera alors un mot de passe. Mettez un truc costaud entre 8 et 10 caractères avec des lettres minuscules, majuscules, des chiffres et des caractères comme ‘§*$#@ …etc

Une fois la partoche chiffrée crée, on va la monter sous le nom lvm…

cryptsetup luksOpen /dev/sda2 lvm

Ensuite, on l’initialise :

pvcreate /dev/mapper/lvm

Et on crée un groupe de volumes qu’on va appeler ubuntu

vgcreate ubuntu /dev/mapper/lvm

Vient maintenant le moment de créer la swap chiffrée… 1,5 Gb est suffisant pour 1 Gb de RAM

lvcreate -L1500M -n swap ubuntu

Et on utilise le reste de la place du disque pour la partition système (root)

lvcreate -l 100%FREE -n root ubuntu

Reste plus qu’à formater tout ça…. en swap pour la swap et en ext4 pour la partition racine

mkswap /dev/mapper/ubuntu-swap
mkfs.ext4 /dev/mapper/ubuntu-root

Voilà les partitions sont créées. On laisse le terminal ouvert pour la suite mais on lance l’install de Ubuntu (en double cliquant sur l’icone install sur le bureau)

On suit ensuite le processus classique de l’installation d’Ubuntu à la différence prêt que lors de la sélection des partitions, on choisit l’option “Définir les partitions manuellement”

On utilise alors ubuntu-root avec le point de montage / avec un formatage en ext4, ubuntu-swap en tant que swap et bien sûr /dev/sda1 en tant que partition de boot non chiffrée.

A la fin de l’install, ne redémarrez pas, car nous allons devoir activer toute cela. On va se placer en chroot sur le système fraichement installé… Retournez dans la console, et entrez les commandes suivantes pour monter le système façon chroot, c’est à dire comme si vous étiez nativement dessus

mount /dev/mapper/ubuntu-root /mnt mount /dev/sda1 /mnt/boot mount -o rbind /dev /mnt/dev mount -t proc proc /mnt/proc mount -t sysfs sys /mnt/sys chroot /mnt

Normalement, si vous faites un ping d’un site, vous devriez pouvoir vérifier que le réseau fonctionne en chroot. Si ce n’est pas le cas, c’est qu’il manque des fichiers dans /etc/. Pour les placer, il suffit de faire un

strace ping www.google.com

et de regarder les messages d’erreur qui indiquent qu’il manque des fichiers. Et de copier ces fichiers (ou de faire des liens symboliques). En ce qui me concerne, je n’ai pas eu besoin de le faire. J’ai rencontré le souci mais après un reboot et une activation immédiate du wifi, ça a fonctionné.

On installe donc lvm2, cryptsetup et grub2 sur le nouvel OS fraichement installé avec un

aptitude install cryptsetup lvm2 grub2

On va ensuite (tjrs dans chroot) rajouter cela dans le fichier /etc/crypttab

ubuntu UUID=0000-0000-0000-00000-000000000 none luks,retry=1,lvm=ubuntu

Pensez à remplacer les 000000 par l’UID de votre partition. Vous pouvez l’obtenir en faisant un

blkid /dev/sda2

Ajouter ensuite l’appel au module “dm-crypt dans” /etc/initramfs-tools/modules

Editez ensuite le fichier /etc/initramfs-tools/conf.d/ubuntu

et rajouter dedans :

ubuntu=target=ubuntu,source=/dev/sda2

Puis on met à jour initramfs avec la commande suivante :

update-initramfs -k all -c

On installe grub sur la partition de boot si ce n’est pas déjà fait

grub-install /dev/sda

Puis on met à jour grub

update-grub2

Et enfin, on reboot…

Au démarrage, vous devriez alors avoir une demande de mot de passe… Puis une fois la partition déchiffrée, vous devez accéder normalement à votre système. Pas de ralentissement, c’est comme si on était sur un OS non chiffrée. C’est assez bluffant.

En ce qui me concerne, la seule ombre au tableau est que j’ai ça comme message d’avertissement et je n’ai rien trouvé sur le net qui y réfère…

cryptsetup: lvm device name (ubuntu) does not contain a dash

je sèche donc sur ce point mais ça ne m’empêche pas de faire tourner le bousin et tout fonctionne très bien… donc si quelqu’un a une idée, je suis preneur.