| UKIFY(1) | ukify | UKIFY(1) |
الاسم
ukify - اجمع المكونات في صورة نواة موحدة (UKI) موثقة لأنظمة UEFI
موجز
ukify [الخيارات...] build
ukify [الخيارات...] genkey
ukify [الخيارات...] inspect ملف...
الوصف
ukify أداة غرضها الرئيس هو دمج المكونات (عادةً نواة، و initrd، و systemd-stub(7) UEFI stub) لإنشاء صورة نواة موحدة (UKI)[1] بمواصفات UAPI.5 — وهي ملف PE ثنائي واحد يُقلع منه النظام. عند تنفيذ صورة UKI، يستخرج stub نواة لينكس المضمنة ويُقلعها. يمكن بدء صورة UKI مباشرة عبر البرمجيات المضمنة (firmware) أو عبر محمل إقلاع. عند استخدامه مع qemu[2]، يمكن أيضًا تنفيذ صورة UKI عبر "إقلاع النواة المباشر"، انظر المثال أدناه.
يمكن أيضًا استخدام ukify لإنشاء أنواع أخرى من الصور الشبيهة بـ UKI، ولا سيما الامتدادات. انظر وصف الأمر build أدناه. يمكن لـ ukify أيضًا توليد الشهادات والمفاتيح للإقلاع الآمن (SecureBoot) وتوثيق سجلات PCR، انظر وصف الأمر genkey أدناه. يمكن لـ ukify أيضًا طباعة معلومات مفصلة حول صور النواة الموحدة، انظر وصف الأمر inspect أدناه.
الأوامر
الأوامر التالية مفهومة:
build
يُنشئ هذا الأمر صورة نواة موحدة (UKI). الخياران الرئيسان اللذان ينبغي تحديدهما للأمر build هما Linux=/--linux= و Initrd=/--initrd=. يقبل Initrd= مسارات متعددة مفصولة بمسافات بيضاء، ويمكن تحديد --initrd= عدة مرات.
ستُدرج أقسام إضافية في صورة UKI، إما آليًا أو فقط عند توفير خيار محدد. انظر مناقشات Microcode=/--microcode=، و Cmdline=/--cmdline=، و OSRelease=/--os-release=، و DeviceTree=/--devicetree=، و DeviceTreeAuto=/--devicetree-auto=، و HWIDs=/--hwids=، و Splash=/--splash=، و PCRPKey=/--pcrpkey=، و Uname=/--uname=، و SBAT=/--sbat=، و --section= أدناه.
يمكن أيضًا استخدام ukify لتجميع ملف PE ثنائي غير قابل للتنفيذ ولكنه يحتوي على بيانات مساعدة، مثل إدخالات سطر أوامر النواة الإضافية.
إذا وُفرت مفاتيح توثيق سجلات PCR عبر الخيارات PCRPrivateKey=/--pcr-private-key= و PCRPublicKey=/--pcr-public-key= أو PCRCertificate=/--pcr-certificate=، فستُحسب قيم PCR التي ستظهر بعد الإقلاع بالنواة المحددة، و initrd، والأقسام الأخرى، وتُوثق، وتُضمن في صورة UKI. يُستخدم systemd-measure(1) لإجراء هذا الحساب والتوثيق.
يُجرى حساب قيم PCR لمسارات مراحل إقلاع محددة. يمكن تحديد هذه المسارات عبر الخيار Phases=/--phases=. إذا لم يُحدد، فسيُستخدم الافتراضي المبدئي الذي يوفره systemd-measure. ومن الممكن أيضًا تحديد وسطاء PCRPrivateKey=/--pcr-private-key=، أو PCRPublicKey=/--pcr-public-key= أو PCRCertificate=/--pcr-certificate=، و Phases=/--phases= أكثر من مرة. ستُنفذ التوقيعات حينئذٍ بكل مفتاح من المفاتيح المحددة. في سطر الأوامر، عند استخدام كل من --phases= و --pcr-private-key=، يجب تحديدهما بنفس عدد المرات، وعندها ستُوثق مجموعة مسار مرحلة الإقلاع رقم n بالمفتاح رقم n. يمكن استخدام هذا لبناء سياسات ثقة مختلفة لمراحل الإقلاع المختلفة. في ملف الإعداد، تُجمع PCRPrivateKey= و PCRPublicKey= و Phases= في أقسام منفصلة تصف مراحل إقلاع منفصلة. إذا حُدد أحد الخيارين SigningEngine=/--signing-engine= أو SigningProvider=/--signing-provider=، فستُمرر وسطاء المفتاح الخاص حرفيًا إلى openssl(1) كمعرفات موارد موحدة (URIs)، وستُحمل وسطاء المفتاح العام كشهادات X.509، بحيث يمكن إجراء التوثيق باستخدام محرك أو مزود OpenSSL على التوالي.
إذا وُفر مفتاح توثيق الإقلاع الآمن (SecureBoot) عبر خيار SecureBootPrivateKey=/--secureboot-private-key=، فسيُوثق ملف PE الثنائي الناتج ككل، مما يسمح لصورة UKI الناتجة بأن تكون موثوقة من قِبل الإقلاع الآمن. انظر أيضًا مناقشة التسجيل الآلي في systemd-boot(7).
إذا احتوى stub أو النواة على أقسام ".sbat" فستُدمج في صورة UKI ليؤخذ في الحسبان تحديثات الإلغاء التي تؤثر على أي منهما عند تحميل صورة UKI بواسطة Shim. لمزيد من المعلومات حول SBAT انظر وثائق Shim[3].
genkey
يُنشئ هذا الأمر مفاتيح توثيق PCR والمفتاح والشهادة المستخدمة في توثيق الإقلاع الآمن (SecureBoot). نفس خيارات الإعداد التي تحدد ما هي المفاتيح وفي أي مسارات ستكون مطلوبة للتوثيق عند استخدام build، هي التي تحدد هنا ما هي المفاتيح التي ستُنشأ. انظر مناقشة PCRPrivateKey=/--pcr-private-key= و PCRPublicKey=/--pcr-public-key= و SecureBootPrivateKey=/--secureboot-private-key= أدناه.
يجب ألا تكون ملفات المخرجات موجودة مسبقًا.
inspect
اعرض معلومات حول الأقسام في ملف ثنائي معين أو ملفات ثنائية. إذا أُعطي الخيار --all، فستُعرض جميع الأقسام. بخلاف ذلك، إذا حُدد خيار --section= مرة واحدة على الأقل، فستُعرض تلك الأقسام فقط. وبخلاف ذلك، ستُعرض الأقسام المعروفة التي تُضمن عادةً في صورة UKI. لكل قسم، يُطبع اسمه وحجمه وبصمة sha256 الخاصة به. وبالنسبة للأقسام النصية، تُطبع محتوياتها.
انظر أيضًا وصف الخيارات -j/--json= و --section=.
أدوات أخرى قد تكون مفيدة لفحص صور UKI: llvm-objdump(1) -p و pe-inspect.
إعدادات التهيئة
يمكن أن تظهر الإعدادات في ملفات التهيئة (بالصيغة الإعداد=القيمة) وفي سطر الأوامر (بالصيغة --الإعداد=القيمة). وبالنسبة لبعض معاملات سطر الأوامر، يُسمح أيضًا باختصار من حرف واحد. في ملفات التهيئة، يجب أن يكون الإعداد في القسم المناسب، لذا جُمعت الأوصاف حسب الأقسام أدناه. عندما يظهر نفس الإعداد في ملف التهيئة وفي سطر الأوامر، فعادةً ما تكون لإعداد سطر الأوامر أولوية أعلى ويحل محل إعداد ملف التهيئة تمامًا. وإذا سلك إعداد ما سلوكًا مختلفًا، فسيُشرح ذلك أدناه.
إذا لم يُوفر ملف تهيئة عبر الخيار --config=المسار، فسيحاول ukify البحث عن ملف تهيئة مبدئي في المسارات التالية بهذا الترتيب: /etc/systemd/ukify.conf، و /run/systemd/ukify.conf، و /usr/local/lib/systemd/ukify.conf، و /usr/lib/systemd/ukify.conf، ثم يحمل أول ملف يُعثر عليه. سيعمل ukify بشكل طبيعي إذا لم يُحدد ملف تهيئة ولم يُعثر على ملف مبدئي.
وسطاء الموقع LINUX و INITRD، أو إعدادات Linux= و Initrd= المكافئة، اختيارية. إذا حُدد أكثر من initrd واحد، فستُجمع كلها في قسم PE واحد. وهذا مفيد، على سبيل المثال، لإضافة برمجيات ميكروكود (microcode) قبل initrd الفعلي.
الخيارات والإعدادات التالية مفهومة:
خيارات سطر الأوامر فقط
--config=المسار
أُضيف في الإصدار 254.
--measure، --no-measure
أُضيف في الإصدار 253.
--policy-digest، --no-policy-digest
أُضيف في الإصدار 258.
--section=الاسم:النص|@المسار، --section=الاسم:text|binary[@المسار]
بالنسبة للفعل inspect، تُستخدم الصيغة الثانية. سيُفحص القسم الاسم (إذا وُجد). إذا كانت المعاملة الثانية هي "text"، فستُطبع المحتويات. وإذا أُعطيت المعاملة الثالثة، فستُحفظ المحتويات في الملف المسمى المسار.
لاحظ أن الاسم يُستخدم كما هو، وإذا كان يجب أن يبدأ اسم القسم بنقطة، فيجب تضمينها في الاسم.
أُضيف في الإصدار 253.
--join-profile=المسار
أُضيف في الإصدار 257.
--sign-profile=المعرف
أُضيف في الإصدار 258.
--join-pcrsig=المسار، --pcrsig=النص|@المسار
أُضيف في الإصدار 258.
--tools=المجلدات
أُضيف في الإصدار 253.
--output=اسم_الملف
أُضيف في الإصدار 253.
--summary
أُضيف في الإصدار 254.
--all
أُضيف في الإصدار 255.
--json
أُضيف في الإصدار 255.
-h، --help
--version
قسم [UKI]
Linux=LINUX، --linux=LINUX
أُضيف في الإصدار 254.
OSRelease=النص|@المسار، --os-release=النص|@المسار
أُضيف في الإصدار 253.
Cmdline=النص|@المسار، --cmdline=النص|@المسار
أُضيف في الإصدار 253.
Initrd=INITRD...، --initrd=LINUX
أُضيف في الإصدار 254.
Microcode=UCODE، --microcode=UCODE
أُضيف في الإصدار 256.
Splash=المسار، --splash=المسار
أُضيف في الإصدار 253.
DeviceTree=المسار، --devicetree=المسار
أُضيف في الإصدار 253.
DeviceTreeAuto=المسار...، --devicetree-auto=المسار
أُضيف في الإصدار 257.
HWIDs=المسار، --hwids=المسار
{
"type": "devicetree",
"name": "Example Laptop 16 Gen 7",
"compatible": "example,laptop-16-g7",
"hwids": [
"5dc05bf4-01f6-4089-b464-a08c47ea9295",
"3e3f8f3c-2003-46f2-811c-85554f7d5952"
]
}
هنا "Example Laptop 16 Gen 7" هو "اسم" الجهاز (كما حددته الشركة المصنعة)، و "example,laptop-16-g7" هو "المتطابق" (كما حددته النواة) و "hwids" هي مصفوفة من CHIDs/HWIDs (استُخرجت مثلاً من مخرجات fwupdtool hwids). إذا لم يُحدد، وكان المجلد "/usr/lib/systemd/boot/hwids/[EFI_ARCH]/" موجودًا، فسيُملأ القسم آليًا من ذلك المجلد (حدد سلسلة فارغة كمعامل لهذا الخيار لتعطيل هذا السلوك)، وإلا فلن يكون موجودًا. يوصى بتحديد هذا المعامل إذا كان سيُستخدم ملفات DeviceTrees القابلة للاختيار آليًا.
أُضيف في الإصدار 257.
Uname=الإصدار، --uname=الإصدار
أُضيف في الإصدار 253.
SBAT=النص|@المسار، --sbat=النص|@المسار
uki,1,UKI,uki,1,https://uapi-group.org/specifications/specs/unified_kernel_image/
لصور UKIs و
uki-addon,1,UKI Addon,addon,1,https://www.freedesktop.org/software/systemd/man/latest/systemd-stub.html
سوف تُستخدم للملحقات، لضمان إمكانية إبطالها دائمًا. لمزيد من المعلومات حول SBAT راجع توثيق Shim[3].
أُضيف في الإصدار 254.
PCRPKey=المسار، --pcrpkey=المسار
أُضيف في الإصدار 253.
Profile=المسار، --profile=المسار
أُضيف في الإصدار 257.
PCRBanks=المسار، --pcr-banks=المسار
أُضيف في الإصدار 253.
SecureBootSigningTool=الموقّع، --signtool=الموقّع
أُضيف في الإصدار 254.
SecureBootPrivateKey=SB_KEY, --secureboot-private-key=SB_KEY
أُضيف في الإصدار 253.
SecureBootCertificate=SB_CERT, --secureboot-certificate=SB_CERT
أُضيف في الإصدار 253.
SecureBootCertificateDir=SB_PATH, --secureboot-certificate-dir=SB_PATH
أُضيف في الإصدار 254.
SecureBootCertificateName=SB_CERTNAME, --secureboot-certificate-name=SB_CERTNAME
أُضيف في الإصدار 254.
SecureBootCertificateValidity=DAYS, --secureboot-certificate-validity=DAYS
أُضيف في الإصدار 254.
SigningEngine=ENGINE, --signing-engine=ENGINE
أُضيف في الإصدار 253.
SigningProvider=PROVIDER, --signing-provider=PROVIDER
أُضيف في الإصدار 257.
CertificateProvider=PROVIDER, --certificate-provider=PROVIDER
أُضيف في الإصدار 257.
SignKernel=BOOL, --sign-kernel, --no-sign-kernel
أُضيف في الإصدار 253.
قسم [PCRSignature:الاسم]
في ملف الضبط، تُجمع هذه الخيارات حسب القسم. في سطر الأوامر، يجب تحديدها بنفس الترتيب. تُدمج الأقسام المحددة في كلا المصدرين.
PCRPrivateKey=المسار، --pcr-private-key=المسار
أُضيف في الإصدار 253.
PCRPublicKey=المسار، --pcr-public-key=المسار
في سطر الأوامر، يمكن تحديد هذا الخيار أكثر من مرة، بشكل مشابه لخيار --pcr-private-key=. إذا لم يوجد، فستُستخرج المفاتيح العامة من المفاتيح الخاصة. في سطر الأوامر، إذا وُجد، يجب تحديد هذا الخيار بنفس عدد مرات خيار --pcr-private-key=. لا يمكن تحديده إذا استُخدم --pcr-certificate=.
أُضيف في الإصدار 253.
PCRCertificate=المسار، --pcr-certificate=المسار
في سطر الأوامر، يمكن تحديد هذا الخيار أكثر من مرة، بشكل مشابه لخيار --pcr-private-key=. إذا لم يوجد، فستُستخرج المفاتيح العامة من المفاتيح الخاصة. في سطر الأوامر، إذا وُجد، يجب تحديد هذا الخيار بنفس عدد مرات خيار --pcr-private-key=. لا يمكن تحديده إذا استُخدم --pcr-public-key=.
أُضيف في الإصدار 258.
Phases=القائمة، --phases=القائمة
في سطر الأوامر، عند وجود هذه المعلمة، يجب أن تظهر نفس عدد مرات خيار --pcr-private-key=.
أُضيف في الإصدار 253.
أمثلة
مثال 1. استدعاء بسيط
$ ukify build \
--linux=/lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \
--initrd=/some/path/initramfs-6.0.9-300.fc37.x86_64.img \
--cmdline='quiet rw'
هذا ينشئ صورة UKI غير موقعة ./vmlinuz.unsigned.efi.
Example 2. Direct kernel boot in a virtual machine
عند استخدام qemu[2] مع OVMF[4] (برمجية UEFI الثابتة للآلات الافتراضية) يمكن استخدام مفتاح -kernel مباشرة مع UKI. مثال:
qemu-kvm -drive if=pflash,format=qcow2,readonly=on,file=/usr/share/edk2/ovmf/OVMF_CODE_4M.qcow2 -kernel ./vmlinuz.unsigned.efi [ ... ]
(قد يحتاج مسار ملف البرمجية الثابتة إلى تعديل اعتمادًا على التوزيعة.) عادةً ما تُستخدم معلمة -drive أخرى لوصل صورة قرص فعلية، لكن هذا ليس مطلوبًا.
مثال 3. كل الإضافات والكماليات
$ ukify build \
--linux=/lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \
--initrd=early_cpio \
--initrd=/some/path/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.myimage,1,UKI for System,uki.author.myimage,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'
هذا ينشئ صورة UKI موقعة ./vmlinuz.signed.efi. يحتوي قسم initrd على جزأين متسلسلين، early_cpio و initramfs-6.0.9-300.fc37.x86_64.img. ستُوقع السياسة المضمنة في قسم ".pcrsig" من أجل initrd (مرحلة enter-initrd) بالمفتاح tpm2-pcr-initrd-private-key.pem، ومن أجل النظام الرئيس (مراحل leave-initrd، و sysinit، و ready) بالمفتاح tpm2-pcr-private-key-system.pem. سيُوقع ثنائي لينكس والصورة المجمعة الناتجة بمفتاح الإقلاع الآمن secureboot-private-key.pem.
مثال 4. كل الإضافات والكماليات، عبر ملف ضبط
هذا هو نفس المثال السابق، ولكن هذه المرة حُفظ الضبط في ملف:
$ 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=/some/path/initramfs-6.0.9-300.fc37.x86_64.img
أُحدِد "initrd" واحد (early_cpio) في ملف الضبط، والآخر (initramfs-6.0.9-300.fc37.x86_64.img) في سطر الأوامر. قد يكون هذا مفيدًا على سبيل المثال عندما يحتوي initrd الأول على كود دقيق (microcode) للمعالج ولا يحتاج للتحديث عند تغير إصدار النواة، بخلاف initrd الفعلي.
مثال 5. ملحق PE لسطر أوامر النواة
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 Addon for System,uki-addon.author,1,https://www.freedesktop.org/software/systemd/man/systemd-stub.html'
--output=debug.addon.efi
هذا ينشئ ثنائي PE موقعًا يحتوي على معلمة سطر أوامر نواة إضافية "debug" مع بيانات SBAT التعريفية التي تشير إلى مالك الملحق.
مثال 6. تحديد سياسة التوقيع، وإنشاء الشهادة والمفاتيح
أولاً، لننشئ ملف تهيئة يحدد التوقيعات التي ستُجرى:
# cat >/etc/kernel/uki.conf <<EOF
[UKI]
SecureBootPrivateKey=/etc/kernel/secureboot-private-key.pem
SecureBootCertificate=/etc/kernel/secureboot-certificate.pem
[PCRSignature:initrd]
Phases=enter-initrd
PCRPrivateKey=/etc/systemd/tpm2-pcr-initrd-private-key.pem
PCRPublicKey=/etc/systemd/tpm2-pcr-initrd-public-key.pem
[PCRSignature:system]
Phases=enter-initrd:leave-initrd enter-initrd:leave-initrd:sysinit
enter-initrd:leave-initrd:sysinit:ready
PCRPrivateKey=/etc/systemd/tpm2-pcr-private-key-system.pem
PCRPublicKey=/etc/systemd/tpm2-pcr-public-key-system.pem
EOF
بعد ذلك، يمكننا توليد الشهادة والمفاتيح:
# ukify genkey --config=/etc/kernel/uki.conf Writing SecureBoot private key to /etc/kernel/secureboot-private-key.pem Writing SecureBoot certificate to /etc/kernel/secureboot-certificate.pem Writing private key for PCR signing to /etc/systemd/tpm2-pcr-initrd-private-key.pem Writing public key for PCR signing to /etc/systemd/tpm2-pcr-initrd-public-key.pem Writing private key for PCR signing to /etc/systemd/tpm2-pcr-private-key-system.pem Writing public key for PCR signing to /etc/systemd/tpm2-pcr-public-key-system.pem
(يجب إجراء كلتا العمليتين كجذر للسماح بالوصول للكتابة إلى /etc/kernel/.)
الاستدعاءات اللاحقة باستخدام ملف الضبط (ukify build --config=/etc/kernel/uki.conf) ستستخدم ملفات الشهادة والمفتاح هذه. لاحظ أن ملحق kernel-install(8) رقم 60-ukify.install يستخدم /etc/kernel/uki.conf افتراضيًا، لذا بعد إنشاء هذا الملف، ستقوم عمليات تثبيت النوى التي تنشئ صورة UKI على الجهاز المحلي باستخدام kernel-install بإجراء التوقيع باستخدام هذا الضبط.
مثال 7. صورة UKI متعددة التشكيلات
أولاً، أنشئ بضع تشكيلات:
$ ukify build \
--profile='TITLE=Base' \
--output=profile0.efi
أضف تشكيلة ثانية (@1):
$ ukify build \
--profile='TITLE=Boot into Storage Target Mode
ID=storagetm' \
--cmdline='quiet rw rd.systemd.unit=storage-target-mode.target' \
--output=profile1.efi
أضف تشكيلة ثالثة (@2):
$ ukify build \
--profile='TITLE=Factory Reset
ID=factory-reset' \
--cmdline='quiet rw systemd.unit=factory-reset.target' \
--output=profile2.efi
بعد ذلك، أنشئ UKI وضمّن جميع التشكيلات المولدة:
$ ukify build \
--linux=/lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \
--initrd=/some/path/initramfs-6.0.9-300.fc37.x86_64.img \
--cmdline='quiet rw' \
--join-profile=profile0.efi \
--join-profile=profile1.efi \
--join-profile=profile2.efi \
--output=base.efi
سيحتوي ملف UKI الناتج base-with-profile-0-1-2.efi الآن على ثلاث تشكيلات.
مثال 8. توقيع قسم pcrsig دون اتصال
أولاً، أنشئ UKI واحفظ كتلة PCR JSON:
$ ukify build \
--linux=/lib/modules/6.0.9-300.fc37.x86_64/vmlinuz \
--initrd=/some/path/initramfs-6.0.9-300.fc37.x86_64.img \
--cmdline='quiet rw' \
--pcr-public-key=tpm2-pcr-initrd-public-key.pem \
--policy-digest \
--json=short \
--output=base.efi >base.pcrs
بعد ذلك، وقّع خلاصات PCR دون اتصال وأدرجها في كتلة JSON:
#!/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))
أخيرًا، ألحق كتلة JSON المحدثة بـ UKI:
$ ukify build \
--join-pcrsig=base.efi \
--pcrsig=@base.pcrs \
--json=short \
--output=base-signed.efi
سيحتوي ملف UKI الناتج base-signed.efi الآن على خلاصات PCR الموقعة.
انظر أيضًا
systemd(1)، systemd-stub(7)، systemd-boot(7)، systemd-measure(1)، systemd-pcrphase.service(8)
ملاحظات
- 1.
- صورة نواة موحدة (UKI) من النوع UAPI.5
- 2.
- qemu
- 3.
- توثيق Shim
- 4.
- OVMF
ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| systemd 260.1 |