Sicherungsprogramm für Unified Kernel Images

16.04.2023

Sicherungsprogramm für Unified Kernel Images

Um das sichere Starten von Linux über Secure Boot zu erleichtern, kann der Linux-Kernel mit einer initrd und der zugehörigen Kommandozeile zu einem Unified Kernel Image kombiniert werden. Dieses kombinierte Image enthält alle Informationen und Binärdateien, die zum Booten des Systems benötigt werden. Es soll als Ganzes signiert werden, um den Bootvorgang des Kernels zu vermessen und das System gegen einen evil maid attack zu schützen.

Das Arch Linux Wiki beschreibt das Erstellen und die Nutzung eines einheitlichen Kernel-Images im Detail.

Einige werden vielleicht sagen: “Aber ich möchte kein Secure Boot verwenden. Das ist böse und erlaubt es den Technikkonzernen meine Kontrolle über meine eigene Hardware einzuschränken”.

Aber selbst wenn Sie Secure Boot nicht verwenden wollen, hat ein Unified Kernel Image (UKI) einen interessanten Vorteil:

Ein bootfähiges Backup

Das UKI enthält alle Teile, die zum Booten des Systems notwendig sind. Der Kernel, die initrd und die Kernel-Kommandozeile sind alle in einer Datei zusammengefasst. Wenn wir diese Datei sichern, haben wir ein komplettes Backup der Systemkonfiguration. Wird diese Sicherungskopie in der ESP-Partition1 abgelegt, lässt sie sich einfach zum Boot-Menü hinzufügen. Wenn etwas mit dem aktuellen Kernel-Image oder dessen Konfiguration schiefläuft, kann man im Boot-Menü einfach die Sicherungskopie auswählen und die vorhergehende Kernel-Konfiguration starten.

Nehmen wir an, wir haben ein Werkzeug, das eine Sicherungskopie des UKI einige Zeit nach dem Booten des Systems erstellt. Fünf Minuten nach dem Start wäre ein guter Zeitpunkt. Wenn das System fünf Minuten lang gelaufen ist, sollte es stabil genug sein, um einen Schnappschuss des aktuellen Kernels, der initrd und der Befehlszeile zu erstellen.

Wenn wir nun die Kernel-Befehlszeile oder die initrd ändern und ein nicht mehr bootfähiges System erzeugen, wählen wir einfach die Sicherungskopie aus dem Boot-Menü und haben wieder eine funktionierende Konfiguration. Das Gleiche gilt, wenn ein Kernel-Update unser System beschädigt. Wählen Sie einfach die Sicherungskopie der UKI und das System ist wieder bootfähig.

Genaus das ist es, was ukibak tut.

Wie ukibak funktioniert

Wird ukibak gestartet, führt es folgende Schritte aus:

  1. Überprüfen, ob der aktuell gebootete Kernel nicht bereits die Sicherungskopie ist.
  2. Prüfen, ob das aktuell gebootete Kernel-Image tatsächlich ein UKI ist und ob es zumindest den Kernel, eine initrd und die Kernel-Kommandozeile enthält. Dies stellt sicher, dass keine unbrauchbare Sicherungskopie erstellen wird.
  3. Überprüfen, dass das aktuell gebootete Kernel-Image seit dem letzten Neustart nicht verändert wurde. Dies geschieht, um sicherzustellen, dass das Image zumindest einmal erfolgreich gebootet hat, bevor es kopiert wird.
  4. Prüfen, ob sich der aktuell gebootete Kernel von der Sicherungskopie unterscheidet. Dies stellt sicher, dass ukibak keine unnötigen Kopiervorgänge durchführt. Dies wäre langsam und eine eMMC oder SD-Karte würde die häufigen Schreibvorgänge auf die Dauer übel nehmen. Diese Prüfung benötigt wenig Zeit, da nur der Header der UKI geprüft wird. Er enthält genug Informationen, um zu entscheiden, ob die UKI aktualisiert wurde. 2

Installation und weitere Informationen

Alle weiteren Informationen zu ukibak. Wie man es installiert, die Kommandozeilenparameter sowie die aktuelle Version sind auf GitHub veröffentlicht (in englischer Sprache).


  1. EFI-Systempartition ↩︎

  2. Dieser Schritt macht den ersten Schritt eigentlich überflüssig. Wenn die Sicherungskopie gebootet wurde, ist das aktuelle UKI natürlich immer identisch mit der Sicherungskopie. ↩︎