Tous les articles > Administration système > Un disque chiffré et partitionné avec Ubuntu

Un disque chiffré et partitionné avec Ubuntu

Ça y est, c'est décidé, vous avez une nouvelle machine, ou bien vous voulez repartir sur des bases propres et vous aimeriez chiffrer votre disque pour protéger vos données.

Dans votre fougue, vous vous dites qu'il serait également intéressant de séparer l'OS de vos données perso, avoir un /home sur une autre partition car vous savez que cela présente pas mal d'avantages : réinstaller ou changer de système d'exploitation sans perdre vos données, partager ces données entre plusieurs systèmes, les récupérer plus simplement en cas d'incident... Partitionner est une très bonne idée.

Actuellement, il est facile de chiffrer un disque en faisant une nouvelle installation d'Ubuntu 21.04, il est également facile de partitionner son disque avec une nouvelle installation d'Ubuntu 21.04. L'installeur est assez bon pour faire ces deux choses, mais il reste limité. Si vous voulez faire les deux en même temps à l'installation sur une machine, il va falloir faire ça à la main.

Pas de panique, vous êtes au bon endroit, cet article va vous donner les étapes à suivre pour installer Ubuntu 21.04 (mais également beaucoup de versions précédentes et probablement beaucoup de futures versions) en ayant des partitions, notamment votre /home, sur un disque chiffré.

Backup de vos données

Tout d'abord, vous voulez protéger tout ce qui fait de votre ordinateur quelque chose d'unique. Vous sauriez le trouver parmi d'autres et il sait vous reconnaître. Vous avez vos habitudes avec lui et il en sait pas mal sur vous, vous aimeriez le retrouver tel quel.

Bref, il faut sauvegarder vos fichiers personnels, vos identités, vos configurations particulières, noter vos applications préférées...

Fichiers

Rien de très surprenant ici, votre dossier /home est probablement un bon endroit pour commencer.

Faites un backup de tout ce que vous voulez garder quelque part, comme un ssd, une clé usb, ou sur un Nextcloud de chez Nubla ☁️ par exemple, un super service de cloud hébergé par une petite coopérative Bordelaise sympathique.

Mais vous faites probablement déjà tout ça, faire des sauvegardes régulières ou bien synchroniser vos fichiers important quelque part, n'est-ce pas ? Bien sûr que oui, car comme tout le monde, vous êtes prudent et intelligent. Personne ne serait assez étourdi pour ne pas faire de sauvegarde, évidemment.

Applications

Cette partie dépend de votre façon préférée d'installer des applications. Avec apt, snap, Ubuntu Software Center ? Probablement un peu de tout...

Paquets apt

Vous pouvez utiliser cette commande :

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u) > apps_backup.txt

pour générer une liste des paquets qui ont été manuellement installés et les enregistrer sur un fichier apps_backup.txt. Ce n'est qu'une seule manière de faire, vous pouvez modifier cette commande pour avoir une liste plus exhaustive si vous préférez valider que tout va bien.

apt-mark showmanual donne les paquets apt installés manuellement ainsi que ceux installés avec l'installeur d'Ubuntu. On peut récupérer cette liste de paquets d'installation initiale dans le log /var/log/installer/initial-status.gz. On compare ces deux listes et on ne garde que ce qui reste de la première avec la commande comm pour l'inscrire dans un fichier apps_backup.txt.

Vous trouverez beaucoup de commandes similaires sur les internets, trouvez celle qui vous conviendra le mieux, celle-ci a bien fonctionné pour moi. Évidemment, vous devez garder ce fichier en lieu sûr.

snap

Il est possible que dans certains cas vous ayez eu besoin de snap pour installer certains logiciels. vous pouvez les lister avec :

snap list

Malheureusement, je n'ai pas trouvé de de moyens de lister ceux qui ont été installés manuellement, mais vous serez capable de faire le tri, retenez ceux que vous utilisez.

Ubuntu Software

Vous pouvez aussi lancer Ubuntu Software Center et afficher la liste des applications installées.

Fichiers de configuration

En tant que personne maline, vous n'avez pas besoin de lire cette partie, car vos fichiers de configuration perso, vos "dotfiles", sont déjà copiés quelque part, probablement partagés et peut-être même versionnés.

