Arch Linux & Secure Boot: Unified Kernel Image (UKI) mit systemd-ukify erstellen & signieren
Bis vor Kurzem hatte ich zum Generieren von Unified Kernel Images (UKIs) mein selbstentwickeltes Tool secbootctl verwendet. Da ich derzeit nicht die Muße habe, es weiterzuentwickeln und es durch eine der letzten systemd-Änderungen sowie nicht mehr korrekt funktioniert hat, habe ich mein System nun auf systemd-ukify umgestellt. Als Bestandteil von systemd ist somit sichergestellt, dass die generierten UKIs zukünftig immer der initial vom systemd-Projekt initierten UAPI: Bootloader Specification entsprechen (also hoffe ich zumindest :)).
In Verbindung mit pacman, dem Paketmanager von Arch Linux, wird bei jedem Kernel-, initramfs- und CPU-Microcode-Update ein UKI erstellt und mit meinem eigenen UEFI-Secure-Boot-Schlüssel signiert. Wie das genau funktioniert, erfahrt ihr in diesem Beitrag.
systemd-ukify installieren
Standardmäßig wird unter Arch Linux systemd-ukify nicht mit dem Hauptpaket systemd mit ausgeliefert. Insofern ist das Paket explizit zu installieren:
UKI erstellen & signieren
Zum Erstellen und Signieren eines Unified Kernel Images reicht der folgende Befehl:
Dieser Befehl erstellt aus dem angegebenen Kernel, initramfs und Microcode ein UKI und signiert es mit dem angegebenen Secure-Boot-Key. Das erstellte signierte UKI wird dann direkt auf der EFI-Partition abgelegt. In Verbindung mit dem Bootloader systemd-boot werden UKIs unter /efi/EFI/Linux
automatisch erkannt und bedürfen keiner extra Bootmenü-Konfiguration.
Hook für pacman
Damit ich nicht nach jedem System-Update manuell das entsprechende UKI erstellen muss, habe ich eine entsprechende Hook-Datei für pacman angelegt:
Das Command /usr/local/bin/secure-boot-update-uki
ruft dann systemd-ukify auf:
Bei Bedarf könnte man das Skript auch etwas universeller umsetzen, so dass es nicht nur für das Standard-Kernel-Paket unter Arch Linux funktioniert, sondern es dynamisch auflöst (analog wie ich das bei secbootctl hatte).
Wenn nun also ein System-Update via pacman ausgeführt wird und sich Kernel, initramfs und/oder Microcode ändern, wird automatisch durch pacman das Skript zum Erstellen des UKI aufgerufen.
Des Weiteren gibt es noch eine weitere Hook-Datei zum Aktualisieren und Signieren der system-boot-Bootloader-Dateien, aber das ist letztendlich unabhängig von der UKI-Erstellung mittels systemd-ukify.
Fazit
Mit systemd-ukify lassen sich leicht Unified Kernel Images (UKI) erstellen und mit dem eigenen Secure-Boot-Key signieren. Das ganze lässt sich prima mit pacman automatisieren, so dass man sich bei einem System-Update um nichts kümmern muss und auch nichts vergessen kann.