No alternative text provided

🔐 Arch Linux & Windows en dual boot, avec Secure Boot, TPM, et disques cryptés🔐 Dual Booting Arch Linux & Windows with Secure Boot, TPM, and Disk Encryption

Comment j'ai mis en place un dual boot avec Arch Linux et Windows 11 avec Secure Boot activé, du chiffrement LUKS et TPM pour un déverrouillage sans mot de passe 🚀

⚠️ Attention: Nous allons modifier le bootloader et les clés de Secure Boot. Windows pourrait vous demander la clé de récupération Bitlocker — assurez-vous qu'elle est bien sauvegardée dans votre compte Microsoft avant de continuer. Notez-la quelque part d’accessible également au cas où.


🧰 Préparation des disques lors de l’installation d’Arch Linux

Remarque : Secure Boot doit être désactivé pour démarrer sur la clé USB d’installation d'Arch (car elle n’est pas signée avec les clés Microsoft).

Je vais utiliser deux partitions pour Arch:

  • nvme0n1p6: partition UEFI (512Mo, vfat)
  • nvme0n1p7: partition principale (1To, cryptée)

Dans la console d'installation, je prépare ma partition cryptée avec luks:

1cryptsetup --use-random luksFormat /dev/nvme0n1p7
2cryptsetup luksOpen /dev/nvme0n1p7 cryptlvm

Remarque: remplacez nvme0n1p7 avec votre propre identifiant de partition qui sera probablement différent.

Ensuite, je prépare la partie LVM (c'est facultatif car je ne crée qu'une seule partition, mais ça pourrait servir plus tard) :

1pvcreate /dev/mapper/cryptlvm
2vgcreate vg0 /dev/mapper/cryptlvm
3lvcreate -l +100%FREE vg0 --name root
4mkfs.ext4 /dev/vg0/root

Ensuite je monte l'ensemble:

1mount /dev/vg0/root /mnt
2mount --mkdir /dev/nvme0n1p6 /mnt/boot/efi
3mount --mkdir /dev/nvme0n1p1 /mnt/boot/efiwin # Windows EFI

Et je termine avec pacstrap et les étapes classiques d'une installation Arch...


🧩 Configuration du Bootloader, de Secure Boot & et de l'image du noyau unifiée (UKI)

D'abord, nous aurons besoin de quelques outils:

Remarque: les commandes suivantes se font en mode chroot sur le futur système

1pacman -S sbctl efibootmgr edk2-shell tpm2-tss

Je copie UEFI shell vers la partition EFI de Windows, ça nous servira plus tard avec systemd-boot:

1cp /usr/share/edk2-shell/x64/Shell_Full.efi /boot/efiwin/shellx64.efi

Configuration de mkinitcpio

Je configure mkinitcpio pour qu'il crée une image de noyau unifiée (UKI), c'est une image EFI qui pourra être directement chargée depuis un shell UEFI.

Je modifie /etc/mkinitcpio.conf:

1HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt lvm2 filesystems fsck)

Remarque: attention à cette partie, il vous faudra vraiment tous ces hooks et dans le bon ordre.

Modification de /etc/kernel/cmdline (à créer s'il n'existe pas) :

1rw rd.luks.name=<UUID>=cryptlvm rd.luks.options=<UUID>=tpm2-device=auto root=/dev/vg0/root loglevel=3 quiet bgrt_disable

Remplacer <UUID> avec l'identifiant de votre partition LUKS (blkid -o list pour le récupérer).

La partie rd.luks.options indique à systemd qu'il faut utiliser tpm2 s'il est disponible, sans cela notre mot de passe serait systématiquement demandé.

Modifications dans /etc/mkinitcpio.d/linux.preset:

1# mkinitcpio preset file for the 'linux' package
2
3ALL_config="/etc/mkinitcpio.conf"
4ALL_kver="/boot/vmlinuz-linux"
5ALL_microcode="/boot/*-ucode.img"
6
7PRESETS=('default' 'fallback')
8
9#default_config="/etc/mkinitcpio.conf"
10default_image="/boot/initramfs-linux.img"
11default_uki="/boot/efi/EFI/Linux/arch-linux.efi"
12default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"
13
14#fallback_config="/etc/mkinitcpio.conf"
15fallback_image="/boot/initramfs-linux-fallback.img"
16fallback_uki="/boot/efi/EFI/Linux/arch-linux-fallback.efi"
17fallback_options="-S autodetect"

