BEZEICHNUNG
systemd-measure - Erwartete TPM2-PCR-Werte für gestartete vereinigte Kernelabbilder vorberechnen und signierenÜBERSICHT
/lib/systemd/systemd-measure
[OPTIONEN…]
BESCHREIBUNG
Hinweis: Dieser Befehl ist derzeit experimentell. Obwohl er wahrscheinlich eine reguläre Komponente von Systemd wird, könnte er sich im Verhalten und der Schnittstelle noch verändern. systemd-measure ist ein Werkzeug, das zum Vorabberechnen und Signieren der erwarteten TPM2-PCR-11-Werte verwandt werden kann, der beobachtet werden kann, wenn ein vereinigtes Linux-Kernel-Abbild, das auf systemd-stub(7) basiert, gestartet wird. Es akzeptiert Pfade zu der ELF-Kernelabbilddatei, der Initrd-Abbilddatei, der Devicetree-Datei, der Kernelbefehlszeile, der os-release(5)-Datei, der Systemstart-Bild-Datei und der Datei mit dem öffentlichen TPM2-PCR-PEM-Schlüssel, die zusammen das vereinigte Kernelabbild darstellen, und bestimmt die PCR-Werte, die nach dem Systemstart des Abbildes erwartet werden. Die Berechnung beginnt mit dem mit Null initialisierten PCR 11 und wird kompatibel zur Vorgehensweise von Systemd-stub beim Systemstart durchgeführt. Das Ergebnis kann optional kryptographisch signiert werden, um TPM2-Richtlinien zu erlauben, die nur entsperrt werden können, falls eine bestimmte Gruppe von Kerneln gestartet wird, für die eine solche PCR-Signatur bereitgestellt werden kann.BEFEHLE
Die folgenden Befehle werden verstanden: statusDies ist der Vorgabebefehl, falls keiner
angegeben ist. Er fragt die TPM2 PCR-Werte 11+12+13 des Systems ab und zeigt
sie an. Die Daten werden in einem ähnlichen Format wie beim
nachfolgenden Befehl calculate geschrieben und können dazu
verwandt werden, schnell die Erwartungen mit der Realität
abzugleichen.
calculate
Berechnet die erwarteten Werte, die in
PCR-Register 11 nach dem Hochfahren des vereinigten Kernelabbildes, das aus
den mit --linux=, --osrel=, --cmdline=, --initrd=,
--splash=, --dtb=, --pcrpkey= angegeben Komponenten
bestehen wird (siehe nachfolgend), gesehen werden. Nur --linux= ist
verpflichtend. (Geben Sie alternativ --current an, um die aktuellen
Werte aus PCR-Register 11 zu verwenden.)
sign
Wie bei dem Befehl calculate wird der
erwartete Wert, der nach dem Starten eines vereinigten Kernelabbildes in
TPM2-PCR-Register 11 gesehene Wert, vorberechnet. Dann wird der entstandene
Wert kryptographisch mit dem asymetrischen Schlüsselpaar (RSA), das
über --private-key= und --public-key= konfiguriert ist,
signiert. Dies schreibt ein JSON-Objekt in die Standardausgabe, das die
Signaturen für alle angegebenen PCR-Bänke enthält (siehe
nachfolgend --pcr-bank=). Dies kann zum Entsperren
verschlüsselter Zugangsberechtigungen (siehe systemd-creds(1))
oder LUKS-Datenträger (siehe systemd-cryptsetup@.service(8))
verwandt werden. Dies ermöglicht das Binden von Geheimnissen an eine
Gruppe von Kerneln, für die solche PCR-11-Signaturen bereitgestellt
werden können.
Beachten Sie, dass ein TPM2-Gerät verfügbar sein muss, damit das
Signieren stattfinden kann, obwohl das Ergebnis nicht mit einem
TPM2-Gerät oder seinen Zustand verknüpft ist.
OPTIONEN
Die folgenden Optionen werden verstanden: --linux=PFAD, --osrel=PFAD, --cmdline=PFAD, --initrd=PFAD, --splash=PFAD, --dtb=PFAD, --pcrpkey=PFADWird das mit dem Unterbefehl calculate
oder sign verwandt, konfiguriert es die Dateien, aus der die
Komponenten des vereinigten Kernelabbildes gelesen werden. Jede Option
entspricht dem gleich benannten Abschnitt in der PE-Datei des vereinigten
Kernels. Der Schalter --linux= erwartet den Pfad zu der
ELF-Kerneldatei, die der vereinigte PE-Kernel umschließen wird. Alle
Schalter außer --linux= sind optional. Jede Option darf
höchstens einmal verwandt werden.
--current
Wird das mit dem Unterbefehl calculate
oder sign verwandt, akzeptiert es die derzeit im System wirksamen
PCR-11-Werte (die typischerweise die Hashes des aktuell gestarteten Kernels
widerspiegeln sollten). Dies kann anstelle von --linux= und den
anderen, oben aufgeführten Schaltern verwandt werden.
--bank=HASH
Steuert die PCR-Bänke, für die
PCR-Werte vorabberechnet werden sollen – im Falle des Aufrufs von
calculate oder sign – oder die Bänke, die in der
Ausgabe status angezeigt werden sollen. Kann mehrfach verwandt werden,
um mehrere Bänke anzugeben. Falls nicht angegeben, ist die Vorgabe die
vier Bänke »sha1«, »sha256«,
»sha384«, »sha512«.
--private-key=PFAD, --public-key=PFAD
Diese Schalter akzeptieren Pfade auf
PEM-kodierte RSA-Schlüsseldateien, zur Verwendung mit dem Befehl
sign.
Beachten Sie die Unterschiede zwischen den Schaltern --pcrpkey= und
--public-key=. Ersterer wählt die Daten, die im PE-Abschnitt
».pcrpkey« des vereinigten Kernelabbildes aufgenommen werden
sollen, während letzterer den öffentlichen Schlüssel des
Schlüsselpaars aufnimmt, der zum Signieren des entstehenden
PCR-11-Wertes verwandt wird. Ersterer ist der Schlüssel, den das
gestartete System wahrscheinlich zum Sperren der Verschlüsselung von
Platten und Zugangsberechtigungen verwenden wird, während letzterer der
Schlüssel ist, der zum erneuten Entsperren solcher Ressourcen verwandt
wird. Daher sollte typischerweise in beiden Fällen der gleiche
PEM-Schlüssel bereitgestellt werden.
Falls der --public-key= nicht, aber --private-key= angegeben ist,
wird der öffentliche Schlüssel automatisch vom privaten
Schlüssel abgeleitet.
--tpm2-device=PFAD
Steuert das zu verwendende TPM2-Gerät.
Erwartet einen Geräteknotenpfad, der sich auf einen TPM2-Chip bezieht
(z.B. /dev/tpmrm0). Alternativ kann der besondere Wert »auto«
angegeben werden, um den Geräteknoten eines geeigneten
TPM2-Gerätes (von dem es genau einen geben darf) automatisch zu
bestimmen. Der besondere Wert »list« kann verwandt werden, um
alle geeigneten, derzeit ermittelten TPM2-Geräte
aufzuzählen.
--phase=PHASE
Steuert, für welche Systemstartphasen
der erwartete PCR-11-Wert berechnet werden soll. Dies akzeptiert eine Reihe
von Zeichenketten, getrennt durch Doppelpunkte, die die »Pfade«
zum Eintritt einer bestimmten Phase des Systemstartprozesses kodieren. Jede
der angegebenen Zeichenketten wird durch systemd-pcrphase-initrd.service und
systemd-pcrphase.service(8) in PCR 11 während verschiedener
Meilensteine des Systemstartprozesses gemessen. Dieser Schalter kann mehrfach
angegeben werden, um die PCR-Werte für mehrere Systemstartphasen auf
einmal zu berechnen. Falls nicht verwandt ist die Vorgabe
»enter-initrd«, »enter-initrd:leave-initrd«,
»enter-initrd:leave-initrd:sysinit«,
»enter-initrd:leave-initrd:sysinit:ready«, d.h. es werden die
erwarteten PCR-Werte für die Systemstartphase in die Initrd,
während des frühen Systemstarts, während des
späten Systemstarts und während der Systemlaufzeit berechnet,
aber die Phasen vor der Initrd oder beim Herunterfahren ausgeschlossen. Diese
Einstellung wird von calculate und sign berücksichtigt.
Bei der Verwendung mit letzterem ist sie besonders zur Erstellung von
PCR-Signaturen nützlich, die nur zum Entsperren von Ressourcen
während bestimmter Teile des Systemstartprozesses verwandt werden
können.
Weitere Details zu PCR-Systemstartphasen finde Sie in
systemd-pcrphase.service(8).
--json=MODUS
Zeigt die Ausgabe als JSON formatiert.
Erwartet entweder »short« (für die kürzest
mögliche Ausgabe ohne unnötigen Leerraum oder
Zeilenumbrüche), »pretty« (für eine
schönere Version der gleichen Ausgabe, mit Einzügen und
Zeilenumbrüchen) oder »off« (um die
standardmäßig aktivierte JSON-Ausgabe auszuschalten).
--no-pager
Leitet die Ausgabe nicht an ein
Textanzeigeprogramm weiter.
-h, --help
Zeigt einen kurzen Hilfetext an und beendet
das Programm.
--version
Zeigt eine kurze Versionszeichenkette an und
beendet das Programm.
BEISPIELE
Beispiel 1. Ein vereinigtes Kernelabbild erstellen und den erwarteten TPM-PCR-11-Wert berechnen# objcopy \ --add-section .linux=vmlinux --change-section-vma .linux=0x2000000 \ --add-section .osrel=os-release.txt --change-section-vma .osrel=0x20000 \ --add-section .cmdline=cmdline.txt --change-section-vma .cmdline=0x30000 \ --add-section .initrd=initrd.cpio --change-section-vma .initrd=0x3000000 \ --add-section .splash=splash.bmp --change-section-vma .splash=0x100000 \ --add-section .dtb=devicetree.dtb --change-section-vma .dtb=0x40000 \ /usr/lib/systemd/boot/efi/linuxx64.efi.stub \ foo.efi # systemd-measure calculate \ --linux=vmlinux \ --osrel=os-release.txt \ --cmdline=cmdline.txt \ --initrd=initrd.cpio \ --splash=splash.bmp \ --dtb=devicetree.dtb 11:sha1=d775a7b4482450ac77e03ee19bda90bd792d6ec7 11:sha256=bc6170f9ce28eb051ab465cd62be8cf63985276766cf9faf527ffefb66f45651 11:sha384=1cf67dff4757e61e5a73d2a21a6694d668629bbc3761747d493f7f49ad720be02fd07263e1f93061243aec599d1ee4b4 11:sha512=8e79acd3ddbbc8282e98091849c3530f996303c8ac8e87a3b2378b71c8b3a6e86d5c4f41ecea9e1517090c3e8ec0c714821032038f525f744960bcd082d937da
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out tpm2-pcr-private.pem # openssl rsa -pubout -in tpm2-pcr-private.pem -out tpm2-pcr-public.pem # systemd-measure sign \ --linux=vmlinux \ --osrel=os-release.txt \ --cmdline=cmdline.txt \ --initrd=initrd.cpio \ --splash=splash.bmp \ --dtb=devicetree.dtb \ --pcrpkey=tpm2-pcr-public.pem \ --bank=sha1 \ --bank=sha256 \ --private-key=tpm2-pcr-private.pem \ --public-key=tpm2-pcr-public.pem > tpm2-pcr-signature.json # objcopy \ --add-section .linux=vmlinux --change-section-vma .linux=0x2000000 \ --add-section .osrel=os-release.txt --change-section-vma .osrel=0x20000 \ --add-section .cmdline=cmdline.txt --change-section-vma .cmdline=0x30000 \ --add-section .initrd=initrd.cpio --change-section-vma .initrd=0x3000000 \ --add-section .splash=splash.bmp --change-section-vma .splash=0x100000 \ --add-section .dtb=devicetree.dtb --change-section-vma .dtb=0x40000 \ --add-section .pcrsig=tpm2-pcr-signature.json --change-section-vma .splash=0x80000 \ --add-section .pcrpkey=tpm2-pcr-public.pem --change-section-vma .splash=0x90000 \ /usr/lib/systemd/boot/efi/linuxx64.efi.stub \ foo.efi
# systemd-cryptenroll --tpm2-device=auto --tpm2-public-key=tpm2-pcr-public.pem --tpm2-signature=tpm2-pcr-signature.json /dev/sda5
# /lib/systemd/systemd-cryptsetup attach meindatenträger /dev/sda5 - tpm2-device=auto,tpm2-signature=/Pfad/zur/tpm2-pcr-Signatur.json
EXIT-STATUS
Bei Erfolg wird 0 zurückgegeben, anderenfalls ein Fehlercode ungleich Null.SIEHE AUCH
systemd(1), systemd-stub(7), objcopy(1), systemd-creds(1), systemd-cryptsetup@.service(8), systemd-pcrphase.service(1)ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <[email protected]> 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 Übersetzersystemd 252 |