Licence CC BY

Installer un Ubuntu chiffré avec LUKS, LVM et un partitionnement personnalisé

Oui, tout ça en même temps ! Mais il y a de bonnes raisons de le faire.

Ce contenu est obsolète. Il peut contenir des informations intéressantes mais soyez prudent avec celles-ci.

Imaginons que pour une raison quelconque – j’en donnerai quelques exemples au début du tutoriel – vous voulez installer votre Ubuntu sur une partition chiffrée. Le plus simple est de sélectionner l’option prévue à cet effet dans l’installeur officiel. Oui, mais voilà, cette option a deux inconvénients :

  1. Elle utilise tout le disque, sans laisser de possibilité de conserver un autre système d’exploitation en parallèle ;
  2. Elle impose son propre plan de partitionnement, qui est discutable (pas de partition /home séparée par exemple).

Ce tutoriel assez technique va vous montrer comment passer outre ces limitations, et ce avec un média d’installation standard1 de la variante que vous voulez d’Ubuntu (testé avec Ubuntu 16.04 LTS), probablement Linux Mint, et peut-être même encore d’autres (n’hésitez pas à partager vos retours en commentaires).

Prérequis : on va parler technique. Donc, je considère que les notions de partitionnement et les règles de nommage des disques sous Linux vous sont acquises. Je suppose aussi que vous n’avez pas peur de la ligne de commande et que vous avez une idée de ce que sont LVM et chroot.

Le tutoriel est un peu long, mais tout est détaillé. Comptez dix à quinze minutes en plus d’une installation normale, plus plusieurs heures d’initialisation des disques, pendant lesquels vous pouvez faire autre chose.


  1. On trouve un certain nombre de ressources, en particulier en français, qui mentionnent l’utilisation du média d’installation alternate qui n’existe plus depuis un petit moment…

Important : pour Ubuntu 18.04 et suivants

Ce tutoriel est obsolète et ne permet plus d’installer Ubuntu 18.04 selon la méthode décrite, même avec des adaptations simples.

De plus, l’installateur d’Ubuntu n’oblige plus à écraser tout le disque pour faire une installation chiffrée tant qu’on installe Ubuntu sur une seule partition.

Donc, si vous désirez installer Ubuntu selon ce tutoriel, deux possibilité s’offrent à vous :

  1. Soit vous utilisez le système intégré à l’installeur, cf ci-dessous pour les détails,
  2. Soit vous voulez vraiment quelque chose de plus poussé, auquel cas je vous renvoie vers ce sujet de discussion.

Pour installer Ubuntu 18.04 ou supérieure sur une seule partition sans écraser tout le disque

  1. Lancez la procédure d’installation normale.
  2. Au moment de choisir le partitionnement, choisissez « Autre chose ».
  3. Créez une partition de boot, indispensable (1 Go, ext4, montée sur /boot)1.
  4. Créez votre partition, et choisissez « Utiliser comme : volume physique pour chiffrement ».
  5. Ubuntu va vous créer une partition chiffrée. Pensez à écraser tout le disque, toute la sécurité repose là-dessus !
  6. Vous avez maintenant une nouvelle partition /dev/mapper/sdaX_crypt au format ext4 il vous suffit de la sélectionner comme partition racine / et de lancer l’installation normalement.

  1. Il semblerait qu’il soit possible de chiffrer aussi /boot mais l’installeur d’Ubuntu ne le permet pas.

Pourquoi chiffrer son disque dur avec de telles contraintes ?

Pourquoi chiffrer son disque dur ?

Sur un ordinateur fixe, cela ne sert probablement à rien — ou alors vous travaillez sur des données si sensibles que vos disques sont déjà chiffrés.

Le cas d’un ordinateur portable est plus intéressant, parce que vous pouvez le perdre ou vous le faire voler. Or, même si la personne qui récupèrera votre ordinateur n’en fera rien directement, il est très facile de récupérer les données d’un disque qui n’a pas été effacé exprès dans ce but1. Or, qui sait dans quelles mains vont tomber ces données et ce qui va en être fait par exemple ? Quelqu’un de mal intentionné peut tirer des informations intéressantes et un bon prix de données aussi fréquentes sur un disque dur de particulier qu’un scan de carte d’identité ou de passeport, d’informations bancaires, de relevés de comptes, de billets pour un long voyage à l’étranger.
Dans le cas de votre ordinateur professionnel, c’est encore mieux : accès aux comptes de l’entreprise, espionnage industriel, etc.
Je conseille à ce sujet la lecture du dossier du Canard PC Hardware n° 23 (article payant), où les auteurs montrent par l’exemple ce qu’on peut réellement lire sur un disque dur d’occasion et ce qu’on peut en faire.

