लोडेबल कर्नेल मॉड्यूल: Difference between revisions

From Vigyanwiki
No edit summary
Line 1: Line 1:
{{Short description|Dynamically loadable module that extends a running operating system kernel}}
{{Short description|Dynamically loadable module that extends a running operating system kernel}}
[[ कम्प्यूटिंग ]] में, एक लोड करने योग्य कर्नेल मॉड्यूल (LKM) एक [[वस्तु फ़ाइल]] है जिसमें एक [[ऑपरेटिंग सिस्टम]] के चलने वाले [[कर्नेल (ऑपरेटिंग सिस्टम)]], या तथाकथित ''बेस कर्नेल'' के विस्तार के लिए कोड होता है। एलकेएम आमतौर पर नए [[कंप्यूटर हार्डवेयर]] ([[डिवाइस ड्राइवर]] के रूप में) और/या [[फाइल सिस्टम]] के लिए या [[सिस्टम कॉल]] जोड़ने के लिए समर्थन जोड़ने के लिए उपयोग किया जाता है। जब एलकेएम द्वारा प्रदान की जाने वाली कार्यक्षमता की आवश्यकता नहीं होती है, तो इसे [[ कंप्यूटर भंडारण ]] और अन्य संसाधनों को मुक्त करने के लिए अनलोड किया जा सकता है।
[[ कम्प्यूटिंग | संगणना]] में, एक भारण करने योग्य कर्नेल मापांक (एलकेएम) एक [[वस्तु फ़ाइल|वस्तु  संचिका]] है जिसमें एक   [[ऑपरेटिंग सिस्टम|संचालन सिस्टम]] के चलने वाले [[कर्नेल (ऑपरेटिंग सिस्टम)|कर्नेल (  संचालन सिस्टम)]], या तथाकथित   ''मूल कर्नेल'' के विस्तार के लिए   सांकेतिक अंक होता है। एलकेएम आमतौर पर नए [[कंप्यूटर हार्डवेयर|संगणक हार्डवेयर]] ([[डिवाइस ड्राइवर]] के रूप में) और/या [[फाइल सिस्टम|संचिका सिस्टम]] के लिए या [[सिस्टम कॉल|सिस्टम  आह्वान]] जोड़ने के लिए समर्थन जोड़ने के लिए उपयोग किया जाता है। जब एलकेएम द्वारा प्रदान की जाने वाली कार्यक्षमता की आवश्यकता नहीं होती है, तो इसे [[ कंप्यूटर भंडारण |  संगणक भंडारण]] और अन्य संसाधनों को मुक्त करने के लिए भार रहित किया जा सकता है।


