- bookworm-backports 4.24.0-2~bpo12+1
- testing 4.24.0-2
- unstable 4.25.0-1
UKIFY(1) | ukify | UKIFY(1) |
BEZEICHNUNG¶
ukify - Komponenten zu einem einzigen, vereinigten Kernelabbild für UEFI-Systeme kombinieren
ÜBERSICHT¶
/usr/lib/systemd/ukify [OPTIONEN…] build
ukify [OPTIONEN…] genkey
BESCHREIBUNG¶
Hinweis: Dieser Befehl ist derzeit experimentell. Es ist zwar geplant, dass er eine normale Komponente von Systemd wird, aber sein Verhalten und seine Schnittstellen können sich noch ändern.
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.
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.
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
--measure, --no-measure
--section=NAME:TEXT|@PFAD
--tools=VERZ
--output=DATEINAME
--summary
-h, --help
--version
Abschnitt [UKI]¶
Linux=LINUX, --linux=LINUX
Initrd=INITRD…, --initrd=LINUX
Cmdline=TEXT|@PFAD, --cmdline=TEXT|@PFAD
OSRelease=TEXT|@PFAD, --os-release=TEXT|@PFAD
DeviceTree=PFAD, --devicetree=PFAD
Splash=PFAD, --splash=PFAD
PCRPKey=PFAD, --pcrpkey=PFAD
Uname=VERSION, --uname=VERSION
PCRBanks=PFAD, --pcr-banks=PFAD
SecureBootSigningTool=SIGNIERER, --signtool=SIGNIERER
SecureBootPrivateKey=SB_SCHLÜSSEL, --secureboot-private-key=SB_SCHLÜSSEL
SecureBootCertificate=SB_ZERT, --secureboot-certificate=SB_ZERT
SecureBootCertificateDir=SB_PFAD, --secureboot-certificate-dir=SB_PFAD
SecureBootCertificateName=SB_ZERTNAME, --secureboot-certificate-name=SB_ZERTNAME
SecureBootCertificateValidity=TAGE, --secureboot-certificate-validity=TAGE
SigningEngine=ENGINE, --signing-engine=ENGINE
SignKernel=LOGISCH, --sign-kernel, --no-sign-kernel
SBAT=TEXT|@PFAD, --sbat=TEXT|@PFAD
[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
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.
Phases=LISTE, --phases=LISTE
Wenn dieses Argument auf der Befehlszeile vorhanden ist, muss es genauso oft wie die Option --pcr-private-key= vorkommen.
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
$ /usr/lib/systemd/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 $ /usr/lib/systemd/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, PE-Ergänzung
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.addon.efi
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:
# /usr/lib/systemd/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 (/usr/lib/systemd/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 würde 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 254 |