LUKS & LVM sur Arch Linux

Bonjour à tous ! Aujourd'hui un article sur un point qui m'a fait perdre une grosse partie de mon dimanche après midi, la mise en place du chiffrement avec LUKS sur mes partitions Arch Linux.

Cette partie est un complément à mon article récent expliquant comment installer Arch Linux.

Pourquoi ?

La raison est simple, j'ai envie que mes données soient chiffrées et protégées sur mon poste. Après avoir regardé les différentes méthodes disponibles, celle présentée ici me paraît la plus adaptée à mon besoin.

Elle permet de chiffrer plusieurs partitions LVM avec la même clé et de toutes les déchiffrer d'un coup au démarrage, il suffit de rentrer la passphrase de la clé lorsqu'elle est demandée.

LUKS ?

LUKS ou Linux Unified Key Setup est le standard du noyau Linux pour le chiffrement des disques. Il permet de chiffrer des disques et des partitions. Il supporte également la gestion de plusieurs mots de passe si la machine doit être utilisée par plusieurs personnes.

Cryptsetup est le logiciel qui permet d'implémenter LUKS sous Linux, il sera utilisé dans cet article.

LVM ?

LVM ou Logical Volume Manager est un système qui permet de créer et de gérer des volumes logiques. Cela permet de remplacer le partitionnement en le rendant beaucoup plus souple car il ne se soucie pas de l’emplacement du disque.

Ce sujet a déjà été traité par Fabio sur ce blog, si ça vous intéresse l'article avec les commandes est disponible ici.

Installation

Pour cette partie, on va repartir de l'installation d'Arch et on va s'arrêter une fois que le chiffrement sera en place et fonctionnel, pour le reste je vous invite à voir mon article précédent.

Tout d'abord, je précise que je suis toujours dans une configuration Legacy/BIOS, pour une mise en place avec EFI la configuration changera un petit peu.

Dans mon cas je vais utiliser une machine virtuelle avec Virtual Box et un disque de 80Go qui sera nommé « /dev/sda ».

Les caractéristiques de la machine :

  • CPU : 1vCPU
  • RAM : 4 Go
  • DD : 80 Go

Le schéma de partitionnement est le suivant :

Partition Taille Utilisation Chiffré
/dev/sda1 1Go Boot ("/boot") Non
/dev/sda2 79Go LVM Oui

La partition /dev/sda2 sera elle-même découpée de la façon suivante avec LVM :

Partition Taille Utilisation
/dev/mapper/swap 4Go SWAP
/dev/mapper/root 30Go Root "/"
/dev/mapper/home % home "/home

Je pars donc du principe que vous avez déjà consulté mon article précédent, nous arrivons donc sur le shell d'Arch après avoir lancé le live CD :

On va commencer par charger le clavier français :

1loadkeys fr

Nous pouvons maintenant afficher les disques disponibles :

1fdisk -l

Nous avons bien notre disque de 80 Go. Pour la partie partitionnement, nous allons utiliser l'outil « cfdisk » et pas « fdisk ». Cet outil permet d'avoir une sorte d'interface interactive pour le partitionnement, ce qui est très pratique.

Lors du premier lancement il faut choisir « dos » et entrer :

L'interface a normalement cette forme :

Dans cette partie il faut créer seulement deux partitions, le résultat doit être le suivant :

Pour vérifier que les partitions sont bien présentes vous pouvez lancer une nouvelle fois la commande :

1fdisk -l

Après avoir créé les partitions, nous pouvons lancer la création le conteneur LUKS sur la partition /dev/sda2 :

1cryptsetup luksFormat /dev/sda2

ATTENTION : la passphrase que vous entrez ici est celle qui vous permettra de déchiffrer vos données, si vous la perdez vos données seront perdues.

Les paramètres par défaut sont utilisés pour LUKS dans cet exemple. Les algorithmes utilisés sont les suivants :

  • AES-XTS 256
  • SHA256

Vous pouvez sélectionner vous-mêmes les algorithmes si vous le souhaitez, les explications sont disponibles ici.

