जब मैं 3 पार्टी कर्नेल मॉड्यूल स्थापित करता हूं या कर्नेल अपग्रेड के बाद "आवश्यक कुंजी उपलब्ध नहीं" क्यों प्राप्त करता हूं?


79

यह समस्या केवल यूईएफआई सिस्टम पर ही होती है जिसमें सक्षम सिक्योर बूट होता है।

जब मैं वर्चुअलबॉक्स, एनवीडिया, या ब्रॉडकॉम ड्राइवरों जैसे डीकेएमएस मॉड्यूल स्थापित करने का प्रयास करता हूं, तो वे स्थापित नहीं होते हैं और Required key not availableजब मैं modprobeउनसे कोशिश करता हूं तो मुझे मिलता है।

वर्चुअलबॉक्स शिकायत करता vboxdrvहै कि लोड नहीं किया गया है।

ब्रॉडकॉम wlड्राइवर को lspci -kकर्नेल मॉड्यूल के रूप में दिखाया गया है लेकिन उपयोग में नहीं है। sudo modprobe wlफेंकता है Required key not available

यह समस्या तब भी हो सकती है जब मैं गिट स्रोतों से कुछ कर्नेल मॉड्यूल स्थापित करता हूं।

यह समस्या कर्नेल अपडेट के बाद अक्षम वायरलेस एडेप्टर, रिबूट के बाद काली स्क्रीन आदि के रूप में दिखाई दे सकती है।

मेरे द्वारा यह कैसे किया जा सकता है?


जवाबों:


85

Ubuntu कर्नेल 4.4.0-20 के बाद से EFI_SECURE_BOOT_SIG_ENFORCEकर्नेल कॉन्फ़िगरेशन सक्षम किया गया है। यदि UEFI सुरक्षित बूट सक्षम है, तो अहस्ताक्षरित तृतीय पक्ष मॉड्यूल लोड करने से रोकता है।

इस समस्या को ठीक करने का सबसे आसान तरीका सुरक्षित बूट को UEFI (BIOS) सेटिंग्स में अक्षम करना है।

ज्यादातर मामलों में आप ग्रब मेनू का उपयोग करके यूईएफआई सेटिंग्स में जा सकते हैं। ESCबूट करने पर बटन दबाएं , ग्रब मेनू में जाएं और सिस्टम सेटअप चुनें। सुरक्षित बूट विकल्प UEFI के "सुरक्षा" या "बूट" अनुभाग में होना चाहिए।

आप सीधे यूईएफआई में प्रवेश कर सकते हैं, लेकिन यह आपके हार्डवेयर पर निर्भर करता है। वहां कैसे पहुंचें, यह देखने के लिए अपना कंप्यूटर मैनुअल पढ़ें। यह हो सकता है Del, या F2बूट पर, या कुछ और हो सकता है।

एक वैकल्पिक तरीका सुरक्षित बूट का उपयोग कर निष्क्रिय करना है mokutil

चूंकि उबंटू कर्नेल 4.4.0-21.37 का निर्माण करता है, इसलिए इसे चालू करके तय किया जा सकता है

sudo apt install mokutil
sudo mokutil --disable-validation

इसके लिए पासवर्ड बनाना होगा। पासवर्ड कम से कम 8 वर्ण लंबा होना चाहिए। रिबूट करने के बाद, UEFI पूछेगा कि क्या आप सुरक्षा सेटिंग्स बदलना चाहते हैं। "हाँ" चुनें।

फिर आपसे पहले से बने पासवर्ड को दर्ज करने के लिए कहा जाएगा। कुछ यूईएफआई फर्मवेयर पूर्ण पासवर्ड के लिए नहीं कहते हैं, लेकिन इसके कुछ पात्रों को दर्ज करने के लिए, जैसे 1, 3, आदि सावधान रहें। कुछ लोगों को यह समझ में नहीं आता है। मैं इसे पहले प्रयास से नहीं मिला ;-)

अद्यतन: अब यह कर्नेल विन्यास सभी समर्थित उबंटू कर्नेल में सक्षम है। Ubuntu 16.04, 15.10 और 14.04 प्रभावित हैं।


यह मेरे लिए काम नहीं करता है। @Sputnik जवाब करता है। लेकिन फिर भी, मैं यह जानना चाहूंगा कि मोकुतिल मुझसे पासवर्ड क्यों पूछ रहा है और मुझे इसकी आवश्यकता कब है?
एल्विन केस्लर

