Ce document décrit la mise en œuvre "manuelle" de l'amorçage UEFI compatible Secure Boot au moyen du chargeur intermédiaire shim
Cette installation manuelle n'est pas nécessaire pour installer Shim avec Grub2, ce dernier intégrant tous les mécanismes permettant d'installer "automatiquement" shim : voir Grub2 - Installation - Amorçage UEFI
Smmaire
1 - Préalable
On suppose que la plate-forme est configurée en mode UEFI avec Secure Boot activé, et qu'elle dispose de la clé de confiance Microsoft utilisée pour signer les logiciels tiers, voir UEFI Secure Boot
Dans ce qui suit, on utilise la version de Shim signée par cette clé, la mise en œuvre de la version à signer par l'utilisateur étant beaucoup plus complexe
Préparer le média sur lequel sera installé shim, comme pour un amorçage UEFI : partitionnement gpt et partition ESP
2 - Principe
Le lancement d'une application s'effectue en deux étapes, amorçage de shim par la plate-forme puis lancement de l'application par shim
2.1 - Amorçage de shim
L'installation et l'amorçage de shim s'effectuent comme pour une application UEFI en mode non Secure Boot : installer la version signée du programme Shim dans un répertoire de l'ESP (EFI System Partition) du disque d'amorçage
soit comme programme par défaut, sous le nom de bootx64.efi dans le répertoire /EFI/BOOT/
soit sous un nom (généralement shimx64.efi) et dans un répertoire quelconque et définir l'entrée correspondante dans les variables d'amorçage en Nvram
Installer également dans le même répertoire
sous le nom de mmx64.efi, la version signée du programme mmx pour la prise en charge de la gestion des clés utilisateurs MOK (voir Shim - Gestionnaire de clés MOK mmx)
sous le nom de fbx64.efi, la version signée du programme fbx pour la recherche automatique d'une application à lancer (Voir plus loin)
2.2 - Lancement de l'application
Une fois amorçé, Shim cherche à lancer un programme efi nécessairement nommé grubx64.efi, situé dans le même répertoire. Ce programme peut-être un programme efi quelconque (pas nécessairement le chargeur GRUB). Le programme doit être signé
soit par rapport à la base de donnée des clés de confiance du micrologiciel (qui contient les certificats initiaux ou ceux créés par l'utilisateur)
soit par rapport à un certificat inclus dans shim, au moment de la compilation, (dans le cas de la distribution Debian, shim contient une clé signée par l'organisation Debian Secure Boot)
ni son binaire, ni sa signature ne doivent être blacklistés
Divers : Si le mode Secure Boot n'est pas activé sur la plate-forme, le contrôle de signature ne sera pas effectué par shim et des programmes signés ou non signés pourront être lancés
3 - Installation
3.1 - Récupération de shim, mmx, fbx
shim est fourni par le paquet shim-signed sous le nom de shimx64.efi.signed
$ sudo aptitude install shim-signed
mmx et fbx sont fournis par le paquet shim-helpers-amd64-signed, sous les noms de mmx64.efi.signed et fbx64.efi.signed
$ sudo aptitude install shim-helpers-amd64-signed
Après installation, les programmes sont disponibles dans /usr/lib/shim/
Dans ce qui suit, on suppose l'ESP montée en /boot/efi et on effectue l'installation de shim comme programme par défaut, sous le nom de boox64.efi dans le répertoire EFI/BOOT
$ sudo mkdir -p /boot/efi/EFI/BOOT
Recopier le programme shimx64.efi.signed dans le répertoire créé dans l'ESP en le renommant bootx64.efi
fbx64 est un utilitaire dont l'objectif est d'effectuer une recherche automatique de programme
4.1 - Installation de fbx
Sur une plate-forme avec Secure Boot non activé, fbx peut-être lancé directement (sous son nom ou sous le nom de fichier à lancer par défaut BOOT/bootx64.efi)
Sur une plate-forme avec Secure Boot activé, la version de fbxpar signée par la clé compilée dans Shim doit-être installée et lancée par Shim
soit directement sous le nom de grubx64.efi
soit sous le nom de fbx64.efi et le lancement aura lieu par défaut si les fichiers grubx64.efi et mmx64.efi sont absents ou échouent
Dans l'exemple ci-dessous fbx est installé pour un amorçage automatique dans le répertoire Boot
bootx64.efi est en fait shimx64.efi.signed
grubx64.efi est en fait fbx64.efi.signed
$ sudo tree /boot/efi/EFI/BOOT /boot/efi/EFI/BOOT ├── bootx64.efi └── grubx64.efi
4.2 - Installation de BOOTX64.CSV
Lorsqu'il est lancé, fbx explore les sous-répertoires de la partition à la recherche de fichiers de nom BOOTX64.CSV
Le fichier doit
être au format UCS-2 ou UTF-16
et contenir une ligne de texte, composée de quatre champs séparés par des virgules, sur le modèle
<application_efi> est le nom du fichier à lancer dans le répertoire (sous un nom ou un autre, doit-être shim dans le cas d'une plate-forme avec Secure Boot activé)
<nom_entrée> est le nom d'affichage à utiliser par efibootmgr
<options> ....
<description> champ optionnel à disposition de l'utilisateur
Si un tel fichier est rencontré, fbx
crée une entrée dans la Nvram à partir des informations du fichier
puis la première entrée rencontrée est lancée
Exemple de création d'un fichier BOOTX64.CSV au format USC-2
dans le répertoire courant
$ echo "shimx64.efi,Tetris,,Ceci est l'entrée d'amorçage de Tetris signé" |iconv -t UCS-2 >BOOTX64.CSV
dans le répertoire /boot/efi/EFI/Tetris
$ echo "shimx64.efi,Tetris,,Ceci est l'entrée d'amorçage de Tetris signé" |iconv -t UCS-2 |sudo tee /boot/efi/EFI/debian_new/BOOTX64.CSV
Dans l'exemple ci-dessous
Le fichier BOOTX64.CSV a été recopié dans le répertoire Tetris qui contient
Lancer l'amorçage sur le programme bootx64.efi situé dans BOOT, qui lance à son tour le programme fbx64.efi sous le nom de grubx64.efi
Lorsqu'il rencontre le programme BOOTX64.CSV dans le répertoire Tetris, fbx crée l'entrée correspondante dans la Nvram et lance cette entrée si c'est la première entrée rencontrée
Après redémarrage sous debian, on peut vérifier la création dans la Nvram de l'entrée Tetris