SYSTEMD-MEASURE(1) systemd-measure SYSTEMD-MEASURE(1) BEZEICHNUNG systemd-measure - Erwartete TPM2-PCR-11-Werte fur gestartete vereinigte Kernelabbilder vorberechnen und signieren UBERSICHT /usr/lib/systemd/systemd-measure [OPTIONEN] BESCHREIBUNG Hinweis: Dieser Befehl ist derzeit experimentell. Es ist zwar wahrscheinlich, dass er eine regulare Komponente von Systemd wird, aber sein Verhalten und seine Schnittstellen konnen sich noch andern. 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 UAPI.5 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 offentlichen TPM2-PCR-PEM-Schlussel, 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 durchgefuhrt. Das Ergebnis kann optional kryptographisch signiert werden, um TPM2-Richtlinien zu erlauben, die nur entsperrt werden konnen, falls eine bestimmte Gruppe von Kerneln gestartet wird, fur 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 kummern. BEFEHLE Die folgenden Befehle werden verstanden: status Dies ist der Vorgabebefehl, falls keiner angegeben ist. Er fragt die TPM2 PCR-Werte 11 des Systems ab und zeigt sie an. Die Daten werden in einem ahnlichen Format wie beim nachfolgenden Befehl calculate geschrieben und konnen dazu verwandt werden, schnell die Erwartungen mit der Realitat abzugleichen. Hinzugefugt in Version 252. calculate Berechnet die erwarteten Werte, die in PCR-Register 11 nach dem Hochfahren des vereinigten Kernelabbildes, das aus den mit --linux=, --osrel=, --cmdline=, --initrd=, --ucode=, --splash=, --dtb=, --uname=, --sbat=, --pcrpkey=, --profile=, --dtbauto=, --hwids= 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.) Hinzugefugt in Version 252. 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 Schlusselpaar (RSA), das uber --private-key= und --public-key= konfiguriert ist, signiert. Dies schreibt ein JSON-Objekt in die Standardausgabe, das die Signaturen fur alle angegebenen PCR-Banke enthalt (siehe nachfolgend --bank=). Dies kann zum Entsperren verschlusselter Zugangsberechtigungen (siehe systemd-creds(1)) oder LUKS-Datentrager (siehe systemd-cryptsetup@.service(8)) verwandt werden. Dies ermoglicht das Binden von Geheimnissen an eine Gruppe von Kerneln, fur die solche PCR-11-Signaturen bereitgestellt werden konnen. Beachten Sie, dass ein TPM2-Gerat verfugbar sein muss, damit das Signieren stattfinden kann, obwohl das Ergebnis nicht mit einem TPM2-Gerat oder seinen Zustand verknupft ist. Hinzugefugt in Version 252. policy-digest Wie bei dem Befehl sign wird der erwartete Wert, der nach dem Starten eines vereinigten Kernelabbildes in TPM2-PCR-Register 11 gesehene Wert, vorberechnet. Dann wird die entstehende TPM2-Richtlinie berechnet und ihr Hash ausgegeben. Dies schreibt ein JSON-Objekt in die Standardausgabe, das die Richtlinien-Hashes fur alle angegebenen PCR-Banke enthalt (wie in der nachfolgenden Option --bank= beschrieben), so dass sie offline signiert werden konnen, falls der private Schlussel nicht direkt zugreifbar ist. Falls --public-key= oder --certificate= angegeben sind, wird das JSON-Objekt auch den Schlussel-Fingerabdruck enthalten. Hinzugefugt in Version 258. 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 Wird 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 umschliessen wird. Alle Schalter ausser --linux= sind optional. Jede Option darf hochstens einmal verwandt werden. Hinzugefugt in Version 252. Mit den Ausnahmen --profile=, --dtbauto= und --hwids=, die in Version 257 hinzugefugt wurden. --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 aufgefuhrten Schaltern verwandt werden. Hinzugefugt in Version 252. --bank=HASH Steuert die PCR-Banke, fur die PCR-Werte vorabberechnet werden sollen - im Falle des Aufrufs von calculate oder sign - oder die Banke, die in der Ausgabe status angezeigt werden sollen. Kann mehrfach verwandt werden, um mehrere Banke anzugeben. Falls nicht angegeben, ist die Vorgabe die vier Banke >>sha1<<, >>sha256<<, >>sha384<<, >>sha512<<. Beachten Sie, dass einige Betriebssysteme die Unterstutzung fur SHA1-basierte Signaturen deaktivieren. In diesem Fall schlagt diese Operation fehl. Bitte lesen Sie die Dokumentation Ihres Betriebssystems zu Details daruber, wie Sie die Sicherheitsrichtlinien Ihres Betriebsystems zu diesem Punkt ausser Kraft setzen. Hinzugefugt in Version 252. --private-key=PFAD, --public-key=PFAD, --certificate=PFAD Diese Schalter akzeptieren Pfade auf PEM-kodierte RSA-Schlusseldateien, zur Verwendung mit dem Befehl sign. Beachten Sie die Unterschiede zwischen den Schaltern --pcrpkey= und --public-key=. Ersterer wahlt die Daten, die im PE-Abschnitt >>.pcrpkey<< des vereinigten Kernelabbildes aufgenommen werden sollen, wahrend letzterer den offentlichen Schlussel des Schlusselpaars aufnimmt, der zum Signieren des entstehenden PCR-11-Wertes verwandt wird. Ersterer ist der Schlussel, den das gestartete System wahrscheinlich zum Sperren der Verschlusselung von Platten und Zugangsberechtigungen verwenden wird, wahrend letzterer der Schlussel ist, der zum erneuten Entsperren solcher Ressourcen verwandt wird. Daher sollte typischerweise in beiden Fallen der gleiche PEM-Schlussel bereitgestellt werden. Falls der --public-key= nicht, aber --private-key= angegeben ist, wird der offentliche Schlussel automatisch vom privaten Schlussel abgeleitet. --certificate= kann seit v256 zum Festlegen eines X.509-Zertifikats als Alternative zu --public-key= verwandt werden. Hinzugefugt in Version 252. --private-key=PFAD/URI, --private-key-source=TYP[:NAME], --certificate=PFAD/URI, --certificate-source=TYP[:NAME] Als Alternative zu --public-key= fur den Befehl sign, konnen diese Schalter zum Signieren mit einem Hardware-Token verwandt werden. Die Option fur den privaten Schlussel kann einen Pfad oder eine URI akzeptieren, die an die OpenSSL-Engine oder den -Provider weitergegeben wird, wie durch --private-key-source= festgelegt als ein Typ:Name-Tupel, wie engine:pkcs11. Die festgelegte OpenSSL-Signier-Engine oder der -Provider werden zum Signieren verwandt. Schalter zum Signieren mit einem Hardware-Token verwandt werden. Die Option --certificate= kann auch einen Pfad oder eine URI akzeptieren, die an den OpenSSL-Provider 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 Provider und keine Engines unterstutzt. Hinzugefugt in Version 256. --tpm2-device=PFAD Steuert das zu verwendende TPM2-Gerat. Erwartet einen Gerateknotenpfad, der sich auf einen TPM2-Chip bezieht (z.B. /dev/tpmrm0). Alternativ kann der besondere Wert >>auto<< angegeben werden, um den Gerateknoten eines geeigneten TPM2-Gerates (von dem es genau einen geben darf) automatisch zu bestimmen. Der besondere Wert >>list<< kann verwandt werden, um alle geeigneten, derzeit ermittelten TPM2-Gerate aufzuzahlen. Hinzugefugt in Version 252. --phase=PHASE Steuert, fur 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, systemd-pcrphase-sysinit.service und systemd-pcrphase.service(8) in PCR 11 wahrend verschiedener Meilensteine des Systemstartprozesses gemessen. Dieser Schalter kann mehrfach angegeben werden, um die PCR-Werte fur 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 fur die Systemstartphase in die Initrd, wahrend des fruhen Systemstarts, wahrend des spaten Systemstarts und wahrend der Systemlaufzeit berechnet, aber die Phasen vor der Initrd oder beim Herunterfahren ausgeschlossen. Diese Einstellung wird von calculate und sign berucksichtigt. Bei der Verwendung mit letzterem ist sie besonders zur Erstellung von PCR-Signaturen nutzlich, die nur zum Entsperren von Ressourcen wahrend bestimmter Teile des Systemstartprozesses verwandt werden konnen. Weitere Details zu PCR-Systemstartphasen finde Sie in systemd-pcrphase.service(8). Hinzugefugt in Version 252. --append=PFAD Bei der Erstellung einer PCR-JSON-Signatur (uber den Befehl sign) wird diese mit einer vorher erstellten PCR-JSON-Signatur kombiniert und als eine ausgegeben. Der angegebene Pfad muss sich auf eine normale Datei beziehen, die ein gultiges PCR-JSON-Signaturobjekt enthalt. Die angegebene Datei wird nicht verandert. Sie wird zuerst gelesen und dann wird die frisch erstellte Signatur daran angehangt und das daraus enstandene Objekt wird in die Standardausgabe geschrieben. Verwenden Sie dies, um ein einzelnes JSON-Objekt zu erstellen, das aus Signaturen besteht, die mit einer Reihe von Signaturschlusseln erstellt wurden (beispielsweise um einen Schlussel pro Systemstartphase zu haben). Der Befehl wird Duplikate unterdrucken: Falls eine bestimmte Signatur bereits in dem JSON-Signaturobjekt enthalten ist, wird sie nicht erneut hinzugefugt. Hinzugefugt in Version 253. --json=MODUS Zeigt die Ausgabe als JSON formatiert. Erwartet entweder >>short<< (fur die kurzest mogliche Ausgabe ohne unnotigen Leerraum oder Zeilenumbruche), >>pretty<< (fur eine schonere Version der gleichen Ausgabe, mit Einzugen und Zeilenumbruchen) oder >>off<< (um die JSON-Ausgabe auszuschalten, was die Vorgabe ist). --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 $ 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 Schlusselpaar, ein vereinigtes Kernelabbild und eine TPM-PCR-11-Signatur dafur erstellen und die Signatur und den offentlichen Schlussel 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 Spater registrieren Sie die signierte PCR-Richtlinie bei einem LUKS-Datentrager: # 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 Gerat 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 offentliche Schlussel an Orten abgelegt werden, unter denen systemd-cryptenroll und systemd-cryptsetup danach sucht und daher diese Pfade tatsachlich nicht angegeben werden mussen. Beispiel 3. Einbeziehen eines zweiten offentlichen Schlussels, der die gleichen Kernel-PCR-Messungen signiert, aber nur fur die Initrd-Systemstartphase Dieses Beispiel erweitert das vorherige, aber jetzt wird ein zweiter Signaturschlussel einbezogen, der nur zum Signieren von PCR-Richtlinien eingeschrankt auf die Initrd-Systemstartphase verwandt wird. Damit konnen Wurzeldatentrager so verschlusselt werden, dass sie nur vor dem Ubergang auf das System des Rechners geoffnet werden konnen. Daher gibt es zwei Klassen von Geheimnissen oder Zugangsberechtigungen: eine, die wahrend der gesamten Laufzeit geoffnet werden konnen 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-initrd-private-key.pem ..+.......++........+........+......+........+....+.....+.+..+.......... $ openssl rsa -pubout -in tpm2-pcr-initrd-private-key.pem -out tpm2-pcr-initrd-public-key.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-initrd-private-key.pem \ --pcr-public-key=tpm2-pcr-initrd-public-key.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-initrd-private-key.pem \ --public-key=tpm2-pcr-initrd-public-key.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 ermoglicht 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 Zusammenfuhren auch selbstandig durchfuhren. Beachten Sie, dass in diesem Beispiel der PE-Abschnitt von >>.pcrpkey<< den durch die erste Option --pcr-private-key= festgelegten Schlussel enthalt, der samtliche Systemstartphasen abdeckt. Der Abschnitt >>.pcrpkey<< wird in den Standardrichtlinien von systemd-cryptenroll und systemd-creds verwandt. Um die strengere, an tpm2-pcr-initrd-public-key.pem gebundene Richtlinie zu verwenden, geben Sie --tpm2-public-key= auf der Befehlszeile der Werkzeuge an. EXIT-STATUS Bei Erfolg wird 0 zuruckgegeben, 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. UAPI.5 Vereinigtes Kernelabbild (UKI) https://uapi-group.org/specifications/specs/unified_kernel_image/ 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.1 SYSTEMD-MEASURE(1)