लोडेबल कर्नेल मॉड्यूल: Difference between revisions
No edit summary |
No edit summary |
||
Line 8: | Line 8: | ||
== असुविधा == | == असुविधा == | ||
एक स्थिर कर्नेल पर एक वैकल्पिक् कर्नेल को प्राथमिकता देने की एक छोटी सी आलोचना तथाकथित [[विखंडन (कंप्यूटिंग)|विखंडन ( कम्प्यूटिंग )]] दंड है। मुख्य कर्नेल सदैव अपने स्थापित नियमित के माध्यम से वास्तविक सन्निहित [[ रैंडम एक्सेस मेमोरी |रैंडम एक्सेस मेमोरी]] में अवेष्ठित किया जाता है। इस प्रकार मुख्य कर्नेल सांकेतिक अंक कभी खंडित नहीं होता है। एक बार जब सिस्टम उस स्थिति में होती है, जिसमें मॉड्यूल व्यक्त जा सकते हैं। उदाहरण के रूप मे एक बार संचिका सिस्टम को [[माउंट (कंप्यूटिंग)|माँउटेड ( कम्प्यूटिंग)]] कर दिया जाता है, जिसमें मॉड्यूल होते हैं। यह संभावना है कि कोई भी नवीनतम कर्नेल सांकेतिक अंक के उपयोग से कर्नेल को खंडित कर देगा, जिससे अधिक [[अनुवाद लुकसाइड बफर| | एक स्थिर कर्नेल पर एक वैकल्पिक् कर्नेल को प्राथमिकता देने की एक छोटी सी आलोचना तथाकथित [[विखंडन (कंप्यूटिंग)|विखंडन ( कम्प्यूटिंग )]] दंड है। मुख्य कर्नेल सदैव अपने स्थापित नियमित के माध्यम से वास्तविक सन्निहित [[ रैंडम एक्सेस मेमोरी |रैंडम एक्सेस मेमोरी]] में अवेष्ठित किया जाता है। इस प्रकार मुख्य कर्नेल सांकेतिक अंक कभी खंडित नहीं होता है। एक बार जब सिस्टम उस स्थिति में होती है, जिसमें मॉड्यूल व्यक्त जा सकते हैं। उदाहरण के रूप मे एक बार संचिका सिस्टम को [[माउंट (कंप्यूटिंग)|माँउटेड ( कम्प्यूटिंग)]] कर दिया जाता है, जिसमें मॉड्यूल होते हैं। यह संभावना है कि कोई भी नवीनतम कर्नेल सांकेतिक अंक के उपयोग से कर्नेल को खंडित कर देगा, जिससे अधिक [[अनुवाद लुकसाइड बफर|ट्रांसलेशन लुकसाइड बफर]] प्रविष्टियों का प्रयोग करके एक सामान्य प्रदर्शन दंड लगाया जा सकता है, जिससे अधिक टीएलबी असफल हो जाती है। | ||
== विभिन्न ऑपरेटिंग सिस्टम में कार्यान्वयन == | == विभिन्न ऑपरेटिंग सिस्टम में कार्यान्वयन == | ||
=== लिनक्स === | === लिनक्स === | ||
लिनक्स में संचयन करने योग्य कर्नेल मॉड्यूल <code>[[modprobe|मॉडप्रोब]]</code> आदेश माध्यम से संचयन (और असंचयन ) किये जाते हैं। वह <code>/lib/modules</code> अथवा <code>/usr/lib/modules</code> में स्थित हैं और संस्करण 2.6 के पश्चात् से <code>.ko</code> (कर्नेल उद्देश्य ) मे उनका विस्तार हो गया है। विगत संस्करणों में .o वृद्धि का उपयोग किया गया था।<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> अधिकार संचयन कर्नेल मॉड्यूल को सूचीबद्ध करता है। आपातकालीन स्थितियों में जब सिस्टम बूट करने में विफल रहता है। उदाहरण के रूप मे टूटे हुए मॉड्यूल है। विशिष्ट मॉड्यूल को कर्नेल बूट पैरामीटर सूची को संशोधित करके सक्षम अथवा अक्षम किया जा सकता है (उदाहरण के रूप मे कि [[GNU GRUB|ज़ीएनयू ज़ीआरयूबी]] का प्रयोग करके, ज़ीआरयूबी प्रारंभ मेनू में 'ई' दबाकर | लिनक्स में संचयन करने योग्य कर्नेल मॉड्यूल <code>[[modprobe|मॉडप्रोब]]</code> आदेश माध्यम से संचयन (और असंचयन ) किये जाते हैं। वह <code>/lib/modules</code> अथवा <code>/usr/lib/modules</code> में स्थित हैं और संस्करण 2.6 के पश्चात् से <code>.ko</code> (कर्नेल उद्देश्य ) मे उनका विस्तार हो गया है। विगत संस्करणों में .o वृद्धि का उपयोग किया गया था।<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> अधिकार संचयन कर्नेल मॉड्यूल को सूचीबद्ध करता है। आपातकालीन स्थितियों में जब सिस्टम बूट करने में विफल रहता है। उदाहरण के रूप मे टूटे हुए मॉड्यूल है। विशिष्ट मॉड्यूल को कर्नेल बूट पैरामीटर सूची को संशोधित करके सक्षम अथवा अक्षम किया जा सकता है (उदाहरण के रूप मे कि [[GNU GRUB|ज़ीएनयू ज़ीआरयूबी]] का प्रयोग करके, ज़ीआरयूबी प्रारंभ मेनू में 'ई' दबाकर तत्पश्चात् कर्नेल पैरामीटर रेखा को संपादित करके)। | ||
==== अनुज्ञप्ति उद्देश्यों ==== | ==== अनुज्ञप्ति उद्देश्यों ==== | ||
लिनक्स अनुरक्षकों के अनुमान में एलकेएम कर्नेल का [[व्युत्पन्न कार्य|ड्राइव कार्य]] है। लिनक्स अनुरक्षक [[मालिकाना सॉफ्टवेयर|स्वत्वाधिकारी सॉफ्टवेयर]] मॉड्यूल के वितरण को सहन करते हैं, किन्तु प्रतीकों को मात्र [[ | लिनक्स अनुरक्षकों के अनुमान में एलकेएम कर्नेल का [[व्युत्पन्न कार्य|ड्राइव कार्य]] है। लिनक्स अनुरक्षक [[मालिकाना सॉफ्टवेयर|स्वत्वाधिकारी सॉफ्टवेयर]] मॉड्यूल के वितरण को सहन करते हैं, किन्तु प्रतीकों को मात्र [[जीएनयू जनरल पब्लिक लाइसेंस]] ( ज़ीपीएल) मॉड्यूल के लिए उपलब्ध के रूप में चिह्नित करने की अनुमति देते है। | ||
स्वत्वाधिकारी अथवा अ-जीपीएल-संगत मॉड्यूल संचयन करने से ऑपरेटिंग कर्नेल में ' टेंट ' चिन्हक स्थापित हो जाएगा।<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> एलकेएम प्रभावी रूप से ऑपरेटिंग कर्नेल का खंड बन जाते हैं, इसलिए कर्नेल डाटा संरचनाओं को दूषित कर सकते हैं और ऐसे दोष अथवा त्रुटि उत्पन्न कर सकते हैं। | स्वत्वाधिकारी अथवा अ-जीपीएल-संगत मॉड्यूल संचयन करने से ऑपरेटिंग कर्नेल में ' टेंट ' चिन्हक स्थापित हो जाएगा।<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> एलकेएम प्रभावी रूप से ऑपरेटिंग कर्नेल का खंड बन जाते हैं, इसलिए कर्नेल डाटा संरचनाओं को दूषित कर सकते हैं और ऐसे दोष अथवा त्रुटि उत्पन्न कर सकते हैं। यदि मॉड्यूल वास्तव में स्वत्वाधिकारी है, तो इनका परीक्षण नहीं की जा सकता है । | ||
==== लिनक्सेंट विवाद ==== | ==== लिनक्सेंट विवाद ==== | ||
2004 में लिनक्सेंट एक परामर्श संगठन जो संचयन करने योग्य कर्नेल मॉड्यूल के रूप में स्वत्वाधिकारी उपकरण संचालक अवमुक्त करती है, ने अपने <code>मॉड्यूल अनुज्ञप्ति</code> में एक [[शून्य वर्ण]] का दुरुपयोग करने का प्रयास किया। जैसा कि निम्नलिखित सांकेतिक अंक में दिखाई देता है- | 2004 में लिनक्सेंट एक परामर्श संगठन जो संचयन करने योग्य कर्नेल मॉड्यूल के रूप में स्वत्वाधिकारी उपकरण संचालक अवमुक्त करती है, ने अपने <code>मॉड्यूल अनुज्ञप्ति</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> | ||
कर्नेल के माध्यम से प्रयोग किये गए श्रृंखला समानता सांकेतिक अंक ने उस समय यह निर्धारित करने का प्रयास किया कि क्या मॉड्यूल ज़ीपीएल संंवृत हो गया था। जब यह एक शून्य | कर्नेल के माध्यम से प्रयोग किये गए श्रृंखला समानता सांकेतिक अंक ने उस समय यह निर्धारित करने का प्रयास किया कि क्या मॉड्यूल ज़ीपीएल संंवृत हो गया था। जब यह एक शून्य समापक (<code>\0</code>) तक पहुंच गया था। इसलिए यह सोचकर मूर्ख बनाया गया कि मॉड्यूल अपने अनुज्ञप्ति को मात्र ज़ीपीएल घोषित कर रहा है।<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> | ||
=== स्वतंत्र बीएसडी === | === स्वतंत्र बीएसडी === | ||
स्वतंत्र बीडीएस के लिए कर्नेल मॉड्यूल <code>/boot/kernel/</code> | स्वतंत्र बीडीएस के लिए कर्नेल मॉड्यूल <code>/boot/kernel/</code> के साथ वितरित मॉड्यूल के लिए, ऑपरेटिंग सिस्टम अथवा सामान्यतः <code>/boot/modules/</code> स्वतंत्र बीडीएस पत्तन अथवा स्वतंत्र बीडीएस संवेष्टन से स्थापित मॉड्यूल के लिए, अथवा स्वत्वाधिकारी अथवा अन्यथा द्विचर -एकमात्र मॉड्यूल के लिए अंतर्गत संग्रहीत हैं। स्वतंत्र बीडीएस कर्नेल मॉड्यूल में सामान्यतः विस्तारण <code>.ko</code> होता है। एक बार यंत्र बूट हो जाने के पश्चात्, उन्हें <code>kldload</code> के साथ संचयन किया जा सकता है, और <code>kldunload</code> आदेश के साथ अभारित और <code>kldstat</code> के साथ सूचीबद्ध किया जा सकता है। कर्नेल प्रारंभ होने से पूर्व मॉड्यूल को संचयक से , स्वचालित रूप से (<code>/boot/loader.conf</code> के माध्यम से) अथवा हाथ से संचयन किया जा सकता है। | ||
=== मैकोज़ === | === मैकोज़ === | ||
मैकोज़ में कुछ संचयन करने योग्य कर्नेल मॉड्यूल स्वचालित रूप से संचयन किये जा सकते हैं। संचयन करने योग्य कर्नेल मॉड्यूल को <code>kextload</code> के माध्यम से भी संचयन किया जा सकता है। उन्हें <code>kextstat</code> आदेश के माध्यम से सूचीबद्ध किया जा सकता है। संचयन करने योग्य कर्नेल मॉड्यूल विस्तारण के साथ [[बंडल (macOS)|बंडल (मैकोज़)]] में स्थित | मैकोज़ में कुछ संचयन करने योग्य कर्नेल मॉड्यूल स्वचालित रूप से संचयन किये जा सकते हैं। संचयन करने योग्य कर्नेल मॉड्यूल को <code>kextload</code> के माध्यम से भी संचयन किया जा सकता है। उन्हें <code>kextstat</code> आदेश के माध्यम से सूचीबद्ध किया जा सकता है। संचयन करने योग्य कर्नेल मॉड्यूल विस्तारण <code>.kext</code>. विस्तारण के साथ [[बंडल (macOS)|बंडल (मैकोज़)]] में स्थित हैं। ऑपरेटिंग सिस्टम के साथ आपूर्ति दिए गए मॉड्यूल <code>/System/Library/Extensions</code> निर्देशिका मे संग्रहित किए जाते है। तीसरे पक्ष के माध्यम से आपूर्ति किये गए मॉड्यूल विभिन्न अन्य निर्देशिकाओं में हैं। | ||
=== वास्तविक उत्पाद === | === वास्तविक उत्पाद === | ||
Line 45: | Line 43: | ||
== द्विचर संगतता == | == द्विचर संगतता == | ||
लिनक्स कर्नेल मॉड्यूल के लिए एक स्थिर [[एपीआई]] अथवा [[अनुप्रयोग बाइनरी इंटरफ़ेस|अनुप्रयोग द्विचर अंतराफलक]] प्रदान नहीं करता है। इसका अर्थ है कि विभिन्न कर्नेल संस्करणों के बीच आंतरिक संरचना और कार्य में अंतर हैं, जो संगतता समस्याओं का कारण बन सकता है। उन समस्याओं का मुकाबला करने के प्रयास में संचयन करने योग्य [[निष्पादन योग्य और लिंक करने योग्य प्रारूप]] मॉड्यूल के <code>.modinfo</code> प्रतीक संस्करण डाटा को रखा गया है। मॉड्यूल संचयन करने से | लिनक्स कर्नेल मॉड्यूल के लिए एक स्थिर [[एपीआई]] अथवा [[अनुप्रयोग बाइनरी इंटरफ़ेस|अनुप्रयोग द्विचर अंतराफलक]] प्रदान नहीं करता है। इसका अर्थ है कि विभिन्न कर्नेल संस्करणों के बीच आंतरिक संरचना और कार्य में अंतर हैं, जो संगतता समस्याओं का कारण बन सकता है। उन समस्याओं का मुकाबला करने के प्रयास में संचयन करने योग्य [[निष्पादन योग्य और लिंक करने योग्य प्रारूप]] मॉड्यूल के <code>.modinfo</code> प्रतीक संस्करण डाटा को रखा गया है। मॉड्यूल संचयन करने से पूर्व इस संस्करण जानकारी की समानता ऑपरेटिंग कर्नेल से की जा सकती है। यदि संस्करण असंगत हैं, तो मॉड्यूल संचयन नहीं होगा। | ||
अन्य ऑपरेटिंग सिस्टम , जैसे सोलारिस ( ऑपरेटिंग सिस्टम), स्वतंत्र बीडीएस, मैकोज़, और माइक्रोसॉफ्ट विंडोज़ कर्नेल एपीआई और एबीआई को अपेक्षाकृत स्थिर रखते हैं, और इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित स्वतंत्र बीडीएस कर्नेल मॉड्यूल किसी अन्य स्वतंत्र बीडीएस 6.एक्स संस्करण पर पुनर्संकलन के रहित काम करेगा। उदाहरण के रूप मे 6.4 है। चूंकि वे अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें स्वतंत्र बीडीएस 7.एक्स के साथ प्रयोग करने के लिए पुनः संकलित किया जाना चाहिए, क्योंकि एपीआई और एबीआई संगतता मात्र एक उपखंड के अंतर्गत ही बनाए रखी जाती है। | अन्य ऑपरेटिंग सिस्टम , जैसे सोलारिस ( ऑपरेटिंग सिस्टम), स्वतंत्र बीडीएस, मैकोज़, और माइक्रोसॉफ्ट विंडोज़ कर्नेल एपीआई और एबीआई को अपेक्षाकृत स्थिर रखते हैं, और इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित स्वतंत्र बीडीएस कर्नेल मॉड्यूल किसी अन्य स्वतंत्र बीडीएस 6.एक्स संस्करण पर पुनर्संकलन के रहित काम करेगा। उदाहरण के रूप मे 6.4 है। चूंकि वे अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें स्वतंत्र बीडीएस 7.एक्स के साथ प्रयोग करने के लिए पुनः संकलित किया जाना चाहिए, क्योंकि एपीआई और एबीआई संगतता मात्र एक उपखंड के अंतर्गत ही बनाए रखी जाती है। | ||
Line 59: | Line 57: | ||
| author = Kees Cook | | author = Kees Cook | ||
| publisher = outflux.net | | publisher = outflux.net | ||
}}</ref> एक [[प्रारंभिक रैमडिस्क]] सिस्टम बूट पर यंत्र के लिए आवश्यक विशिष्ट मॉड्यूल को संचयन कर सकता है, और | }}</ref> एक [[प्रारंभिक रैमडिस्क]] सिस्टम बूट पर यंत्र के लिए आवश्यक विशिष्ट मॉड्यूल को संचयन कर सकता है, और तत्पश्चात् मॉड्यूल भरण को अक्षम कर सकता है। यह सुरक्षा को एक अखंड कर्नेल के समान बनाता है। यदि कोई आक्षेपक इनिटरैमफस को बदल सकता है, तो वे कर्नेल द्विचर को बदल सकते हैं। | ||
=== मैकोज़ === | === मैकोज़ === |
Revision as of 21:30, 25 May 2023
कम्प्यूटिंग में संचयन करने योग्य कर्नेल मॉड्यूल (एलकेएम) एक वस्तु संचिका है। जिसमें ऑपरेटिंग सिस्टम के ऑपरेटिंग वाले कर्नेल ( ऑपरेटिंग सिस्टम), अथवा तथाकथित मुख्य कर्नेल के विस्तार के लिए सांकेतिक अंक होता है। एलकेएम सामान्यतः नवीनतम कंप्यूटर हार्डवेयर (उपकरण संचालक) के रूप में अथवा संचिका सिस्टम के लिए अथवा सिस्टम आह्वान समावेशन के समर्थन समावेशन के लिए प्रयोग किया जाता है। जब एलकेएम के माध्यम से प्रदान की जाने वाली कार्यक्षमता की आवश्यकता नहीं होती है, तो इसे कंप्यूटर मेमोरी और अन्य संसाधनों को मुक्त करने के लिए असंचयन किया जा सकता है।
अधिकांश वर्तमान यूनिक्स प्रतिरूप प्रणालियाँ और माइक्रोसॉफ्ट विंडोज़ विभिन्न नामों के अनुसार संचयन करने योग्य कर्नेल मॉड्यूल का समर्थन करते हैं, जैसे कि स्वतंत्र बीडीएस में कर्नेल संचयन करने योग्य मॉड्यूल (केएलडी), मैकोज़ में कर्नेल विस्तारण (केईएक्सटी) (चूंकि तृतीय-पक्ष मॉड्यूल के लिए समर्थन छोड़ा जा रहा है)[1] है।[2] ऐक्स में कर्नेल विस्तारण मॉड्यूल, एचपी-यूएक्स में गतिशील रूप से संचयन करने योग्य कर्नेल मॉड्यूल,[3] विंडोज़ एनटी में कर्नेल- सिस्टम संचालक[4] और वीएक्स कार्य में डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल ( डीकेएम) को कर्नेल संचयन करने योग्य मॉड्यूल ( अथवा केएलएम) के रूप में भी समझा जाता है, और मात्र कर्नेल मॉड्यूल (केएमओडी) के रूप में समझा जाता है।
श्रेष्ठता
संचयन करने योग्य कर्नेल मॉड्यूल से रहित एक ऑपरेटिंग सिस्टम को मुख्य कर्नेल में सीधे संकलित सभी संभावित प्रत्याशित कार्यक्षमता को सम्मिलित करना होगा। उस कार्यक्षमता का अधिकांश प्रयोग किये बिना मेमोरी में रहता है। यह मेमोरी को अपक्षय कर देता है, और इसके लिए आवश्यक होगा कि उपयोगकर्ता हर बार नवीनतम कार्यक्षमता की आवश्यकता होने पर मुख्य कर्नेल को पुनर्निर्माण और पुनःप्रारंभन करना है।
असुविधा
एक स्थिर कर्नेल पर एक वैकल्पिक् कर्नेल को प्राथमिकता देने की एक छोटी सी आलोचना तथाकथित विखंडन ( कम्प्यूटिंग ) दंड है। मुख्य कर्नेल सदैव अपने स्थापित नियमित के माध्यम से वास्तविक सन्निहित रैंडम एक्सेस मेमोरी में अवेष्ठित किया जाता है। इस प्रकार मुख्य कर्नेल सांकेतिक अंक कभी खंडित नहीं होता है। एक बार जब सिस्टम उस स्थिति में होती है, जिसमें मॉड्यूल व्यक्त जा सकते हैं। उदाहरण के रूप मे एक बार संचिका सिस्टम को माँउटेड ( कम्प्यूटिंग) कर दिया जाता है, जिसमें मॉड्यूल होते हैं। यह संभावना है कि कोई भी नवीनतम कर्नेल सांकेतिक अंक के उपयोग से कर्नेल को खंडित कर देगा, जिससे अधिक ट्रांसलेशन लुकसाइड बफर प्रविष्टियों का प्रयोग करके एक सामान्य प्रदर्शन दंड लगाया जा सकता है, जिससे अधिक टीएलबी असफल हो जाती है।
विभिन्न ऑपरेटिंग सिस्टम में कार्यान्वयन
लिनक्स
लिनक्स में संचयन करने योग्य कर्नेल मॉड्यूल मॉडप्रोब
आदेश माध्यम से संचयन (और असंचयन ) किये जाते हैं। वह /lib/modules
अथवा /usr/lib/modules
में स्थित हैं और संस्करण 2.6 के पश्चात् से .ko
(कर्नेल उद्देश्य ) मे उनका विस्तार हो गया है। विगत संस्करणों में .o वृद्धि का उपयोग किया गया था।[5] इसमोड
अधिकार संचयन कर्नेल मॉड्यूल को सूचीबद्ध करता है। आपातकालीन स्थितियों में जब सिस्टम बूट करने में विफल रहता है। उदाहरण के रूप मे टूटे हुए मॉड्यूल है। विशिष्ट मॉड्यूल को कर्नेल बूट पैरामीटर सूची को संशोधित करके सक्षम अथवा अक्षम किया जा सकता है (उदाहरण के रूप मे कि ज़ीएनयू ज़ीआरयूबी का प्रयोग करके, ज़ीआरयूबी प्रारंभ मेनू में 'ई' दबाकर तत्पश्चात् कर्नेल पैरामीटर रेखा को संपादित करके)।
अनुज्ञप्ति उद्देश्यों
लिनक्स अनुरक्षकों के अनुमान में एलकेएम कर्नेल का ड्राइव कार्य है। लिनक्स अनुरक्षक स्वत्वाधिकारी सॉफ्टवेयर मॉड्यूल के वितरण को सहन करते हैं, किन्तु प्रतीकों को मात्र जीएनयू जनरल पब्लिक लाइसेंस ( ज़ीपीएल) मॉड्यूल के लिए उपलब्ध के रूप में चिह्नित करने की अनुमति देते है।
स्वत्वाधिकारी अथवा अ-जीपीएल-संगत मॉड्यूल संचयन करने से ऑपरेटिंग कर्नेल में ' टेंट ' चिन्हक स्थापित हो जाएगा।[6][7] जिसका अर्थ है कि अनुभव की गई किसी भी समस्या, दोष अथवा त्रुटि की अनुरक्षकों के माध्यम से परीक्षण किये जाने की संभावना कम होगी।[8][9] एलकेएम प्रभावी रूप से ऑपरेटिंग कर्नेल का खंड बन जाते हैं, इसलिए कर्नेल डाटा संरचनाओं को दूषित कर सकते हैं और ऐसे दोष अथवा त्रुटि उत्पन्न कर सकते हैं। यदि मॉड्यूल वास्तव में स्वत्वाधिकारी है, तो इनका परीक्षण नहीं की जा सकता है ।
लिनक्सेंट विवाद
2004 में लिनक्सेंट एक परामर्श संगठन जो संचयन करने योग्य कर्नेल मॉड्यूल के रूप में स्वत्वाधिकारी उपकरण संचालक अवमुक्त करती है, ने अपने मॉड्यूल अनुज्ञप्ति
में एक शून्य समापक का दुरुपयोग करने का प्रयास किया। जैसा कि निम्नलिखित सांकेतिक अंक में दिखाई देता है-
MODULE_LICENSE("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");
कर्नेल के माध्यम से प्रयोग किये गए श्रृंखला समानता सांकेतिक अंक ने उस समय यह निर्धारित करने का प्रयास किया कि क्या मॉड्यूल ज़ीपीएल संंवृत हो गया था। जब यह एक शून्य समापक (\0
) तक पहुंच गया था। इसलिए यह सोचकर मूर्ख बनाया गया कि मॉड्यूल अपने अनुज्ञप्ति को मात्र ज़ीपीएल घोषित कर रहा है।[10]
स्वतंत्र बीएसडी
स्वतंत्र बीडीएस के लिए कर्नेल मॉड्यूल /boot/kernel/
के साथ वितरित मॉड्यूल के लिए, ऑपरेटिंग सिस्टम अथवा सामान्यतः /boot/modules/
स्वतंत्र बीडीएस पत्तन अथवा स्वतंत्र बीडीएस संवेष्टन से स्थापित मॉड्यूल के लिए, अथवा स्वत्वाधिकारी अथवा अन्यथा द्विचर -एकमात्र मॉड्यूल के लिए अंतर्गत संग्रहीत हैं। स्वतंत्र बीडीएस कर्नेल मॉड्यूल में सामान्यतः विस्तारण .ko
होता है। एक बार यंत्र बूट हो जाने के पश्चात्, उन्हें kldload
के साथ संचयन किया जा सकता है, और kldunload
आदेश के साथ अभारित और kldstat
के साथ सूचीबद्ध किया जा सकता है। कर्नेल प्रारंभ होने से पूर्व मॉड्यूल को संचयक से , स्वचालित रूप से (/boot/loader.conf
के माध्यम से) अथवा हाथ से संचयन किया जा सकता है।
मैकोज़
मैकोज़ में कुछ संचयन करने योग्य कर्नेल मॉड्यूल स्वचालित रूप से संचयन किये जा सकते हैं। संचयन करने योग्य कर्नेल मॉड्यूल को kextload
के माध्यम से भी संचयन किया जा सकता है। उन्हें kextstat
आदेश के माध्यम से सूचीबद्ध किया जा सकता है। संचयन करने योग्य कर्नेल मॉड्यूल विस्तारण .kext
. विस्तारण के साथ बंडल (मैकोज़) में स्थित हैं। ऑपरेटिंग सिस्टम के साथ आपूर्ति दिए गए मॉड्यूल /System/Library/Extensions
निर्देशिका मे संग्रहित किए जाते है। तीसरे पक्ष के माध्यम से आपूर्ति किये गए मॉड्यूल विभिन्न अन्य निर्देशिकाओं में हैं।
वास्तविक उत्पाद
वास्तविक उत्पाद कर्नेल मॉड्यूल को वास्तविक उत्पाद संचयन करने योग्य मॉड्यूल (एनएलएम) कहा जाता है। एनएलएम को संचयन अधिकार के माध्यम से वास्तविक उत्पाद कर्नेल में संचयन किया जाता है, और असंचयन अधिकार के माध्यम से हटाया जाता है। modules
अधिकार वर्तमान में संचयन किये गए कर्नेल मॉड्यूल को सूचीबद्ध करता है। एनएलएम वास्तविक उत्पाद परिसेवक पर निर्दिष्ट किसी भी वैध अन्वेषक मार्ग में रह सकते हैं, और उनके पास संचिका नाम विस्तारण के रूप में .NLM
है।
वीएक्स कार्य
एक डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल ( डीकेएम) प्रकार की परियोजना एक निषिद्ध संचिका उत्पन्न करने के लिए बनाई जा सकती है जिसे पश्चात् में एलडी अधिकार का प्रयोग करके कर्नेल स्थान पर संचयन किया जा सकता है। यह डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल अनएलडी अधिकार का प्रयोग करके असंचयन किया जा सकता है।
सोलारिस
सोलारिस मे एक विन्यास योग्य कर्नेल मॉड्यूल संचयन मार्ग है, जो /platform/platform-name/kernel /kernel /usr/kernel
इसके लिए अभाव है। अधिकांश कर्नेल मॉड्यूल /kernel
उपनिर्देशिकाओं के अंतर्गत रहते हैं। जिन्हें सिस्टम को उस बिंदु तक बूट करने के लिए आवश्यक नहीं माना जाता है जो इसमे प्रारंभ कर सकते हैं। प्रायः (लेकिन सदैव नहीं) /usr/kernel
में पाया जाता हैं। दोषमार्जन कर्नेल निर्माण करते समय सिस्टम सक्रिय रूप से मॉड्यूल को असंचयन करने का प्रयास करता है।
द्विचर संगतता
लिनक्स कर्नेल मॉड्यूल के लिए एक स्थिर एपीआई अथवा अनुप्रयोग द्विचर अंतराफलक प्रदान नहीं करता है। इसका अर्थ है कि विभिन्न कर्नेल संस्करणों के बीच आंतरिक संरचना और कार्य में अंतर हैं, जो संगतता समस्याओं का कारण बन सकता है। उन समस्याओं का मुकाबला करने के प्रयास में संचयन करने योग्य निष्पादन योग्य और लिंक करने योग्य प्रारूप मॉड्यूल के .modinfo
प्रतीक संस्करण डाटा को रखा गया है। मॉड्यूल संचयन करने से पूर्व इस संस्करण जानकारी की समानता ऑपरेटिंग कर्नेल से की जा सकती है। यदि संस्करण असंगत हैं, तो मॉड्यूल संचयन नहीं होगा।
अन्य ऑपरेटिंग सिस्टम , जैसे सोलारिस ( ऑपरेटिंग सिस्टम), स्वतंत्र बीडीएस, मैकोज़, और माइक्रोसॉफ्ट विंडोज़ कर्नेल एपीआई और एबीआई को अपेक्षाकृत स्थिर रखते हैं, और इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित स्वतंत्र बीडीएस कर्नेल मॉड्यूल किसी अन्य स्वतंत्र बीडीएस 6.एक्स संस्करण पर पुनर्संकलन के रहित काम करेगा। उदाहरण के रूप मे 6.4 है। चूंकि वे अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें स्वतंत्र बीडीएस 7.एक्स के साथ प्रयोग करने के लिए पुनः संकलित किया जाना चाहिए, क्योंकि एपीआई और एबीआई संगतता मात्र एक उपखंड के अंतर्गत ही बनाए रखी जाती है।
सुरक्षा
जबकि संचयन करने योग्य कर्नेल मॉड्यूल संचालित कर्नेल को संशोधित करने का एक सुविधाजनक सिस्टम है। आक्षेपक के माध्यम से उनकी प्रक्रिया ( कम्प्यूटिंग) अथवा कम्प्यूटर संचिका का पता लगाने से रोकने के लिए एक अनुबंध सिस्टम पर इसका दुरुपयोग किया जा सकता है। जिससे उन्हें सिस्टम पर नियंत्रण बनाए रखने की अनुमति मिलती है। अनेक रूटकिट एलकेएम का इस तरह से प्रयोग करते हैं। ध्यान दें कि, अधिकांश ऑपरेटिंग सिस्टम पर मॉड्यूल किसी भी तरह से विशेषाधिकार उन्नयन में सहायता नहीं करते हैं, क्योंकि एलकेएम को संचयन करने के लिए उन्नत विशेषाधिकार की आवश्यकता होती है। वे मात्र आक्षेपक के लिए गुप्त रूप से प्रवेश को छुपाना आसान बनाते हैं।[11]
लिनक्स
लिनक्स सिससेटल विकल्प /proc/sys/kernel/modules_disabled
के माध्यम से मॉड्यूल भरण को अक्षम करने की अनुमति देता है।[12][13] एक प्रारंभिक रैमडिस्क सिस्टम बूट पर यंत्र के लिए आवश्यक विशिष्ट मॉड्यूल को संचयन कर सकता है, और तत्पश्चात् मॉड्यूल भरण को अक्षम कर सकता है। यह सुरक्षा को एक अखंड कर्नेल के समान बनाता है। यदि कोई आक्षेपक इनिटरैमफस को बदल सकता है, तो वे कर्नेल द्विचर को बदल सकते हैं।
मैकोज़
ओएस एक्स योसेमाइट और पश्चात् के प्रकाशन में एक कर्नेल विस्तारण को सांकेतिक अंक चिह्नक के साथ हस्ताक्षरित करना पड़ता है, जो इसके लिए एक विशेष "पात्रता" रखता है। ऐसा विकासक प्रमाणपत्र मात्र अनुरोध पर एप्पल विकासक माध्यम प्रदान किया जाता है, और स्वचालित रूप से एप्पल विकासक सदस्यों को नहीं दिया जाता है। यह सुविधा जिसे केक्स्त चिह्नक कहा जाता है, अभाव रूप से सक्षम है। यह कर्नेल को स्वोत्थान रोकने का निर्देश देती है, यदि अहस्ताक्षरित कर्नेल विस्तारण उपस्थित हैं।[14] ओएस एक्स एल कैप्टन और पश्चात् में प्रकाशन यह सिस्टम अखंडता संरक्षण का खंड है।
मैकोज़ के पूर्वकालीन संस्करणों में यदि केईएक्सटी चिह्नक अक्षम है तो, कर्नेल विस्तारण बंडल में संचयन करने योग्य कर्नेल मॉड्यूल को निराधार उपयोगकर्ताओं के माध्यम से संचयन किया जा सकता है। यदि बंडल की संपत्ति सूची मे ओएस बंडल उपयोगकर्ता भार गुण वास्तविक पर समुच्चय है।[15] चूंकि यदि निष्पादन योग्य सांकेतिक अंक संचिका सहित बंडल की कोई भी संचिका, मार्ग और समूह चक्र के स्वामित्व में नहीं है, अथवा समूह अन्य के माध्यम से लिखने योग्य है, तो कर्नेल संचयन करने योग्य मॉड्यूल को संचयन करने का प्रयास विफल हो जाएगा।[16]
सोलारिस
कर्नेल मॉड्यूल में वैकल्पिक रूप से एक गुप्तलेखीय चिह्नक ईएलएफ अनुभाग हो सकता है, जो सत्यापित बूट नीति समायोजन के आधार पर संचयन पर सत्यापित होता है। कर्नेल यह प्रयुक्त कर सकता है कि मॉड्यूल गुप्तलेखीय रूप से विश्वसनीय प्रमाणपत्रों के एक समुच्चय के माध्यम से सांकेतिक हैं। कुछ तत्परता आधारित पटल पर आईएलओएम में ओएस के बाह्य विश्वसनीय प्रमाणपत्रों की सूची रखी जाती है। उपयोक्तास्थान के माध्यम से प्रारंभ किया गया कर्नेल मॉड्यूल भरण विश्वसनीय मार्ग से तभी संभव है, जब सिस्टम सक्षम अपरिवर्तनीय वैश्विक क्षेत्र सुविधा के साथ ऑपरेटिंग कर रहा हो।
यह भी देखें
- वास्तविक उत्पाद संचयन करने योग्य मॉड्यूल
संदर्भ
- ↑ "बहिष्कृत कर्नेल एक्सटेंशन और सिस्टम एक्सटेंशन विकल्प". Apple Inc. Retrieved 13 March 2021.
- ↑ "Kernel Extension Programming Topics: Introduction". Apple Inc. September 1, 2010. Archived from the original on May 4, 2013. Retrieved May 5, 2013.
- ↑ "गतिशील रूप से लोड करने योग्य कर्नेल मॉड्यूल का प्रबंधन और विकास करना". Hewlett-Packard. June 7, 2001.
- ↑ "ड्राइवर लोड होने पर क्या निर्धारित करता है". Microsoft Developer Network. Microsoft. November 21, 2012. Archived from the original on March 6, 2013. Retrieved May 5, 2013.
- ↑ "The Linux Kernel Module Programming Guide, section 2.2 "Compiling Kernel Modules"". Retrieved 2020-10-05.
- ↑ 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.
- ↑ "दागी हुई गुठली". The Linux kernel user’s and administrator’s guide.
- ↑ Jonathan Corbet (2006-03-24). "यूजर स्पेस से टैनिंग". LWN.net. Archived from the original on 2011-11-16. Retrieved 2011-10-03.
- ↑ "Novell support documentation: Tainted kernel". 2007-07-26. Retrieved 2011-10-03.
- ↑ Jonathan Corbet (April 27, 2004). "Being honest with MODULE_LICENSE". LWN.net. Archived from the original on November 2, 2012. Retrieved October 30, 2012.
- ↑ Exploiting Loadable Kernel Modules Archived 2012-02-04 at the Wayback Machine
- ↑ "Sysctl/kernel.txt". Archived from the original on April 15, 2013. Retrieved January 4, 2013.
- ↑ Kees Cook (2012-11-28). "Clean module disabling". outflux.net. Retrieved 2020-10-05.
- ↑ "कर्नेल एक्सटेंशन". Mac Developer Library. Apple. September 16, 2015. Archived from the original on August 17, 2016. Retrieved September 29, 2016.
- ↑ "कर्नेल एक्सटेंशन के लिए Info.plist गुण". Apple Inc. Archived from the original on September 26, 2012. Retrieved September 27, 2012.
- ↑ Darwin and macOS System Manager's Manual –