https://github.com/jakeday/linux-surface/blob/master/SIGNING.md के कर्नेल हस्ताक्षर पर अधिक विशिष्ट निर्देश हैं (स्वीकृत उत्तर में लिंक किए गए उसी ट्यूटोरियल से अनुकूलित)। निर्देशों को निम्नानुसार पूरा किया गया है:
सुरक्षित बूट के लिए एक कस्टम कर्नेल पर हस्ताक्षर करना
निर्देश उबंटू के लिए हैं, लेकिन अन्य डिस्ट्रो के लिए समान काम करना चाहिए, अगर वे बूट लोडर के रूप में शिम और ग्रब का उपयोग कर रहे हैं। यदि आपका डिस्चार्ज शिम का उपयोग नहीं कर रहा है (जैसे लिनक्स फाउंडेशन प्रीलोडर), तो हस्ताक्षर को पूरा करने के लिए समान चरण होने चाहिए (जैसे LF प्रीलोडर के लिए मोकुइल के बजाय हैशटूल) या आप इसके बजाय शिम का उपयोग करने के लिए स्थापित कर सकते हैं। शिम के लिए उबंटू पैकेज कहा जाता है shim-signed
, लेकिन कृपया अपने आप को सूचित करें कि इसे सही तरीके से कैसे स्थापित किया जाए, ताकि आप अपने बूटलोडर को गड़बड़ न करें।
उबंटू में सबसे हालिया GRUB2 अपडेट (2.02 + dfsg1-5ubuntu1) के बाद से, GRUB2 ने अहस्ताक्षरित गुठली को लोड नहीं किया है, जब तक कि सुरक्षित बूट सक्षम है। उबंटू 18.04 के उपयोगकर्ताओं को ग्रब-एफी पैकेज के उन्नयन के दौरान सूचित किया जाएगा, कि यह कर्नेल हस्ताक्षरित नहीं है और अपग्रेड निरस्त हो जाएगा।
इस प्रकार आपके पास इस समस्या को हल करने के लिए तीन विकल्प हैं:
- आप स्वयं कर्नेल पर हस्ताक्षर करें।
- आप अपने डिस्ट्रो के एक हस्ताक्षरित, सामान्य कर्नेल का उपयोग करते हैं।
- आप सुरक्षित बूट अक्षम करें।
चूंकि विकल्प दो और तीन वास्तव में व्यवहार्य नहीं हैं, ये कर्नेल को स्वयं हस्ताक्षर करने के चरण हैं।
निर्देश उबंटू ब्लॉग से अनुकूलित । अनुसरण करने से पहले, कृपया अपने / boot / EFI निर्देशिका का बैकअप लें, ताकि आप सब कुछ पुनर्स्थापित कर सकें। अपने जोखिम पर इन चरणों का पालन करें।
- हस्ताक्षर कुंजी बनाने के लिए विन्यास बनाएं, mokconfig.cnf के रूप में सहेजें:
# This definition stops the following lines failing if HOME isn't
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3
string_mask = utf8only
prompt = no
[ req_distinguished_name ]
countryName = <YOURcountrycode>
stateOrProvinceName = <YOURstate>
localityName = <YOURcity>
0.organizationName = <YOURorganization>
commonName = Secure Boot Signing Key
emailAddress = <YOURemail>
[ v3 ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage = codeSigning,1.3.6.1.4.1.311.10.3.6
nsComment = "OpenSSL Generated Certificate"
अपने विवरण के साथ सभी भागों को समायोजित करें।
- कर्नेल पर हस्ताक्षर करने के लिए सार्वजनिक और निजी कुंजी बनाएँ:
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
- कुंजी को भी PEM प्रारूप में परिवर्तित करें (mokutil को DER की आवश्यकता है, sbsign को PEM की आवश्यकता है):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
- अपने शिम इंस्टालेशन की कुंजी को एनरोल करें:
sudo mokutil --import MOK.der
आपसे पासवर्ड मांगा जाएगा, आप अगले चरण में अपने प्रमुख चयन की पुष्टि करने के लिए इसका उपयोग करेंगे, इसलिए कोई भी चुनें।
अपने सिस्टम को पुनरारंभ करें। आप MOKManager नामक टूल की नीली स्क्रीन से सामना करेंगे। "MOK नामांकन करें" और फिर "कुंजी देखें" चुनें। सुनिश्चित करें कि यह आपकी कुंजी है जिसे आपने चरण 2 में बनाया है। बाद में प्रक्रिया जारी रखें और आपको वह पासवर्ड दर्ज करना होगा जो आपने चरण 4 में प्रदान किया था। अपने सिस्टम को बूट करना जारी रखें।
सत्यापित करें कि आपकी कुंजी के माध्यम से नामांकित है:
sudo mokutil --list-enrolled
- अपने स्थापित कर्नेल पर हस्ताक्षर करें (यह / boot / vmlinuz- [KERNEL-VERSION] -surface-linux-सतह पर होना चाहिए):
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface.signed
- अहस्ताक्षरित कर्नेल के इनट्राम को कॉपी करें, इसलिए हमारे पास हस्ताक्षरित के लिए एक इनआट्रम भी है।
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
- अपना grub-config अपडेट करें
sudo update-grub
- अपने सिस्टम को रिबूट करें और हस्ताक्षरित कर्नेल का चयन करें। यदि बूटिंग कार्य करता है, तो आप अहस्ताक्षरित कर्नेल को हटा सकते हैं:
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub
अब आपका सिस्टम एक हस्ताक्षरित कर्नेल के तहत चलना चाहिए और GRUB2 कार्यों को फिर से अपग्रेड करना चाहिए। यदि आप कस्टम कर्नेल को अपग्रेड करना चाहते हैं, तो आप चरण सात पर फिर से उपरोक्त चरणों का पालन करके आसानी से नए संस्करण पर हस्ताक्षर कर सकते हैं। इस प्रकार MOK- कीज (MOK.der, MOK.pem, MOK.priv) पर वापस जाएं।