अधिकांश वर्तमान यूनिक्स जैसी प्रणालियाँ और [[Microsoft Windows]] विभिन्न नामों के तहत लोड करने योग्य कर्नेल मॉड्यूल का समर्थन करते हैं, जैसे कि [[FreeBSD]] में कर्नेल लोड करने योग्य मॉड्यूल (kld), [[macOS]] में कर्नेल एक्सटेंशन (kext) (हालाँकि तृतीय-पक्ष मॉड्यूल के लिए समर्थन छोड़ा जा रहा है)<ref>{{cite web |title=बहिष्कृत कर्नेल एक्सटेंशन और सिस्टम एक्सटेंशन विकल्प|url=https://developer.apple.com/support/kernel-extensions/ |publisher=Apple Inc. |access-date=13 March 2021}}</ref>),<ref>{{cite web|url=https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/introduction.html|title=Kernel Extension Programming Topics: Introduction|publisher=[[Apple Inc.]]|date=September 1, 2010|access-date=May 5, 2013|url-status=live|archive-url=https://web.archive.org/web/20130504142911/http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/introduction.html|archive-date=May 4, 2013}}</ref> [[AIX]] में कर्नेल एक्सटेंशन मॉड्यूल, [[HP-UX]] में गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल,<ref>{{cite web|url=https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c01943990|title=गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल का प्रबंधन और विकास करना|publisher=[[Hewlett-Packard]]|date=June 7, 2001}}</ref> [[Windows NT]] में कर्नेल-मोड ड्राइवर<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/windows/hardware/ff557272(v=vs.85).aspx|title=ड्राइवर लोड होने पर क्या निर्धारित करता है|work=[[Microsoft Developer Network]]|publisher=[[Microsoft]]|date=November 21, 2012|access-date=May 5, 2013|url-status=live|archive-url=https://web.archive.org/web/20130306121408/http://msdn.microsoft.com/en-us/library/windows/hardware/ff557272%28v%3Dvs.85%29.aspx|archive-date=March 6, 2013}}</ref> और [[VxWorks]] में डाउनलोड करने योग्य कर्नेल मॉड्यूल (DKM)। उन्हें कर्नेल लोड करने योग्य मॉड्यूल (या केएलएम) के रूप में भी जाना जाता है, और केवल कर्नेल मॉड्यूल (केएमओडी) के रूप में जाना जाता है।
अधिकांश वर्तमान यूनिक्स प्रतिरूप प्रणालियाँ और [[Microsoft Windows|माइक्रोसॉफ्ट विंडोज़]] विभिन्न नामों के तहत भारण करने योग्य कर्नेल मापांक का समर्थन करते हैं, जैसे कि [[FreeBSD]] में कर्नेल भारण करने योग्य मापांक (kld), [[macOS]] में कर्नेल एक्सटेंशन (kext) (हालाँकि तृतीय-पक्ष मापांक के लिए समर्थन छोड़ा जा रहा है)<ref>{{cite web |title=बहिष्कृत कर्नेल एक्सटेंशन और सिस्टम एक्सटेंशन विकल्प|url=https://developer.apple.com/support/kernel-extensions/ |publisher=Apple Inc. |access-date=13 March 2021}}</ref>),<ref>{{cite web|url=https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/introduction.html|title=Kernel Extension Programming Topics: Introduction|publisher=[[Apple Inc.]]|date=September 1, 2010|access-date=May 5, 2013|url-status=live|archive-url=https://web.archive.org/web/20130504142911/http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptIntro/introduction.html|archive-date=May 4, 2013}}</ref> [[AIX]] में कर्नेल एक्सटेंशन मापांक, [[HP-UX]] में गतिशील रूप से भारण करने योग्य कर्नेल मापांक,<ref>{{cite web|url=https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c01943990|title=गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल का प्रबंधन और विकास करना|publisher=[[Hewlett-Packard]]|date=June 7, 2001}}</ref> [[Windows NT|विंडोज़ NT]] में कर्नेल-मोड ड्राइवर<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/windows/hardware/ff557272(v=vs.85).aspx|title=ड्राइवर लोड होने पर क्या निर्धारित करता है|work=[[Microsoft Developer Network]]|publisher=[[Microsoft]]|date=November 21, 2012|access-date=May 5, 2013|url-status=live|archive-url=https://web.archive.org/web/20130306121408/http://msdn.microsoft.com/en-us/library/windows/hardware/ff557272%28v%3Dvs.85%29.aspx|archive-date=March 6, 2013}}</ref> और [[VxWorks]] में डाउनलोड करने योग्य कर्नेल मापांक (DKM)। उन्हें कर्नेल भारण करने योग्य मापांक (या केएलएम) के रूप में भी जाना जाता है, और केवल कर्नेल मापांक (केएमओडी) के रूप में जाना जाता है।


== लाभ ==
== लाभ ==
लोड करने योग्य कर्नेल मॉड्यूल के बिना, एक ऑपरेटिंग सिस्टम को बेस कर्नेल में सीधे संकलित सभी संभावित प्रत्याशित कार्यक्षमता को शामिल करना होगा। उस कार्यक्षमता का अधिकांश उपयोग किए बिना स्मृति में रहता है, स्मृति को बर्बाद कर देता है, और इसके लिए आवश्यक होगा कि उपयोगकर्ता हर बार नई कार्यक्षमता की आवश्यकता होने पर बेस कर्नेल को पुनर्निर्माण और रीबूट करें।
भारण करने योग्य कर्नेल मापांक के बिना, एक   संचालन सिस्टम को   मूल कर्नेल में सीधे संकलित सभी संभावित प्रत्याशित कार्यक्षमता को शामिल करना होगा। उस कार्यक्षमता का अधिकांश उपयोग किए बिना स्मृति में रहता है, स्मृति को बर्बाद कर देता है, और इसके लिए आवश्यक होगा कि उपयोगकर्ता हर बार नई कार्यक्षमता की आवश्यकता होने पर   मूल कर्नेल को पुनर्निर्माण और रीबूट करें।


== नुकसान ==
== नुकसान ==
एक स्थिर कर्नेल पर एक मॉड्यूलर कर्नेल को प्राथमिकता देने की एक छोटी सी आलोचना तथाकथित [[विखंडन (कंप्यूटिंग)]] पेनल्टी है। बेस कर्नेल हमेशा अपने सेटअप रूटीन द्वारा वास्तविक सन्निहित [[ रैंडम एक्सेस मेमोरी ]] में अनपैक किया जाता है; इस प्रकार, बेस कर्नेल कोड कभी खंडित नहीं होता है। एक बार जब सिस्टम उस स्थिति में होता है जिसमें मॉड्यूल डाले जा सकते हैं, उदाहरण के लिए एक बार फ़ाइल सिस्टम को [[माउंट (कंप्यूटिंग)]] कर दिया जाता है जिसमें मॉड्यूल होते हैं, यह संभावना है कि कोई भी नया कर्नेल कोड सम्मिलन कर्नेल को खंडित कर देगा, जिससे परिचय अधिक [[अनुवाद लुकसाइड बफर]] प्रविष्टियों का उपयोग करके एक मामूली प्रदर्शन जुर्माना, जिससे अधिक टीएलबी छूट जाती है।{{citation needed|date=September 2007}}
एक स्थिर कर्नेल पर एक मॉड्यूलर कर्नेल को प्राथमिकता देने की एक छोटी सी आलोचना तथाकथित [[विखंडन (कंप्यूटिंग)]] पेनल्टी है।   मूल कर्नेल हमेशा अपने सेटअप रूटीन द्वारा वास्तविक सन्निहित [[ रैंडम एक्सेस मेमोरी ]] में अनपैक किया जाता है; इस प्रकार,   मूल कर्नेल   सांकेतिक अंक कभी खंडित नहीं होता है। एक बार जब सिस्टम उस स्थिति में होता है जिसमें मापांक डाले जा सकते हैं, उदाहरण के लिए एक बार संचिका  सिस्टम को [[माउंट (कंप्यूटिंग)]] कर दिया जाता है जिसमें मापांक होते हैं, यह संभावना है कि कोई भी नया कर्नेल   सांकेतिक अंक सम्मिलन कर्नेल को खंडित कर देगा, जिससे परिचय अधिक [[अनुवाद लुकसाइड बफर]] प्रविष्टियों का उपयोग करके एक मामूली प्रदर्शन जुर्माना, जिससे अधिक टीएलबी छूट जाती है।{{citation needed|date=September 2007}}


== विभिन्न ऑपरेटिंग सिस्टम में कार्यान्वयन ==
== विभिन्न   संचालन सिस्टम में कार्यान्वयन ==


=== लिनक्स ===
=== लिनक्स ===
लिनक्स में लोड करने योग्य कर्नेल मॉड्यूल किसके द्वारा लोड (और अनलोड) किए जाते हैं <code>[[modprobe]]</code> आज्ञा। वे में स्थित हैं <code>/lib/modules</code> या <code>/usr/lib/modules</code> और उनका विस्तार हो गया है <code>.ko</code> (कर्नेल ऑब्जेक्ट) संस्करण 2.6 के बाद से (पिछले संस्करणों ने <code>.o</code> विस्तार)।<ref>{{cite web|title=The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"|url=https://tldp.org/LDP/lkmpg/2.6/html/x181.html|access-date=2020-10-05}}</ref>  <code>[[lsmod]]</code> e> कमांड लोड किए गए कर्नेल मॉड्यूल को सूचीबद्ध करता है। आपातकालीन मामलों में, जब सिस्टम बूट करने में विफल रहता है उदा। टूटे हुए मॉड्यूल, विशिष्ट मॉड्यूल को कर्नेल बूट पैरामीटर सूची को संशोधित करके सक्षम या अक्षम किया जा सकता है (उदाहरण के लिए, यदि [[GNU GRUB]] का उपयोग करके, GRUB प्रारंभ मेनू में 'e' दबाकर, फिर कर्नेल पैरामीटर लाइन को संपादित करके)।
लिनक्स में भारण करने योग्य कर्नेल मापांक किसके द्वारा भारण (और भार रहित) किए जाते हैं <code>[[modprobe]]</code> आज्ञा। वे में स्थित हैं <code>/lib/modules</code> या <code>/usr/lib/modules</code> और उनका विस्तार हो गया है <code>.ko</code> (कर्नेल ऑब्जेक्ट) संस्करण 2.6 के बाद से (पिछले संस्करणों ने <code>.o</code> विस्तार)।<ref>{{cite web|title=The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"|url=https://tldp.org/LDP/lkmpg/2.6/html/x181.html|access-date=2020-10-05}}</ref>  <code>[[lsmod]]</code> e> कमांड भारण किए गए कर्नेल मापांक को सूचीबद्ध करता है। आपातकालीन मामलों में, जब सिस्टम बूट करने में विफल रहता है उदा। टूटे हुए मापांक, विशिष्ट मापांक को कर्नेल बूट पैरामीटर सूची को संशोधित करके सक्षम या अक्षम किया जा सकता है (उदाहरण के लिए, यदि [[GNU GRUB]] का उपयोग करके, GRUB प्रारंभ मेनू में 'e' दबाकर, फिर कर्नेल पैरामीटर लाइन को संपादित करके)।


==== लाइसेंस मुद्दे ====
==== लाइसेंस मुद्दे ====
लिनक्स अनुरक्षकों की राय में, LKM कर्नेल का [[व्युत्पन्न कार्य]] है{{citation needed|date=September 2015}}. लिनक्स अनुरक्षक [[मालिकाना सॉफ्टवेयर]] मॉड्यूल के वितरण को सहन करते हैं,{{Citation needed|date=April 2012}} लेकिन प्रतीकों को केवल [[जीएनयू जनरल पब्लिक लाइसेंस]] (GPL) मॉड्यूल के लिए उपलब्ध के रूप में चिह्नित करने की अनुमति दें।
लिनक्स अनुरक्षकों की राय में, LKM कर्नेल का [[व्युत्पन्न कार्य]] है{{citation needed|date=September 2015}}. लिनक्स अनुरक्षक [[मालिकाना सॉफ्टवेयर]] मापांक के वितरण को सहन करते हैं,{{Citation needed|date=April 2012}} लेकिन प्रतीकों को केवल [[जीएनयू जनरल पब्लिक लाइसेंस]] (GPL) मापांक के लिए उपलब्ध के रूप में चिह्नित करने की अनुमति दें।


मालिकाना या गैर-जीपीएल-संगत मॉड्यूल लोड करने से 'कलंक' ध्वज सेट हो जाएगा<ref>{{cite web |date=2011-06-21 |author=Linus Torvalds |title=Documentation/oops-tracing.txt |publisher=kernel.org |url=http://repo.or.cz/w/linux-2.6.git/blob/HEAD:/Documentation/oops-tracing.txt#l222 |access-date=2011-10-03 |display-authors=etal |url-status=live |archive-url=https://web.archive.org/web/20111002110747/http://repo.or.cz/w/linux-2.6.git/blob/HEAD%3A/Documentation/oops-tracing.txt#l222 |archive-date=2011-10-02 }}</ref><ref>{{cite web|url=https://www.kernel.org/doc/html/latest/admin-guide/tainted-kernels.html|title=दागी हुई गुठली|work=The Linux kernel user’s and administrator’s guide}}</ref> चल रहे कर्नेल में - जिसका अर्थ है कि अनुभव की गई किसी भी समस्या या बग की अनुरक्षकों द्वारा जांच किए जाने की संभावना कम होगी।<ref>{{cite web |date=2006-03-24 |author=Jonathan Corbet |title=यूजर स्पेस से टैनिंग|publisher=[[LWN.net]] |url=https://lwn.net/Articles/184879/ |access-date=2011-10-03 |url-status=live |archive-url=https://web.archive.org/web/20111116215244/http://lwn.net/Articles/184879/ |archive-date=2011-11-16 }}</ref><ref>{{cite web |date=2007-07-26 |title=Novell support documentation: Tainted kernel |url=http://www.novell.com/support/viewContent.do?externalId=3582750&sliceId=1 |access-date=2011-10-03 }}</ref> LKM प्रभावी रूप से चल रहे कर्नेल का हिस्सा बन जाते हैं, इसलिए कर्नेल डेटा संरचनाओं को दूषित कर सकते हैं और ऐसे बग उत्पन्न कर सकते हैं जिनकी जांच नहीं की जा सकती है यदि मॉड्यूल वास्तव में मालिकाना है।
मालिकाना या गैर-जीपीएल-संगत मापांक  भारण करने से 'कलंक' ध्वज सेट हो जाएगा<ref>{{cite web |date=2011-06-21 |author=Linus Torvalds |title=Documentation/oops-tracing.txt |publisher=kernel.org |url=http://repo.or.cz/w/linux-2.6.git/blob/HEAD:/Documentation/oops-tracing.txt#l222 |access-date=2011-10-03 |display-authors=etal |url-status=live |archive-url=https://web.archive.org/web/20111002110747/http://repo.or.cz/w/linux-2.6.git/blob/HEAD%3A/Documentation/oops-tracing.txt#l222 |archive-date=2011-10-02 }}</ref><ref>{{cite web|url=https://www.kernel.org/doc/html/latest/admin-guide/tainted-kernels.html|title=दागी हुई गुठली|work=The Linux kernel user’s and administrator’s guide}}</ref> चल रहे कर्नेल में - जिसका अर्थ है कि अनुभव की गई किसी भी समस्या या बग की अनुरक्षकों द्वारा जांच किए जाने की संभावना कम होगी।<ref>{{cite web |date=2006-03-24 |author=Jonathan Corbet |title=यूजर स्पेस से टैनिंग|publisher=[[LWN.net]] |url=https://lwn.net/Articles/184879/ |access-date=2011-10-03 |url-status=live |archive-url=https://web.archive.org/web/20111116215244/http://lwn.net/Articles/184879/ |archive-date=2011-11-16 }}</ref><ref>{{cite web |date=2007-07-26 |title=Novell support documentation: Tainted kernel |url=http://www.novell.com/support/viewContent.do?externalId=3582750&sliceId=1 |access-date=2011-10-03 }}</ref> LKM प्रभावी रूप से चल रहे कर्नेल का हिस्सा बन जाते हैं, इसलिए कर्नेल डेटा संरचनाओं को दूषित कर सकते हैं और ऐसे बग उत्पन्न कर सकते हैं जिनकी जांच नहीं की जा सकती है यदि मापांक वास्तव में मालिकाना है।


==== Linuxant विवाद ====
==== Linuxant विवाद ====
2004 में, Linuxant, एक परामर्श कंपनी जो लोड करने योग्य कर्नेल मॉड्यूल के रूप में मालिकाना डिवाइस ड्राइवर जारी करती है, ने अपने में एक [[शून्य वर्ण]] का दुरुपयोग करने का प्रयास किया। <code>MODULE_LICENSE</code>, जैसा कि निम्नलिखित कोड अंश में दिखाई देता है:
2004 में, Linuxant, एक परामर्श कंपनी जो भारण करने योग्य कर्नेल मापांक के रूप में मालिकाना डिवाइस ड्राइवर जारी करती है, ने अपने में एक [[शून्य वर्ण]] का दुरुपयोग करने का प्रयास किया। <code>MODULE_LICENSE</code>, जैसा कि निम्नलिखित   सांकेतिक अंक अंश में दिखाई देता है:


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
MODULE_LICENSE("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");
MODULE_LICENSE("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");
</syntaxhighlight>
</syntaxhighlight>
कर्नेल द्वारा उपयोग किए गए स्ट्रिंग तुलना कोड ने उस समय यह निर्धारित करने का प्रयास किया कि क्या मॉड्यूल GPLed बंद हो गया था जब यह एक शून्य वर्ण तक पहुंच गया था (<code>\0</code>), इसलिए यह सोचकर बेवकूफ बनाया गया कि मॉड्यूल अपने लाइसेंस को सिर्फ GPL घोषित कर रहा है।<ref>{{cite web|author=Jonathan Corbet|title=Being honest with MODULE_LICENSE|url=https://lwn.net/Articles/82305/|publisher=LWN.net|date=April 27, 2004|access-date=October 30, 2012|url-status=live|archive-url=https://web.archive.org/web/20121102095811/http://lwn.net/Articles/82305/|archive-date=November 2, 2012}}</ref>
कर्नेल द्वारा उपयोग किए गए स्ट्रिंग तुलना   सांकेतिक अंक ने उस समय यह निर्धारित करने का प्रयास किया कि क्या मापांक GPLed बंद हो गया था जब यह एक शून्य वर्ण तक पहुंच गया था (<code>\0</code>), इसलिए यह सोचकर बेवकूफ बनाया गया कि मापांक अपने लाइसेंस को सिर्फ GPL घोषित कर रहा है।<ref>{{cite web|author=Jonathan Corbet|title=Being honest with MODULE_LICENSE|url=https://lwn.net/Articles/82305/|publisher=LWN.net|date=April 27, 2004|access-date=October 30, 2012|url-status=live|archive-url=https://web.archive.org/web/20121102095811/http://lwn.net/Articles/82305/|archive-date=November 2, 2012}}</ref>




=== फ्रीबीएसडी ===
=== फ्रीबीएसडी ===
FreeBSD के लिए कर्नेल मॉड्यूल भीतर संग्रहीत हैं <code>/boot/kernel/</code> ऑपरेटिंग सिस्टम के साथ वितरित मॉड्यूल के लिए, या आमतौर पर <code>/boot/modules/</code> FreeBSD पोर्ट या FreeBSD पोर्ट#पैकेज से स्थापित मॉड्यूल के लिए, या मालिकाना या अन्यथा बाइनरी-ओनली मॉड्यूल के लिए। FreeBSD कर्नेल मॉड्यूल में आमतौर पर एक्सटेंशन होता है <code>.ko</code>. एक बार मशीन बूट हो जाने के बाद, उन्हें इसके साथ लोड किया जा सकता है <code>kldload</code> कमांड, अनलोडेड <code>kldunload</code>, और के साथ सूचीबद्ध है <code>kldstat</code>. कर्नेल शुरू होने से पहले मॉड्यूल को लोडर से भी लोड किया जा सकता है, या तो स्वचालित रूप से (के माध्यम से <code>/boot/loader.conf</code>) या हाथ से।
FreeBSD के लिए कर्नेल मापांक भीतर संग्रहीत हैं <code>/boot/kernel/</code>   संचालन सिस्टम के साथ वितरित मापांक के लिए, या आमतौर पर <code>/boot/modules/</code> FreeBSD पोर्ट या FreeBSD पोर्ट#पैकेज से स्थापित मापांक के लिए, या मालिकाना या अन्यथा बाइनरी-ओनली मापांक के लिए। FreeBSD कर्नेल मापांक में आमतौर पर एक्सटेंशन होता है <code>.ko</code>. एक बार मशीन बूट हो जाने के बाद, उन्हें इसके साथ भारण किया जा सकता है <code>kldload</code> कमांड, अनलोडेड <code>kldunload</code>, और के साथ सूचीबद्ध है <code>kldstat</code>. कर्नेल शुरू होने से पहले मापांक को लोडर से भी भारण किया जा सकता है, या तो स्वचालित रूप से (के माध्यम से <code>/boot/loader.conf</code>) या हाथ से।


=== मैकोज़ ===
=== मैकोज़ ===
macOS में कुछ लोड करने योग्य कर्नेल मॉड्यूल स्वचालित रूप से लोड किए जा सकते हैं। लोड करने योग्य कर्नेल मॉड्यूल को इसके द्वारा भी लोड किया जा सकता है <code>kextload</code> आज्ञा। द्वारा सूचीबद्ध किया जा सकता है <code>kextstat</code> आज्ञा। लोड करने योग्य कर्नेल मॉड्यूल एक्सटेंशन के साथ [[बंडल (macOS)]] में स्थित हैं <code>.kext</code>. ऑपरेटिंग सिस्टम के साथ दिए गए मॉड्यूल्स को स्टोर किया जाता है <code>/System/Library/Extensions</code> निर्देशिका; तीसरे पक्ष द्वारा आपूर्ति किए गए मॉड्यूल विभिन्न अन्य निर्देशिकाओं में हैं।
macOS में कुछ भारण करने योग्य कर्नेल मापांक स्वचालित रूप से भारण किए जा सकते हैं। भारण करने योग्य कर्नेल मापांक को इसके द्वारा भी भारण किया जा सकता है <code>kextload</code> आज्ञा। द्वारा सूचीबद्ध किया जा सकता है <code>kextstat</code> आज्ञा। भारण करने योग्य कर्नेल मापांक एक्सटेंशन के साथ [[बंडल (macOS)]] में स्थित हैं <code>.kext</code>.   संचालन सिस्टम के साथ दिए गए मॉड्यूल्स को स्टोर किया जाता है <code>/System/Library/Extensions</code> निर्देशिका; तीसरे पक्ष द्वारा आपूर्ति किए गए मापांक विभिन्न अन्य निर्देशिकाओं में हैं।


=== नेटवेयर ===
=== नेटवेयर ===
नेटवेयर कर्नेल मॉड्यूल को [[ नेटवेयर लोड करने योग्य मॉड्यूल ]] (एनएलएम) कहा जाता है। एनएलएम को लोड कमांड के माध्यम से नेटवेयर कर्नेल में डाला जाता है, और अनलोड कमांड के माध्यम से हटाया जाता है; <code>modules</code> कमांड वर्तमान में लोड किए गए कर्नेल मॉड्यूल को सूचीबद्ध करता है। एनएलएम नेटवेयर सर्वर पर निर्दिष्ट किसी भी वैध खोज पथ में रह सकते हैं, और उनके पास है <code>.NLM</code> फ़ाइल नाम एक्सटेंशन के रूप में।
नेटवेयर कर्नेल मापांक को [[ नेटवेयर लोड करने योग्य मॉड्यूल | नेटवेयर  भारण करने योग्य  मापांक]] (एनएलएम) कहा जाता है। एनएलएम को भारण कमांड के माध्यम से नेटवेयर कर्नेल में डाला जाता है, और भार रहित कमांड के माध्यम से हटाया जाता है; <code>modules</code> कमांड वर्तमान में भारण किए गए कर्नेल मापांक को सूचीबद्ध करता है। एनएलएम नेटवेयर सर्वर पर निर्दिष्ट किसी भी वैध खोज पथ में रह सकते हैं, और उनके पास है <code>.NLM</code> संचिका  नाम एक्सटेंशन के रूप में।


=== वीएक्सवर्क्स ===
=== वीएक्सवर्क्स ===
एक डाउनलोड करने योग्य कर्नेल मॉड्यूल (DKM) प्रकार की परियोजना एक .out फ़ाइल उत्पन्न करने के लिए बनाई जा सकती है जिसे बाद में ld कमांड का उपयोग करके कर्नेल स्थान पर लोड किया जा सकता है। यह डाउनलोड करने योग्य कर्नेल मॉड्यूल unld कमांड का उपयोग करके अनलोड किया जा सकता है।
एक डाउनलोड करने योग्य कर्नेल मापांक (DKM) प्रकार की परियोजना एक .out संचिका  उत्पन्न करने के लिए बनाई जा सकती है जिसे बाद में ld कमांड का उपयोग करके कर्नेल स्थान पर भारण किया जा सकता है। यह डाउनलोड करने योग्य कर्नेल मापांक unld कमांड का उपयोग करके भार रहित किया जा सकता है।


=== सोलारिस ===
=== सोलारिस ===
सोलारिस के पास एक विन्यास योग्य कर्नेल मॉड्यूल लोड पथ है, जो इसके लिए तयशुदा है <code>/platform/platform-name/kernel /kernel /usr/kernel</code>. अधिकांश कर्नेल मॉड्यूल उपनिर्देशिकाओं के अंतर्गत रहते हैं <code>/kernel</code>; जिन्हें सिस्टम को उस बिंदु तक बूट करने के लिए आवश्यक नहीं माना जाता है जो init प्रारंभ कर सकते हैं अक्सर (लेकिन हमेशा नहीं) में पाए जाते हैं <code>/usr/kernel</code>. DEBUG कर्नेल बिल्ड करते समय सिस्टम सक्रिय रूप से मॉड्यूल को अनलोड करने का प्रयास करता है।
सोलारिस के पास एक विन्यास योग्य कर्नेल मापांक  भारण पथ है, जो इसके लिए तयशुदा है <code>/platform/platform-name/kernel /kernel /usr/kernel</code>. अधिकांश कर्नेल मापांक उपनिर्देशिकाओं के अंतर्गत रहते हैं <code>/kernel</code>; जिन्हें सिस्टम को उस बिंदु तक बूट करने के लिए आवश्यक नहीं माना जाता है जो init प्रारंभ कर सकते हैं अक्सर (लेकिन हमेशा नहीं) में पाए जाते हैं <code>/usr/kernel</code>. DEBUG कर्नेल बिल्ड करते समय सिस्टम सक्रिय रूप से मापांक को भार रहित करने का प्रयास करता है।


== बाइनरी संगतता ==
== बाइनरी संगतता ==
लिनक्स कर्नेल मॉड्यूल के लिए एक स्थिर [[एपीआई]] या [[अनुप्रयोग बाइनरी इंटरफ़ेस]] प्रदान नहीं करता है। इसका अर्थ है कि विभिन्न कर्नेल संस्करणों के बीच आंतरिक संरचना और कार्य में अंतर हैं, जो संगतता समस्याओं का कारण बन सकता है। उन समस्याओं का मुकाबला करने के प्रयास में, प्रतीक संस्करण डेटा को <code>.modinfo</code> लोड करने योग्य [[निष्पादन योग्य और लिंक करने योग्य प्रारूप]] मॉड्यूल का खंड। मॉड्यूल लोड करने से पहले इस वर्जनिंग जानकारी की तुलना चल रहे कर्नेल से की जा सकती है; यदि संस्करण असंगत हैं, तो मॉड्यूल लोड नहीं होगा।
लिनक्स कर्नेल मापांक के लिए एक स्थिर [[एपीआई]] या [[अनुप्रयोग बाइनरी इंटरफ़ेस]] प्रदान नहीं करता है। इसका अर्थ है कि विभिन्न कर्नेल संस्करणों के बीच आंतरिक संरचना और कार्य में अंतर हैं, जो संगतता समस्याओं का कारण बन सकता है। उन समस्याओं का मुकाबला करने के प्रयास में, प्रतीक संस्करण डेटा को <code>.modinfo</code> भारण करने योग्य [[निष्पादन योग्य और लिंक करने योग्य प्रारूप]] मापांक का खंड। मापांक  भारण करने से पहले इस वर्जनिंग जानकारी की तुलना चल रहे कर्नेल से की जा सकती है; यदि संस्करण असंगत हैं, तो मापांक  भारण नहीं होगा।


अन्य ऑपरेटिंग सिस्टम, जैसे Solaris (ऑपरेटिंग सिस्टम), FreeBSD, macOS, और Microsoft Windows कर्नेल API और एप्लिकेशन बाइनरी इंटरफ़ेस को अपेक्षाकृत स्थिर रखते हैं, इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित FreeBSD कर्नेल मॉड्यूल किसी अन्य FreeBSD 6.x संस्करण पर पुनर्संकलन के बिना काम करेगा, उदा। 6.4। हालांकि, वे अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें FreeBSD 7.x के साथ उपयोग करने के लिए पुनः संकलित किया जाना चाहिए, क्योंकि API और ABI संगतता केवल एक शाखा के भीतर ही बनाए रखी जाती है।
अन्य   संचालन सिस्टम, जैसे Solaris ( संचालन सिस्टम), FreeBSD, macOS, और माइक्रोसॉफ्ट विंडोज़ कर्नेल API और एप्लिकेशन बाइनरी इंटरफ़ेस को अपेक्षाकृत स्थिर रखते हैं, इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित FreeBSD कर्नेल मापांक किसी अन्य FreeBSD 6.x संस्करण पर पुनर्संकलन के बिना काम करेगा, उदा। 6.4। हालांकि, वे अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें FreeBSD 7.x के साथ उपयोग करने के लिए पुनः संकलित किया जाना चाहिए, क्योंकि API और ABI संगतता केवल एक शाखा के भीतर ही बनाए रखी जाती है।


== सुरक्षा ==
== सुरक्षा ==
जबकि लोड करने योग्य कर्नेल मॉड्यूल चालू कर्नेल को संशोधित करने का एक सुविधाजनक तरीका है, हमलावरों द्वारा उनकी [[प्रक्रिया (कंप्यूटिंग)]] या [[कम्प्यूटर फाइल]] का पता लगाने से रोकने के लिए एक समझौता प्रणाली पर इसका दुरुपयोग किया जा सकता है, जिससे उन्हें सिस्टम पर नियंत्रण बनाए रखने की अनुमति मिलती है। कई [[ rootkit ]] एलकेएम का इस तरह से उपयोग करते हैं। ध्यान दें कि, अधिकांश ऑपरेटिंग सिस्टम पर, मॉड्यूल किसी भी तरह से [[विशेषाधिकार उन्नयन]] में मदद नहीं करते हैं, क्योंकि एलकेएम को लोड करने के लिए उन्नत विशेषाधिकार की आवश्यकता होती है; वे केवल हमलावर के लिए सेंधमारी को छुपाना आसान बनाते हैं।<ref>[http://www.ouah.org/reiterlkm.htm Exploiting Loadable Kernel Modules ] {{webarchive|url=https://web.archive.org/web/20120204165532/http://www.ouah.org/reiterlkm.htm |date=2012-02-04 }}</ref>
जबकि भारण करने योग्य कर्नेल मापांक चालू कर्नेल को संशोधित करने का एक सुविधाजनक तरीका है, हमलावरों द्वारा उनकी [[प्रक्रिया (कंप्यूटिंग)]] या [[कम्प्यूटर फाइल|कम्प्यूटर  संचिका]] का पता लगाने से रोकने के लिए एक समझौता प्रणाली पर इसका दुरुपयोग किया जा सकता है, जिससे उन्हें सिस्टम पर नियंत्रण बनाए रखने की अनुमति मिलती है। कई [[ rootkit ]] एलकेएम का इस तरह से उपयोग करते हैं। ध्यान दें कि, अधिकांश   संचालन सिस्टम पर, मापांक किसी भी तरह से [[विशेषाधिकार उन्नयन]] में मदद नहीं करते हैं, क्योंकि एलकेएम को भारण करने के लिए उन्नत विशेषाधिकार की आवश्यकता होती है; वे केवल हमलावर के लिए सेंधमारी को छुपाना आसान बनाते हैं।<ref>[http://www.ouah.org/reiterlkm.htm Exploiting Loadable Kernel Modules ] {{webarchive|url=https://web.archive.org/web/20120204165532/http://www.ouah.org/reiterlkm.htm |date=2012-02-04 }}</ref>




=== लिनक्स ===
=== लिनक्स ===
लिनक्स [[sysctl]] विकल्प के माध्यम से मॉड्यूल लोडिंग को अक्षम करने की अनुमति देता है <code>/proc/sys/kernel/modules_disabled</code>.<ref>{{cite web|title=Sysctl/kernel.txt|url=https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/sysctl/kernel.txt;hb=HEAD|archive-url=https://archive.today/20130415070311/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/sysctl/kernel.txt;hb=HEAD|url-status=dead|archive-date=April 15, 2013|access-date=January 4, 2013}}</ref><ref>{{cite web
लिनक्स [[sysctl]] विकल्प के माध्यम से मापांक लोडिंग को अक्षम करने की अनुमति देता है <code>/proc/sys/kernel/modules_disabled</code>.<ref>{{cite web|title=Sysctl/kernel.txt|url=https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/sysctl/kernel.txt;hb=HEAD|archive-url=https://archive.today/20130415070311/http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/sysctl/kernel.txt;hb=HEAD|url-status=dead|archive-date=April 15, 2013|access-date=January 4, 2013}}</ref><ref>{{cite web
  | url = https://outflux.net/blog/archives/2012/11/28/clean-module-disabling/
  | url = https://outflux.net/blog/archives/2012/11/28/clean-module-disabling/
  | title = Clean module disabling
  | title = Clean module disabling
Line 61: Line 61:
  | author = Kees Cook
  | author = Kees Cook
  | publisher = outflux.net
  | publisher = outflux.net
  }}</ref> एक [[प्रारंभिक रैमडिस्क]] सिस्टम बूट पर मशीन के लिए आवश्यक विशिष्ट मॉड्यूल को लोड कर सकता है और फिर मॉड्यूल लोडिंग को अक्षम कर सकता है। यह सुरक्षा को एक अखंड कर्नेल के समान बनाता है। यदि कोई हमलावर initramfs को बदल सकता है, तो वे कर्नेल बाइनरी को बदल सकते हैं।
  }}</ref> एक [[प्रारंभिक रैमडिस्क]] सिस्टम बूट पर मशीन के लिए आवश्यक विशिष्ट मापांक को भारण कर सकता है और फिर मापांक लोडिंग को अक्षम कर सकता है। यह सुरक्षा को एक अखंड कर्नेल के समान बनाता है। यदि कोई हमलावर initramfs को बदल सकता है, तो वे कर्नेल बाइनरी को बदल सकते हैं।


=== मैकोज़ ===
=== मैकोज़ ===
[[OS X Yosemite]] और बाद के रिलीज में, एक कर्नेल एक्सटेंशन को [[ कोड हस्ताक्षर ]] | कोड-हस्ताक्षरित [[एप्पल डेवलपर]] प्रमाणपत्र के साथ होना चाहिए जो इसके लिए एक विशेष पात्रता रखता है। ऐसा डेवलपर प्रमाणपत्र केवल अनुरोध पर Apple द्वारा प्रदान किया जाता है और स्वचालित रूप से Apple डेवलपर सदस्यों को नहीं दिया जाता है। यह सुविधा, जिसे kextsigning कहा जाता है, डिफ़ॉल्ट रूप से सक्षम है और यह कर्नेल को बूटिंग रोकने का निर्देश देती है यदि अहस्ताक्षरित कर्नेल एक्सटेंशन मौजूद हैं।<ref>{{Cite web|url=https://developer.apple.com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html|title=कर्नेल एक्सटेंशन|date=September 16, 2015|website=Mac Developer Library|publisher=Apple|archive-url=https://web.archive.org/web/20160817085001/https://developer.apple.com/library/mac/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html|archive-date=August 17, 2016|url-status=live|access-date=September 29, 2016}}</ref> OS X El Capitan|{{Nowrap|OS X}} El Capitan और बाद में रिलीज, यह [[सिस्टम इंटीग्रिटी प्रोटेक्शन]] का हिस्सा है।
[[OS X Yosemite]] और बाद के रिलीज में, एक कर्नेल एक्सटेंशन को [[ कोड हस्ताक्षर |    सांकेतिक अंक हस्ताक्षर]] |   सांकेतिक अंक-हस्ताक्षरित [[एप्पल डेवलपर]] प्रमाणपत्र के साथ होना चाहिए जो इसके लिए एक विशेष पात्रता रखता है। ऐसा डेवलपर प्रमाणपत्र केवल अनुरोध पर Apple द्वारा प्रदान किया जाता है और स्वचालित रूप से Apple डेवलपर सदस्यों को नहीं दिया जाता है। यह सुविधा, जिसे kextsigning कहा जाता है, डिफ़ॉल्ट रूप से सक्षम है और यह कर्नेल को बूटिंग रोकने का निर्देश देती है यदि अहस्ताक्षरित कर्नेल एक्सटेंशन मौजूद हैं।<ref>{{Cite web|url=https://developer.apple.com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html|title=कर्नेल एक्सटेंशन|date=September 16, 2015|website=Mac Developer Library|publisher=Apple|archive-url=https://web.archive.org/web/20160817085001/https://developer.apple.com/library/mac/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html|archive-date=August 17, 2016|url-status=live|access-date=September 29, 2016}}</ref> OS X El Capitan|{{Nowrap|OS X}} El Capitan और बाद में रिलीज, यह [[सिस्टम इंटीग्रिटी प्रोटेक्शन]] का हिस्सा है।


MacOS के पुराने संस्करणों में, या यदि kext हस्ताक्षर अक्षम है, कर्नेल एक्सटेंशन बंडल में लोड करने योग्य कर्नेल मॉड्यूल को गैर-रूट उपयोगकर्ताओं द्वारा लोड किया जा सकता है यदि OSBundleAllowUserLoad गुण बंडल की संपत्ति सूची में True पर सेट है।<ref>{{cite web|title=कर्नेल एक्सटेंशन के लिए Info.plist गुण|url=https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/Articles/infoplist_keys.html|publisher=[[Apple Inc.]]|access-date=September 27, 2012|url-status=live|archive-url=https://web.archive.org/web/20120926232217/http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/Articles/infoplist_keys.html|archive-date=September 26, 2012}}</ref> हालाँकि, यदि निष्पादन योग्य कोड फ़ाइल सहित बंडल की कोई भी फ़ाइल रूट और ग्रुप व्हील के स्वामित्व में नहीं है, या समूह या अन्य द्वारा लिखने योग्य है, तो कर्नेल लोड करने योग्य मॉड्यूल को लोड करने का प्रयास विफल हो जाएगा।<ref>{{man|8|kextload|Darwin}}</ref>
MacOS के पुराने संस्करणों में, या यदि kext हस्ताक्षर अक्षम है, कर्नेल एक्सटेंशन बंडल में भारण करने योग्य कर्नेल मापांक को गैर-रूट उपयोगकर्ताओं द्वारा भारण किया जा सकता है यदि OSBundleAllowUserLoad गुण बंडल की संपत्ति सूची में True पर सेट है।<ref>{{cite web|title=कर्नेल एक्सटेंशन के लिए Info.plist गुण|url=https://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/Articles/infoplist_keys.html|publisher=[[Apple Inc.]]|access-date=September 27, 2012|url-status=live|archive-url=https://web.archive.org/web/20120926232217/http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/Articles/infoplist_keys.html|archive-date=September 26, 2012}}</ref> हालाँकि, यदि निष्पादन योग्य   सांकेतिक अंक  संचिका  सहित बंडल की कोई भी संचिका  रूट और ग्रुप व्हील के स्वामित्व में नहीं है, या समूह या अन्य द्वारा लिखने योग्य है, तो कर्नेल भारण करने योग्य मापांक को भारण करने का प्रयास विफल हो जाएगा।<ref>{{man|8|kextload|Darwin}}</ref>




=== सोलारिस ===
=== सोलारिस ===
कर्नेल मॉड्यूल में वैकल्पिक रूप से एक क्रिप्टोग्राफ़िक हस्ताक्षर ELF अनुभाग हो सकता है जो सत्यापित बूट नीति सेटिंग्स के आधार पर लोड पर सत्यापित होता है। कर्नेल यह लागू कर सकता है कि मॉड्यूल क्रिप्टोग्राफ़िक रूप से विश्वसनीय प्रमाणपत्रों के एक सेट द्वारा हस्ताक्षरित हैं; कुछ SPARC आधारित प्लेटफॉर्म पर ILOM में OS के बाहर विश्वसनीय प्रमाणपत्रों की सूची रखी जाती है। उपयोक्तास्थान द्वारा शुरू किया गया कर्नेल मॉड्यूल लोडिंग विश्वसनीय पथ से तभी संभव है जब सिस्टम सक्षम अपरिवर्तनीय वैश्विक क्षेत्र सुविधा के साथ चल रहा हो।
कर्नेल मापांक में वैकल्पिक रूप से एक क्रिप्टोग्राफ़िक हस्ताक्षर ELF अनुभाग हो सकता है जो सत्यापित बूट नीति सेटिंग्स के आधार पर भारण पर सत्यापित होता है। कर्नेल यह लागू कर सकता है कि मापांक क्रिप्टोग्राफ़िक रूप से विश्वसनीय प्रमाणपत्रों के एक सेट द्वारा हस्ताक्षरित हैं; कुछ SPARC आधारित प्लेटफॉर्म पर ILOM में OS के बाहर विश्वसनीय प्रमाणपत्रों की सूची रखी जाती है। उपयोक्तास्थान द्वारा शुरू किया गया कर्नेल मापांक लोडिंग विश्वसनीय पथ से तभी संभव है जब सिस्टम सक्षम अपरिवर्तनीय वैश्विक क्षेत्र सुविधा के साथ चल रहा हो।


== यह भी देखें ==
== यह भी देखें ==
* नेटवेयर लोड करने योग्य मॉड्यूल
* नेटवेयर भारण करने योग्य मापांक


== संदर्भ ==
== संदर्भ ==

Revision as of 19:26, 19 May 2023

संगणना में, एक भारण करने योग्य कर्नेल मापांक (एलकेएम) एक वस्तु संचिका है जिसमें एक संचालन सिस्टम के चलने वाले कर्नेल ( संचालन सिस्टम), या तथाकथित मूल कर्नेल के विस्तार के लिए सांकेतिक अंक होता है। एलकेएम आमतौर पर नए संगणक हार्डवेयर (डिवाइस ड्राइवर के रूप में) और/या संचिका सिस्टम के लिए या सिस्टम आह्वान जोड़ने के लिए समर्थन जोड़ने के लिए उपयोग किया जाता है। जब एलकेएम द्वारा प्रदान की जाने वाली कार्यक्षमता की आवश्यकता नहीं होती है, तो इसे संगणक भंडारण और अन्य संसाधनों को मुक्त करने के लिए भार रहित किया जा सकता है।

अधिकांश वर्तमान यूनिक्स प्रतिरूप प्रणालियाँ और माइक्रोसॉफ्ट विंडोज़ विभिन्न नामों के तहत भारण करने योग्य कर्नेल मापांक का समर्थन करते हैं, जैसे कि FreeBSD में कर्नेल भारण करने योग्य मापांक (kld), macOS में कर्नेल एक्सटेंशन (kext) (हालाँकि तृतीय-पक्ष मापांक के लिए समर्थन छोड़ा जा रहा है)[1]),[2] AIX में कर्नेल एक्सटेंशन मापांक, HP-UX में गतिशील रूप से भारण करने योग्य कर्नेल मापांक,[3] विंडोज़ NT में कर्नेल-मोड ड्राइवर[4] और VxWorks में डाउनलोड करने योग्य कर्नेल मापांक (DKM)। उन्हें कर्नेल भारण करने योग्य मापांक (या केएलएम) के रूप में भी जाना जाता है, और केवल कर्नेल मापांक (केएमओडी) के रूप में जाना जाता है।

लाभ

भारण करने योग्य कर्नेल मापांक के बिना, एक संचालन सिस्टम को मूल कर्नेल में सीधे संकलित सभी संभावित प्रत्याशित कार्यक्षमता को शामिल करना होगा। उस कार्यक्षमता का अधिकांश उपयोग किए बिना स्मृति में रहता है, स्मृति को बर्बाद कर देता है, और इसके लिए आवश्यक होगा कि उपयोगकर्ता हर बार नई कार्यक्षमता की आवश्यकता होने पर मूल कर्नेल को पुनर्निर्माण और रीबूट करें।

नुकसान

एक स्थिर कर्नेल पर एक मॉड्यूलर कर्नेल को प्राथमिकता देने की एक छोटी सी आलोचना तथाकथित विखंडन (कंप्यूटिंग) पेनल्टी है। मूल कर्नेल हमेशा अपने सेटअप रूटीन द्वारा वास्तविक सन्निहित रैंडम एक्सेस मेमोरी में अनपैक किया जाता है; इस प्रकार, मूल कर्नेल सांकेतिक अंक कभी खंडित नहीं होता है। एक बार जब सिस्टम उस स्थिति में होता है जिसमें मापांक डाले जा सकते हैं, उदाहरण के लिए एक बार संचिका सिस्टम को माउंट (कंप्यूटिंग) कर दिया जाता है जिसमें मापांक होते हैं, यह संभावना है कि कोई भी नया कर्नेल सांकेतिक अंक सम्मिलन कर्नेल को खंडित कर देगा, जिससे परिचय अधिक अनुवाद लुकसाइड बफर प्रविष्टियों का उपयोग करके एक मामूली प्रदर्शन जुर्माना, जिससे अधिक टीएलबी छूट जाती है।[citation needed]

विभिन्न संचालन सिस्टम में कार्यान्वयन

लिनक्स

लिनक्स में भारण करने योग्य कर्नेल मापांक किसके द्वारा भारण (और भार रहित) किए जाते हैं modprobe आज्ञा। वे में स्थित हैं /lib/modules या /usr/lib/modules और उनका विस्तार हो गया है .ko (कर्नेल ऑब्जेक्ट) संस्करण 2.6 के बाद से (पिछले संस्करणों ने .o विस्तार)।[5] lsmod e> कमांड भारण किए गए कर्नेल मापांक को सूचीबद्ध करता है। आपातकालीन मामलों में, जब सिस्टम बूट करने में विफल रहता है उदा। टूटे हुए मापांक, विशिष्ट मापांक को कर्नेल बूट पैरामीटर सूची को संशोधित करके सक्षम या अक्षम किया जा सकता है (उदाहरण के लिए, यदि GNU GRUB का उपयोग करके, GRUB प्रारंभ मेनू में 'e' दबाकर, फिर कर्नेल पैरामीटर लाइन को संपादित करके)।

लाइसेंस मुद्दे

लिनक्स अनुरक्षकों की राय में, LKM कर्नेल का व्युत्पन्न कार्य है[citation needed]. लिनक्स अनुरक्षक मालिकाना सॉफ्टवेयर मापांक के वितरण को सहन करते हैं,[citation needed] लेकिन प्रतीकों को केवल जीएनयू जनरल पब्लिक लाइसेंस (GPL) मापांक के लिए उपलब्ध के रूप में चिह्नित करने की अनुमति दें।

मालिकाना या गैर-जीपीएल-संगत मापांक भारण करने से 'कलंक' ध्वज सेट हो जाएगा[6][7] चल रहे कर्नेल में - जिसका अर्थ है कि अनुभव की गई किसी भी समस्या या बग की अनुरक्षकों द्वारा जांच किए जाने की संभावना कम होगी।[8][9] LKM प्रभावी रूप से चल रहे कर्नेल का हिस्सा बन जाते हैं, इसलिए कर्नेल डेटा संरचनाओं को दूषित कर सकते हैं और ऐसे बग उत्पन्न कर सकते हैं जिनकी जांच नहीं की जा सकती है यदि मापांक वास्तव में मालिकाना है।

Linuxant विवाद

2004 में, Linuxant, एक परामर्श कंपनी जो भारण करने योग्य कर्नेल मापांक के रूप में मालिकाना डिवाइस ड्राइवर जारी करती है, ने अपने में एक शून्य वर्ण का दुरुपयोग करने का प्रयास किया। MODULE_LICENSE, जैसा कि निम्नलिखित सांकेतिक अंक अंश में दिखाई देता है:

MODULE_LICENSE("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");

कर्नेल द्वारा उपयोग किए गए स्ट्रिंग तुलना सांकेतिक अंक ने उस समय यह निर्धारित करने का प्रयास किया कि क्या मापांक GPLed बंद हो गया था जब यह एक शून्य वर्ण तक पहुंच गया था (\0), इसलिए यह सोचकर बेवकूफ बनाया गया कि मापांक अपने लाइसेंस को सिर्फ GPL घोषित कर रहा है।[10]


फ्रीबीएसडी

FreeBSD के लिए कर्नेल मापांक भीतर संग्रहीत हैं /boot/kernel/ संचालन सिस्टम के साथ वितरित मापांक के लिए, या आमतौर पर /boot/modules/ FreeBSD पोर्ट या FreeBSD पोर्ट#पैकेज से स्थापित मापांक के लिए, या मालिकाना या अन्यथा बाइनरी-ओनली मापांक के लिए। FreeBSD कर्नेल मापांक में आमतौर पर एक्सटेंशन होता है .ko. एक बार मशीन बूट हो जाने के बाद, उन्हें इसके साथ भारण किया जा सकता है kldload कमांड, अनलोडेड kldunload, और के साथ सूचीबद्ध है kldstat. कर्नेल शुरू होने से पहले मापांक को लोडर से भी भारण किया जा सकता है, या तो स्वचालित रूप से (के माध्यम से /boot/loader.conf) या हाथ से।

मैकोज़

macOS में कुछ भारण करने योग्य कर्नेल मापांक स्वचालित रूप से भारण किए जा सकते हैं। भारण करने योग्य कर्नेल मापांक को इसके द्वारा भी भारण किया जा सकता है kextload आज्ञा। द्वारा सूचीबद्ध किया जा सकता है kextstat आज्ञा। भारण करने योग्य कर्नेल मापांक एक्सटेंशन के साथ बंडल (macOS) में स्थित हैं .kext. संचालन सिस्टम के साथ दिए गए मॉड्यूल्स को स्टोर किया जाता है /System/Library/Extensions निर्देशिका; तीसरे पक्ष द्वारा आपूर्ति किए गए मापांक विभिन्न अन्य निर्देशिकाओं में हैं।

नेटवेयर

नेटवेयर कर्नेल मापांक को नेटवेयर भारण करने योग्य मापांक (एनएलएम) कहा जाता है। एनएलएम को भारण कमांड के माध्यम से नेटवेयर कर्नेल में डाला जाता है, और भार रहित कमांड के माध्यम से हटाया जाता है; modules कमांड वर्तमान में भारण किए गए कर्नेल मापांक को सूचीबद्ध करता है। एनएलएम नेटवेयर सर्वर पर निर्दिष्ट किसी भी वैध खोज पथ में रह सकते हैं, और उनके पास है .NLM संचिका नाम एक्सटेंशन के रूप में।

वीएक्सवर्क्स

एक डाउनलोड करने योग्य कर्नेल मापांक (DKM) प्रकार की परियोजना एक .out संचिका उत्पन्न करने के लिए बनाई जा सकती है जिसे बाद में ld कमांड का उपयोग करके कर्नेल स्थान पर भारण किया जा सकता है। यह डाउनलोड करने योग्य कर्नेल मापांक unld कमांड का उपयोग करके भार रहित किया जा सकता है।

सोलारिस

सोलारिस के पास एक विन्यास योग्य कर्नेल मापांक भारण पथ है, जो इसके लिए तयशुदा है /platform/platform-name/kernel /kernel /usr/kernel. अधिकांश कर्नेल मापांक उपनिर्देशिकाओं के अंतर्गत रहते हैं /kernel; जिन्हें सिस्टम को उस बिंदु तक बूट करने के लिए आवश्यक नहीं माना जाता है जो init प्रारंभ कर सकते हैं अक्सर (लेकिन हमेशा नहीं) में पाए जाते हैं /usr/kernel. DEBUG कर्नेल बिल्ड करते समय सिस्टम सक्रिय रूप से मापांक को भार रहित करने का प्रयास करता है।

बाइनरी संगतता

लिनक्स कर्नेल मापांक के लिए एक स्थिर एपीआई या अनुप्रयोग बाइनरी इंटरफ़ेस प्रदान नहीं करता है। इसका अर्थ है कि विभिन्न कर्नेल संस्करणों के बीच आंतरिक संरचना और कार्य में अंतर हैं, जो संगतता समस्याओं का कारण बन सकता है। उन समस्याओं का मुकाबला करने के प्रयास में, प्रतीक संस्करण डेटा को .modinfo भारण करने योग्य निष्पादन योग्य और लिंक करने योग्य प्रारूप मापांक का खंड। मापांक भारण करने से पहले इस वर्जनिंग जानकारी की तुलना चल रहे कर्नेल से की जा सकती है; यदि संस्करण असंगत हैं, तो मापांक भारण नहीं होगा।

अन्य संचालन सिस्टम, जैसे Solaris ( संचालन सिस्टम), FreeBSD, macOS, और माइक्रोसॉफ्ट विंडोज़ कर्नेल API और एप्लिकेशन बाइनरी इंटरफ़ेस को अपेक्षाकृत स्थिर रखते हैं, इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित FreeBSD कर्नेल मापांक किसी अन्य FreeBSD 6.x संस्करण पर पुनर्संकलन के बिना काम करेगा, उदा। 6.4। हालांकि, वे अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें FreeBSD 7.x के साथ उपयोग करने के लिए पुनः संकलित किया जाना चाहिए, क्योंकि API और ABI संगतता केवल एक शाखा के भीतर ही बनाए रखी जाती है।

सुरक्षा

जबकि भारण करने योग्य कर्नेल मापांक चालू कर्नेल को संशोधित करने का एक सुविधाजनक तरीका है, हमलावरों द्वारा उनकी प्रक्रिया (कंप्यूटिंग) या कम्प्यूटर संचिका का पता लगाने से रोकने के लिए एक समझौता प्रणाली पर इसका दुरुपयोग किया जा सकता है, जिससे उन्हें सिस्टम पर नियंत्रण बनाए रखने की अनुमति मिलती है। कई rootkit एलकेएम का इस तरह से उपयोग करते हैं। ध्यान दें कि, अधिकांश संचालन सिस्टम पर, मापांक किसी भी तरह से विशेषाधिकार उन्नयन में मदद नहीं करते हैं, क्योंकि एलकेएम को भारण करने के लिए उन्नत विशेषाधिकार की आवश्यकता होती है; वे केवल हमलावर के लिए सेंधमारी को छुपाना आसान बनाते हैं।[11]


लिनक्स

लिनक्स sysctl विकल्प के माध्यम से मापांक लोडिंग को अक्षम करने की अनुमति देता है /proc/sys/kernel/modules_disabled.[12][13] एक प्रारंभिक रैमडिस्क सिस्टम बूट पर मशीन के लिए आवश्यक विशिष्ट मापांक को भारण कर सकता है और फिर मापांक लोडिंग को अक्षम कर सकता है। यह सुरक्षा को एक अखंड कर्नेल के समान बनाता है। यदि कोई हमलावर initramfs को बदल सकता है, तो वे कर्नेल बाइनरी को बदल सकते हैं।

मैकोज़

OS X Yosemite और बाद के रिलीज में, एक कर्नेल एक्सटेंशन को सांकेतिक अंक हस्ताक्षर | सांकेतिक अंक-हस्ताक्षरित एप्पल डेवलपर प्रमाणपत्र के साथ होना चाहिए जो इसके लिए एक विशेष पात्रता रखता है। ऐसा डेवलपर प्रमाणपत्र केवल अनुरोध पर Apple द्वारा प्रदान किया जाता है और स्वचालित रूप से Apple डेवलपर सदस्यों को नहीं दिया जाता है। यह सुविधा, जिसे kextsigning कहा जाता है, डिफ़ॉल्ट रूप से सक्षम है और यह कर्नेल को बूटिंग रोकने का निर्देश देती है यदि अहस्ताक्षरित कर्नेल एक्सटेंशन मौजूद हैं।[14] OS X El Capitan|OS X El Capitan और बाद में रिलीज, यह सिस्टम इंटीग्रिटी प्रोटेक्शन का हिस्सा है।

MacOS के पुराने संस्करणों में, या यदि kext हस्ताक्षर अक्षम है, कर्नेल एक्सटेंशन बंडल में भारण करने योग्य कर्नेल मापांक को गैर-रूट उपयोगकर्ताओं द्वारा भारण किया जा सकता है यदि OSBundleAllowUserLoad गुण बंडल की संपत्ति सूची में True पर सेट है।[15] हालाँकि, यदि निष्पादन योग्य सांकेतिक अंक संचिका सहित बंडल की कोई भी संचिका रूट और ग्रुप व्हील के स्वामित्व में नहीं है, या समूह या अन्य द्वारा लिखने योग्य है, तो कर्नेल भारण करने योग्य मापांक को भारण करने का प्रयास विफल हो जाएगा।[16]


सोलारिस

कर्नेल मापांक में वैकल्पिक रूप से एक क्रिप्टोग्राफ़िक हस्ताक्षर ELF अनुभाग हो सकता है जो सत्यापित बूट नीति सेटिंग्स के आधार पर भारण पर सत्यापित होता है। कर्नेल यह लागू कर सकता है कि मापांक क्रिप्टोग्राफ़िक रूप से विश्वसनीय प्रमाणपत्रों के एक सेट द्वारा हस्ताक्षरित हैं; कुछ SPARC आधारित प्लेटफॉर्म पर ILOM में OS के बाहर विश्वसनीय प्रमाणपत्रों की सूची रखी जाती है। उपयोक्तास्थान द्वारा शुरू किया गया कर्नेल मापांक लोडिंग विश्वसनीय पथ से तभी संभव है जब सिस्टम सक्षम अपरिवर्तनीय वैश्विक क्षेत्र सुविधा के साथ चल रहा हो।

यह भी देखें

  • नेटवेयर भारण करने योग्य मापांक

संदर्भ

  1. "बहिष्कृत कर्नेल एक्सटेंशन और सिस्टम एक्सटेंशन विकल्प". Apple Inc. Retrieved 13 March 2021.
  2. "Kernel Extension Programming Topics: Introduction". Apple Inc. September 1, 2010. Archived from the original on May 4, 2013. Retrieved May 5, 2013.
  3. "गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल का प्रबंधन और विकास करना". Hewlett-Packard. June 7, 2001.
  4. "ड्राइवर लोड होने पर क्या निर्धारित करता है". Microsoft Developer Network. Microsoft. November 21, 2012. Archived from the original on March 6, 2013. Retrieved May 5, 2013.
  5. "The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"". Retrieved 2020-10-05.
  6. Linus Torvalds; et al. (2011-06-21). "Documentation/oops-tracing.txt". kernel.org. Archived from the original on 2011-10-02. Retrieved 2011-10-03.
  7. "दागी हुई गुठली". The Linux kernel user’s and administrator’s guide.
  8. Jonathan Corbet (2006-03-24). "यूजर स्पेस से टैनिंग". LWN.net. Archived from the original on 2011-11-16. Retrieved 2011-10-03.
  9. "Novell support documentation: Tainted kernel". 2007-07-26. Retrieved 2011-10-03.
  10. Jonathan Corbet (April 27, 2004). "Being honest with MODULE_LICENSE". LWN.net. Archived from the original on November 2, 2012. Retrieved October 30, 2012.
  11. Exploiting Loadable Kernel Modules Archived 2012-02-04 at the Wayback Machine
  12. "Sysctl/kernel.txt". Archived from the original on April 15, 2013. Retrieved January 4, 2013.
  13. Kees Cook (2012-11-28). "Clean module disabling". outflux.net. Retrieved 2020-10-05.
  14. "कर्नेल एक्सटेंशन". Mac Developer Library. Apple. September 16, 2015. Archived from the original on August 17, 2016. Retrieved September 29, 2016.
  15. "कर्नेल एक्सटेंशन के लिए Info.plist गुण". Apple Inc. Archived from the original on September 26, 2012. Retrieved September 27, 2012.
  16. kextload(8) – Darwin and macOS System Manager's Manual