table of contents
- trixie-backports 4.30.2-1~bpo13+1
- testing 4.30.2-1
- unstable 4.30.2-1
| UKIFY(1) | ukify | UKIFY(1) |
الاسم¶
ukify - اجمع المكونات في صورة نواة موحدة (UKI) موثقة لأنظمة UEFI
موجز¶
ukify [الخيارات...] build
ukify [الخيارات...] genkey
ukify [الخيارات...] inspect ملف...
الوصف¶
ukify هي أداة غرضها الأساس هو الجمع بين المكونات (عادةً النواة، و initrd، و UEFI boot stub) لإنشاء صورة نواة موحدة (UKI)[1] — وهو ملف ثنائي PE يمكن تنفيذه بواسطة البرمجية الثابتة لبدء تشغيل نواة لينكس المضمنة. راجع systemd-stub(7) للحصول على تفاصيل حول stub.
الأوامر¶
الأوامر التالية مفهومة:
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=، فستُحسب قيم PCR التي ستُرى بعد الإقلاع بالنواة المعطاة، و initrd، والأقسام الأخرى، وتُوقع وتُضمن في UKI. يُستخدم systemd-measure(1) لإجراء هذا الحساب والتوقيع.
يُجرى حساب قيم PCR لمسارات مراحل إقلاع محددة. يمكن تحديدها باستخدام خيار Phases=/--phases=. إذا لم تُحدد، فتُستخدم القيمة المبدئية التي يوفرها systemd-measure. ومن الممكن أيضًا تحديد معلمات PCRPrivateKey=/--pcr-private-key=، و PCRPublicKey=/--pcr-public-key=، و 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[2].
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.
--section=الاسم:النص|@المسار، --section=الاسم:text|binary[@المسار]
بالنسبة للفعل inspect، تُستخدم الصيغة الثانية. سيُفحص القسم الاسم (إذا وُجد). إذا كانت المعاملة الثانية هي "text"، فستُطبع المحتويات. وإذا أُعطيت المعاملة الثالثة، فستُحفظ المحتويات في الملف المسمى المسار.
لاحظ أن الاسم يُستخدم كما هو، وإذا كان يجب أن يبدأ اسم القسم بنقطة، فيجب تضمينها في الاسم.
أُضيف في الإصدار 253.
--join-profile=المسار
أُضيف في الإصدار 257.
--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=المسار
{
"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" هو "name" (الاسم) للجهاز (كما حددته الشركة المصنعة)، و "example,laptop-16-g7" هو "compatible" (المتوافق) (كما حددته النواة) و "hwids" هي مصفوفة من CHIDs/HWIDs (مستخرجة مثلاً من مخرجات fwupdtool hwids). إذا لم يُحدد، فلن يكون القسم موجودًا. يوصى بتحديد هذه المعلمة إذا كان سيُستخدم DeviceTrees القابل للاختيار آليًا.
أُضيف في الإصدار 257.
Uname=الإصدار، --uname=الإصدار
أُضيف في الإصدار 253.
SBAT=النص|@المسار، --sbat=النص|@المسار
لصور UKIs و
uki-addon,1,UKI Addon,addon,1,https://www.freedesktop.org/software/systemd/man/latest/systemd-stub.html
سوف تُستخدم للملحقات، لضمان إمكانية إبطالها دائمًا. لمزيد من المعلومات حول SBAT راجع توثيق Shim[2].
أُضيف في الإصدار 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=.
أُضيف في الإصدار 253.
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.
مثال 2. كل الخيارات والمزايا
$ 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-private-key-initrd.pem \
--pcr-public-key=tpm2-pcr-public-key-initrd.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=sb.key \
--secureboot-certificate=sb.cert \
--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-private-key-initrd.pem، ومن أجل النظام الرئيس (مراحل leave-initrd، و sysinit، و ready) بالمفتاح tpm2-pcr-private-key-system.pem. سيُوقع ثنائي لينكس والصورة المجمعة الناتجة بمفتاح الإقلاع الآمن sb.key.
مثال 3. كل الخيارات والمزايا عبر ملف تهيئة
هذا هو نفس المثال السابق، ولكن هذه المرة حُفظ الضبط في ملف:
$ cat ukify.conf [UKI] Initrd=early_cpio Cmdline=quiet rw rhgb SecureBootPrivateKey=secure-boot-key.pem SecureBootCertificate=secure-boot-certificate.pem SignKernel=yes PCRBanks=sha384,sha512 [PCRSignature:initrd] PCRPrivateKey=tpm2-pcr-private-key-initrd.pem PCRPublicKey=tpm2-pcr-public-key-initrd.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 الفعلي.
مثال 4. ملحق PE لسطر أوامر النواة
ukify build \
--secureboot-private-key=secure-boot-key.pem \
--secureboot-certificate=secure-boot-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 التعريفية التي تشير إلى مالك الملحق.
مثال 5. تحديد سياسة التوقيع، وإنشاء الشهادة والمفاتيح
أولاً، لننشئ ملف تهيئة يحدد التوقيعات التي ستُجرى:
# cat >/etc/kernel/uki.conf <<EOF [UKI] SecureBootPrivateKey=/etc/kernel/secure-boot-key.pem SecureBootCertificate=/etc/kernel/secure-boot-certificate.pem [PCRSignature:initrd] Phases=enter-initrd PCRPrivateKey=/etc/systemd/tpm2-pcr-private-key-initrd.pem PCRPublicKey=/etc/systemd/tpm2-pcr-public-key-initrd.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 كتابة مفتاح الإقلاع الآمن الخاص إلى /etc/kernel/secure-boot-key.pem كتابة شهادة الإقلاع الآمن إلى /etc/kernel/secure-boot-certificate.pem كتابة المفتاح الخاص لتوقيع PCR إلى /etc/systemd/tpm2-pcr-private-key-initrd.pem كتابة المفتاح العام لتوقيع PCR إلى /etc/systemd/tpm2-pcr-public-key-initrd.pem كتابة المفتاح الخاص لتوقيع PCR إلى /etc/systemd/tpm2-pcr-private-key-system.pem كتابة المفتاح العام لتوقيع PCR إلى /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 بإجراء التوقيع باستخدام هذا الضبط.
مثال 6. صورة 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 الآن على ثلاث تشكيلات.
انظر أيضًا¶
systemd(1)، systemd-stub(7)، systemd-boot(7)، systemd-measure(1)، systemd-pcrphase.service(8)
ملاحظات¶
- 1.
- صورة نواة موحدة (UKI)
- 2.
- توثيق Shim
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| systemd 257.9 |