Wiki source code of UEFI Secure Boot
Last modified by jklein on 2025/11/20 09:18
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{aagon.floatingbox/}} | ||
| 2 | |||
| 3 | Für Systeme mit UEFI-Firmware und aktiviertem Secure Boot unterscheidet sich der PXE-Startvorgang grundlegend vom klassischen Legacy-Boot über BIOS. UEFI verwendet ein modernes Architekturmodell, das auf 64-Bit-Betrieb, modularer Erweiterbarkeit und kryptografischer Verifikation basiert. Während beim Legacy-Boot beliebiger Code ohne Integritätsprüfung geladen wird, erzwingt Secure Boot eine durchgängige Vertrauenskette, die sich vom Firmware-Starter bis hin zum Kernel erstreckt. Jede Komponente muss digital signiert sein, um ausgeführt werden zu dürfen. | ||
| 4 | |||
| 5 | Um ein System mit aktiviertem Secure Boot per PXE zu starten, wird eine von Microsoft signierte Bootdatei benötigt. Diese Datei, der sogenannte Shim-Bootloader, wird von der jeweiligen Linux-Distribution bereitgestellt und bildet die Brücke zwischen der UEFI-Firmware und dem eigentlichen Bootloader (meist GRUB). | ||
| 6 | |||
| 7 | Da der Shim-Bootloader von Microsoft signiert ist, wird er von der Firmware als vertrauenswürdig eingestuft. Innerhalb des Shim-Pakets sind wiederum Zertifikate der jeweiligen Distribution enthalten, mit denen die nachfolgenden Komponenten (wie z. B. GRUB, der Kernel und die Initramfs) überprüft werden. Entscheidend ist, dass die Zertifikatskette während des gesamten Startvorgangs unverändert bleibt, damit jede Komponente nur von einer autorisierten Quelle geladen wird. | ||
| 8 | |||
| 9 | = Ablauf des PXE-Boots im UEFI-Modus = | ||
| 10 | |||
| 11 | Der Ablauf gestaltet sich typischerweise wie folgt: | ||
| 12 | |||
| 13 | 1. **UEFI-Firmware-Initialisierung** | ||
| 14 | Die Firmware initialisiert Hardwarekomponenten und prüft, ob Secure Boot aktiv ist. Anschließend startet sie den Netzwerkstack für den PXE-Boot. | ||
| 15 | 1. **DHCP-Anfrage und Bootdatei-Zuweisung** | ||
| 16 | Der PXE-Client sendet eine DHCP-Anfrage und erhält IP-Adresse, Bootserver (TFTP/HTTP) und den Namen der zu ladenden Bootdatei, typischerweise ##bootx64.efi##. | ||
| 17 | 1. **Shim-Start (Microsoft-signiert)** | ||
| 18 | Die Firmware lädt ##bootx64.efi## (den Shim-Bootloader). Da dieser von Microsoft signiert ist, wird er als vertrauenswürdig akzeptiert. | ||
| 19 | 1. **GRUB-Start (Distribution-signiert)** | ||
| 20 | Der Shim-Bootloader lädt ##grubx64.efi## und überprüft dessen Signatur anhand der im Shim-Paket eingebetteten Zertifikate der Distribution. | ||
| 21 | 1. **Kernel- und Initramfs-Start** | ||
| 22 | GRUB lädt den Kernel (##vmlinuz##) und die Initramfs (##initrd.img##). Beide müssen signiert sein, sonst verweigert Secure Boot den Startvorgang. | ||
| 23 | 1. **Systemstart und Schlüsselprüfung** | ||
| 24 | Erst wenn alle Signaturen gültig sind, wird der Kernel ausgeführt und das Betriebssystem gebootet. | ||
| 25 | |||
| 26 | Diese Architektur stellt sicher, dass während des gesamten Bootvorgangs nur verifizierte und signierte Komponenten ausgeführt werden. | ||
| 27 | |||
| 28 | = Vorbereitung der Bootdateien = | ||
| 29 | |||
| 30 | Für den PXE-Boot unter Secure Boot benötigen Sie folgende Dateien, die von der jeweiligen Distribution bereitgestellt werden: | ||
| 31 | |||
| 32 | * ##bootx64.efi## – Shim-Bootloader (Microsoft-signiert, aus dem Paket shim-signed) | ||
| 33 | * ##grubx64.efi## – GRUB EFI-Bootloader (Distribution-signiert) | ||
| 34 | * ##vmlinuz## – Linux-Kernel (signiert) | ||
| 35 | * ##initrd.img## – Initial-RAM-Disk (signiert) | ||
| 36 | |||
| 37 | Diese Dateien werden in der Regel im Verzeichnis ##/tftpboot/## oder einem Unterordner wie ##/tftpboot/uefi/## abgelegt und über DHCP/TFTP verteilt. | ||
| 38 | |||
| 39 | Beispielhafte Struktur | ||
| 40 | |||
| 41 | {{code language="bash"}} | ||
| 42 | /tftpboot/ | ||
| 43 | ├── bootx64.efi | ||
| 44 | ├── grubx64.efi | ||
| 45 | ├── grub.cfg | ||
| 46 | ├── myDistro | ||
| 47 | ├──── vmlinuz | ||
| 48 | └──── initrd.img | ||
| 49 | {{/code}} | ||
| 50 | |||
| 51 | {{aagon.warnungsbox}} | ||
| 52 | Beachten Sie bei mehreren Distributionen, dass Shim und GRUB immer als passendes Paar verwendet werden müssen. Jede Distribution bringt ihr eigenes Zertifikatsset mit. Eine Mischung unterschiedlicher Versionen führt daher zu Signaturfehlern und Bootabbrüchen. | ||
| 53 | {{/aagon.warnungsbox}} | ||
| 54 | |||
| 55 | = Anlage der GRUB-Konfiguration = | ||
| 56 | |||
| 57 | Im Gegensatz zum Legacy-Boot verwendet Secure Boot über UEFI eine GRUB-Konfiguration anstelle der PXELINUX-Dateien. | ||
| 58 | Diese Konfiguration liegt üblicherweise in einer Datei namens ##grub.cfg##, die von ##grubx64.efi## geladen wird. | ||
| 59 | |||
| 60 | Beispielhafte Struktur des GRUB-Konfigurationsverzeichnisses | ||
| 61 | |||
| 62 | {{code language="bash"}} | ||
| 63 | /tftpboot/ | ||
| 64 | └── grub.cfg | ||
| 65 | {{/code}} | ||
| 66 | |||
| 67 | {{aagon.infobox}} | ||
| 68 | Anmerkung: Die ##grub.cfg## Datei wird von manchen GRUB-Implementierungen im folgenden Ort erwartet ##tftpboot/grub/grub.cfg## | ||
| 69 | {{/aagon.infobox}} | ||
| 70 | |||
| 71 | **Wichtige GRUB-Parameter:** | ||
| 72 | |||
| 73 | * **set timeout: **Legt den Timeout in Sekunden fest, bevor der Standard-Eintrag gestartet wird | ||
| 74 | * **menuentry: **Definiert einen Boot-Eintrag im Menü | ||
| 75 | * **linuxefi: **Lädt den Kernel (EFI-spezifischer Befehl) | ||
| 76 | * **initrdefi**: Lädt die Initramfs (EFI-spezifischer Befehl) | ||
| 77 | * **set root:** Definiert das Root-Dateisystem oder den TFTP-Pfad | ||
| 78 | |||
| 79 | = Beispielkonfiguration (Standard-Variante) = | ||
| 80 | |||
| 81 | Eine einfache GRUB-Konfigurationsdatei für PXE-Start mit Secure Boot kann wie folgt aussehen: | ||
| 82 | |||
| 83 | {{code language="ba"}} | ||
| 84 | set default=0 | ||
| 85 | set timeout=5 | ||
| 86 | set color_normal=white/black | ||
| 87 | set menu_color_highlight=black/light-gray | ||
| 88 | |||
| 89 | menuentry "Boot from local disk" { | ||
| 90 | exit | ||
| 91 | } | ||
| 92 | |||
| 93 | menuentry "Rescue System (Secure Boot)" { | ||
| 94 | linuxefi /myDistro/vmlinuz root=/dev/ram0 rw | ||
| 95 | initrdefi /myDistro/initrd.img | ||
| 96 | } | ||
| 97 | {{/code}} | ||
| 98 | |||
| 99 | Diese Konfiguration bietet zwei Menüoptionen: | ||
| 100 | |||
| 101 | 1. Start des Rescue- oder Installationssystems über Kernel und Initramfs | ||
| 102 | 1. Lokaler Bootvorgang über „exit“ (übergibt Kontrolle an Firmware) | ||
| 103 | |||
| 104 | Wenn Sie nun ausgehend von dieser Konfiguration starten, erhalten Sie die folgende Bildschirmansicht und der Boot würde nach 5 Sekunden automatisch von der lokalen Festplatte starten. | ||
| 105 | |||
| 106 | [[UEFI Boot Screen>>image:UEFI Boot_Bootscreen.png||alt="UEFI Boot Screen"]] | ||
| 107 | |||
| 108 | = Hinweis zum Secure Boot in ACMP = | ||
| 109 | |||
| 110 | Das PXE-Boot-System in ACMP unterstützt sowohl Legacy-BIOS, UEFI Boot als auch UEFI mit Secure Boot. | ||
| 111 | Bei aktiviertem Secure Boot kann die Funktionalität jedoch eingeschränkt sein. Für maximale Kompatibilität wird empfohlen, eine Distribution mit offiziell signierten Bootloadern (Shim + GRUB) zu verwenden oder Secure Boot zu deaktivieren. |