8
@AlwinKesler यह एक पासवर्ड के लिए पूछता है जिसे वह रिबूट के बाद मान्य करेगा, इससे पहले MOK डेटाबेस में परिवर्तन वास्तव में बाहर है। इसके बिना, एक बदमाश प्रक्रिया एमओके डेटाबेस में चाबियाँ बदल सकती है जो अगले रिबूट के बाद प्रभावी हो जाती है। इसके अलावा, अब प्लेटफ़ॉर्म 'जानता है' कि परिवर्तन का अनुरोध करने वाला व्यक्ति वही व्यक्ति है जो रिबूट के बाद शारीरिक रूप से मौजूद है, और इस तरह हार्डवेयर सुरक्षा उपायों को पारित कर दिया जाएगा, जैसे कि मशीन तक भौतिक पहुंच और बूट टाइम सिस्टम पासवर्ड जानना ।
zwets

@ पायलट 6: कुछ तकनीकी मुद्दों के कारण मैं अभी भी Ubuntu 14.04 LTS पर हूं। जवाब अपडेट करने के लिए बहुत बहुत धन्यवाद।
रवि जोशी

3
मेरे लिए उबंटू 18.04 पर काम किया। मेरे जीवन के लिए यह पता नहीं लगाया जा सकता है कि एनवीडिया ड्राइवरों को स्थापित करना किसी भी माध्यम से काम नहीं कर रहा था, या यहां तक ​​कि 16.04 पर वापस जाने से भी। गाह! यह तय कर दिया। इतना समय बर्बाद किया।
नैट

1
मेरा उबंटू सिस्टम वास्तव में पिछड़ गया था। कोई मतलब नहीं है क्योंकि यह एक नया लैपटॉप था। अब मुझे एहसास हुआ कि CPU सब कुछ कर रहा था और मेरा वीडियो कार्ड पूरे समय बेकार बैठा था। इस लिंक ने भी मदद की - linuxbabe.com/ubuntu/install-nvidia-driver-ubuntu-18-04
पीटर ड्रिनान

32

के रूप में सुझाव दिया उपयोगकर्ता @zwets से, मैं (संपादन के साथ) को कॉपी कर रहा हूँ एक जवाब यहाँ:

कर्नेल संस्करण 4.4.0-20 के बाद से, यह लागू किया गया कि अहस्ताक्षरित कर्नेल मॉड्यूल को सुरक्षित बूट सक्षम के साथ चलने की अनुमति नहीं दी जाएगी। यदि आप सुरक्षित बूट रखना चाहते हैं और इन मॉड्यूल को चलाना भी चाहते हैं , तो अगला तार्किक कदम उन मॉड्यूल पर हस्ताक्षर करना है।

तो चलिए इसे आजमाते हैं।

  1. हस्ताक्षर कुंजी बनाएँ

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
    
  2. मॉड्यूल पर हस्ताक्षर करें

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module
    

नोट 1 : एकल ड्राइवर / मॉड्यूल के लिए हस्ताक्षरित होने के लिए कई फाइलें हो सकती हैं, इसलिए /path/to/moduleइसे प्रतिस्थापित करने की आवश्यकता हो सकती है $(modinfo -n <modulename>), जैसे$(modinfo -n vboxdrv)

नोट 2 : sudo kmodsign sha512 ./MOK.priv ./MOK.der /path/to/moduleयदि sign-fileउपलब्ध नहीं है तो एक विकल्प है।

  1. बूट को सुरक्षित करने के लिए कुंजियों को पंजीकृत करें

    sudo mokutil --import MOK.der
    

    रीबूट के बाद उपयोग के लिए पासवर्ड की आपूर्ति करें

  2. Rebootऔर MOK (मशीन के मालिक कुंजी) का नामांकन करने के लिए निर्देशों का पालन करें। यहाँ चित्रों के साथ एक नमूना है । सिस्टम एक बार फिर रिबूट करेगा।

यदि कुंजी को ठीक से नामांकित किया गया है, तो यह नीचे दिखाई देगा sudo mokutil --list-enrolled

कृपया मुझे बताएं कि क्या आपके मॉड्यूल इस तरह से Ubuntu 16.04 (कर्नेल 4.4.0-21 पर, मेरा मानना ​​है) पर चलेंगे।

संसाधन: मॉड्यूल हस्ताक्षर के फेडोरा और उबंटू कार्यान्वयन के लिए विस्तृत वेबसाइट लेख । (वे इस पर काम कर रहे हैं) ;-)

अतिरिक्त संसाधन: मैंने हर बार virtualbox-dkmsअपग्रेड के लिए अपने स्वयं के उपयोग के लिए एक बैश स्क्रिप्ट बनाई और इस प्रकार हस्ताक्षर किए गए मॉड्यूल को अधिलेखित कर दिया। मेरे vboxsignमूल GitHub पर देखें

सुरक्षा के लिए अतिरिक्त नोट (अतिरिक्त) सचेत: ;-)