Le moyen le plus sûr pour éviter de subir des désagréments2 autres que la simple perte de votre ordinateur, c’est donc de chiffrer vos données : toute personne qui récupèrerait le disque dur se retrouverait face à un bloc de données pseudoaléatoires et surtout inutiles sans la clé ad hoc.

La sécurité informatique – CC-BY-NC 2.5 XKCD — https://xkcd.com/538/
La sécurité informatique – CC-BY-NC 2.5 XKCD — https://xkcd.com/538/

De quelle manière chiffrer son disque dur ?

Je mets de côté les disques et ordinateurs à chiffrement intégré matériel. D’une part parce que si vous en avez un, normalement vous le savez déjà ; et deuxièmement parce que ce ne sont pas des solutions disponibles partout, surtout lorsqu’on veut chiffrer un disque interne.

Vous pouvez simplement chiffrer votre home sous Linux, il y a pléthore d’outils pour ça. Mais si des données se retrouvent hors de votre home ? Dans les fichiers temporaires par exemple, dans la partition de swap, dans les logs, n’importe où sauf là où vous l’aviez prévu ?

Une solution est alors de chiffrer l’intégralité de son disque dur, et c’est ce que nous allons faire dans ce tutoriel.

Quoique… pas tout à fait en réalité : Linux est incapable de démarrer si les informations de démarrage sont chiffrées (dit comme ça, ça parait assez logique). Donc, /boot sera monté sur une partition séparée qui ne sera pas chiffrée. L’intégralité du reste du disque sera chiffrée, éventuelle partition swap comprise.

C’est ce que propose Ubuntu lorsqu’on choisit, à l’installation, l’option de chiffrement du disque dur. Mais comme déjà évoquée en introduction, cette option a deux inconvénients :

  1. Elle écrase l’intégralité du disque dur : adieu, autres systèmes !
  2. Elle vous impose un plan de partitionnement assez étrange :

    • 1 Go pour la partition EFI ,
    • 1 Go pour la partition de boot,
    • Et surtout le reste en partition racine (pas de possibilité de séparer votre home par exemple).

LVM dans LUKS, ou LUKS dans LVM ?

Pour commencer, un rapide rappel de qui est qui :

  • LVM est une méthode de gestion de l’espace de stockage, beaucoup plus souple que de simples partitions.
  • LUKS est le standard de chiffrement du noyau Linux ; utilisé avec dm-crypt (son utilisation normale), il permet d’obtenir des périphériques de type bloc utilisables normalement, alors qu’ils sont chiffés de manière transparente.

On pourrait imaginer deux montages :

  1. une grosse partition LUKS découpée comme on veut avec LVM ;
  2. un découpage LVM dans lequel on chiffrerait les partitions avec LUKS.

Le premier montage rend le redimensionnement de la partition chiffrée ou l’ajout de disque au système LVM assez délicat, mais ne nécessite qu’un mot de passe pour déverrouiller l’intégralité du système, puisqu’il n’y a qu’une partition LUKS.

Le second est plus souple, mais nécessite de saisir un mot de passe par partition. C’est l’option proposée par défaut dans l’installeur d’Ubuntu 18.04 quand on sélectionne « Volume physique pour chiffrement » dans le menu « Utiliser comme : » d’une partition.

Comme sur un ordinateur portable intégralement chiffré, les deux inconvénients de la première solution sont des cas pathologiques, nous allons utiliser une grosse partition LUKS découpée comme on veut avec LVM.

Bien. Maintenant qu’on sait ce qu’on veut, comment l’obtenir ?


  1. Un simple reformatage, par exemple, permet généralement la récupération de toutes les données en quelques minutes. Effacer physiquement les données d’un disque dur magnétique nécessite de réécrire l’intégralité des données, plusieurs fois avec des valeurs aléatoires – ce qui peut être donc très long.

  2. En vrac : usurpation d’identité, cambriolage ciblé en votre absence, utilisation frauduleuse de votre compte bancaire, fuite des informations de votre entreprise à un concurrent, apparition soudaine de vos photos intimes sur des sites publics…

