table of contents
- bookworm 4.18.1-1
- bookworm-backports 4.24.0-2~bpo12+1
- testing 4.24.0-2
- unstable 4.25.0-1
SYSTEMD-MEASURE(1) | systemd-measure | SYSTEMD-MEASURE(1) |
BEZEICHNUNG¶
systemd-measure - Erwartete TPM2-PCR-11-Werte für gestartete vereinigte Kernelabbilder vorberechnen und signieren
ÜBERSICHT¶
/usr/lib/systemd/systemd-measure [OPTIONEN…]
BESCHREIBUNG¶
Hinweis: Dieser Befehl ist derzeit experimentell. Es ist zwar wahrscheinlich, dass er eine reguläre Komponente von Systemd wird, aber sein Verhalten und seine Schnittstellen können sich noch ä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 Kernel-Abbild (UKI)[1], 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.
Normalerweise ist es nicht sinnvoll, dieses Werkzeug beim Erstellen eines UKI direkt aufzurufen. Stattdessen sollte ukify(1) verwandt werden; es wird systemd-measure aufrufen und sich um das Einbetten der resultierenden Messungen in die UKI kümmern.
BEFEHLE¶
Die folgenden Befehle werden verstanden:
status
Hinzugefügt in Version 252.
calculate
Hinzugefügt in Version 252.
sign
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.
Hinzugefügt in Version 252.
OPTIONEN¶
Die folgenden Optionen werden verstanden:
--linux=PFAD, --osrel=PFAD, --cmdline=PFAD, --initrd=PFAD, --ucode=PFAD, --splash=PFAD, --dtb=PFAD, --uname=PFAD, --sbat=PFAD, --pcrpkey=PFAD, --profile=PFAD, --dtbauto=PFAD, --hwids=PFAD
Hinzugefügt in Version 252.
Mit den Ausnahmen --profile=, --dtbauto= und --hwids=, die in Version 257 hinzugefügt wurden.
--current
Hinzugefügt in Version 252.
--bank=HASH
Hinzugefügt in Version 252.
--private-key=PFAD, --public-key=PFAD, --certificate=PFAD
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.
--certificate= kann seit v256 zum Festlegen eines X.509-Zertifikats als Alternative zu --public-key= verwandt werden.
Hinzugefügt in Version 252.
--private-key=PFAD/URI, --private-key-source=TYP[:NAME], --certificate=PFAD/URI, --certificate-source=TYP[:NAME]
Schalter zum Signieren mit einem Hardware-Token verwandt werden. Die Option --certificate= kann auch einen Pfad oder eine URI akzeptieren, die an den OpenSSL-Bereitsteller weitergegeben wird, wie durch --certificate-source= festgelegt als ein »Typ:Name«-Tupel, wie »provider:pkcs11«. Beachten Sie, dass anders als bei --private-key-source= diese Option nur Bereitsteller und keine Engines unterstützt.
Hinzugefügt in Version 256.
--tpm2-device=PFAD
Hinzugefügt in Version 252.
--phase=PHASE
Weitere Details zu PCR-Systemstartphasen finde Sie in systemd-pcrphase.service(8).
Hinzugefügt in Version 252.
--append=PFAD
Hinzugefügt in Version 253.
--json=MODUS
--no-pager
-h, --help
--version
BEISPIELE¶
Beispiel 1. Ein vereinigtes Kernelabbild erstellen und den erwarteten TPM-PCR-11-Wert berechnen
$ ukify build \
--linux=vmlinux \
--initrd=initrd.cpio \
--os-release=@os-release.txt \
--cmdline=@cmdline.txt \
--splash=splash.bmp \
--devicetree=devicetree.dtb \
--measure \
--output=vmlinux.efi 11:sha1=d775a7b4482450ac77e03ee19bda90bd792d6ec7 11:sha256=bc6170f9ce28eb051ab465cd62be8cf63985276766cf9faf527ffefb66f45651 11:sha384=1cf67dff4757e61e5...7f49ad720be02fd07263e1f93061243aec599d1ee4b4 11:sha512=8e79acd3ddbbc8282...0c3e8ec0c714821032038f525f744960bcd082d937da
ukify(1) ruft systemd-measure auf. Die Ausgabe mit Hashes stammt von systemd-measure.
Beispiel 2. Ein asymetrisches Schlüsselpaar, ein vereinigtes Kernelabbild und eine TPM-PCR-11-Signatur dafür erstellen und die Signatur und den öffentlichen Schlüssel in das Abbild einbetten
$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out tpm2-pcr-private-key.pem ..+.+++++++++......+.........+......+.......+....+.....+.+...+.......... $ openssl rsa -pubout -in tpm2-pcr-private-key.pem -out tpm2-pcr-public-key.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-key.pem \
--bank=sha1 \
--bank=sha256 \
--private-key=tpm2-pcr-private-key.pem \
--public-key=tpm2-pcr-public-key.pem >tpm2-pcr-signature.json $ ukify build \
--linux=vmlinux \
--initrd=initrd.cpio \
--os-release=@os-release.txt \
--cmdline=@cmdline.txt \
--splash=splash.bmp \
--devicetree=devicetree.dtb \
--pcr-private-key=tpm2-pcr-private-key.pem \
--pcr-public-key=tpm2-pcr-public-key.pem \
--pcr-banks=sha1,sha256 \
--output=vmlinuz.efi
Später registrieren Sie die signierte PCR-Richtlinie bei einem LUKS-Datenträger:
# systemd-cryptenroll --tpm2-device=auto \
--tpm2-public-key=tpm2-pcr-public-key.pem \
--tpm2-signature=tpm2-pcr-signature.json \
/dev/sda5
Und dann entsperren Sie das Gerät mit der Signatur:
# systemd-cryptsetup attach \
datentrager5 /dev/sda5 - \
tpm2-device=auto,tpm2-signature=/Pfad/zur/tpm2-pcr-signature.json
Beachten Sie, dass nach dem Systemstart des vereinigten Kernelabbildes vmlinux.efi die Signatur und der öffentliche Schlüssel an Orten abgelegt werden, unter denen systemd-cryptenroll und systemd-cryptsetup danach sucht und daher diese Pfade tatsächlich nicht angegeben werden müssen.
Beispiel 3. Einbeziehen eines zweiten öffentlichen Schlüssels, der die gleichen Kernel-PCR-Messungen signiert, aber nur für die Initrd-Systemstartphase
Dieses Beispiel erweitert das vorherige, aber jetzt wird ein zweiter Signaturschlüssel einbezogen, der nur zum Signieren von PCR-Richtlinien eingeschränkt auf die Initrd-Systemstartphase verwandt wird. Damit können Wurzeldatenträger so verschlüsselt werden, dass sie nur vor dem Übergang auf das System des Rechners geöffnet werden können. Daher gibt es zwei Klassen von Geheimnissen oder Zugangsberechtigungen: eine, die während der gesamten Laufzeit geöffnet werden können und eine andere, die nur in der Initrd verwandt werden kann.
$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out tpm2-pcr-private-key.pem .+........+.+........+.......+...+...+........+....+......+..+.......... $ openssl rsa -pubout -in tpm2-pcr-private-key.pem -out tpm2-pcr-public-key.pem $ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out tpm2-pcr-private-key-initrd.pem ..+.......++........+........+......+........+....+.....+.+..+.......... $ openssl rsa -pubout -in tpm2-pcr-private-key-initrd.pem -out tpm2-pcr-public-key-initrd.pem $ ukify build \
--linux=vmlinux-1.2.3 \
--initrd=initrd.cpio \
--os-release=@os-release.txt \
--cmdline=@cmdline.txt \
--splash=splash.bmp \
--devicetree=devicetree.dtb \
--pcr-private-key=tpm2-pcr-private-key.pem \
--pcr-public-key=tpm2-pcr-public-key.pem \
--phases=enter-initrd,enter-initrd:leave-initrd,enter-initrd:leave-initrd:sysinit,enter-initrd:leave-initrd:sysinit:ready \
--pcr-banks=sha1,sha256 \
--pcr-private-key=tpm2-pcr-private-key-initrd.pem \
--pcr-public-key=tpm2-pcr-public-key-initrd.pem \
--phases=enter-initrd \
--uname=1.2.3 \
--output=vmlinux-1.2.3.efi + /usr/lib/systemd/systemd-measure sign --linux=vmlinux-1.2.3 \ --osrel=os-release.txt --cmdline=cmdline.txt --dtb=devicetree.dtb \ --splash=splash.bmp --initrd=initrd.cpio --bank=sha1 --bank=sha256 \ --private-key=tpm2-pcr-private-key.pem --public-key=tpm2-pcr-public-key.pem \ --phase=enter-initrd --phase=enter-initrd:leave-initrd \ --phase=enter-initrd:leave-initrd:sysinit \ --phase=enter-initrd:leave-initrd:sysinit:ready + /usr/lib/systemd/systemd-measure sign --linux=vmlinux-1.2.3 \ --osrel=os-release.txt --cmdline=cmdline.txt --dtb=devicetree.dtb \ --splash=splash.bmp --initrd=initrd.cpio --bank=sha1 --bank=sha256 \ --private-key=tpm2-pcr-private-key-initrd.pem \ --public-key=tpm2-pcr-public-key-initrd.pem \ --phase=enter-initrd Wrote unsigned vmlinux-1.2.3.efi
ukify(1) gibt beide Aufrufe von systemd-measure als informative Ausgabe aus (die mit »+« beginnenden Zeilen); dies ermöglicht es, zu erkennen, wie systemd-measure aufgerufen wird. Es verbindet die Ausgabe beider Aufrufe in dem Abschnitt ».pcrsig«. systemd-measure kann mittels der Option --append= dieses Zusammenführen auch selbständig durchführen.
Beachten Sie, dass in diesem Beispiel der PE-Abschnitt von ».pcrpkey« den durch die erste Option --pcr-private-key= festgelegten Schlüssel enthält, der sämtliche Systemstartphasen abdeckt. Der Abschnitt ».pcrpkey« wird in den Standardrichtlinien von systemd-cryptenroll und systemd-creds verwandt. Um die strengere, an tpm2-pcr-public-key-initrd.pem gebundene Richtlinie zu verwenden, geben Sie --tpm2-public-key= auf der Befehlszeile der Werkzeuge an.
EXIT-STATUS¶
Bei Erfolg wird 0 zurückgegeben, anderenfalls ein Fehlercode ungleich Null.
SIEHE AUCH¶
systemd(1), systemd-stub(7), ukify(1), systemd-creds(1), systemd-cryptsetup@.service(8), systemd-pcrphase.service(8)
ANMERKUNGEN¶
- 1.
- Vereinigtes Kernelabbild (UKI)
Ü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 257~rc3 |