- bullseye-backports 4.16.0-3~bpo11+1
SYSTEMD-STUB(7) | systemd-stub | SYSTEMD-STUB(7) |
BEZEICHNUNG¶
systemd-stub, sd-stub, linuxx64.efi.stub, linuxia32.efi.stub, linuxaa64.efi.stub - Ein einfacher UEFI-Kernel-Systemstartrumpf
ÜBERSICHT¶
/usr/lib/systemd/boot/efi/linuxx64.efi.stub
/usr/lib/systemd/boot/efi/linuxia32.efi.stub
/usr/lib/systemd/boot/efi/linuxaa64.efi.stub
ESP/.../foo.efi.extra.d/*.cred
ESP/.../foo.efi.extra.d/*.raw
ESP/loader/credentials/*.cred
BESCHREIBUNG¶
systemd-stub (gespeichert auf Platte in den architekturabhängigen Dateien linuxx64.efi.stub, linuxia32.efi.stub, linuxaa64.efi.stub) ist ein einfacher UEFI-Systemstartrumpf. Ein UEFI-Systemstartrumpf ist ein Stück Code, das an ein Linux-Kernel-Programmabbild angehängt wird und in der UEFI-Firmwareumgebung ausgeführt wird, bevor in die Linux-Kernelumgebung übergewechselt wird. Der UEFI-Systemstartrumpf stellt sicher, dass ein Linux-Kernel als reguläres UEFI-Programm ausgeführt wird. Er ist in der Lage, verschiedene vorbereitende Aktionen durchzuführen, bevor das System in die Linux-Welt umgeschaltet wird.
Der UEFI-Systemstartrumpf schaut innerhalb des UEFI-PE-Programms selbst nach verschiedenen Ressourcen für den Kernelaufruf. Dies ermöglicht die Kombination verschiedener Ressourcen innerhalb eines einzigen PE-Programmabbilds, welches dann selbst wieder über UEFI SecureBoot als ganzes signiert werden kann, und damit alle einzelnen Ressourcen auf einmal abdeckt. Insbesondere kann er folgendes enthalten:
Falls UEFI-SecureBoot aktiviert und der Abschnitt ».cmdline« in dem ausgeführten Abbild vorhanden ist, werden alle Versuche, die Kernelbefehlszeile durch Übergabe anderer Aufrufparameter an das EFI-Programm außer Kraft zu setzen, ignoriert. Um daher die Außerkraftsetzung der Kernelbefehlszeile zu erlauben, deaktivieren Sie entweder UEFI-SecureBoot oder nehmen Sie keine Kernelbefehlszeile in den PE-Abschnitt in der Kernelabbilddatei auf. Falls eine Befehlszeile über EFI-Aufrufparameter an das EFI-Programm akzeptiert wird, dann wird sie in TPM PCR 12 eingemessen (falls ein TPM vorhanden ist).
Falls in dem Abschnitt ».dtb« ein DeviceTree eingebettet ist, ersetzt er einen bestehenden DeviceTree in der entsprechenden EFI-Konfigurationstabelle. Systemd-stub wird die Firmware über das »EFI_DT_FIXUP_PROTOCOL« nach hardwarespezifischen Korrekturen für den DeviceTree befragen.
BEGLEITDATEIEN¶
Der UEFI-Systemstartrumpf systemd-stub sammelt automatisch zwei Arten von zusätzlichen Hilfs-Begleitdateien, die optional in den Ergänzungsverzeichnissen auf der gleichen Partition wie das EFI-Programm abgelegt werden, erstellt ein cpio-Initrd-Archiv daraus und übergibt sie an den Kernel. Konkret:
Diese Mechanismen können zum Parametrisieren und Erweitern vertrauenswürdiger (d.h. signierter), unveränderbarer Initrd-Abbilder auf eine recht sichere Art und Weise verwandt werden: alle in ihnen erhaltene Daten werden in TPM PCRs eingemessen. Beim Zugriff sollten sie weiter validiert werden: Im Falle der Zugangsberechtigungen durch Entschlüsselung/Authentifizierung mittels TPM, wie das über systemd-creds encrypt -T (siehe systemd-creds(1) für Details) offengelegt wird; im Falle der Systemerweiterungsabbilder mittels signierter Verity-Abbilder.
TPM2-PCR-HINWEISE¶
Beachten Sie, dass beim Aufruf eines vereinigten Kernels mittels systemd-stub die Firmware ihn als ganzes in TPM PCR 4 einmessen wird und dabei alle eingebetteten Ressourcen wie den Stub-Code selbst, den Kernelkern, die eingebettete Initrd und die Kernelbefehlszeile abdecken wird (die vollständige Liste finden Sie weiter oben).
Beachten Sie auch, dass der Linux-Kernel alle Initrds, die er empfängt, in TPM PCR 9 einmessen wird. Dies bedeutet, dass jede Art von Initrd zweimal gemessen wird: die im Kernel-Abbild eingebettete Initrd wird sowohl in PCR 4 als auch PCR 9 eingemessen; die aus den Zugangsberechtigungen synthetisierte Initrd wird sowohl in PCR 12 als auch in PCR 9 eingemessen; die aus den Systemerweiterungen synthetisierte Initrd wird sowohl in PCR 4 als auch PCR 9 eingemessen. Zusammenfassend können die Betriebssystemressourcen und die PCRs, in die sie eingemessen werden, wie folgt zusammengefasst werden:
Tabelle 1. Zusammenfassung von
Betriebssystem-Ressourcen-PCR
Betriebssystemressource | Mess-PCR |
Code von systemd-stub (der Einstiegspunkt für das vereinigte PE-Programm) | 4 |
Startbild (eingebettet in das vereinigte PE-Programm) | 4 |
Kern-Kernelcode (eingebettet in das vereinigte PE-Programm) | 4 |
Haupt-Initrd (eingebettet in das vereinigte PE-Programm) | 4 + 9 |
Standard-Kernel-Befehlszeile (eingebettet in das vereinigte PE-Programm) | 4 |
Kernel-Befehlszeile außer Kraft setzen | 12 |
Zugangsberechtigungen (synthetisierte Initrd aus Begleitdateien) | 12 + 9 |
Systemerweiterungen (synthetisierte Initrd aus Begleitdateien) | 4 + 9 |
EFI-VARIABLEN¶
Die folgenden EFI-Variablen werden unter der Lieferanten-UUID »4a67b082-0a4c-41cf-b6c7-440b29bb8c4f« für die Kommunikation zwischen dem Systemstartrumpf und dem Betriebssystem definiert, gesetzt und gelesen:
LoaderDevicePartUUID
LoaderFirmwareInfo, LoaderFirmwareType
LoaderImageIdentifier
StubInfo
Beachten Sie, dass einige der obigen Variablen auch durch das Systemstartprogramm gesetzt werden können. Der Rupmf wird sie nur setzen, falls sie nicht bereits gesetzt sind. Einige dieser Variablen werden durch die Boot-Loader-Schnittstelle[1] gesetzt.
ZUSAMMENBAU VON KERNELABBILDERN¶
Um ein UEFI-PE-Kernelabbild aus verschiedenen Komponenten wie oben beschrieben zusammenzubauen, verwenden Sie eine objcopy(1)-Befehlszeile wie folgt:
objcopy \
--add-section .osrel=os-release --change-section-vma .osrel=0x20000 \
--add-section .cmdline=cmdline.txt --change-section-vma .cmdline=0x30000 \
--add-section .dtb=devicetree.dtb --change-section-vma .dtb=0x40000 \
--add-section .splash=splash.bmp --change-section-vma .splash=0x100000 \
--add-section .linux=vmlinux --change-section-vma .linux=0x2000000 \
--add-section .initrd=initrd.cpio --change-section-vma .initrd=0x3000000 \
/usr/lib/systemd/boot/efi/linuxx64.efi.stub \
foo-unsigned.efi
Dies erstellt eine ausführbare PE-Datei foo-unsigned.efi aus den sechs einzelnen Dateien für die Betriebssystemveröffentlichungsinformationen, Kernelbefehlszeile, Systemstartbild, Kernelabbild, Haupt-Initrd und dem UEFI-Systemstartrumpf.
Um das entstehende Abbild für UEFI SecureBoot zu signieren, verwenden Sie einen sbsign(1)-Befehl wie folgt:
sbsign \
--key mykey.pem \
--cert mykey.crt \
--output foo.efi \
foo-unsigned.efi
Dies erwartet ein Paar aus einem privaten X.509-Schlüssel und Zertifikat als Parameter und signiert dann das von uns oben erstellte UEFI-PE-Programm für UEFI SecureBoot und erstellt als Ergebnis ein signiertes UEFI-PE-Programm.
SIEHE AUCH¶
systemd-boot(7), systemd.exec(5), systemd-creds(1), systemd-sysext(8), Systemladerspezifikation[2], Boot-Loader-Schnittstelle[1], objcopy(1), sbsign(1)
ANMERKUNGEN¶
- 1.
- Boot-Loader-Schnittstelle
- 2.
- Systemladerspezifikation
Ü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 251 |