Démarrer un linux avec /boot chiffré
On utilise pour ça les modules de grub2 cryptodisk.mod et luks.mod
Je 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
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 est alors en qwerty
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 a taper notre passphrase qu'une seule foie, nous allons ajouter une clef de déchiffrement pour / et la mettre dans l'initramfs chargé par grub. Comme /boot est mantenant 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 foie la machine démarré, seul root a 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 a 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.
$ cat /etc/crypttab # <target name> <source device> <key file> <options> sda2_crypt UUID=a9c07884-242c-4dae-a2cd-0e2eb9aa6907 /etc/crypttab.d/sda2_crypt luks,discard,keyscript=/etc/crypttab.d/getinitramfskey.sh # /dev/sda2
Créer le fichier /etc/crypttab.d/getinitramfskey.sh
$ cat /etc/crypttab.d/getinitramfskey.sh #!/bin/sh KEY="${1}" if [ -f "${KEY}" ]; then cat "${KEY}" else PASS=/bin/plymouth ask-for-password --prompt="Key not found. Enter LUKS Password: " echo "${PASS}" fi
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
$ cat /etc/initramfs-tools/hooks/crypttab.sh #!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case "$1" in prereqs) prereqs exit 0 ;; esac . "${CONFDIR}/initramfs.conf" . /usr/share/initramfs-tools/hook-functions mkdir -p ${DESTDIR}/etc/crypttab.d chmod 700 ${DESTDIR}/etc/crypttab.d cp -pLn /etc/crypttab.d/getinitramfskey.sh ${DESTDIR}/etc/crypttab.d/getinitramfskey.sh cp -pLn /etc/crypttab.d/sda2_crypt ${DESTDIR}/etc/crypttab.d/sda2_crypt
Mettez à jour l'initramfs : sudo update-initramfs -u -k all
Vous pouvez redémarrer pour tester.