Aller au contenu

Monter un volume crypté au démarrage du système

luks

Dans cet article, nous allons voir comment monter manuellement puis automatiquement un système de fichier crypté avec luks. Toutes les commandes se font en root (ou avec sudo).

Avec seulement crypttab

Création d'une clé

Cette clé permet d'ouvrir un conteneur luks sans avoir à entrer de mot de passe. On va créer une clé aléatoire à l'aide de la commande suivante :

dd if=/dev/urandom of=/root/.keyfile_luks bs=1024 count=4

On rend ensuite cette clé illisible pour le commun des mortels :

chmod 400 /root/.keyfile_luks

Association de la clé au conteneur

On associe ensuite cette clé au conteneur luks :

cryptsetup luksAddKey /dev/mapper/datavg-sauvegardelv /root/.keyfile_luks

Test de la clé

On peut ensuite tester l'ouverture manuelle du conteneur à l'aide de cette clé :

cryptsetup --key-file /root/.keyfile_luks luksOpen /dev/mapper/datavg-sauvegardelv cryptsauvegarde

Montage du conteneur

mount /dev/mapper/cryptsauvegarde /mnt/cryptWD

Tout en une commande

On peut également ouvrir le conteneur et monter le système de fichier en une commande :

cryptsetup --key-file /root/.keyfile_luks luksOpen /dev/mapper/datavg-sauvegardelv cryptsauvegarde && wait && mount /dev/mapper/cryptsauvegarde /mnt/cryptWD

Automatisation

On va maintenant automatiser cette manip. au démarrage du système via fstab et crypttab

A l'instar du fichier fstab qui automatise les montages de partitions, crypttab automatise l'ouverture de conteneurs sécurisés. On modifie le fichier /etc/crypttab en ajoutant la ligne suivante :

nom_du_conteneur_ouvert       chemin_vers_le_conteneur        chemin_vers_le_fichier_de_clé

Dans mon cas, pour exemple :

cryptsauvegarde       /dev/mapper/datavg-sauvegardelv       /root/.keyfile_luks

Ensuite, on modifier le fichier fstab en ajoutant la ligne suivante :

chemin_conteneur_ouvert     point_de_montage       type        options        0        0

Par exemple, dans mon cas :

/dev/mapper/cryptsauvegarde     /mnt/cryptWD       ext4       defaults       0        0

Vous pouvez rebooter et vérifier que cela fonctionne !

Avec crypttab + dracut

Le principe ici est d'utiliser dracut. Comme vu précédemmet, habituellement, on va chercher le fichier de clé soit sur une clé usb branchée soit sur une autre partition et on l'indique dans le fstab. Ici cela ne fonctionne pas du fait que la partition qui héberge root est cryptée. Pour cela, on va utiliser une clé que nous allons mettre dans /boot de façon à ce qu'elle soit accessible.

Montage automatique de la partition initialement cryptée

Pas besoin de modifier le fstab mais il faut par contre mettre à jour crypttab (vous devriez normalement déjà y avoir une ligne mais il faut la modifier pour prendre en compte la clé)

luks-50de9237-1abf-4bf2-a065-8800fbbeda53 UUID=50de9237-1abf-4bf2-a065-8800fbbeda53 /boot/.keyfile_luks discard

Ensuite, on va demander à dracut d'aller chercher cette clé Créer le fichier /etc/dracut.conf.d/copy-keyfile.conf et y ajouter la ligne suivante :

install_items+=/boot/.keyfile_luks

Mettez ensuite à jour dracut

dracut -f

Warning

Soyez prudent, avec cette configuration, votre partition root est accessible à toute personne qui utiliserait une livecd pour démarrer. Il suffit d'ouvrir le conteneur luks avec la clé puisque celle-ci se trouve sur la partition boot non verrouillée

On peut ensuite vérifier que cela a bien été pris en compte :

lsinitrd

Devrait vous renvoyer :

-r--------   1 root     root           32 Aug  9 20:09 /boot/.keyfile_luks

La nouvelle partition home

Ici, nous allons monter automatiquement notre nouvelle partition home sans clé ni pass-phrase. Le principe est tout simplement de mettre en passphrase le mot de passe de la session utilisateur et d'utiliser pam pour décrypter cette partition lorsuq'on entre le mot de passe de la session. Encore une fois, je vous renvoi vers un article que j'ai écrit sur la façon de créer une partition chiffréé. Cela s'applique aussi à une partition dans un volume logique. Article ici : Sauvegarde distante sur un disque dur externe chiffré

Nous allons donc monter et décrypter cette partition de façon automatique après ouverture de la session.

Installation des librairies nécessaires

Installez ensuite la librairie nécessaire (ici c'est pour une base redhat, à adapter en fonction de votre distribution):

sudo dnf install pam_mount

Modification du fstab

Modifier votre fichier /etc/fstab :

/dev/mapper/homevg-homelv       /home        ext4    rw,helper=crypt,noauto  0       0

Note

Le premier paramètre correspond à la partition, ici chez moi il s'agit d'une partition sur un volume logique. N'oubliez pas le "helper=crypt"

Warning

Il n'a rien à ajouter dans /etc/crypttab pour cette partition !

Paramétrage de pam_mount

Editez le fichier /etc/security/pam_mount.conf.xml et ajouter au début de celui-ci, après la première balise et après la ligne <! --Volume definition -->, la ligne suivante :

<volume user="remi" mountpoint="/home" path="/dev/mapper/homevg-homelv" fstype="crypt" options="relatime"/>

Tip

volume user permet de restreindre les utilisateur, on peut mettre * si on ne souhaite pas de restriction Il faut bien sûr adapter le mountpoint et le path à votre cas

Ensuite, c'est ici que j'ai eu le plus de mal, il y a des lignes à ajouter dans le bon fichier et dans le bon ordre. Je vous donne ma configuration qui fonctionne sur une fedora sous Gnome. Je vous renvoi vers ces deux sites desquels je me suis inspiré si vous n'avez pas les mêmes fichiers :

J'ai donc modifié le fichier /etc/pam.d/gdm-password et j'ai ajouté les lignes suivantes :

auth optional pam_mount.so
avant la ligne "auth substack password-auth"

password optional pam_mount.so
avant la ligne "password substack password-auth"

session optional pam_mount.so
avant la ligne "session required pam_selinux.so close"

Warning

Je l'ai déjà mentionné plus haut mais pour que cela fonctionne, la passphrase du volume ou de la partition cryptée doit être le même que le mot de passe de session.