الرئيسية
» كيف
»
تثبيت وتوقيع وحدات نواة مخصصة على نظام التشغيل SLES 15 Secure Boot
تثبيت وتوقيع وحدات نواة مخصصة على نظام التشغيل SLES 15 Secure Boot
قد يتم تجميع برنامج تشغيل تابع لجهة خارجية على نظام SUSE Linux Enterprise Server 15 بشكل صحيح، ولكنه قد يفشل في التحميل مع ظهور رسالة "المفتاح المطلوب غير متوفر" أو "تم رفض المفتاح بواسطة الخدمة". عندما يفرض التمهيد الآمن UEFI توقيعات الوحدات النمطية، يكون الحل هو توقيع وحدة النواة المخصصة بشهادة موثوقة، وتسجيل تلك الشهادة من خلال إدارة مفتاح مالك الجهاز (MOK)، ثم تحميل الوحدة النمطية بشكل طبيعي - دون تعطيل التمهيد الآمن.
يفترض هذا الإجراء وجود نظام SLES 15 UEFI قياسي يستخدم SUSE shim، kernel-defaultونواة، وصلاحيات المسؤول، ومصدر موثوق لبرنامج التشغيل. وهو يُعنى .koبالوحدات النمطية المُخصصة، ولا يشمل توقيع نواة بديلة أو تغيير مفاتيح منصة البرامج الثابتة. تتبع الأمثلة نموذج إدارة SLES 15 SP6/SP7؛ تحقق من اختلافات الحزمة ونكهة النواة في حزمة الخدمة المُثبتة لديك.
1. تحقق من خاصية التمهيد الآمن ونواة النظام قيد التشغيل أولاً
سجّل الدخول بصلاحيات المسؤول وحدّد النواة التي قمت بتشغيلها فعلياً. لا يكفي تطابق اسم الحزمة وحده لإثبات إمكانية تحميل وحدة نمطية في تلك النواة.
uname -r
mokutil --sb-state
ls -ld "/lib/modules/$(uname -r)/build"
تحقق من إصدار النواة النشط وحالة التمهيد الآمن قبل تثبيت برنامج التشغيل أو توقيعه.
إذا mokutilأفاد النظام بتفعيل ميزة التمهيد الآمن، فمن المرجح أن يكون سبب فشل التحميل المتعلق بالمفتاح هو وجود توقيع غير موثوق. أما إذا كانت هذه الميزة معطلة، فيُرجى البحث عن أسباب أخرى قبل إنشاء المفاتيح؛ إذ قد يكون لفرض توقيع النواة بشكل صريح دورٌ في ذلك. راجع سجل النواة بعد فشل التحميل للاطلاع على رسالة الرفض الفعلية.
sudo journalctl -k -b --no-pager | tail -n 50
افحص الوحدة المرشحة قبل تثبيتها. استبدل اسم الملف الحقيقي بالمثال؛ vermagicيجب أن يتطابق مع إصدار نواة النظام الحالية وخصائص البناء المتوافقة.
modinfo -F name /path/to/mydriver.ko
modinfo -F vermagic /path/to/mydriver.ko
قم بمراجعة بيانات تعريف الوحدة، وخاصة vermagic، بدلاً من افتراض أن أي ملف .ko سيتوافق مع SLES 15.
2. استخدم حزمة برامج تشغيل مدعومة أو أنشئ وحدة نمطية متوافقة
أولاً، اطلب من مُورّد الأجهزة أو البرامج حزمة وحدة نواة (KMP) متوافقة مع نظام SLES وموقّعة مسبقاً. يُفضّل هذا على تثبيت ملف تنفيذي يدوياً، إذ قد يُوفّر المُورّد آلية لتحديث النواة وعملية تسجيل شهادات موثقة. لا يُعتمد توقيع المُورّد تلقائياً على جميع أجهزة التمهيد الآمن.
إذا كنتَ مضطرًا لبناء برنامج التشغيل، فقم بتثبيت ملفات التطوير المتوافقة مع نواة نظام التشغيل لديك. بالنسبة لهذا kernel-defaultالإصدار، تتضمن حزم SLES المعتادة حزمة تطوير النواة الافتراضية، وملفات تطوير النواة، وأدوات البناء. يعتمد توفر المستودع وإصداراته على التسجيل ووحدات SLES المُفعّلة.
قم بتثبيت حزم تطوير النواة وأدوات التشفير المتوافقة قبل العمل مع وحدة نمطية مخصصة.
إذا كان مجلد الإنشاء مفقودًا أو كانت حزمة التطوير تستهدف إصدارًا مختلفًا من نواة النظام، فقم بإصلاح عدم التوافق بين الحزمة ونواة النظام أولًا. قد تتطلب النواة المثبتة حديثًا إعادة تشغيل مُتحكَّم بها قبل البدء في عملية الإنشاء.
من دليل مصدر برنامج التشغيل الموثوق، استخدم تعليمات بناء المورّد. بالنسبة للوحدات النمطية التقليدية القائمة على kbuild، يقوم الأمر أدناه بالبناء على نواة النظام قيد التشغيل؛ فهو لا يقوم بتنزيل أو إنشاء برنامج تشغيل تلقائيًا.
cd /path/to/driver-source
make -C "/lib/modules/$(uname -r)/build" M="$PWD" modules
استخدم شجرة بناء النواة ودليل مصدر برنامج التشغيل لإنتاج ملف .ko مطابق.
تخطَّ عملية التجميع إذا كان لديك بالفعل ملف متوافق .koمن مورد موثوق. لا تقم أبدًا بتحميل وحدة نمطية باستخدام ملف خاطئ vermagic؛ فالتوقيع لا يمكنه إصلاح ملف ثنائي غير متوافق.
3. أنشئ مفتاح التوقيع ووقّع الوحدة النمطية المثبتة
أنشئ مفتاح RSA مخصصًا وشهادة X.509 في دليل خاص بالجذر فقط. سيتم تسجيل الشهادة العامة؛ ويجب حماية المفتاح الخاص لأن من يتحكم به يمكنه توقيع وحدات إضافية قد يثق بها هذا الجهاز.
قم بإنشاء زوج مفاتيح منفصل لتوقيع الوحدة النمطية واحتفظ بالمفتاح الخاص مقيدًا للمسؤول.
-nodesيُنشئ هذا المثال مفتاحًا خاصًا غير مُشفّر؛ أما بالنسبة لخط أنابيب التوقيع في بيئة الإنتاج، فيُرجى استخدام مفتاح مُشفّر محمي بشكل مناسب أو خدمة توقيع خارجية وفقًا لسياسة الأمان الخاصة بك. مدة الصلاحية المذكورة هنا (عشر سنوات) هي مدة توضيحية فقط، وليست توصية رسمية بشأن مدة صلاحية الشهادة.
انسخ الوحدة النمطية المُكتملة إلى دليل الوحدات النمطية في نواة النظام قيد التشغيل. وقّع الملف المُثبّت بدقة بعد أي تعديلات على الملفات، مثل التغليف أو إزالة الملفات غير الضرورية أو غيرها. استبدل اسم mydriverالوحدة النمطية ومسارها باسمها الأساسي وموقعها الفعليين.
install -D -m 0644 /path/to/mydriver.ko \
"/lib/modules/$(uname -r)/extra/mydriver.ko"
SIGN_FILE="$(readlink -f /lib/modules/$(uname -r)/build)/scripts/sign-file"
test -x "$SIGN_FILE" || echo "Locate the sign-file binary for this kernel"
"$SIGN_FILE" sha256 /root/module-signing/MOK.priv \
/root/module-signing/MOK.der \
"/lib/modules/$(uname -r)/extra/mydriver.ko"
modinfo -F signer "/lib/modules/$(uname -r)/extra/mydriver.ko"
قم بتطبيق التوقيع على ملف .ko المثبت وافحص حقل التوقيع الخاص به قبل تحميله.
إذا sign-fileلم يكن الملف موجودًا في ذلك المسار، فابحث عن الأداة المرفقة مع ملفات بناء النواة المطابقة بدلاً من نسخ نسخة غير ذات صلة. يشير ظهور المُوقِّع إلى أن الملف يحتوي على بيانات تعريف التوقيع، ولا يُثبت ذلك تسجيل المُوقِّع. لا تقم أبدًا بحذف أو تعديل الوحدة بعد التوقيع.
4. قم بتسجيل الشهادة العامة باستخدام MOK
استورد الشهادة العامة بصيغة DER، ثم MOK.privعيّن كلمة مرور التسجيل لمرة واحدة المطلوبة mokutil. جهّز الوصول إلى وحدة التحكم قبل إعادة التشغيل؛ تتم عملية التفويض في واجهة MokManager عند بدء التشغيل، وليس في جلسة SSH.
في قائمة وقت بدء تشغيل UEFI، حدد "تسجيل MOK" وقم بتأكيد تسجيل الشهادة المطلوبة.
عند إعادة التشغيل التالية، اختر "تسجيل MOK" ، واتبع تعليمات التأكيد، وأدخل كلمة المرور لمرة واحدة، ثم تابع عملية الإقلاع. يختلف شكل القائمة حسب إصدار البرنامج الثابت ونسخة shim. العودة إلى نظام Linux دون تأكيد التسجيل تجعل الشهادة الجديدة غير موثوقة.
5. قم بتحميل الوحدة النمطية الموقعة وعزل الأخطاء المتبقية
قم بتحديث بيانات تعريف تبعيات الوحدة النمطية وقم بتحميل الوحدة النمطية باسمها، وليس بمسار الملف الكامل. modprobeيحل هذا التبعيات ويحترم تكوين الوحدة النمطية القياسي.
تأكد من ظهور الوحدة النمطية الموقعة في قائمة الوحدات النمطية المحملة، وافحص سجل النواة بحثًا عن الأخطاء.
إذا استمر فشل التحميل، فاختر الإجراء التصحيحي الذي يتوافق مع الأدلة:
تم رفض المفتاح أو المفتاح المطلوب غير متوفر: أعد التشغيل mokutil --test-key؛ تأكد من أن الملف الذي قمت بتثبيته هو الملف الموقع وتحقق مما إذا كان تحديث برنامج التشغيل قد استبدله.
تنسيق الوحدة غير صالح: قارن modinfo -F vermagicمع uname -r، وأعد بناء النواة النشطة، وتحقق من بنية وحدة المعالجة المركزية.
رمز غير معروف أو تبعية مفقودة: inspect journalctl -k -b، والوحدات النمطية المطلوبة من البائع، وواجهة برمجة التطبيقات للنواة؛ التوقيع الآخر لن يحل مشكلة الرموز المفقودة.
بالنسبة لبرامج تشغيل التخزين أو الشبكة الضرورية لبدء التشغيل، اختبرها أولاً على نظام غير إنتاجي وتأكد من توفر وحدة تحكم الاسترداد. فعّل التحميل التلقائي فقط بعد أن يعمل برنامج التشغيل بشكل موثوق؛ راجع وثائق SUSE /etc/modules-load.d/للوحدات التي لا يتم تحميلها عند اكتشاف الجهاز.
تحقق من النتيجة بعد إعادة التشغيل
أعد تشغيل الجهاز مرة أخرى خلال فترة الصيانة إذا كان التحميل المستمر مهمًا. تأكد من بقاء خاصية التمهيد الآمن مُفعّلة، وتسجيل المفتاح العام، ووجود الوحدة النمطية، وعدم وجود أي خطأ جديد في التحقق أو التوافق من النواة. أعد بناء أو تثبيت وتوقيع الملفات المُحدّثة .koبعد ترقيات النواة أو برامج تشغيل المورّد.