Menu Fermer

Comment Linux démarre sur un PC UEFI : la séquence et étapes complètes

Quelles sont les étapes du démarrage d’un PC UEFI sur Linux ?
Comment fonctionne le démarrage de Linux avec le Secure Boot ?

Cet article explique le fonctionnement de GRUB dans un environnement UEFI avec le Secure Boot activé.
Vous trouverez aussi la séquence de démarrage d’un PC Linux UEFI.

Ainsi quelques explications sur les mécanismes du démarrage sécurisé (Secure Boot) d’un PC UEFI avec Linux.
Mais aussi les fonctions du chargeur de démarrage (Boot loader) GRUB dans Linux.

Comment Linux démarre sur un PC en UEFI : la séquence complète

Comprendre le fonctionnement du Secure boot sur les PC UEFI

Avant de débuter, il faut parler des PC UEFI (Unified Extensible Firmware Interface) et plus particulièrement du Secure Boot.

Le Secure Boot (démarrage sécurisé) est un mécanisme de sécurité qui vise à interdire l’exécution de code inconnu.
Il protège des rootkits et plus particulièrement des bootkits.

Pour cela, il vérifie la signature numérique des firmwares.
Si un firmware non signé ou inconnu est exécuté, le Secure Boot empêche le démarrage du PC.
Un message de violation de l’intégrité ou de sécurité s’affiche.

Secure boot violation : violation d'intégrité car une signature est invalide

Ce mécanisme fonctionne à travers des bases de données d’autorisations mais aussi de listes noires.
Enfin seul Microsoft peut signer des UEFI Loader.

L’article suivant détails tout cela :

GRUB et les firmwares UEFI dans Linux

Les firmwares UEFI shimx64 et grubx64 dans Linux

Pour démarrer en UEFI, Linux propose deux firmwares UEFI :

  • EFI/XXXX/shimx64.efi – C’est le composant SHIM qui agit comme UEFI Boot Loader. Microsoft le signe et SHIM intègre une autre clé CA spécifique à la distribution. Cette dernière est utilisée pour signer à son tour d’autres programmes (par exemple Linux, GRUB, fwupdate).
  • EFI/XXXX/grubx64.efi – c’est le Bootloader GRUB qui charge ensuite le noyau Linux (Kernel).
Les firmwares UEFI shimx64 et grubx64 dans Linux

XXXX correspond en général au nom de la distribution.
Par exemple pour Ubuntu, on a les fichiers suivants :

  • EFI/ubuntu/shimx64.efi
  • EFI/ubuntu/grubx64.efi

Ci-dessous les firmwares UEFI de Debian :

ArchitectureChemin
amd64\EFI\debian\grubx64.efi
i386\EFI\debian\grubia32.efi
arm64\EFI\debian\grubaa64.efi
armhf\EFI\debian\grubarm.efi
Nom des firmwares par architectures sur Debian

Tous ces firmwares se trouvent bien sûr dans la partition EFI qui est formatée en FAT32.

La partition EFI de Linux

SHIM : l’UEFI Loader Linux

SHIM est un projet libre multi-distribution afin de permettre à Linux de démarrer dans un environnement UEFI.
Le firmware SHIM est signé avec le CA Microsoft mais embarque à son tour son propre CA.
Ce certificat sert à son tour à signer tous les sous-composants Linux : le boot loader Grub et le kernel Linux.

La séquence de boot d'un PC UEFI sur Linux

Shim devient alors la racine de confiance pour tous les autres programmes UEFI fournis par la distribution.
Cela assure leur intégrité et aucune falsification par un malware.

Chaque distribution possède alors son propre binaire shim pour fonctionner sur les PC UEFI.

Linux est compatible UEFI et vous n’avez pas besoin de désactiver le Secure boot ou passer le BIOS en legacy pour installer Linux sur votre PC.

La séquence complète du démarrage d’un PC UEFI sur Linux

Voici maintenant la séquence complète avec toutes les étapes de démarrage de Linux.
A partir de l’étape Load Kernel, le démarrage est identique sur un PC MBR et UEFI.
La différence est en amont puisque le démarrage d’un PC MBR et UEFI diffère complètement.

Le démarrage du BIOS UEFI

Tout d’abord pour avoir une vue d’ensemble des phases de démarrage d’un PC, suivez ce tutoriel :

Le PC charge le BIOS UEFI et le matériel du PC à travers les différents phases :

  • SEC Phase : C’est la phase d’initialisation où rien n’est exécuté. Il s’agit de vérifier le matériel.
  • PEI Phase : elle prépare la plate-forme pour l’initialisation du système principal dans la phase DXE.
  • DXE Phase : Cette phase exécute des pilotes basée sur les ressources découvertes et décrites dans la phase PEI.
  • BDS : On localise le l’OS Boot Manager depuis les périphériques de démarrage (USB, Disque locaux ou réseau). La partition EFI est trouvée et le firmware shim est chargé, si sa signature numérique est valide.
le BIOS UEFI qui charge shimx64.efi sur l'entrée Ubuntu

La phase BDS plus en détails

Voici un exemple de séquence complète d’un PC Linux UEFI

  1. Microsoft signe le chargeur de démarrage de premier étage shimx64.efi avec son «Microsoft Corporation UEFI CA».
  2. Lorsque le système démarre et que le secure boot est activé, le micrologiciel vérifie que ce premier chargeur de démarrage est signé avec une clé dans la base de données. Dans ce cas, “Microsoft Corporation UEFI CA”)
  3. Puis il exécute le chargeur de démarrage GRUB grubx64.efi qui lui est signé avec la clé de la distribution. Le chargeur de démarrage du premier étage shim vérifie que le chargeur de démarrage grub2 du deuxième étage est correctement signé.

Si Grub est corrompu, c’est à ce stade que l’on peut rencontrer des erreurs.
Il faut alors réparer GRUB :

GRUB exécute le kernel Linux

Le chargeur de démarrage grub2 démarre un noyau Linux et vérifie sa signature numérique.

  • Si le noyau n’est pas signé, grub2 appellera ExitBootServices avant de démarrer le noyau non signé)
  • Sinon le noyau Linux se charge

Initialisation du kernel Linux et systemd ou init

Le noyau Linux s’initiale et monte la partition système /.
Cela peut se faire au préalable par le disque Ram initramfs.
Lorsque celle-ci est marquée comme propre (clean), le boot continue.
Sinon vous pouvez avoir une erreur qui indique d’effectuer une analyse et réparation sfck.
Dans ces là, Linux demande le mot de passe root.

Initialisation du kernel Linux et systemd ou init

Puis charge systemd ou init (selon la distribution et le système privilégié).
Enfin ce dernier charge les scripts de démarrage dans un ordre prédéfini, selon la configuration et les dépendances.

Chargement des daemons et display manager ou terminal

Linux termine de booter pour lancer les daemons et services un à un.
Ci-dessous par exemple Avahi mDNS, OpenVPN Service, NetWork Manager, etc.

Chargement des daemons et display manager ou terminal

Enfin le démarrage se termine par le chargement du Display Manager (gdm, kdm, etc) ou simplement d’un terminal si aucune environnement graphique n’est installée.

Le démarrage de Linux se conclue par le display manager ou le terminal

Exemple le display manager d’Ubuntu :

Fin du démarrage de Linux sur un PC UEFI avec le display manager

Je rappelle d’ailleurs ce tutoriel concernant les daemons Linux :