On crée ensuite le dossier EFI cible et on génère l'image noyau unifiée:

1mkdir -p /boot/efi/EFI/Linux
2mkinitcpio -p linux

🧱 Installation de systemd-boot sur la partition EFI de Windows

Maintenant que nous avons notre image noyau unifiée, installons et configurons le bootloader (systemd-boot). Je l’installe dans la partition EFI de Windows car Bitlocker peut poser problème si Windows ne démarre pas depuis un bootloader situé sur la même partition que le sien. Ce n’est pas un problème pour Linux, donc nous allons chaîner notre UKI depuis la partition EFI de Windows.

1bootctl --esp-path=/boot/efiwin install

On modifie /boot/efiwin/loader/loader.conf:

1timeout 3
2default @saved
3console-mode max

Et on crée une entrée pour Arch /boot/efiwin/loader/entries/arch.conf:

1title   Arch
2efi     /shellx64.efi
3options -nointerrupt -nomap -noversion HD0g:EFI\Linux\arch-linux.efi

HD0g correspond au disque 0, partition 7 (g = 7e lettre de l’alphabet). Vous pouvez également démarrer dans le shell UEFI et exécuter la commande map pour identifier votre partition luks.

Il n’est pas nécessaire de configurer Windows manuellement — systemd-boot le détecte automatiquement car son bootloader est situé sur la même partition.

Je crée une entrée UEFI, cela permet de démarrer directement sur systemd-boot. Si jamais cette étape ne fonctionne pas, vous pourrez manuellement sélectionner systemd-boot dans les options de démarrage de votre Bios :

1efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Systemd-boot" --loader 'EFI\systemd\systemd-bootx.efi' --unicode

C’est terminé, systemd-boot est installé et configuré. Passons maintenant au Secure Boot.


🔏 Secure Boot: Création & Enregistrement des Clés

1sbctl create-keys
2sbctl enroll-keys -m  # Permet de garder également les clés de Microsoft, ce qui est nécessaire pour Windows

On signe les executables liés à la séquence de démarrage :

1sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi
2sbctl sign -s /boot/efiwin/EFI/systemd/systemd-bootx64.efi
3sbctl sign -s /boot/efi/EFI/Linux/arch-linux.efi
4sbctl sign -s /boot/efi/EFI/Linux/arch-linux-fallback.efi
5sbctl sign -s /boot/efiwin/shellx64.efi

On vérifie ensuite que tout est bien signé :

1sbctl verify

Nous avons signé tous les éléments de la chaîne de démarrage, tout est prêt.


🧠 Activer TPM pour déverrouiller le disque chiffré

Cela permet de ne pas avoir à entrer de mot de passe pour déverrouiller la partition LUKS à chaque démarrage de Linux.

Vérifier les slots actuels :

1systemd-cryptenroll /dev/nvme0n1p7

Enroller TPM :

1systemd-cryptenroll --tpm2-device=auto /dev/nvme0n1p7 --tpm2-pcrs=7

(Facultatif) Enrôler une clé de récupération (à conserver précieusement) :

1systemd-cryptenroll /dev/nvme0n1p7 --recovery-key

Remarque : pour pouvoir enroller vos propres clés, vous devez peut-etre d'abord activer un mode "setup" dans la partie Secure Boot de votre BIOS UEFI.

Linux devrait maintenant démarrer sans demander de mot de passe, sauf si la configuration Secure Boot a été altérée. Dans ce cas, il faudra réenrôler le TPM. Vous pouvez aussi modifier les valeurs pcrs pour définir des conditions d'effacement de la clé TPM différentes, mais des conditions plus strictes vous obligerons à enroller la clé dans le TPM plus souvent.


🥳 Derniers conseils

  • Redémarrez votre PC
  • Vous devriez vois des entrées pour Windows, Arch et le shell UEFI
  • Essayez de démarrer Arch. Si ça échoue, vérifiez que vous avez indiqué le bon identifiant de disque de démarrage avec la touche 'e'. Celle-ci permet de modifier la commande de démarrage manuellement (e.g., modifiez HD0g), sinon rebootez sur votre clé USB arch pour vérifier les différentes configurations.

Si Arch démarre, vous pouvez alors tester Windows. Si Windows demande la clé Bitlocker, fournissez-la une fois, et tout devrait fonctionner normalement ensuite.

Bon dual-boot ! 🎉🐧🪟