Alors, je vais seulement lister les quelques fichiers importants que j'utilise, juste pour mon futur moi, lui éviter la jobardise et atteindre, qui sait, cet état d'intelligente prudence :

  • les fichiers .profile ou .bash_profile ou .bash_login... pour les sessions
  • .bashrc, .zshrc et/ou autres pour le shell
  • les aliases
  • .gitconfig et/ou .hgrc pour la config de vos VCS
  • la config de votre prompt
  • .vimrc pour la config de vim
  • ...

Identités

À moins que vous ayez envie de recommencer depuis zéro avec vos identifiants, comptes, etc., vous devriez garder précieusement vos configurations ssh (où toutes vos connections serveur sont paramétrées), votre base de donnée pass ou keepass (ou tout autre manager de mot de passe local), vos paires de clés publiques ET privées SSH, GPG et autres..., vos vaults et probablement beaucoup d'autres choses dont comme moi, vous vous souviendrez malheureusement trop tard. Je ne vous le souhaite pas, soyez organisé...

Installation d'Ubuntu

Vous êtes détendu, frais, tout est en sécurité, alors vous êtes prêt.

Lancer Ubuntu

Vous avez besoin d'une clé usb bootable, d'au moins 4gb, que vous pouvez créer avec le paquet usb-creator-gtk (ou usb-creator-kde).

Il faudra ensuite redémarrer votre ordinateur avec la clé usb branchée. Pour booter sur la clé, vous devez lancer le menu de boot normalement en pressant "F12", mais cela peut changer selon les machines. En général, un message sera affiché sur l'écran de lancement pour vous indiquer quelle touche il faudra enfoncer (pour moi, il s'agissait d'appuyer frénétiquement sur "Enter" jusqu'à ce qu'un son soit émis...).

Une fois qu'Ubuntu a été lancé depuis la clé, l'installeur se lance automatiquement. Vous pouvez cliquer sur "Try Ubuntu" ou bien aller un peu en avant dans l'installation de votre Ubuntu ce qui pourra peut-être vous faciliter la suite.

À titre d'exemple, de mon côté j'ai choisi l'anglais comme langue d'installation et donc la langue d'Ubuntu (principalement pour trouver plus simplement des ressources sur le web) puis sur l'écran suivant, j'ai sélectionné la disposition correspondant à mon clavier (ce qui facilite nos prochaines manipulations). J'ai ensuite quitté l'installateur sans aller plus loin pour pouvoir paramétrer le disque.

Une fois sur l'interface classique d'Ubuntu (mais lancé depuis la clé), vous pouvez si c'est nécessaire formater votre disque avec l'application gnome disks pour avoir une machine "comme" neuve.

Partitionner le disque

Nous allons utiliser fdisk depuis le terminal avec "ctrl-alt-t" (ou bien "super-a" et rechercher le terminal).

Pour simplifier le processus et comme la plupart des commandes nécessitent un niveau de permission superuser, il faut entrer :

sudo -s

Ensuite, vous pouvez lister les disques disponibles avec :

fdisk -l

Le disque en question sera probablement /dev/sda ou /dev/vda pour moi c'était plutôt /dev/nvme0n1. La suite de cette doc suivra les particularités de ma machine.

Pour partitionner ce disque, entrez :

fdisk /dev/nvme0n1

Il nous faut une partition EFI, une partition de boot, et une autre partition (celle qui sera chiffrée) qui occupera le reste du disque. Dans fdisk, pour obtenir de l'aide, appuyez sur "m" et en cas de doute sur les différentes partitions, vous pouvez appuyer sur "q" pour quitter sans sauvegarder vos modifications.

EFI

Pour créer la première partition EFI, appuyez sur

n

Le prompt va alors vous demander le numéro de la partition, gardez la valeur par défaut en pressant

Ensuite, il vous demande quel est le premier secteur à allouer. Par défaut, ce sera le premier qu'il trouve, appuyez donc sur

Et enfin le dernier secteur. Cette partition de EFI de nécessite pas de beaucoup de place. Mais suffisant, ce n'est pas assez pour moi, j'ai donc arbitrairement préféré 2G parce que mon disque est assez gros pour supporter un sacrifice de cette valeur. Indiquez dans le prompt

