UKIFY(1) ukify UKIFY(1) BEZEICHNUNG ukify - Komponenten zu einem einzigen, vereinigten Kernelabbild fur UEFI-Systeme kombinieren UBERSICHT 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 ausgefuhrt werden kann, um einen eingebetteten Linux-Kernel zu starten. Siehe systemd-stub(7) fur Details uber den Rumpf. BEFEHLE Die folgenden Befehle werden verstanden: build Dieser Befehl erstellt ein vereinigtes Kernelabbild. Die zwei zentralen Optionen, die fur 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 zusatzliche Abschnitte in den UKI eingefugt, 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 ausfuhrbar ist, aber zusatzliche Daten enthalt, beispielsweise zusatzliche Kernelbefehlszeileneintrage. Falls uber die Optionen PCRPrivateKey=/--pcr-private-key= und PCRPublicKey=/--pcr-public-key= PCR-Signierschlussel 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 fur bestimmte Systemstartphasenpfade. Diese konnen mit der Option Phases=/--phases= angegeben werden. Falls nicht angegeben, wird die von systemd-measure(1) bereitgestellte Vorgabe verwandt. Es ist auch moglich, 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 Schlussel. Wird auf der Befehlszeile sowohl --phases= als auch --pcr-private-key= verwandt, mussen sie beide gleich haufig angegeben werden und der n-te Systemstartphasenpfad wird mit dem n-ten Schlussel signiert. Dies kann zur Erstellung verschiedener Vertrauensrichtlinien fur 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-Signaturschlussel uber die Option SecureBootPrivateKey=/--secureboot-private-key= bereitgestellt ist, wird das resultierende PE-Programm als Ganzes damit signiert. Damit wird ermoglicht, dass SecureBoot dem gesamten UKI vertraut. Siehe auch die Erlauterung der automatischen Registrierung in systemd-boot(7). Falls der Rumpf oder der Kernel einen Abschnitt >>.sbat<< enthalt, werden sie im UKI zusammengefuhrt, so dass Widerrufsaktualisierungen, die eines davon betreffen, berucksichtigt werden, wenn das UKI vom Shim geladen wird. Fur weitere Informationen zu SBAT siehe die Shim-Dokumentation[2]. genkey Dieser Befehl erstellt die Schlussel fur die PCR-Signatur und die Schlussel und Zertifikate, die fur das SecureBoot-Signieren verwandt werden. Die gleichen Konfigurationsoptionen, die bestimmen, welche Schlussel und in welchen Pfaden fur die Signatur benotigt werden, wenn build verwandt wird, bestimmen hier, welche Schlussel 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 uber 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. Fur jeden Abschnitt wird ihr Name, ihre Grosse und ihr SHA256-Hash angezeigt. Fur Textabschnitte werden die Inhalte angezeigt. Siehe auch die Beschreibung von -j/--json= und --section=. KONFIGURATIONSEINSTELLUNGEN Einstellungen konnen in Konfigurationsdateien vorkommen (die Syntax mit EineEinstellung=Wert) und auf der Befehlszeile (die Syntax mit --eine-Einstellung=Wert). Fur einige Befehlszeilenparameter ist auch eine einbuchstabige Kurzform verfugbar. 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 hohere Prioritat und uberschreibt die Konfigurationsdateieinstellungen vollstandig. Falls sich eine Einstellung anders verhalt, 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 positionsabhangigen Argumente LINUX und INITRD oder die aquivalenten 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 nutzlich, um der eigentlichen Initrd Microcode voranzustellen. Die folgenden Optionen und Einstellungen werden verstanden: Reine Befehlszeilenoptionen --config=PFAD Ladt die Konfiguration aus der angegebenen Konfigurationsdatei. Im Allgemeinen sind in der Konfigurationsdatei angegebene Einstellungen gegenuber den Einstellungen als Optionen nachrangig. In den Fallen, in denen die Befehlszeilenoption die Einstellung aus der Konfigurationsdatei nicht vollstandig ausser Kraft setzt, ist dies in der Beschreibung der entsprechenden Optionen explizit erwahnt. Hinzugefugt in Version 254. --measure, --no-measure Aktiviert oder deaktiviert einen Aufruf von systemd-measure(1), um vorberechnete PCR-Werte auszugeben. Standardmassig falsch. Hinzugefugt in Version 253. --section=NAME:TEXT|@PFAD, --section=NAME:text|binary[@PFAD] Fur alle Unterbefehle ausser inspect wird die erste Syntax verwandt. Gibt einen beliebigen zusatzlichen Abschnitt >>NAME<< an. Das Argument kann eine wortliche Zeichenkette sein oder @, gefolgt von einem Pfadnamen. Diese Option kann mehr als einmal angegeben werden. Jeder auf diese Weise angegebene Abschnitt wird (in der Reihenfolge) vor dem Abschnitt >>.linux<<, der immer der letzte ist, eingefugt. Fur 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 unverandert verwandt wird und falls der Abschnittsname mit einem Punkt beginnen sollte, er in NAME aufgenommen werden muss. Hinzugefugt in Version 253. --tools=VERZ Gibt eines oder mehrere Verzeichnisse mit Hilfswerkzeugen an. ukify wird zuerst in diesen Verzeichnissen nach Hilfswerkzeugen schauen und, falls sie dort nicht gefunden werden, sie auf die ubliche Weise aus $PATH laden. Hinzugefugt in Version 253. --output=DATEINAME Der Ausgabedateiname. Falls nicht angegeben, wird der Name des Arguments LINUX mit der Endung >>.unsigned.efi<< oder >>.signed.efi<< verwandt, abhangig davon, ob die Signatur fur SecureBoot durchgefuhrt wurde. Hinzugefugt in Version 253. --summary Gibt eine Zusammenfassung der geladenen Konfiguration aus und beendet das Programm. Dies ist nutzlich, um zu uberprufen, wie die Optionen aus der Konfigurationsdatei und der Befehlszeile kombiniert werden. Hinzugefugt in Version 254. --all Gibt (mit dem Unterbefehl inspect) alle Abschnitte aus. Hinzugefugt in Version 255. --json Erstellt (mit dem Unterbefehl inspect) JSON-Ausgabe. Hinzugefugt in Version 255. -h, --help Zeigt einen kurzen Hilfetext an und beendet das Programm. --version Zeigt eine kurze Versionszeichenkette an und beendet das Programm. Abschnitt [UKI] Linux=LINUX, --linux=LINUX Ein Pfad zu dem Kernelprogramm. Hinzugefugt in Version 254. Initrd=INITRD, --initrd=LINUX Null oder mehr Initrd-Pfade. In der Konfigurationsdatei werden Eintrage durch Leerraum getrennt. Die Initrds werden in der Reihenfolge der Angabe kombiniert, wobei die in der Konfigurationsdatei angegebenen Initrds zuerst kommen. Hinzugefugt in Version 254. Cmdline=TEXT|@PFAD, --cmdline=TEXT|@PFAD Die Kernelbefehlszeile (der Abschnitt >>.cmdline<<). Das Argument kann eine wortliche Zeichenkette sein oder >>@<<, gefolgt von einem Pfadnamen. Falls dies nicht angegeben ist, wird keine Befehlszeile eingebettet. Hinzugefugt in Version 253. OSRelease=TEXT|@PFAD, --os-release=TEXT|@PFAD Die Betriebssystem-Veroffentlichungsbeschreibung (der Abschnitt >>.osrel<<). Das Argument kann eine wortliche Zeichenkette oder >>@<<, gefolgt von einem Pfadnamen, sein. Falls dies nicht angegeben ist, wird die Datei os-release(5) vom Rechnersystem genommen. Hinzugefugt in Version 253. DeviceTree=PFAD, --devicetree=PFAD Die Devicetree-Beschreibung (der Abschnitt >>.dtb<<). Das Argument ist ein Pfad zu einer kompilierten binaren DeviceTree-Datei. Falls dies nicht angegeben ist, wird der Abschnitt nicht vorhanden sein. Hinzugefugt in Version 253. Splash=PFAD, --splash=PFAD Ein Bild, das wahrend des Systemstarts angezeigt werden soll (der Abschnitt >>.splash<<). Das Argument ist ein Pfad zu einer BMP-Datei. Falls dies nicht angegeben ist, wird der Abschnitt nicht vorhanden sein. Hinzugefugt in Version 253. PCRPKey=PFAD, --pcrpkey=PFAD Ein Pfad zu einem offentlichen Schlussel, der im Abschnitt >>.pcrpkey<< eingebettet werden soll. Falls nicht angegeben und genau ein Argument PCRPublicKey=/--pcr-public-key= vorhanden ist, wird dieser Schlussel verwandt. Andernfalls wird dieser Abschnitt nicht vorhanden sein. Hinzugefugt in Version 253. Uname=VERSION, --uname=VERSION Gibt die Kernelversion an (wie in uname -r, den Abschnitt >>.uname<<). Falls nicht angegeben, wird versucht, die Versionszeichenkette aus dem Kernelabbild auszulesen. Es wird empfohlen, sie explizit zu ubergeben, wenn sie bekannt ist, da das Auslesen auf Heuristiken basiert und nicht sehr zuverlassig ist. Falls nicht angegeben und das Auslesen fehlschlagt, wird der Abschnitt nicht vorhanden sein. Hinzugefugt in Version 253. PCRBanks=PFAD, --pcr-banks=PFAD Eine Kommata- oder Leerraum-getrennte Liste von PCR-Banken, fur die eine Richtlinie signiert werden soll. Falls nicht vorhanden, werden alle bekannten Banke verwandt (>>sha1<<, >>sha256<<, >>sha384<<, >>sha512<<). Dies wird fehlschlagen, wenn das vom System nicht unterstutzt wird. Hinzugefugt in Version 253. SecureBootSigningTool=SIGNIERER, --signtool=SIGNIERER Ob >>sbsign<< oder >>pesign<< verwandt werden soll. Abhangig von dieser Wahl werden verschiedene Parameter benotigt, um ein Abbild zu signieren. Standardmassig >>sbsign<<. Hinzugefugt in Version 254. SecureBootPrivateKey=SB_SCHLUSSEL, --secureboot-private-key=SB_SCHLUSSEL Ein Pfad zu einem privaten Schlussel, der zum Signieren des resultierenden Programms verwandt wird. Falls die Option SigningEngine=/--signing-engine= verwandt wird, kann dies auch eine Engine-spezifische Festsetzung sein. Diese Option wird von SecureBootSigningTool=sbsign/--signtool=sbsign benotigt. Hinzugefugt in Version 253. SecureBootCertificate=SB_ZERT, --secureboot-certificate=SB_ZERT Ein Pfad zu einem Zertifikat, das zum Signieren des resultierenden Programms verwandt wird. Falls die Option SigningEngine=/--signing-engine= verwandt wird, kann dies auch eine Engine-spezifische Festsetzung sein. Diese Option wird von SecureBootSigningTool=sbsign/--signtool=sbsign benotigt. Hinzugefugt in Version 253. SecureBootCertificateDir=SB_PFAD, --secureboot-certificate-dir=SB_PFAD Ein Pfad zu einem NSS-Zertifikatsdatenbankverzeichnis, das zum Signieren des resultierenden Programms verwandt wird. Wird wirksam, wenn SecureBootSigningTool=pesign/--signtool=pesign verwandt wird. Standardmassig /etc/pki/pesign. Hinzugefugt in Version 254. SecureBootCertificateName=SB_ZERTNAME, --secureboot-certificate-name=SB_ZERTNAME Der Name des NSS-Zertifikatsdatenbankeintrags, der zur Signierung des entstehenden Programms verwandt werden soll. Diese Option wird von SecureBootSigningTool=pesign/--signtool=pesign verlangt. Hinzugefugt in Version 254. SecureBootCertificateValidity=TAGE, --secureboot-certificate-validity=TAGE Gultigkeitsdauer (in Tagen) fur ein durch genkey erstelltes Zertifikat. Standardmassig 3650, d.h. 10 Jahre. Hinzugefugt in Version 254. SigningEngine=ENGINE, --signing-engine=ENGINE Eine >>Engine<< zum Signieren des resultierenden Programms. Diese Option wird derzeit unverandert an die Option --engine= von sbsign(1) weitergegeben. Hinzugefugt in Version 253. SignKernel=LOGISCH, --sign-kernel, --no-sign-kernel Setzt die Erkennung, ob das Linux-Programm selbst vor dem Einbetten in das kombinierte Abbild signiert werden soll, ausser Kraft. Falls nicht angegeben, wird es signiert, falls ein SecureBoot-Signaturschlussel uber die Option SecureBootPrivateKey=/--secureboot-private-key= bereitgestellt wird und das Programm noch nicht signiert wurde. Falls --sign-kernel wahr ist und das Programm bereits signiert wurde, wird die Signatur trotzdem angehangt. Hinzugefugt in Version 253. SBAT=TEXT|@PFAD, --sbat=TEXT|@PFAD Dem UKI oder der Erganzung zugeordnete SBAT-Metadaten. SBAT-Richtlinien sind zum Widerruf von Gruppen von UKIs oder Erganzungen mit einer einzelnen, statischen Richtlinienaktualisierung nutzlich, die keinen Platz in DBX/MOKX belegt. Falls nicht handisch angegeben, wird ein Standardmetadateneintrag bestehend aus >>uki,1,UKI,uki,1,https://www.freedesktop.org/software/systemd/man/systemd-stub.html<< verwandt, um sicherzustellen, dass es immer moglich ist, UKIs und Erganzungen zu widerrufen. Fur weitere Informationen uber SBAT siehe die Shim-Dokumentation[2]. Hinzugefugt in Version 254. [PCRSignature:NAME] Abschnitt In der Konfigurationsdatei werden diese Optionen nach Abschnitten gruppiert. Auf der Befehlszeile mussen sie in der gleichen Reihenfolge angegeben werden. Die in beiden Quellen angegebenen Abschnitte werden kombiniert. PCRPrivateKey=PFAD, --pcr-private-key=PFAD Ein privater Schlussel zum Signieren von PCR-Richtlinien. Auf der Befehlszeile darf diese Option mehr als einmal angegeben werden. Dann werden mehrere Signaturen erstellt. Hinzugefugt in Version 253. PCRPublicKey=PFAD, --pcr-public-key=PFAD Ein offentlicher Schlussel, der zum Signieren von PCR-Richtlinien verwandt wird. Auf der Befehlszeile darf diese Option mehr als einmal angegeben werden, ahnlich wie die Option --pcr-private-key=. Falls nicht vorhanden werden die offentlichen Schlussel aus den privaten Schlusseln abgeleitet. Falls auf der Befehlszeile vorhanden, muss diese Option genauso oft wie die Option --pcr-private-key= angegeben werden. Hinzugefugt in Version 253. Phases=LISTE, --phases=LISTE Eine durch Kommata oder Leerzeichen getrennte Liste von Doppelpunkt getrennten Phasenpfaden, fur die eine Richtlinie signiert werden soll. Jede Gruppe von Systemstartphasenpfaden wird mit dem entsprechenen privaten Schlussel signiert. Falls nicht vorhanden, wird die Vorgabe von systemd-measure(1) verwandt. Wenn dieses Argument auf der Befehlszeile vorhanden ist, muss es genauso oft wie die Option --pcr-private-key= vorkommen. Hinzugefugt 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://www.freedesktop.org/software/systemd/man/systemd-stub.html' \ --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 enthalt zwei aneinandergehangte Teile, early_cpio und initramfs-6.0.9-300.fc37.x86_64.img. Die in dem Abschnitt >>.pcrsig<< eingebettete Richtlinie wird fur die Initrd mit dem Schlussel pcr-private-initrd-key.pem signiert (die Phase enter-initrd) und fur das Hauptsystem (Phase leave-initrd, sysinit, ready) mit dem Schlussel pcr-private-system-key.pem. Das Linux-Programm und das resultierende kombinierte Abbild wird mit dem SecureBoot-Schlussel sb.key signiert. Beispiel 3. Mit allem Schnickschnack, uber 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 konnte beispielsweise nutzlich sein, wenn die erste Initrd Mikrocode fur die CPU enthalt und bei Anderungen der Kernelversion nicht aktualisiert werden muss, anders als die eigentliche Initrd. Beispiel 4. Kernelbefehlszeile, zusatzlicher 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 zusatzlichen Kernelbefehlszeilenparameter >>debug<< mit SBAT-Metadaten, die sich auf den Eigentumer der Erganzung beziehen, enthalt. Beispiel 5. Signierrichtlinien entscheiden und Zertifikate und Schlussel erstellen Zuerst wird eine Konfigurationsdatei erstellt, die angibt, welche Signaturen erstellt werden sollen: # cat >/etc/kernel/uki.conf < erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . systemd 255 UKIFY(1)