Il faut maintenant ouvrir ce conteneur :

1cryptsetup open /dev/sda2 cryptlvm

La partition sera montée déchiffrée dans /dev/mapper/cryptlvm.

Nous pouvons maintenant lancer le partitionnement avec LVM. Création du volume physique :

pvcreate /dev/mapper/cryptlvm

Puis le groupe de volumes, dans mon cas il s'appelle lvmGroup mais appelez le comme vous voulez :

1pvcreate lvmGroup /dev/mapper/cryptlvm

Pour terminer avec LVM, les volumes logiques :

1lvcreate -L 4G lvmGroup -n swap
2lvcreate -L 30G lvmGroup -n root
3lvcreate -l 100%FREE lvmGroup -n home

Il faut maintenant formater les volumes :

1mkfs.ext4 /dev/lvmGroup/root
2mkfs.ext4 /dev/lvmGroup/home 
3mkswap /dev/lvmGroup/swap

Et les monter :

1mount /dev/lvmGroup/root /mnt
2mkdir /mnt/home 
3mount /dev/lvmGroup/home /mnt/home
4swapon /dev/lvmGroup/swap 

Sur la partie « boot » il faut également préparer la partition /dev/sda1 :

1mkfs.ext4 /dev/sda1
2mkdir /mnt/boot
3mount /dev/sda1 /mnt/boot

Pour vérifier le partitionnement vous pouvez lancer la commande suivante :

1lsblk

Pour continuer, il faut réaliser l'installation de base d'Arch présentée dans mon autre article, je vous invite à le suivre en sautant la partie partitionnement et jusqu'à la commande :

1pacman -S grub os-prober

A partir de cette commande vous allez lancer l'installation de grub :

1grub-install --target=i386-pc /dev/sda

Il faut en suite récupérer l'UUID de la partition /dev/sda2 :

1blkid

Dans mon cas il correspond à « fb4bc0f4-1ede-46ac-96d4-8bd316ce271f ».

Il faut maintenant se rendre dans le fichier /etc/default/grub et ajouter la ligne suivante avec l'UUID récupéré dans la partie « GRUB_CMDLINE_LINUX » :

1cryptdevice=UUID=fb4bc0f4-1ede-46ac-96d4-8bd316ce271f:cryptlvm root=/dev/lvmGroup/root

Il faut également dé-commenter la ligne « GRUB_DISABLE_LINUX_UUID=true ».

Cette partie permettra de lancer le déchiffrement de la partition au démarrage de grub.

Sur la partie kernel, il faut tout d'abord installer le paquet lvm2 :

1pacman -S lvm2

Il faut en suite rajouter les entrées suivantes dans la partie HOOKS du fichier /etc/mkinitcpio.conf :

  • encrypt
  • lvm2

Le résultat doit être le suivant :

Il reste maintenant à créer la configuration de grub et à installer les modules sur le kernel :

1grub-mkconfig -o /boot/grub/grub.cfg

1mkinitcpio -p linux

Vous pouvez maintenant sortir du chroot et relancer la machine pour voir si la configuration est bonne :

1exit
2umount -R /mnt
3reboot

Vous devriez retrouver l'écran de grub :

Suivi de l'écran demendant la passphrase de votre clé :

Après avoir entré votre passphrase vous pourrez accéder normalement à votre instance Arch Linux !

ATTENTION EDIT : je viens de me rendre compte que l'écran demandant le mot de passe utilise le clavier QWERTY et pas AZERTY. Je regarde pour changer ça dès que je peux.

Il existe beaucoup d'autres façons de chiffrer les disques ou les partitions, comme indiqué plus haut, cette méthode est la plus adaptée à mon besoin. Si ça vous intéresse, la documentation d'Arch Linux en présente plusieurs sur ce lien.

J’espère que cet article vous aura plu, si vous avez des questions ou des remarques sur ce que j’ai pu écrire n’hésitez pas à réagir avec moi par mail ou en commentaire !

Merci pour votre lecture et à bientôt !

Mickael Rigonnaux @tzkuat