Préparer les partitions et installer le système

Hypothèses, cible et préparation

Je pars du principe que vous faites ça avec un système moderne en 2016, donc avec un démarrage en UEFI et un disque dur au format GPT. Si ce n’est pas le cas pour vous, à vous de faire les adaptations nécessaires.

Le partitionnement cible est le suivant :

← Début du disque

Partition EFI

/boot/efi

Partition de démarrage

/boot

Partition chiffrée LUKS

(Autres partitions si autres OS)

Volume physique LVM

Montages arbitraires dont au moins /

Sauvegardez toutes vos données !

L’un des principes de cette installation est précisément de détruire de manière irrémédiable toute donnée qui se trouverait sur la partition chiffrée !

Les exemples seront donnés pour un disque intégralement dédié à un seul OS installé, à vous de les adapter à votre configuration réelle !

Démarrage et création des partitions

Démarrez le CD d’installation d’Ubuntu en mode « Essai sans installation ».
En effet, on va avoir besoin de faire quelques réglages avant de lancer la procédure d’installation elle-même…

Configurez votre mapping clavier dans les paramètres de la session live-CD.
La ligne de commande va être nécessaire, tout comme la saisie de mots de passe longs – autant le faire avec un mapping clavier que l’on connait. À noter qu’il faut aller dans « Autres » pour trouver le Français. L’installation de packs de langues ne sert à rien par contre.

Configurez vos partitions à l’aide de votre gestionnaire préféré, par exemple GParted. Pour l’exemple, le partitionnement sera le suivant :

Partition Système de fichier Taille Commentaire
/dev/sda1 EFI 1 Go Doit avoir le flag « bootable ». 50 Mo suffisent sans doute si vous n’avez que Linux.
/dev/sda2 ext4 1 Go Évitez de descendre sous les 500 Mo, ça peut poser problème aux mises à jour.
/dev/sda3 Aucun Le reste du disque On va la formater ensuite.

Création d’une partition chiffrée LUKS

On va commencer par formater au format LUKS la partition qu’on a laissée sans système de fichier tout à l’heure :

$ sudo cryptsetup luksFormat /dev/sda3

La commande va vous demander un mot de passe : il doit être le plus long et complexe possible : toute la sécurité de vos données repose dessus ! Seize (16) caractères semblent un minimum selon l’ANSSI, avec bien entendu majuscules, minuscules, chiffres et caractères exotiques. Oh, et vous devrez le taper à chaque démarrage.

Il faut ensuite ouvrir ce conteneur LUKS et lui donner un nom pour pouvoir l’utiliser, ce qui se fait avec la commande :

$ sudo cryptsetup luksOpen /dev/sda3 hdcrypt