+2G

Boot

Pour la partition de boot, même procédure, 2G c'est trop, généralement, 512M sont suffisant, mais trop, c'est pas grave aussi :

n
↵
↵
+2G

À chiffrer

Enfin pour la dernière partition, même procédure, sauf que l'on veut occuper le reste du disque. Le dernier secteur de cette partition doit donc être le dernier secteur du disque, et ça tombe bien, c'est la valeur par défaut :

n
↵
↵
↵

Il faut maintenant sauvegarder toutes ces modifications de la table de partition en pressant

w

Les partitions sont maintenant créées, nous pouvons passer au chiffrement de cette dernière partition nommée nvme0n1p3.

Chiffrer votre partition principale

Il est temps de choisir un nom pour votre volume chiffré. Vous pouvez par exemple choisir le nom que vous voulez donner à votre machine. Lors du lancement de votre ordinateur, c'est ce nom qui apparaîtra lorsque vous sera demandé votre mot de passe pour déchiffrer le disque. Ici, pour l'exemple, nous l'appellerons pasvraimentcrypté.

Nous pouvons lancer la procédure de chiffrement avec

cryptsetup luksFormat /dev/nvme0n1p3

Le prompt demandera confirmation en entrant YES ce que nous pouvons faire en toute sérénité. Il demandera ensuite d'entrer la passphrase, ce sera votre clé pour déchiffrer votre disque à chaque démarrage, ne l'oubliez pas !

Nous avons ensuite besoin d'ouvrir cette partition chiffrée, pour en faire un volume physique et pour y créer un groupe de volume nommé ubuntu et différents volumes logiques. Entrons

cryptsetup luksOpen /dev/nvme0n1p3 pasvraimentcrypté

Comme nous ouvrons un volume chiffré, le prompt nous demande la passphrase. Cette commande va créer un nouveau device nommé /dev/mapper/pasvraimentcrypté.

Nous allons ensuite utiliser LVM2 (Logical Volume Manager) pour partitionner ce nouveau device. Dans notre cas, nous voulons une partition root de minimum 8G pour l'OS, une partition home pour l'utilisateur et une partition swap de 8G pour la mémoire. Vous pouvez être imaginatif sur vos partition, vous trouverez beaucoup de ressources et différents avis sur la question de la taille à allouer, mais ce cas suffit à mes besoins.

Nous allons faire de notre partition déchiffrée un volume physique :

pvcreate /dev/mapper/pasvraimentcrypté

Puis créer un groupe ubuntu (ou autre) :

vgcreate ubuntu /dev/mapper/pasvraimentcrypté

Et enfin les volumes logiques du groupe ubuntu :

lvcreate -L 64G -n root ubuntu
lvcreate -L 8G -n swap ubuntu
lvcreate -l 100%FREE -n home ubuntu

Nous pouvons maintenant relancer l'installeur. Lorsque celui-ci demandera de choisir le type d'installation, cliquez sur le bouton "Autre chose", ce qui nous permettra d'utiliser les partitions et volumes créés. Configurons les trois volumes logiques :

  • /dev/mapper/ubuntu-root

    • Utiliser comme : Ext4 journaling filesystem
    • Formater la partition
    • Point de montage : /
  • /dev/mapper/ubuntu-swap

    • Utiliser comme : Swap area
  • /dev/mapper/ubuntu-home

    • Utiliser comme : Ext4 journaling filesystem
    • Formater la partition
    • Point de montage : /home

Et pour les devices :

  • /dev/nvme0n1p1

    • Utiliser comme : EFI
  • /dev/nvme0n1p2

    • Utiliser comme : Ext2 filesystem
    • Formater la partition
    • Point de montage : /boot

Un petit récapitulatif des changement sera affiché. Nous pouvons poursuivre l'installation d'Ubuntu. Une fois l'installation terminée, choisissez "Continuer à tester", nous devons encore faire un peu de configuration.

Instructions de déchiffrement au démarrage

