Tux with a gun | source uncyclopedia.org

Il est possible lors de l’installation d’Elementary OS de créer un volume lvm crypté dans lequel le système sera installé, ce qui assure un bon niveau de confidentialité des données stockées dans le PC en cas de perte ou de vol. Autre avantage : comme un mot de passe sera demandé au boot pour décrypté le disque – y compris en cas de sortie d’hybernation, il n’est plus nécessaire d’en avoir un pour le compte utilisateur, sous réserve que le PC soit utilisé par une seule personne. Et de même, il n’est plus nécessaire d’avoir un mot de passe pour votre trousseau de mots de passe. Tout est protégé par le cryptage du disque.

Par contre, lors d’une telle installation, le partitionnement qui est créé n’est pas très satisfaisant : un seul volume logique pour / et un swap trop petit. Nous allons donc voir ici comment modifier ce partitionnement du filesystem lvm crypté après l’installation, avec LUKS. L’objectif sera ici d’avoir une partition / avec le système, une partition /home avec les données et un swap de 16 Go (soit la taille de la RAM, pour permettre l’hibernation).

Nous verrons ensuite comment résoudre deux problèmes liés au filesystem crypté : activer numlock dès la saisie du mot de passe de décryptage (utile si vous avez des chiffres dans le mot de passe, ce qui est recommandé) et résoudre une erreur lvmetad au boot.

Bien entendu, comme toujours dans ce genre d’opérations, sauvegardez vos données avant de commencer !

Ajuster le filesystem lvm crypté

Source

Toute la partie d’ajustement du filesystem se fait en liveUSB. J’utilise le liveUSB fourni par le fabriquant de mon PC (Obsidian-PC que je vous recommande chaudement). Contrairement à un liveUSB de base, celui de Obsidian-PC contient les utilitaires de décryptage utilisés dans la suite. Il n’est donc pas nécessaire de les installer comme indiqué dans les sources ci-dessus

Trouver le volume encrypté

Exécutez la commande suivante :

lsblk

Elle renvoie quelque chose qui ressemble à ceci (le disque du PC est en sda, le liveUSB en sdb):

NAME                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0 7:0 0 1.1G 1 loop /rofs
sda 8:0 0 465.7G 0 disk
└─sda1 8:1 0 465.7G 0 part /media/elementary/xxxxxxxxx
sdb 8:16 1 14.5G 0 disk
└─sdb1 8:17 1 14.5G 0 part /cdrom
nvme0n1 259:0 0 931.5G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part
├─nvme0n1p2 259:2 0 732M 0 part
└─nvme0n1p3 259:3 0 930.3G 0 part

Le volume crypté recherché (contenant la partition et le swap créés à l’installation) est le plus gros (930,3 Go), ici il s’agit de « nvme0n1p3 ». Notez que le disque physique fait 1 To.

Décrypter le volume

Avant de pouvoir modifier le volume, il faut le décrypté. Pour cela, nous utilisons la commande suivante (remplacez nvme0n1p3 par le nom de volume que vous avez identifié à l’étape précédente)

cryptsetup luksOpen /dev/nvme0n1p3 cryptdisk

cryptdisk est le nom logique qu’on donne au volume décrypté, ça ne sert pas dans la suite. Suite à cette commande, le mot de passe de cryptage que vous avez renseigné lors de l’installation vous sera demandé.

Voyons le résultat à l’aide de la commande lsblk :

lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 1.1G 1 loop /rofs
sda 8:0 0 465.7G 0 disk
└─sda1 8:1 0 465.7G 0 part /media/elementary/xxxxxxxxxxxxxxxx
sdb 8:16 1 14.5G 0 disk
└─sdb1 8:17 1 14.5G 0 part /cdrom
nvme0n1 259:0 0 931.5G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part
├─nvme0n1p2 259:2 0 732M 0 part
└─nvme0n1p3 259:3 0 930.3G 0 part
└─crypt1 253:0 0 930.3G 0 crypt
├─elementary--vg-root 253:1 0 914G 0 lvm /media/elementary/root
├─elementary--vg-swap_1 253:2 0 16G 0 lvm

Nous voyons bien maintenant la partition root et le swap créés lors de l’installation (elementary–vg-root et elementary–vg-swap_1). Maintenant, nous pouvons manipuler les volumes avec les utilitaires lvm.

Réduire / (root)

Nous allons réduire la partition / de 850 Go afin d’en utiliser une partie pour créer un /home. Il restera tout de même 64 Go pour le système, ce qui est très largement suffisant.

lvresize --resizefs --size -879G /dev/mapper/elementary--vg-root

Note : pour lister les noms complets des volumes, utilisez la commande blkid. Vous verrez alors que lvm (dans sa version 2) utilise le périphérique mapper pour regrouper tous les volumes. Cependant, certaines commandes (comme lvcreate ci-dessous) exigent l’ancienne notation version 1 avec le nom de groupe de volume. Pour plus de détail, vous pouvez consulter la page lvm du wiki ubuntu. En résumé, pour nous, les deux notations suivantes sont équivalentes et nous utilisons l’une ou l’autre selon la commande :

/dev/mapper/elementary--vg-root
/dev/elementary-vg/roo

Créer /home