hdcrypt est un nom arbitraire. Cette commande va créer un périphérique déchiffré, accessible en mode bloc, dans /dev/mapper/hdcrypt (ou tout autre nom que vous aurez choisi bien sûr.

L’étape suivante n’est pas strictement indispensable, mais est nécessaire à une vraie sécurité !

Les plus observateurs auront remarqué que l’étape de création du conteneur LUKS est très rapide, c’est parce que le système se contente de créer les entêtes et métadonnées qui vont bien. Le reste de votre disque est conservé en l’état. Conséquence : c’est facile de connaitre au moins la taille des données contenues dans votre partition chiffrée – et bien plus si les blocs ne sont pas utilisés de manière contigüe.

Pour éviter ça, on va écrire des données aléatoires sur l’intégralité du conteneur chiffré ; ainsi de l’extérieur, impossible de savoir ce qui est des données ou ce qui est de l’espace libre !

Attention !

  1. Plus aucune récupération de vos données n’est possible après cette étape.
  2. Cette opération écrit sur l’intégralité de votre disque chiffré, elle peut donc être très longue. Je parle d’heures entières, là !

On va écrire des zéros (qui seront chiffrés) sur l’ensemble du conteneur par blocs de 16 Mio :

$ sudo dd if=/dev/zero of=/dev/mapper/hdcrypt bs=16M status=progress

Ubuntu 16.04 ne gère pas encore l’option status=progress de la commande dd. Si vous voulez suivre l’avancement, ça peut se faire à l’aide de la commande pv :

$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
$ sudo apt-get install -y pv
$ sudo sh -c ’exec pv -tprebB 16 m /dev/zero >"$1"' _ /dev/mapper/hdcrypt

Création des volumes LVM

Notre conteneur chiffré avec LUKS est prêt, mais est à ce moment aussi inutile qu’un disque dur non formaté. On va donc le partitionner avec LVM :

On commence par créer un volume physique dans le conteneur, puis un groupe nommé vgcrypt (là aussi, c’est un nom arbitraire) dans ce volume physique :

$ sudo pvcreate /dev/mapper/hdcrypt
$ sudo vgcreate vgcrypt /dev/mapper/hdcrypt

On va maintenant créer nos partitions (des volumes logiques) au sein du groupe. Tous les noms sont arbitraires et les tailles sont à adapter à ce que vous voulez faire :

$ sudo lvcreate -n lvroot -L 32g vgcrypt
$ sudo lvcreate -n lvswap -L 4g vgcrypt
$ sudo lvcreate -n lvhome -l 100%FREE vgcrypt

Et enfin, on crée des systèmes de fichier dans nos volumes logiques ! Ici, j’utilise ext4, mais bien entendu vous utilisez autre chose si vous le souhaitez.

$ sudo mkfs.ext4 /dev/mapper/vgcrypt-lvroot
$ sudo mkfs.ext4 /dev/mapper/vgcrypt-lvhome
$ sudo mkswap /dev/mapper/vgcrypt-lvswap

Et on a enfin des partitions utilisables !

Installation du système

Lancez l’installeur graphique, et installez le système normalement. Vérifiez simplement les trois points suivants :

  1. Indiquez vouloir utiliser un partitionnement personnalisé, et utilisez les partitions que vous venez de créer. N’oubliez pas de monter /boot sur sa partition !
  2. Vérifiez bien que le mapping clavier utilisé est bien celui que vous avez utilisé au moment de créer le conteneur LUKS, sans quoi vous risquez d’avoir des surprises au démarrage.
  3. Ce n’est pas la peine d’activer le chiffrement de la home de l’utilisateur, elle est déjà sur une partition chiffrée.

Laissez votre installation se terminer tranquillou, et…

ne redémarrez surtout pas ! L’installeur standard ne comprends pas ce qu’on a fait avec les partitions et a laissé le système dans un état qui ne démarre pas !

*[OS] : Système d’Exploitation

Permettre au système de démarrer

Ainsi donc, on a un système installé tout bien comme il faut sur de belles partitions chiffrées… sauf que l’installeur n’a pas compris ce qu’on a fait, parce qu’il ne sait pas que la partition LUKS est chiffrée – et donc qu’il faut la déchiffrer pour pouvoir démarrer le système, et donc qu’il faut demander le mot de passe à l’utilisateur.

Fermez donc l’installeur graphique et lancez un terminal, on va réparer tout ça !

En cas de problème suite à une mise à jour, vous pourrez probablement vous contenter de rejouer cette partie, sans tout réinstaller.

Résumé des opérations et préparation

Il manque tout simplement les configurations qui permettent de dire au processus de démarrage du noyau que la racine est montée sur une partition chiffrée via LUKS, et donc qu’il faut demander le mot de passe à l’utilisateur, déverrouiller la partition et monter les volumes LVM avant de pouvoir continuer.

On va donc monter notre installation dans un chroot, ajouter les configurations manquantes et régénérer les processus de démarrage.

Pour ça, on va avoir besoin de l’UUID de la partition physique dans laquelle on a créé le volume LUKS – parce que rien ne garantit que le numéro de partition sera le même à chaque redémarrage, surtout si un disque externe est branché à ce moment-là :

$ sudo blkid /dev/sda3
/dev/sda3 : UUID="e4047e9c-f858-4301-bbcd-a02bf85e20d5" TYPE="crypto_LUKS" PARTUUID="3c78487a-3b29-4a35-8192-2aca523a6688"

Notez bien le UUID et pas le PARTUUID !

Montage des partitions et chroot

On va tout monter dans /mnt parce que le dossier est déjà là et que c’est court à taper – utilisez un autre dossier si vous voulez. La principale difficulté est de ne pas oublier un point de montage, et de ne pas se tromper dans l’ordre (racine puis partition de boot puis partition EFI) :

$ sudo mount /dev/mapper/vgcrypt-lvoot /mnt
$ sudo mount /dev/sda2 /mnt/boot
$ sudo mount /dev/sda1 /mnt/boot/efi
$ sudo mount /dev/mapper/vgcrypt-lvhome /mnt/home
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys
$ sudo chroot /mnt

Gestion de la partition chiffrée par le noyau

Déclaration du volume chiffré

Dans l’environnement chrooté, créez le fichier /etc/crypttab avec le contenu suivant. Évidemment, il faut que vous y mettiez l’UUID de votre partition LUKS, son nom et le nom de votre volume LVM.

Ce fichier déclare la partition chiffrée (à l’aide de son nom et de l’UUID de la partition cible), indique qu’il n’y a pas de fichier clé pour la déchiffrer (et donc qu’il faudra demander le mot de passe à l’utilisateur). Les options indiquent que le chiffrement est fait avec LUKS, qu’en cas d’échec on peut réessayer et que cette partition utilise le volume LVM précédemment créé.

# <target name> <source device>                            <key file> <options>
hdcrypt         UUID=e4047e9c-f858-4301-bbcd-a02bf85e20d5 none       luks,retry=1,lvm=vgcrypt

Déclaration de la racine chiffrée pour le noyau

Toujours dans l’environnement chrooté, créez le fichier /etc/initramfs-tools/conf.d/cryptroot avec ce contenu – comme d’habitude, à adapter selon vos valeurs :

CRYPTROOT=target=hdcrypt,source=/dev/disk/by-uuid/e4047e9c-f858-4301-bbcd-a02bf85e20d5

Régénération des images de démarrage

La commande suivante, toujours à lancer dans l’environnement chrooté, permet de régénérer une nouvelle image de démarrage (paramètre -c) pour toutes les versions du noyau Linux installées (paramètre -k all).

# update-initramfs -k all -c

Et voilà ! On a des images de démarrage et un noyau qui savent comment démarrer le système chiffré mis en place !

Mais ça ne suffit toujours pas ! Parce que le chargeur de démarrage (GRUB), lui, ne sait toujours pas que la partition racine est chiffrée !

Indiquer au chargeur de démarrage que la partition racine est chiffrée

Encore et toujours dans le chroot, éditez le fichier /etc/default/grub, et trouvez la ligne de configuration des arguments à passer au noyau Linux :

GRUB_CMDLINE_LINUX=""

Modifiez-la avec vos valeurs pour qu’elle ressemble à ceci. Vous devez comprendre le principe à force : on déclare le disque chiffré via son nom et son UUID, ainsi que le volume LVM à utiliser.

GRUB_CMDLINE_LINUX="cryptopts=target=hdcrypt,source=/dev/disk/by-uuid/e4047e9c-f858-4301-bbcd-a02bf85e20d5,lvm=vgcrypt"

Toujours dans l’environnement chrooté, mettez Grub à jour pour prendre en compte cette nouvelle configuration :

# update-grub

Et voilà, c’est prêt ! Vous pouvez redémarrer et profiter de votre nouveau système chiffré !

Sûreté, vérifications et performances

Sûreté contre les corruptions du disque

Le problème de chiffrer ses données, c’est que si l’entête LUKS qui permet de déchiffrement est corrompu, toutes vos données sont perdues : même avec le mot de passe, il n’y a plus rien à faire.

Heureusement, on peut tout à fait sauvegarder cet entête, par exemple avec la commande suivante :

$ sudo cryptsetup luksHeaderBackup /dev/sda3 --header-backup-file luks-header.bin.crypt

La commande est assez claire : on demande à cryptsetup de sauvegarder les en-têtes de la partition physique chiffrée dans le fichier luks-header.bin.crypt. Ceci va produire un fichier d’un peu plus de 1 Mio, accessible en lecture seule par root uniquement, que vous pouvez conserver précieusement ailleurs.


Bien, j’ai réussi à démarrer mon Linux sur ma partition chiffrée. Comment puis-je vérifier que tout est bien chiffré comme je le veux ? Quel impact de ce chiffrement sur les performances ?

Voilà des questions pertinentes ! Voyons comment y répondre.

Vérifier le chiffrement des partitions

Rien de plus simple, il suffit de lister les périphériques en mode bloc du système, et de vérifier que les points de montage sont bien là où on les attend. Par exemple :

$ lsblk
NAME                 MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sr0                   11:0    1 1024M  0 rom   
sda                    8:0    0 74,5G  0 disk  
├─sda2                 8:2    0  512M  0 part  /boot
├─sda3                 8:3    0   74G  0 part  
│ └─hdcrypt          253:0    0   74G  0 crypt 
│   ├─vgcrypt-lvroot 253:1    0   16G  0 lvm   /
│   ├─vgcrypt-lvswap 253:2    0    4G  0 lvm   [SWAP]
│   └─vgcrypt-lvhome 253:3    0   54G  0 lvm   /home
└─sda1                 8:1    0   64M  0 part  /boot/efi

On voit bien que si /boot et /boot/efi correspondent bien à des partitions physiques (respectivement sda1 et sda2), les partitions racine, /, /home et le swap sont bien dans des volumes LVM au sein d’un volume chiffré.

Quel impact sur les performances ?

Pour vérifier ça, on va mesurer les performances du disque lui-même, puis du container chiffré LUKS. On va accéder à ces périphériques directement en mode bloc, en lecture seule et en accès aléatoires avec différentes tailles de blocs (de 512 octets jusqu’à ce qu’on passe sous les 8 opérations par seconde).

Pour ce faire on va utiliser iops, qui est un outil récent, conçu sérieusement (c’est très facile de concevoir un mauvais test d’entrées/sorties) et accessible en ligne de commande.

Les exemples ci-dessous sont exécutés sur un Intel® Core™ i3–3110M CPU @ 2.40GHz de 2012 sans instructions AES-NI qui pourraient accélérer le chiffrement / déchiffrement des données, et un vieux SSD Intel X25-M de 2009.

Installation de iops

$ wget https://raw.githubusercontent.com/cxcv/iops/master/iops
--2016-12-11 18:33:13--  https://raw.githubusercontent.com/cxcv/iops/master/iops
Résolution de raw.githubusercontent.com (raw.githubusercontent.com)… 151.101.60.133
Connexion à raw.githubusercontent.com (raw.githubusercontent.com)|151.101.60.133|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 10104 (9,9K) [text/plain]
Enregistre : «iops»

iops                100%[===================>]   9,87K  --.-KB/s    in 0s      

2016-12-11 18:33:13 (86,7 MB/s) - «iops» enregistré [10104/10104]

$ chmod +x iops

Performances du disque

On lance le test sur la partition qui contient le container LUKS, puis sur le conteneur chiffré lui-même.

$ sudo ./iops /dev/sda3
/dev/sda3,  79.42 G, sectorsize=512B, #threads=32, pattern=random:
 512  B blocks: 48616.2 IO/s,  24.9 MB/s (199.1 Mbit/s)
   1 kB blocks: 35126.8 IO/s,  36.0 MB/s (287.8 Mbit/s)
   2 kB blocks: 22681.0 IO/s,  46.5 MB/s (371.6 Mbit/s)
   4 kB blocks: 13547.9 IO/s,  55.5 MB/s (443.9 Mbit/s)
   8 kB blocks: 13053.5 IO/s, 106.9 MB/s (855.5 Mbit/s)
  16 kB blocks: 7616.1 IO/s, 124.8 MB/s (998.3 Mbit/s)
  32 kB blocks: 4061.8 IO/s, 133.1 MB/s (  1.1 Gbit/s)
  65 kB blocks: 2134.1 IO/s, 139.9 MB/s (  1.1 Gbit/s)
 131 kB blocks: 1182.6 IO/s, 155.0 MB/s (  1.2 Gbit/s)
 262 kB blocks:  758.7 IO/s, 198.9 MB/s (  1.6 Gbit/s)
 524 kB blocks:  458.4 IO/s, 240.3 MB/s (  1.9 Gbit/s)
   1 MB blocks:  257.2 IO/s, 269.6 MB/s (  2.2 Gbit/s)
   2 MB blocks:  137.6 IO/s, 288.6 MB/s (  2.3 Gbit/s)
   4 MB blocks:   71.1 IO/s, 298.2 MB/s (  2.4 Gbit/s)
   8 MB blocks:   35.5 IO/s, 297.4 MB/s (  2.4 Gbit/s)
  16 MB blocks:   17.6 IO/s, 294.6 MB/s (  2.4 Gbit/s)
  33 MB blocks:    8.9 IO/s, 298.3 MB/s (  2.4 Gbit/s)
  67 MB blocks:    4.5 IO/s, 302.4 MB/s (  2.4 Gbit/s)

$ sudo ./iops /dev/mapper/hdcrypt 
/dev/mapper/hdcrypt,  79.42 G, sectorsize=512B, #threads=32, pattern=random:
 512  B blocks: 36113.5 IO/s,  18.5 MB/s (147.9 Mbit/s)
   1 kB blocks: 28022.3 IO/s,  28.7 MB/s (229.6 Mbit/s)
   2 kB blocks: 20089.7 IO/s,  41.1 MB/s (329.1 Mbit/s)
   4 kB blocks: 13159.6 IO/s,  53.9 MB/s (431.2 Mbit/s)
   8 kB blocks: 12800.8 IO/s, 104.9 MB/s (838.9 Mbit/s)
  16 kB blocks: 7544.3 IO/s, 123.6 MB/s (988.9 Mbit/s)
  32 kB blocks: 4086.5 IO/s, 133.9 MB/s (  1.1 Gbit/s)
  65 kB blocks: 2120.6 IO/s, 139.0 MB/s (  1.1 Gbit/s)
 131 kB blocks: 1177.8 IO/s, 154.4 MB/s (  1.2 Gbit/s)
 262 kB blocks:  754.0 IO/s, 197.7 MB/s (  1.6 Gbit/s)
 524 kB blocks:  459.7 IO/s, 241.0 MB/s (  1.9 Gbit/s)
   1 MB blocks:  256.7 IO/s, 269.2 MB/s (  2.2 Gbit/s)
   2 MB blocks:  136.3 IO/s, 285.8 MB/s (  2.3 Gbit/s)
   4 MB blocks:   70.5 IO/s, 295.6 MB/s (  2.4 Gbit/s)
   8 MB blocks:   35.4 IO/s, 296.6 MB/s (  2.4 Gbit/s)
  16 MB blocks:   18.8 IO/s, 315.4 MB/s (  2.5 Gbit/s)
  33 MB blocks:    9.1 IO/s, 304.6 MB/s (  2.4 Gbit/s)
  67 MB blocks:    4.4 IO/s, 296.9 MB/s (  2.4 Gbit/s)

Les accès directs à la partition donnent des valeurs au-delà de la spécification Intel, tout est parfait !

Sur les accès au conteneur chiffré, malgré une petite baisse en particulier sur les toutes petites lectures, les performances sont globalement les mêmes. Par contre, l’occupation CPU (invisible ici) est beaucoup plus importante lors de la lecture des données chiffrées.

Illustration en graphiques, avec en prime l’accès à la partition qui contient /home pour être sûr que LVM ne pose pas de problème :

Débits en Mio/s (en ordonnée) par taille de bloc (en abscisse, blocs en Kio, échelle logarithmique)
Débits en Mio/s (en ordonnée) par taille de bloc (en abscisse, blocs en Kio, échelle logarithmique)
Nombre de blocs lus par seconde (en ordonnée, échelle logarithmique) par taille de bloc (en abscisse, blocs en Kio, échelle logarithmique)
Nombre de blocs lus par seconde (en ordonnée, échelle logarithmique) par taille de bloc (en abscisse, blocs en Kio, échelle logarithmique)

Et voilà, vous savez maintenant comment installer Ubuntu (ou l’un de ses moult dérivés) sur un disque dur intégralement chiffré ! On peut trouver dommage que la procédure d’installation standard ne permette pas ce genre de montage, mais sans doute n’est-ce pas la cible philosophique d’Ubuntu. C’est dommage parce qu’avec les matériels modernes, on voit difficilement pourquoi se priver de chiffrer les données de son ordinateur portable.

Si vous avez la moindre question, n’hésitez pas à la poser sur les forums. N’hésitez pas non plus à me signaler toute erreur ou imprécision à l’aide du bouton dédié à cet effet ou directement en commentaire. Si vous avez des retours d’expériences sur des matériels modernes (les SSD modernes sont bien plus rapides) ou anciens, ça m’intéresse aussi.

Logo CC-BY-SA, d’après Cryptographic slide rule used as a calculation aid by the Swiss Army between 1914 and 1940, CC-BY-SA 2.0 Rama, via Wikimedia Commons.

14 commentaires

Merci pour ce tutoriel. :) Je vais le diffuser au plus grand nombre.