Ubuntu est installé sur votre machine. Il nous faut maintenant décrire quel device doit être déchiffré au démarrage et comment. Nous avons donc besoin d'éditer la crypttab pour donner ces instructions. Pour que tout cela soit pris en compte, il nous faut reconstruire initramfs qui gère le répertoire racine temporaire pendant le démarrage du système. Enfin, cette reconstruction ne peut être réalisée que depuis la nouvelle installation.

Mais avant tout, il nous faut copier l'UUID du disque chiffré. Ouvrez un nouveau terminal (ou un nouvel onglet) et entrez

sudo blkid /dev/nvme0n1p3

vous pourrez par la suite retourner sur cet onglet, il vous suffira de le mettre en surbrillance pour qu'il soit copié dans le buffer de votre souris (et collé avec le bouton du milieu de votre souris). Vous pouvez aussi utiliser "shift+ctrl+c" pour copier le texte en surbrillance et "shift+ctrl+v" pour le coller.

Basculer sur la nouvelle installation

Nous allons utiliser chroot pour passer dans le nouveau système. Entrez les commandes suivantes :

mount /dev/mapper/ubuntu-root /mnt
mount --bind /dev /mnt/dev
chroot /mnt
mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t devpts devpts /dev/pts
mount -a

Nous sommes maintenant dans le nouveau système, avec différents devices montés sur différents répertoires.

Instructions de démarrage

Nous devons créer le fichier /etc/crypttab. Le fichier doit contenir la ligne suivante, vous pouvez l'éditer avec nano, vi, emacs, bref, votre éditeur préféré et il n'est évidemment pas nécessaire ici de débattre de la supériorité de l'un par rapport aux autres 😘

pasvraimentcrypté   UUID=e7167ac4-b606-4be0-98a7-ace4e5e13f6b   none    luks,discard

Nous avons donc quatre champs : le nom du device à déchiffrer, son UUID (remplacez-le par celui de votre device chiffré, celui que vous avez copié précédemment, sans guillemets), le mot de passe (à none puisque l'objectif est qu'il vous soit demandé à chaque démarrage) et des options.

Sauvegardez ce fichier et quittez l'éditeur (pas le terminal).

Mettre à jour initramfs

Une fois l'éditeur quitté, toujours dans le terminal, il nous suffit de rentrer la commande suivante :

update-initramfs -k all -u

Nous pouvons maintenant quitter chroot en tapant

exit

Depuis notre shell de départ, il nous faut maintenant démonter mnt avec

umount -R /mnt

Fin

Nous pouvons maintenant fermer le shell et relancer la machine. Au démarrage, elle devrait nous demander la passphrase pour déchiffrer le device pasvraimentcrypté puis Ubuntu se lancera normalement.

La commande :

lsblk

nous permet d'avoir un visuel sur le résultat de nos différentes manipulations :

NAME                      MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
nvme0n1                   259:0    0 476,9G  0 disk
├─nvme0n1p1               259:1    0     2G  0 part  /boot/efi
├─nvme0n1p2               259:2    0     2G  0 part  /boot
└─nvme0n1p3               259:3    0 472,9G  0 part
  └─pasvraimentcrypté     253:0    0 472,9G  0 crypt
    ├─ubuntu-root         253:1    0    64G  0 lvm   /
    ├─ubuntu-swap         253:2    0     8G  0 lvm   [SWAP]
    └─ubuntu-home         253:3    0 400,9G  0 lvm   /home

On peut résumer cela ainsi :

  • le disque physique nvme0n1 est divisé en trois partitions physiques : nvme0n1p1, nvme0n1p2 et nvme0n1p3
  • la partition nvme0n1p1 est une partition EFI (nécessaire depuis Ubuntu 20.04) requise par le système d'exploitation
  • la partition nvme0n1p2 est la partie /boot qui permet au système de démarrer
  • la partition nvme0n1p3 contient un volume chiffré pasvraimentcrypté
  • ce volume chiffré pasvraimentcrypté que l'on doit déchiffrer au démarrage contient les trois volumes logiques LVM suivants :
  • ubuntu-root, la racine de l'arborescence du système Ubuntu
  • ubuntu-swap, l'extension de mémoire vive
  • ubuntu-home, contenant les dossiers et fichiers personnels des utilisateurs, isolé du reste du système

Ça y est, votre nouvelle vie commence avec votre nouvelle machine super secrète super rangée ! 🥳