Utilisons l’espace libérer pour créer une nouvelle partition home. La commande lvcreate va créer la partition et mkfs.ext4 va la formater :

lvcreate -n home -L 512G elementary-vg
mkfs.ext4 /dev/elementary-vg/home

Étendre le swap

Utilisons maintenant l’espace restant pour créer une partition de swap suffisante pour permettre l’hibernation, soit de la taille de la RAM (16 Go dans le cas présent).

Commençons par désactiver tous les swap, au cas où :

swapoff -a

Puis nous étendons le swap existant ici en deux fois pour arriver exactement à 16 Go :

lvextend -L+48M /dev/mapper/elementary--vg-swap_1
lvextend -L+15G /dev/mapper/elementary--vg-swap_1

Notez au passage que lvextend utilise la notation lvm version 2 (/dev/mapper).

Activer le pavé numérique dès la saisie du mot de passe de décryptage du disque dur

Si vous avez suivi les étapes précédentes, votre disque dur est maintenant crypté, ce qui fait que le mot de passe de décryptage vous est demandé au boot. Si vous avez des chiffres dans votre mot de passe, vous allez vous rendre alors compte que le pavé numérique – si vous en avez un – n’est pas actif à ce moment-là. C’est dommage de ne pas en profiter, nous allons donc voir comment l’activer. La solution consiste à ajouter un hook à initramfs qui va activer le pavé numérique.
source

Rendre setleds disponible dans initramfs

setleds est la commande que nous allons utiliser pour activer le pavé numérique. Elle s’utilise par exemple comme ceci par exemple pour le terminal tty1 :

setleds -D +num tty1

Le principe est donc d’embarquer cette commande dans initramfs puis d’ajouter un hook qui va l’appeler au boot.

Commençons par créer le script numlock (le nom n’a pas d’importance, sauf pour s’y retrouver) dans le dossier des hooks « outils » de initramfs :

    sudo vim /etc/initramfs-tools/hooks/numlock

Avec le contenu suivant :

#! /bin/sh -e
PREREQ=""
prereqs () {
    echo "$PREREQ"
}
case $1 in
    prereqs)
    prereqs
    exit 0
    ;;
esac
. /usr/share/initramfs-tools/hook-functions
# Add setleds to initrd
if test -x /usr/bin/setleds ; then
    copy_exec /usr/bin/setleds /usr/bin/setleds
fi
exit 0

Note : seules les dernières lignes après « # Add setleds… » sont spécifiques, le reste est standard pour un hook de initramfs. Vous vous en rendrez compte dans la suite où vous allez retrouver cette technique deux fois.

Puis rendez le fichier exécutable :

sudo chmod u+x numlock

Nous régénérerons initramfs à la fin de l’étape suivante.

Ajouter un hook à init-top de initramfs

Commençons par créer un script nommé numlock (le nom n’est pas important, sauf pour s’y retrouver) dans le dossier des hooks de l’évènement « init-top » de initramfs :

    sudo vim /etc/initramfs-tools/scripts/init-top/numlock

Avec le contenu suivant :

#!/bin/sh
PREREQ="console_setup brltty"
prereqs()
{
    echo "$PREREQ"
}
case $1 in
    # get pre-requisites
    prereqs)
    prereqs
    exit 0
    ;;
esac
if [ -x /usr/bin/setleds ] ; then
    INITTY=/dev/tty[1-8]
    for tty in $INITTY ; do
        setleds -D +num < $tty
        done
fi
exit 0

Maintenant, nous pouvons régénérer initramfs :

sudo update-initramfs -u -k $(uname -r)

Résoudre l’erreur lvm au boot

source
Si vous avez le message d’erreur suivant juste avant de saisir le mot de passe de décryptage (appuyez sur la touche « ESC » pendant la séquence de boot pour afficher les messages) :

WARNING: failed to connect to lvmetad. Falling back to device scanning.
Volume group "elemenetary-vg" not found
Cannot process volume group elementary-vg

Cela veut dire que le volume crypté (elementary-vg ici) ne peut pas être lu, ce qui est logique vu qu’il est crypté… La solution consiste à intégrer dans initramfs le fichier /etc/cryptab qui contient les informations relatives au filesystem crypté. Pour cela, nous allons ajouter un hook à initramfs.

Créer un fichier nommé crypttab (par exemple, le nom n’a pas d’importance pour le bon fonctionnement) dans /usr/share/initramfs-tools/hooks :

cd /usr/share/initramfs-tools/hooks
sudo vim crypttab

Ce fichier doit contenir :

#!/bin/sh
PREREQ=""

prereqs()
{
    echo "$PREREQ"
}

case $1 in
# get pre-requisites
prereqs)
    prereqs
    exit 0
    ;;
esac
. /usr/share/initramfs-tools/hook-functions
cp -pnL /etc/crypttab ${DESTDIR}/etc/crypttab
chmod 644 ${DESTDIR}/etc/crypttab

Rendre le fichier éxecutable :

sudo chmod 755 cryptab

Puis regénérer initramfs :

sudo update-initramfs -u -k $(uname -r)

Et voilà ! Nous avons désormais un disque crypté, donc bien protégé que nous pouvons décrypter sans erreur au boot en saisissant le mot de passe avec des chiffres en utilisant le pavé numérique.

Mots-clés : , , ,