चूंकि आपके द्वारा बनाई गई निजी कुंजी ( MOK.privइस उदाहरण में) का उपयोग किसी के द्वारा किया जा सकता है, जिसके पास इसकी पहुंच हो सकती है, इसे सुरक्षित रखने के लिए यह अच्छा अभ्यास है। आप chmodइसे, एन्क्रिप्ट ( gpg) कर सकते हैं, या इसे कहीं और सुरक्षित (आर) स्टोर कर सकते हैं। या, जैसा कि इस टिप्पणी में कहा गया है , -nodesचरण 1 में विकल्प को हटा दें । यह पासफ़्रेज़ के साथ कुंजी को एन्क्रिप्ट करेगा।


उबंटू 14.10 पर मैंने key आवश्यक कुंजी उपलब्ध नहीं है ’को जारी रखने के लिए एक ब्रॉडकॉम चालक को स्थापित करने की कोशिश की , जो कि कुंजी को नियंत्रित करने और ड्राइवर के हस्ताक्षर करने के बावजूद। सत्यापन अक्षम करने से काम हुआ।
मार्क

1
यह मेरे लिए VirtualBox और Ubuntu 16.04 के लिए काम किया।
YtvwlD

1
मुझे चरण 3 में निम्न त्रुटि मिलती है: "इस सिस्टम पर EFI चर समर्थित नहीं हैं"। "dmesg" की कोई efi प्रविष्टियाँ नहीं हैं ("dmesg | grep efi" का कोई परिणाम नहीं है) मैं और क्या कर सकता हूँ? धन्यवाद
musbach

आप $ (modinfo -n modulename) के साथ पथ को स्थानापन्न कर सकते हैं
शेन

उबंटू 18.04 पर, यहाँ talpa_syscallhook.ko मॉड्यूल के लिए insmod यह कहता है कि "आवश्यक कुंजी उपलब्ध नहीं है" बावजूद मैंने उस मॉड्यूल पर हस्ताक्षर किए हैं, और सभी अन्य मॉड्यूल सोफोसे AV के लिए उसी निर्देशिका में हैं। कुंजी सफलतापूर्वक पंजीकृत हो गई है क्योंकि मैं इसे देख सकता हूं जब मैं सभी मोक कुंजी सूचीबद्ध करता हूं। कैसे आगे बढ़ना है पर कोई विचार?
फ्रान मारजोआ

6

आप निम्न चरणों के साथ BIOS में सुरक्षित बूट (UEFI) को अक्षम कर सकते हैं:

  1. अपनी मशीन को रिबूट करें और BIOS मेनू दर्ज करें (मेरे मामले में F2 दबाने पर)

  2. सुरक्षित बूट की खोज करें और विरासत में बदलें

एक ASUS मदरबोर्ड में:

  • उन्नत मोड (F7) पर जाएं
  • बूट सेक्शन के नीचे सिक्योर बूट ऑप्शन में जाएं
  • "अन्य ओएस" के साथ "विंडोज यूईएफआई मोड" बदलें
  • सेटिंग लागू करने के लिए सहेजें और पुनरारंभ करें (F10)

2
सुरक्षित बूट और "विरासत" अलग-अलग सेटिंग्स हैं।
पायलट 6

लेकिन अगर आपके पास UEFI के बजाय "लीगेसी बूट" सक्षम है, तो क्या यह सुनिश्चित करता है कि सिक्योर बूट सक्षम नहीं है?
असामान्य

@ असामान्य, हाँ, यह वही है जो मैं समझता हूँ।
स्पुतनिक

3

आप शिम-साइनिंग रनिंग में सिक्योर बूट को डिसेबल भी कर सकते हैं sudo update-secureboot-policy। यह विकी पृष्ठ इस विधि की व्याख्या करता है:

  • एक टर्मिनल खोलें (Ctrl + Alt + T), और sudo update-Secureboot- नीति निष्पादित करें और फिर Yes चुनें।
  • 8 से 16 अंकों के बीच एक अस्थायी पासवर्ड दर्ज करें। (उदाहरण के लिए, 12345678, हम बाद में इस पासवर्ड का उपयोग करेंगे
  • पुष्टि करने के लिए फिर से वही पासवर्ड डालें।
  • जब आप नीली स्क्रीन (MOK प्रबंधन) देखते हैं, तो सिस्टम को रिबूट करें और किसी भी कुंजी को दबाएं
  • सुरक्षित बूट स्थिति बदलें का चयन करें
  • चरण 2 में आपके द्वारा चुना गया पासवर्ड दर्ज करें और Enter दबाएं।
  • शिम-हस्ताक्षरित में सुरक्षित बूट को अक्षम करने के लिए हां का चयन करें।
  • पूरी प्रक्रिया समाप्त करने के लिए Enter कुंजी दबाएँ।

आप अभी भी शिम-हस्ताक्षरित फिर से सिक्योर बूट को सक्षम कर सकते हैं। बस अमल करो

sudo update-Secureboot-policy --enable और फिर ऊपर दिए गए चरणों का पालन करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.