UKIFY(1) | ukify | UKIFY(1) |
BEZEICHNUNG
ukify - Komponenten zu einem einzigen, vereinigten Kernelabbild für UEFI-Systeme kombinieren
ÜBERSICHT
ukify [OPTIONEN…] build
ukify [OPTIONEN…] genkey
ukify [OPTIONEN…] inspect DATEI…
BESCHREIBUNG
ukify ist ein Werkzeug, dessen Hauptzweck die Kombination von Komponenten (normalerweise einem Kernel, einer Initrd und einem UEFI-Startrumpf) ist, um ein Vereinigtes Kernelabbild (UKI)[1] zu erstellen – ein PE-Programm, das durch die Firmware ausgeführt werden kann, um einen eingebetteten Linux-Kernel zu starten. Siehe systemd-stub(7) für Details über den Rumpf.
BEFEHLE
Die folgenden Befehle werden verstanden:
build
Dieser Befehl erstellt ein vereinigtes Kernelabbild. Die zwei zentralen Optionen, die für den Unterbefehl build angegeben werden sollten, sind Linux=/--linux= und Initrd=/--initrd=. Initrd= akzeptiert mehrere, durch Leerraum getrennte Pfade und --initrd= kann mehrfach angegeben werden.
Es werden zusätzliche Abschnitte in den UKI eingefügt, entweder automatisch oder nur falls eine bestimmte Option bereitgestellt wird. Siehe die nachfolgende Besprechung von Cmdline=/--cmdline=, OSRelease=/--os-release=, DeviceTree=/--devicetree=, Splash=/--splash=, PCRPKey=/--pcrpkey=, Uname=/--uname=, SBAT=/--sbat= und --section=.
ukify kann auch zum Zusammenbau eines PE-Programmabbilds verwandt werden, das nicht ausführbar ist, aber zusätzliche Daten enthält, beispielsweise zusätzliche Kernelbefehlszeileneinträge.
Falls über die Optionen PCRPrivateKey=/--pcr-private-key= und PCRPublicKey=/--pcr-public-key= PCR-Signierschlüssel bereitgestellt werden, werden PCR-Werte, die nach dem Systemstart mit dem angegebenen Kernel, der Initrd und anderen Abschnitten vorkommen, berechnet, signiert und in das UKI eingebettet. Diese Berechnung und Signatur erfolgt mit systemd-measure(1).
Die Berechnung von PCR-Werten erfolgt für bestimmte Systemstartphasenpfade. Diese können mit der Option Phases=/--phases= angegeben werden. Falls nicht angegeben, wird die von systemd-measure(1) bereitgestellte Vorgabe verwandt. Es ist auch möglich, die Argumente PCRPrivateKey=/--pcr-private-key=, PCRPublicKey=/--pcr-public-key= und Phases=/--phases= mehr als einmal anzugeben. Die Signaturen erfolgen dann mit jedem der angegebenen Schlüssel. Wird auf der Befehlszeile sowohl --phases= als auch --pcr-private-key= verwandt, müssen sie beide gleich häufig angegeben werden und der n-te Systemstartphasenpfad wird mit dem n-ten Schlüssel signiert. Dies kann zur Erstellung verschiedener Vertrauensrichtlinien für die verschiedenen Phasen des Systemstarts verwandt werden. In der Konfigurationsdatei werden PCRPrivateKey=, PCRPublicKey= und Phases= in verschiedene Abschnitte gruppiert, die getrennte Systemstartphasen beschreiben.
Falls ein SecureBoot-Signaturschlüssel über die Option SecureBootPrivateKey=/--secureboot-private-key= bereitgestellt ist, wird das resultierende PE-Programm als Ganzes damit signiert. Damit wird ermöglicht, dass SecureBoot dem gesamten UKI vertraut. Siehe auch die Erläuterung der automatischen Registrierung in systemd-boot(7).
Falls der Rumpf oder der Kernel einen Abschnitt ».sbat« enthält, werden sie im UKI zusammengeführt, so dass Widerrufsaktualisierungen, die eines davon betreffen, berücksichtigt werden, wenn das UKI vom Shim geladen wird. Für weitere Informationen zu SBAT siehe die Shim-Dokumentation[2].
genkey
Dieser Befehl erstellt die Schlüssel für die PCR-Signatur und die Schlüssel und Zertifikate, die für das SecureBoot-Signieren verwandt werden. Die gleichen Konfigurationsoptionen, die bestimmen, welche Schlüssel und in welchen Pfaden für die Signatur benötigt werden, wenn build verwandt wird, bestimmen hier, welche Schlüssel erstellt werden. Siehe die nachfolgende Diskussion von PCRPrivateKey=/--pcr-private-key=, PCRPublicKey=/--pcr-public-key= und SecureBootPrivateKey=/--secureboot-private-key=.
Die Ausgabedatei darf nicht existieren.
inspect
Zeigt Informationen über die Abschnitte in dem oder den angegebene(n) Programme(n). Falls --all angegeben ist, werden alle Abschnitte angezeigt. Falls andernfalls die Option --section= mindestens einmal angegeben ist, werden nur diese Abschnitte angezeigt. Andernfalls werden nur gut bekannte Abschnitte angezeigt, die typischwerweise in eine UKI eingebunden werden, angezeigt. Für jeden Abschnitt wird ihr Name, ihre Größe und ihr SHA256-Hash angezeigt. Für Textabschnitte werden die Inhalte angezeigt.
Siehe auch die Beschreibung von -j/--json= und --section=.
KONFIGURATIONSEINSTELLUNGEN
Einstellungen können in Konfigurationsdateien vorkommen (die Syntax mit EineEinstellung=Wert) und auf der Befehlszeile (die Syntax mit --eine-Einstellung=Wert). Für einige Befehlszeilenparameter ist auch eine einbuchstabige Kurzform verfügbar. In den Konfigurationsdateien muss die Einstellung in dem geeigneten Abschnitt sein, daher sind die Beschreibungen nachfolgend nach Abschnitten gruppiert. Wenn die gleiche Einstellung in der Konfigurationsdatei und auf der Befehlszeile vorkommt, hat im Allgemeinen die Befehlszeileneinstellung die höhere Priorität und überschreibt die Konfigurationsdateieinstellungen vollständig. Falls sich eine Einstellung anders verhält, ist dies nachfolgend beschrieben.
Falls keine Konfigurationsoption mit der Option --config=PFAD bereitgestellt wird, wird ukify versuchen, nach einer Standardkonfigurationsdatei in den folgenden Pfaden in dieser Reihenfolge zu suchen: /run/systemd/ukify.conf, /etc/systemd/ukify.conf, /usr/local/lib/systemd/ukify.conf und /usr/lib/systemd/ukify.conf und dann die erste gefundene laden. ukify wird normal fortfahren, falls keine Konfigurationsdatei angegeben und keine in der Vorgabe gefunden wurde.
Die positionsabhängigen Argumente LINUX und INITRD oder die äquivalenten Einstellungen Linux= und Initrd= sind optional. Falls mehr als ein Initrd angegeben ist, werden sie alle in einen einzigen PE-Abschnitt kombiniert. Dies ist zum Beispiel nützlich, um der eigentlichen Initrd Microcode voranzustellen.
Die folgenden Optionen und Einstellungen werden verstanden:
Reine Befehlszeilenoptionen
--config=PFAD
Hinzugefügt in Version 254.
--measure, --no-measure
Hinzugefügt in Version 253.
--section=NAME:TEXT|@PFAD, --section=NAME:text|binary[@PFAD]
Für den Unterbefehl inspect wird die zweite Syntax verwandt. Der Abschnitt NAME wird (falls gefunden) untersucht. Falls das zweite Argument »text« ist, dann wird der Inhalt angezeigt. Falls das dritte Argument angegeben ist, werden die Inhalte in die Datei PFAD gespeichert.
Beachten Sie, dass der Name unverändert verwandt wird und falls der Abschnittsname mit einem Punkt beginnen sollte, er in NAME aufgenommen werden muss.
Hinzugefügt in Version 253.
--tools=VERZ
Hinzugefügt in Version 253.
--output=DATEINAME
Hinzugefügt in Version 253.
--summary
Hinzugefügt in Version 254.
--all
Hinzugefügt in Version 255.
--json
Hinzugefügt in Version 255.
-h, --help
--version
Abschnitt [UKI]
Linux=LINUX, --linux=LINUX
Hinzugefügt in Version 254.
Initrd=INITRD…, --initrd=LINUX
Hinzugefügt in Version 254.
Cmdline=TEXT|@PFAD, --cmdline=TEXT|@PFAD
Hinzugefügt in Version 253.
OSRelease=TEXT|@PFAD, --os-release=TEXT|@PFAD
Hinzugefügt in Version 253.
DeviceTree=PFAD, --devicetree=PFAD
Hinzugefügt in Version 253.
Splash=PFAD, --splash=PFAD
Hinzugefügt in Version 253.
PCRPKey=PFAD, --pcrpkey=PFAD
Hinzugefügt in Version 253.
Uname=VERSION, --uname=VERSION
Hinzugefügt in Version 253.
PCRBanks=PFAD, --pcr-banks=PFAD
Hinzugefügt in Version 253.
SecureBootSigningTool=SIGNIERER, --signtool=SIGNIERER
Hinzugefügt in Version 254.
SecureBootPrivateKey=SB_SCHLÜSSEL, --secureboot-private-key=SB_SCHLÜSSEL
Hinzugefügt in Version 253.
SecureBootCertificate=SB_ZERT, --secureboot-certificate=SB_ZERT
Hinzugefügt in Version 253.
SecureBootCertificateDir=SB_PFAD, --secureboot-certificate-dir=SB_PFAD
Hinzugefügt in Version 254.
SecureBootCertificateName=SB_ZERTNAME, --secureboot-certificate-name=SB_ZERTNAME
Hinzugefügt in Version 254.
SecureBootCertificateValidity=TAGE, --secureboot-certificate-validity=TAGE
Hinzugefügt in Version 254.
SigningEngine=ENGINE, --signing-engine=ENGINE
Hinzugefügt in Version 253.
SignKernel=LOGISCH, --sign-kernel, --no-sign-kernel
Hinzugefügt in Version 253.
SBAT=TEXT|@PFAD, --sbat=TEXT|@PFAD
Hinzugefügt in Version 254.
[PCRSignature:NAME] Abschnitt
In der Konfigurationsdatei werden diese Optionen nach Abschnitten gruppiert. Auf der Befehlszeile müssen sie in der gleichen Reihenfolge angegeben werden. Die in beiden Quellen angegebenen Abschnitte werden kombiniert.
PCRPrivateKey=PFAD, --pcr-private-key=PFAD
Hinzugefügt in Version 253.
PCRPublicKey=PFAD, --pcr-public-key=PFAD
Auf der Befehlszeile darf diese Option mehr als einmal angegeben werden, ähnlich wie die Option --pcr-private-key=. Falls nicht vorhanden werden die öffentlichen Schlüssel aus den privaten Schlüsseln abgeleitet. Falls auf der Befehlszeile vorhanden, muss diese Option genauso oft wie die Option --pcr-private-key= angegeben werden.
Hinzugefügt in Version 253.
Phases=LISTE, --phases=LISTE
Wenn dieses Argument auf der Befehlszeile vorhanden ist, muss es genauso oft wie die Option --pcr-private-key= vorkommen.
Hinzugefügt in Version 253.
BEISPIELE
Beispiel 1. Minimaler Aufruf
$ ukify build \ --linux=/lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \ --initrd=/ein/Pfad/initramfs-6.0.9-300.fc37.x86_64.img \ --cmdline='quiet rw'
Dies erstellt ein unsigniertes UKI ./vmlinuz.unsigned.efi.
Beispiel 2. Mit allem Schnickschnack
$ ukify build \ --linux=/lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \ --initrd=early_cpio \ --initrd=/ein/Pfad/initramfs-6.0.9-300.fc37.x86_64.img \ --sbat='sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md uki.author.myimage,1,UKI for System,uki.author.myimage,1,https://uapi-group.org/specifications/specs/unified_kernel_image/' \ --pcr-private-key=pcr-private-initrd-key.pem \ --pcr-public-key=pcr-public-initrd-key.pem \ --phases='enter-initrd' \ --pcr-private-key=pcr-private-system-key.pem \ --pcr-public-key=pcr-public-system-key.pem \ --phases='enter-initrd:leave-initrd enter-initrd:leave-initrd:sysinit \ enter-initrd:leave-initrd:sysinit:ready' \ --pcr-banks=sha384,sha512 \ --secureboot-private-key=sb.key \ --secureboot-certificate=sb.cert \ --sign-kernel \ --cmdline='quiet rw rhgb'
Dies erstellt ein signiertes UKI ./vmlinuz.signed.efi. Der Initrd-Abschnitt enthält zwei aneinandergehängte Teile, early_cpio und initramfs-6.0.9-300.fc37.x86_64.img. Die in dem Abschnitt ».pcrsig« eingebettete Richtlinie wird für die Initrd mit dem Schlüssel pcr-private-initrd-key.pem signiert (die Phase enter-initrd) und für das Hauptsystem (Phase leave-initrd, sysinit, ready) mit dem Schlüssel pcr-private-system-key.pem. Das Linux-Programm und das resultierende kombinierte Abbild wird mit dem SecureBoot-Schlüssel sb.key signiert.
Beispiel 3. Mit allem Schnickschnack, über eine Konfigurationsdatei
Dies ist das gleiche wie das vorherige Beispiel, diesmal wird die Konfiguration aber in einer Datei gespeichert:
$ cat ukify.conf [UKI] Initrd=early_cpio Cmdline=quiet rw rhgb SecureBootPrivateKey=sb.key SecureBootCertificate=sb.cert SignKernel=yes PCRBanks=sha384,sha512 [PCRSignature:initrd] PCRPrivateKey=pcr-private-initrd-key.pem PCRPublicKey=pcr-public-initrd-key.pem Phases=enter-initrd [PCRSignature:system] PCRPrivateKey=pcr-private-system-key.pem PCRPublicKey=pcr-public-system-key.pem Phases=enter-initrd:leave-initrd enter-initrd:leave-initrd:sysinit enter-initrd:leave-initrd:sysinit:ready $ ukify -c ukify.conf build \ --linux=/lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \ --initrd=/ein/Pfad/initramfs-6.0.9-300.fc37.x86_64.img
Eine »initrd« (early_cpio) wird in der Konfigurationsdatei angegeben und die andere Initrd (initramfs-6.0.9-300.fc37.x86_64.img) wird auf der Befehlszeile angegeben. Dies könnte beispielsweise nützlich sein, wenn die erste Initrd Mikrocode für die CPU enthält und bei Änderungen der Kernelversion nicht aktualisiert werden muss, anders als die eigentliche Initrd.
Beispiel 4. Kernelbefehlszeile, zusätzlicher PE
ukify build \ --secureboot-private-key=sb.key \ --secureboot-certificate=sb.cert \ --cmdline='debug' \ --sbat='sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md uki-addon.author,1,UKI Addon for System,uki-addon.author,1,https://www.freedesktop.org/software/systemd/man/systemd-stub.html' --output=debug.cmdline
Dies erstellt ein signiertes PE-Programm, das den zusätzlichen Kernelbefehlszeilenparameter »debug« mit SBAT-Metadaten, die sich auf den Eigentümer der Ergänzung beziehen, enthält.
Beispiel 5. Signierrichtlinien entscheiden und Zertifikate und Schlüssel erstellen
Zuerst wird eine Konfigurationsdatei erstellt, die angibt, welche Signaturen erstellt werden sollen:
# cat >/etc/kernel/uki.conf <<EOF [UKI] SecureBootPrivateKey=/etc/kernel/secure-boot.key.pem SecureBootCertificate=/etc/kernel/secure-boot.cert.pem [PCRSignature:initrd] Phases=enter-initrd PCRPrivateKey=/etc/kernel/pcr-initrd.key.pem PCRPublicKey=/etc/kernel/pcr-initrd.pub.pem [PCRSignature:system] Phases=enter-initrd:leave-initrd enter-initrd:leave-initrd:sysinit enter-initrd:leave-initrd:sysinit:ready PCRPrivateKey=/etc/kernel/pcr-system.key.pem PCRPublicKey=/etc/kernel/pcr-system.pub.pem EOF
Als nächstes können die Zertifikate und Schlüssel erstellt werden:
# ukify genkey --config=/etc/kernel/uki.conf Writing SecureBoot private key to /etc/kernel/secure-boot.key.pem Writing SecureBoot certificate to /etc/kernel/secure-boot.cert.pem Writing private key for PCR signing to /etc/kernel/pcr-initrd.key.pem Writing public key for PCR signing to /etc/kernel/pcr-initrd.pub.pem Writing private key for PCR signing to /etc/kernel/pcr-system.key.pem Writing public key for PCR signing to /etc/kernel/pcr-system.pub.pem
(Beide Aktionen müssen als Root durchgeführt werden, um Schreibzugriff auf /etc/kernel/ zu erlauben.)
Nachfolgende Aufrufe, die die Konfigurationsdatei (ukify build --config=/etc/kernel/uki.conf) verwenden, werden diese Zertifikats- und Schlüsseldateien verwenden. Beachten Sie, dass kernel-install(8)-Erweiterung 60-ukify.install standardmäßig /etc/kernel/uki.conf verwendet. Daher werden nach der Erstellung dieser Datei bei der Installation von Kerneln, die mittels kernel-install einen UKI auf der lokalen Maschine erstellen, die Signatur mittels dieser Konfiguration erfolgen.
SIEHE AUCH
systemd(1), systemd-stub(7), systemd-boot(7), systemd-measure(1), systemd-pcrphase.service(8)
ANMERKUNGEN
- 1.
- Vereinigtes Kernelabbild (UKI)
- 2.
- Shim-Dokumentation
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.
systemd 255 |