
🔐 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 commandemap
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 ! 🎉🐧🪟