Personnellement j’utilise btrfs avec LUKS là où avant j’utilisais effectivement LUKS par-dessus LVM. Ça évite donc une configuration supplémentaire côté LVM qui peut s’avérer un peu casse-tête quand il faut partitionner l’espace disque soi-même, en plus de choisir les ratios correctement.

La solution btrfs avec LUKS est intéressante aussi, même si je ne crois pas qu’elle permette de chiffrer le swap ?

D’autre part, je me méfie de btrfs au moins dans certains usages : avec une grande quantité de petits fichiers très souvent modifiés (ex : développement d’une grosse application Android), le système de fichiers m’a explosé à la figure à cause d’une sombre histoire de métadonnnées.

Bonjour,

Ce tuto répond exactement à mes besoins. Merci :) Juste un soucis, je le suis à la lettre sur une VM :

  • 20 Go en DD (14g pour / et le reste-swap pour /home)

  • 4Go en RAM (donc 2Go pour swap car pas de traitements lourds)

J’ai également adapté l’UUID de /dev/sda3 à chaque fois mais à la fin, le grub ne trouve pas le chemin canonique de /dev/mapper/vgcrypt-lvroot

je me demandais ce que je pouvais avoir loupé. J’ai cherché partout sur le net. J’ai essayé la méthode de /cow proposé sur cette page : https://doc.ubuntu-fr.org/grub-pc (avant de m’apercevoir que ce n’était pas pertinent)

