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 dem systemd-stub(7)-UEFI-Rumpf) ist, um ein UAPI.5-Vereinigtes Kernelabbild (UKI)[1] zu erstellen - ein einzelnes PE-Programm, das das System startet. Wenn das UKI ausgefuhrt wird, extrahiert der Rumpf den eingebetteten Linux-Kernel und startet ihn. Das UKI kann direkt durch die Firmware oder mittels eine Systemstartladers gestartet werden. Wird es mit Qemu[2] verwandt, kann ein UKI auch mittels >>direktem Kernel-Systemstart<< ausgefuhrt werden, schauen Sie dazu in das Beispiel weiter unten. ukify kann auch zur Erstellung anderer Typen von UKI-artigen Abbildern verwandt werden, insbesondere Erweiterungen. Schauen Sie dazu in die nachfolgende Beschreibung des Unterbefehls build. ukify kann auch Zertifikate und Schlussel fur SecureBoot und PCR-Signierung erstellen, schauen Sie dazu in die nachfolgende Beschreibung des Unterbefehls genkey. ukify kann auch detaillierte Informationen uber vereinigte Kernelabbilder ausgeben, Informationen dazu finden Sie in der nachfolgenden Beschreibung des Unterbefehls inspect. 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 Microcode=/--microcode=, Cmdline=/--cmdline=, OSRelease=/--os-release=, DeviceTree=/--devicetree=, DeviceTreeAuto=/--devicetree-auto=, HWIDs=/--hwids=,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= oder PCRCertificate=/--pcr-certificate= 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= oder PCRCertificate=/--pcr-certificate= 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 entweder SigningEngine=/--signing-engine= oder SigningProvider=/--signing-provider= angegeben wird, dann werden die Argumente mit den offentlichen Schlusseln unverandert an openssl(1) als URIs weitergegeben und die Argumente mit den offentlichen Schlusseln werden als X.509-Zertifikate geladen, so dass das Signieren mit einer OpenSSL-Engine bzw. einem -Provider erfolgen kann. 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[3]. 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 typischerweise 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=. Andere Werkzeuge konnten zum Untersuchen von UKIs nutzlich sein: llvm-objdump(1) -p und pe-inspect. 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: /etc/systemd/ukify.conf, /run/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 false. Hinzugefugt in Version 253. --policy-digest, --no-policy-digest Aktiviert oder deaktiviert einen Aufruf von systemd-measure(1), um vorberechnete PCR-TPM2-Richtlinien-Hashes auszugeben. Nutzlich zur Offline-Signierung von PCR-Richtlinien. Standardmassig false. Hinzugefugt in Version 258. --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 mit Namen 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. --join-profile=PFAD Akzeptiert einen Pfad zu einer bestehenden PE-Datei, die ein zusatzliches Profil enthalt, das dem vereinigten Kernelabbild hinzugefugt werden soll. Das Profil kann vorab mit ukify erstellt werden. Das Profil muss nicht signiert sein oder PCR-Messungen enthalten. Alle UKI-PE-Abschnitte der angegebenen PE-Datei werden in das erstellte UKI kopiert. Dies ist zum Erstellen von UKIs mit mehreren Profile nutzlich. Beachten Sie, dass dies nur die PE-Abschnitte kopiert, die durch die UKI-Spezifikation definiert sind. Andere Abschnitte, beispielsweise >>.text<< oder ahnlich, werden ignoriert. Hinzugefugt in Version 257. --sign-profile=KENNUNG Akzeptiert eine Profilkennung, fur die signierte PCR-Messungen durch ukify erstellt werden sollen. Diese Option kann zusammen mit --join-profile= beim Bau des letztendlichen vereinigten Kernelabbildes verwandt werden. Falls nicht angegeben, werden signierte PCR-Messungen fur alle Profile hinzugefugt. Hinzugefugt in Version 258. --join-pcrsig=PFAD, --pcrsig=TEXT|@PFAD --join-pcrsig= akzeptiert einen Pfad zu einer bestehenden PE-Datei, die ein vorher gebautes UKI enthalt. --pcrsig= akzeptiert einen Pfad zu einem bestehenden Pcrsig-JSON-Blob oder einen wortlichen, direkt angegebenen Blob. Sie mussen zusammen und ohne Angabe irgendwelcher anderen UKI-Abschnittparameter angegeben werden. ukify wird den Pcrsig-JSON-Blob an das UKI anhangen. Dies ist in Kombination mit --policy-digest nutzlich, um ein UKI zu erstellen und dann den TPM2-Richtlinien-Hash offline zu signieren. Hinzugefugt in Version 258. --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. 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. Falls dies explizit auf eine leere Zeichenkette gesetzt wird, entfallt der Abschnitt >>.osrel<< aus dem UKI (dies wird fur die meisten Falle nicht empfohlen und fuhrt dazu, dass das erstellte Artefakt von anderen Werkzeugen wie kernel-install(8) und bootctl(1) nicht als UKI erkannt wird). Hinzugefugt in Version 253. 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. 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. Microcode=UCODE, --microcode=UCODE Pfad zu der Initrd, die Microcode-Aktualisierungen enthalt. Falls dies nicht angegeben ist, wird der Abschnitt nicht vorhanden sein. Hinzugefugt in Version 256. 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. 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. DeviceTreeAuto=PFAD, --devicetree-auto=PFAD Null oder mehr automatisch auswahlbare DeviceTree-Dateien. In der Konfigurationsdatei werden Eintrage durch Leerraum getrennt. Jeder DeviceTree wird in einem separaten >>.dtbauto<<-Eintrag sein. Hinzugefugt in Version 257. HWIDs=PFAD, --hwids=PFAD Die Hardware-Kennung-Geratetabelle (der Abschnitt >>.hwids<<). Das Argument ist ein Pfad zu einem Verzeichnis mit JSON-HWID-Geratebeschreibungsdateien. Jede Datei muss ein einzelnes JSON-Objekt mit den Schlusseln >>name<<, >>compatible<< und >>hwids<< enthalten. Die Schlussel >>name<< und >>compatible<< mussen Zeichenkettenwerte enthalten und der Schlussel >>hwids<< muss eine Liste von Zeichenketten als Wert enthalten, wobei die Zeichenketten gultige UUIDs darstellen mussen, die CHIDs/HWIDs darstellen. Beispiel: { "type": "devicetree", "name": "Beispiel-Laptop 16 Gen 7", "compatible": "Beispiel,laptop-16-g7", "hwids": [ "5dc05bf4-01f6-4089-b464-a08c47ea9295", "3e3f8f3c-2003-46f2-811c-85554f7d5952" ] } Hier ist >>Beispiel-Laptop 16 Gen 7<< der >>name<< (Name) des Gerats (wie durch den Hersteller definiert), >>Beispiel,laptop-16-g7<< der >>compatible<< (Kompatibilitat, wie durch den Kernel definiert) und >>hwids<< (Hardware-Kennungen) ein Feld mit CHIDs/HWIDs (zum Beispiel aus der Ausgabe von fwupdtool hwids extrahiert). Falls nicht angegeben und das Verzeichnis >>/usr/lib/systemd/boot/hwids/[EFI_ARCH]/<< existiert, dann wird dieser Abschnitt automatisch aus diesem Verzeichnis befullt (geben Sie zum Deaktivieren dieses Verhaltens eine leere Zeichenkette an), andernfalls wird er nicht vorhanden sein. Es wird empfohlen, diesen Parameter anzugeben, falls automatisch auswahlbare DeviceTrees verwandt werden sollen. Hinzugefugt in Version 257. 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. SBAT=TEXT|@PFAD, --sbat=TEXT|@PFAD SBAT-Metadaten, die dem UKI oder der Erweiterung zugeordnet sind. SBAT-Richtlinien sind nutzlich, um gesamte Gruppen von UKIs oder Erweiterungen mit einer einzigen, statischen Richtlinien-Aktualisierung, die keinen Platz im DBX/MOKX belegt, zu wiederrufen. Falls nicht manuell angegeben, wird ein Standard-Metadateneintrag, der aus uki,1,UKI,uki,1,https://uapi-group.org/specifications/specs/unified_kernel_image/ fur UKIs und uki-addon,1,UKI Addon,addon,1,https://www.freedesktop.org/software/systemd/man/latest/systemd-stub.html fur Erganzungen besteht, verwandt, um sicherzustellen, dass sie immer zuruckgezogen werden konnen. Weitere Informationen zu SBAT finden Sie in der Shim-Dokumentation[3]. Hinzugefugt in Version 254. 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= oder PCRCertificate=/--pcr-certificate= vorhanden ist, wird dieser Schlussel verwandt. Andernfalls wird dieser Abschnitt nicht vorhanden sein. Hinzugefugt in Version 253. Profile=PFAD, --profile=PFAD Ein Pfad zu einem UKI-Profil, das in einem Abschnitt >>.profile<< abgelegt werden soll. Diese Option ist zur Erstellung von UKIs mit mehreren Profile nutzlich und wird typischerweise in Kombination mit --join-profile= verwandt, um das angegebene UKI mit einem zusatzlichen Profil zu erweitern. Hinzugefugt in Version 257. 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<<, >>pesign<< oder >>systemd-sbsign<< 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= oder SigningProvider=/--signing-provider= verwandt wird, kann dies auch eine Engine- oder Provider-spezifische Festsetzung sein. Diese Option wird von SecureBootSigningTool=sbsign/--signtool=sbsign und SecureBootSigningTool=systemd-sbsign/--signtool=systemd-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= oder SigningProvider=/--signing-provider= verwandt wird, kann dies auch eine Engine- oder Provider-spezifische Festsetzung sein. Diese Option wird von SecureBootSigningTool=sbsign/--signtool=sbsign und SecureBootSigningTool=systemd-sbsign/--signtool=systemd-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 OpenSSL(1)-Engine, die zum Signieren des entstehenden Programms und der PCR-Messungen verwandt werden soll, siehe openssl-engine(1). Hinzugefugt in Version 253. SigningProvider=PROVIDER, --signing-provider=PROVIDER Ein OpenSSL(1)-Provider, der zum Signieren des entstehenden Programms und der PCR-Messungen verwandt werden soll, siehe provider(7). Diese Option kann nur verwandt werden, wenn systemd-sbsign(1) als Signierwerkzeug verwandt wird. Hinzugefugt in Version 257. CertificateProvider=PROVIDER, --certificate-provider=PROVIDER Ein OpenSSL(1)-Provider, der zum Laden von Zertifikaten zum Signieren des entstehenden Programms und der PCR-Messungen verwandt werden soll, siehe provider(7). Diese Option kann nur verwandt werden, wenn systemd-sbsign(1) als Signierwerkzeug verwandt wird. Hinzugefugt in Version 257. 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 true ist und das Programm bereits signiert wurde, wird die Signatur trotzdem angehangt. Hinzugefugt in Version 253. [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. Falls --pcr-certificate= verwandt wird, kann dies nicht angegeben werden. Hinzugefugt in Version 253. PCRCertificate=PFAD, --pcr-certificate=PFAD Ein X.509-Zertifikat, das 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. Falls --pcr-public-key= verwandt wird, kann dies nicht angegeben werden. Hinzugefugt in Version 258. 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. Direkter Kernelsystemstart in eine virtuelle Maschine Bei der Verwendung von Qemu[2] mit OVMF[4] (UEFI-Firmware fur virtuelle Maschinen) kann der Schalter -kernel direkt mit einem UKI verwandt werden. Beispiel: qemu-kvm -drive if=pflash,format=qcow2,readonly=on,file=/usr/share/edk2/ovmf/OVMF_CODE_4M.qcow2 -kernel ./vmlinuz.unsigned.efi [ ] (Es konnte abhangig von der Distribution notwendig sein, den Pfad zu der Firmware-Datei anzupassen.) Normalerweise wurde ein weiteres Argument -drive verwandt werden, um ein tatsachliches Plattenabbild anzuhangen, aber dies ist nicht zwingend. Beispiel 3. Mit allem Schnickschnack $ ukify build \ --linux=/lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \ --initrd=early_cpio \ --initrd=/ein/Pfad/zur/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.meinabbild,1,UKI fur System,uki.author.meinabbild,1,https://uapi-group.org/specifications/specs/unified_kernel_image/' \ --pcr-private-key=tpm2-pcr-initrd-private-key.pem \ --pcr-public-key=tpm2-pcr-initrd-public-key.pem \ --phases='enter-initrd' \ --pcr-private-key=tpm2-pcr-private-key-system.pem \ --pcr-public-key=tpm2-pcr-public-key-system.pem \ --phases='enter-initrd:leave-initrd enter-initrd:leave-initrd:sysinit \ enter-initrd:leave-initrd:sysinit:ready' \ --pcr-banks=sha384,sha512 \ --secureboot-private-key=secureboot-private-key.pem \ --secureboot-certificate=secureboot-certificate.pem \ --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 m>>.pcrsig<< eingebettete Richtlinie wird fur die Initrd mit dem Schlussel tpm2-pcr-initrd-private-key.pem signiert (die Phase enter-initrd) und fur das Hauptsystem (Phase leave-initrd, sysinit, ready) mit dem Schlussel tpm2-pcr-private-key-system.pem. Das Linux-Programm und das resultierende kombinierte Abbild wird mit dem SecureBoot-Schlussel secureboot-private-key.pem signiert. Beispiel 4. 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=secureboot-private-key.pem SecureBootCertificate=secureboot-certificate.pem SignKernel=yes PCRBanks=sha384,sha512 [PCRSignature:initrd] PCRPrivateKey=tpm2-pcr-initrd-private-key.pem PCRPublicKey=tpm2-pcr-initrd-public-key.pem Phases=enter-initrd [PCRSignature:system] PCRPrivateKey=tpm2-pcr-private-key-system.pem PCRPublicKey=tpm2-pcr-public-key-system.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 5. Kernelbefehlszeile, PE-Erganzung ukify build \ --secureboot-private-key=secureboot-private-key.pem \ --secureboot-certificate=secureboot-certificate.pem \ --cmdline='debug' \ --sbat='sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md uki-addon.author,1,UKI-Erganzung fur 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 zusatzlichen Kernelbefehlszeilenparameter >>debug<< mit SBAT-Metadaten, die sich auf den Eigentumer der Erganzung beziehen, enthalt. Beispiel 6. Signierrichtlinien entscheiden und Zertifikate und Schlussel erstellen Zuerst wird eine Konfigurationsdatei erstellt, die angibt, welche Signaturen erstellt werden sollen: # cat >/etc/kernel/uki.conf <base.pcrs Signieren Sie dann den PCR-Hash offline und fugen ihn in den JSON-Blob ein: #!/usr/bin/python3 import base64, json, subprocess priv_key = '/home/zbyszek/src/systemd/tpm2-pcr-private.pem' base_file = 'base.pcrs' base = json.load(open(base_file)) for bank,policies in base.items(): for policy in policies: pol = base64.b16decode(policy['pol'].upper()) call = subprocess.run(['openssl', 'dgst', f'-{bank}', '-sign', priv_key], input=pol, check=True, capture_output=True) sig = base64.b64encode(call.stdout).decode() policy['sig'] = sig print(json.dumps(base)) Hangen Sie schliesslich den aktualisierten JSON-Blob an das UKI: $ ukify build \ --join-pcrsig=base.efi \ --pcrsig=@base.pcrs \ --json=short \ --output=base-signed.efi Das entstehende UKI base-signed.efi wird jetzt den signierten PCR-Hash enthalten. SIEHE AUCH systemd(1), systemd-stub(7), systemd-boot(7), systemd-measure(1), systemd-pcrphase.service(8) ANMERKUNGEN 1. UAPI.5 Vereinigtes Kernelabbild (UKI) https://uapi-group.org/specifications/specs/unified_kernel_image/ 2. Qemu https://www.qemu.org/docs/master/ 3. Shim-Dokumentation https://github.com/rhboot/shim/blob/main/SBAT.md 4. OVMF https://www.linux-kvm.org/downloads/lersek/ovmf-whitepaper-c770f8c.txt UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann 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 260.2 UKIFY(1)