CransWiki:

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.

  1. démontez /boot et remonter le dans un dossier temporaire /tmp/boot

  2. copiez le contenu de /tmp/boot dans le dossier /boot de la racine

  3. retirez l'entrée concernant la partition anciennement monté sur /boot du fichier /etc/fstab

  4. éditez le fichier /etc/default/grub et y ajouter: GRUB_ENABLE_CRYPTODISK=y et GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:main"/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))

  5. lancez sudo update-grub

  6. vous pouvez vérifier que les modules cryptodisk et luks apparaissent bien dans /boot/grub/grub.cfg

  7. 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

  1. Créer le répertoire des clef : sudo mkdir -p /etc/crypttab.d et sudo chmod 700 /etc/crypttab.d

  2. 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

  3. On ajoute la clef comme clef de déchiffrement pour le volume luks : sudo cryptsetup luksAddKey /dev/sda2 /etc/crypttab.d/sda2_crypt

  4. 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.

    •    1 # <target name> <source device>         <key file>      <options>
         2 sda2_crypt UUID=a9c07884-242c-4dae-a2cd-0e2eb9aa6907  /etc/crypttab.d/sda2_crypt    luks,discard,keyscript=/etc/crypttab.d/getinitramfskey.sh # /dev/sda2
         3 
      
  5. Créer le fichier /etc/crypttab.d/getinitramfskey.sh

    •    1 #!/bin/sh
         2 KEY="${1}"
         3 if [ -f "${KEY}" ]; then
         4   cat "${KEY}"
         5 else
         6   PASS=/bin/plymouth ask-for-password --prompt="Key not found. Enter LUKS Password: "
         7 echo "${PASS}"
         8 fi
      

    et le rendre éxécutable : sudo chmod 755 /etc/crypttab.d/getinitramfskey.sh

  6. 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

  7. Mettez à jour l'initramfs : sudo update-initramfs -u -k all

Vous pouvez redémarrer pour tester.


CatégoriePagePublique

CransWiki: WikiNit/Notes/BootChiffré (dernière édition le 2018-03-28 22:24:39 par WikiB2moo)