Je sais que les commentaires ne sont pas forcément là pour ça mais ca fait 2 jours que je suis coincé :honte:

+0 -0

Bonjour,

Finalement j’ai trouvé la solution, je la partage donc ici. à l’étape Montage des partitions et chroot j’ai bien fait tous les mount mais avant de faire

1
sudo chroot /mnt
  • j’ai fait :
1
2
3
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /sys /mnt/sys
  • et enfin j’ai fait :
1
$ sudo chroot /mnt
  • puis j’ai sauté les passages du tuto où l’on montait dev proc et sys puisque c’était déjà fait.
  • Et enfin j’ai suivi le reste à la lettre.

Voilà voilà. en espérant avoir aidé =D Bonne journée/soirée/appétit à tous

Bonjour

Merci pour ce tutorial qui m’a été bien utile, il y juste 2 petits points à corriger.

Paragraphe "Création des volumes LVM" le paramètre de définition de la taille des partitions est "-L" au lieu de "-l", cela donne:

1
2
 sudo lvcreate -n lvroot -L 16g vgcrypt
 sudo lvcreate -n lvswap -L 4g vgcrypt

Paragraphe "Montage des partitions et chroot", il y a une erreur de frappe sur la ligne "sudo mount /dev/mapper/vgcrypt-lvoot /mnt" le nom du volume est à corriger en "lvroot"

