Démarrer un linux avec /boot chiffré
On utilise pour cela les modules de grub2 cryptodisk.mod et luks.mod
On suppose ici que vous avez déjà la racine de votre système chiffré avec un lvm par dessus un volume luks sauf le /boot.
démontez /boot et remonter le dans un dossier temporaire /tmp/boot
copiez le contenu de /tmp/boot dans le dossier /boot de la racine
retirez l'entrée concernant la partition anciennement monté sur /boot du fichier /etc/fstab
éditez le fichier /etc/default/grub et y ajouter: GRUB_ENABLE_CRYPTODISK=y et GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:main" où /dev/sda2 est votre volume luks et main le nom du lvm contenant la racine (perso j'utilise /dev/disk/by-uuid/a9c07884-242c-4dae-a2cd-0e2eb9aa6907 à la place de /dev/sda2 comme ça, je ne dépend pas de l'ordre de détection de mes disques dur (j'en ai 2))
lancez sudo update-grub
vous pouvez vérifier que les modules cryptodisk et luks apparaissent bien dans /boot/grub/grub.cfg
lancez sudo grub-install /dev/sda
Au prochain redémarrage, grub vous demandera votre passphrase pour déchiffrer /boot.
Attention, le layout du clavier est alors en qwerty, changer le layout est alors possible bien que difficile et non recommandé :
Jordan_U | Nit_: It is possible but (currently) requires you to work outside the framework of grub-install, which we generally don't recommend. For BIOS based grub at least, you need to carefully create a load.cfg which uses just the limited rescue parser to setup your keyboard layout then embed this load.cfg in the core.img using grub-mkimage. If you're using UEFI, coreboot, or a separate unencrypted drive then you have other, more supported options.
Ne pas rentrer sa passphrase deux fois
Vous remarquerez qu'alors vous devez entrez votre passphrase deux fois. Une fois pour grub, et une fois pour monter / lors de l'initialisation du noyau.
Pour n'avoir à taper notre passphrase qu'une seule fois, nous allons ajouter une clef de déchiffrement pour / et la mettre dans l'initramfs chargé par grub. Comme /boot est maintenant chiffré, l'initramfs qui s'y trouve l'est aussi, et ça ne pose pas vraiment de problème de sécurité.
On s'assure quand même qu'une fois la machine démarré, seul root à accès aux initramfs : sudo chmod 700 /boot
Créer le répertoire des clef : sudo mkdir -p /etc/crypttab.d et sudo chmod 700 /etc/crypttab.d
Créer la clef : sudo dd bs=512 count=8 if=/dev/random of=/etc/crypttab.d/sda2_crypt (mon volume luks s'appelle sda2_crypt, je donne le même nom à la clef pour me souvenir que c'est la clef de ce volume) et la protéger sudo chmod 400 etc/crypttab.d/sda2_crypt
On ajoute la clef comme clef de déchiffrement pour le volume luks : sudo cryptsetup luksAddKey /dev/sda2 /etc/crypttab.d/sda2_crypt
modifier /etc/crypttab pour y renseigner la clef que l'on vient de créer et un keyscript qui sera utiliser pour passer la clef de l'initramfs à crypsetup.
Créer le fichier /etc/crypttab.d/getinitramfskey.sh
et le rendre éxécutable : sudo chmod 755 /etc/crypttab.d/getinitramfskey.sh
Crée un hook pour l'initramfs pour y inclure /etc/crypttab.d/sda2_crypt et /etc/crypttab.d/getinitramfskey.sh
1 #!/bin/sh 2 PREREQ="" 3 prereqs() { 4 echo "$PREREQ" 5 } 6 case "$1" in 7 prereqs) 8 prereqs 9 exit 0 10 ;; 11 esac 12 . "${CONFDIR}/initramfs.conf" 13 . /usr/share/initramfs-tools/hook-functions 14 mkdir -p ${DESTDIR}/etc/crypttab.d 15 chmod 700 ${DESTDIR}/etc/crypttab.d 16 cp -pLn /etc/crypttab.d/getinitramfskey.sh ${DESTDIR}/etc/crypttab.d/getinitramfskey.sh 17 cp -pLn /etc/crypttab.d/sda2_crypt ${DESTDIR}/etc/crypttab.d/sda2_crypt
et le rendre éxécutable : sudo chmod 755 /etc/initramfs-tools/hooks/crypttab.sh
Mettez à jour l'initramfs : sudo update-initramfs -u -k all
Vous pouvez redémarrer pour tester.