लोडेबल कर्नेल मॉड्यूल

From Vigyanwiki

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

अधिकांश वर्तमान यूनिक्स प्रतिरूप प्रणालियाँ और माइक्रोसॉफ्ट विंडोज़ विभिन्न नामों के अनुसार संचयन करने योग्य कर्नेल मॉड्यूल का समर्थन करते हैं, जैसे कि फ्री बीडीएस में कर्नेल संचयन करने योग्य मॉड्यूल (केएलडी), मैकोज़ में कर्नेल विस्तारण (केईएक्सटी) (चूंकि तृतीय-पक्ष मॉड्यूल के लिए समर्थन छोड़ा जा रहा है)[1] है।[2] ऐक्स में कर्नेल विस्तारण मॉड्यूल, एचपी-यूएक्स में गतिशील रूप से संचयन करने योग्य कर्नेल मॉड्यूल,[3] विंडोज़ एनटी में कर्नेल- सिस्टम संचालक[4] और वीएक्स कार्य में डाटा प्राप्त करने योग्य कर्नेल मॉड्यूल ( डीकेएम) को कर्नेल संचयन करने योग्य मॉड्यूल ( अथवा केएलएम) के रूप में भी समझा जाता है, और मात्र कर्नेल मॉड्यूल (केएमओडी) के रूप में समझा जाता है।

लाभ

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

हानि

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

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

लिनक्स

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

लाइसेंस उद्देश्य

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

स्वत्वाधिकारी अथवा अ-जीपीएल-संगत मॉड्यूल संचयन करने से ऑपरेटिंग कर्नेल में ' टेंट ' फ्लैग स्थापित हो जाएगा।[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]

सोलारिस

कर्नेल मॉड्यूल में वैकल्पिक रूप से एक गुप्‍तलेखीय चिह्नक ईएलएफ अनुभाग हो सकता है, जो सत्यापित बूट नीति समायोजन के आधार पर संचयन पर सत्यापित होता है। कर्नेल यह प्रयुक्त कर सकता है कि मॉड्यूल गुप्‍तलेखीय रूप से विश्वसनीय प्रमाणपत्रों के एक सेट के माध्यम से सांकेतिक हैं। कुछ तत्परता आधारित पटल पर आईएलओएम में ओएस के बाह्य विश्वसनीय प्रमाणपत्रों की सूची रखी जाती है। उपयोक्ता स्थान के माध्यम से प्रारंभ किया गया कर्नेल मॉड्यूल संचय विश्वसनीय मार्ग से तभी संभव है, जब सिस्टम सक्षम अपरिवर्तनीय वैश्विक क्षेत्र सुविधा के साथ ऑपरेटिंग कर रहा हो।

यह भी देखें

  • नेटवेयर संचयन करने योग्य मॉड्यूल

संदर्भ

  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