Merci aussi à loup_brun pour sa solution

A+

J’ai suivi la procédure pour installer Xubuntu sur mon MacBookPro. Après plusieurs échecs et ré-installation, je suis arrivé à quelque chose qui fonctionne (décrit précisément ici avec quelques variantes: https://docs.google.com/document/d/1EiM35zrsFSyzL626tpLe1q4-OQSAL8AAYBD-KXeP53U/edit?usp=sharing

A savoir:

  • je n’utilise pas tout le disque et j’ai une partition /data plutôt que /home (raisons philosophiques expliquées dans le doc)
  • je n’ai pas eu à faire les manips de Grub
  • j’ai fait des manips particulières sur l’écran de partitionnement de l’outil d’installation
  • j’ai adapté la ligne à mettre dans /etc/cryptab avec seulement options luks,discard :
echo "hdcrypt UUID=$(blkid /dev/sda3 | grep -oP '([a-z0-9\-]{20,})') none luks,discard" > /etc/crypttab

Est-ce que cela est du à ma façon de paramétrer les partitions depuis l’écran d’installation ? Ou peut-être dû à la version 18.04 de Ubuntu ? Ou au fait que c’est un Mac ?

Je me suis inspiré de mon autre ordi (PC Laptop) avec Ubuntu 16.04 où

  1. Le GRUB n’a rien de ce qui est décrit dans le tuto
  2. Le fichier /etc/crypttab avait uniquement les options luks,discard

En espérant que cela aidera.

Cette procédure fonctionne parfaitement pour une 22.04 il faut juste faire la modif de lolozere et adapter les chemins pour les disques nvme.

gregory.eve

Yep, j’approuve totalement, j’ai fait l’installation sur un lenovo legion 5 avec un ssd nvme en dual-boot avec Windows 10, ça marche nickel.

Merci @lolozere pour l’update et merci SpaceFox pour le tuto original.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte