लोडेबल कर्नेल मॉड्यूल
संगणना में, एक भारण करने योग्य कर्नेल मापांक (एलकेएम) एक वस्तु संचिका है जिसमें एक संचालन सिस्टम के चलने वाले कर्नेल ( संचालन सिस्टम), या तथाकथित मूल कर्नेल के विस्तार के लिए सांकेतिक अंक होता है। एलकेएम आमतौर पर नए संगणक हार्डवेयर (डिवाइस संचालक के रूप में) और/या संचिका सिस्टम के लिए या सिस्टम आह्वान जोड़ने के लिए समर्थन जोड़ने के लिए उपयोग किया जाता है। जब एलकेएम द्वारा प्रदान की जाने वाली कार्यक्षमता की आवश्यकता नहीं होती है, तो इसे संगणक भंडारण और अन्य संसाधनों को मुक्त करने के लिए भार रहित किया जा सकता है।
अधिकांश वर्तमान यूनिक्स प्रतिरूप प्रणालियाँ और माइक्रोसॉफ्ट विंडोज़ विभिन्न नामों के तहत भारण करने योग्य कर्नेल मापांक का समर्थन करते हैं, जैसे कि स्वतंत्र बीडीएस में कर्नेल भारण करने योग्य मापांक (केएलडी), मैकओस में कर्नेल विस्तारण (केईएक्सटी) (हालाँकि तृतीय-पक्ष मापांक के लिए समर्थन छोड़ा जा रहा है)[1]),[2] ऐक्स में कर्नेल विस्तारण मापांक, एचपी-यूएक्स में गतिशील रूप से भारण करने योग्य कर्नेल मापांक,[3] विंडोज़ एनटी में कर्नेल-प्रणाली संचालक[4] और वीएक्स कार्य में आंकड़े प्राप्त करने योग्य कर्नेल मापांक ( डीकेएम)। उन्हें कर्नेल भारण करने योग्य मापांक (या केएलएम) के रूप में भी जाना जाता है, और केवल कर्नेल मापांक (केएमओडी) के रूप में जाना जाता है।
श्रेष्ठता
भारण करने योग्य कर्नेल मापांक के बिना, एक संचालन सिस्टम को मूल कर्नेल में सीधे संकलित सभी संभावित प्रत्याशित कार्यक्षमता को शामिल करना होगा। उस कार्यक्षमता का अधिकांश उपयोग किए बिना स्मृति में रहता है, स्मृति को अपक्षय कर देता है, और इसके लिए आवश्यक होगा कि उपयोगकर्ता हर बार नवीन कार्यक्षमता की आवश्यकता होने पर मूल कर्नेल को पुनर्निर्माण और पुनःप्रारंभन करें।
असुविधा
एक स्थिर कर्नेल पर एक वैकल्पिक् कर्नेल को प्राथमिकता देने की एक छोटी सी आलोचना तथाकथित विखंडन ( संगणना ) दंड है। मूल कर्नेल सदैव अपने स्थापित नियमित द्वारा वास्तविक सन्निहित निकटवर्ती स्मृति में अवेष्ठित किया जाता है; इस प्रकार, मूल कर्नेल सांकेतिक अंक कभी खंडित नहीं होता है। एक बार जब सिस्टम उस स्थिति में होता है जिसमें मापांक व्यक्त जा सकते हैं, उदाहरण के लिए एक बार संचिका सिस्टम को माँउटेड ( संगणना ) कर दिया जाता है जिसमें मापांक होते हैं, यह संभावना है कि कोई भी नवीन कर्नेल सांकेतिक अंक सम्मिलन कर्नेल को खंडित कर देगा, जिससे परिचय अधिक अनुवाद सहदर्शी बफर प्रविष्टियों का उपयोग करके एक मामूली प्रदर्शन जुर्माना, जिससे अधिक टीएलबी छूट जाती है।
विभिन्न संचालन सिस्टम में कार्यान्वयन
लिनक्स
लिनक्स में भारण करने योग्य कर्नेल मापांक किसके द्वारा भारण (और भार रहित) किए जाते हैं 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]
फ्रीबीएसडी
स्वतंत्र बीडीएस के लिए कर्नेल मापांक भीतर संग्रहीत हैं /boot/kernel/
संचालन सिस्टम के साथ वितरित मापांक के लिए, या आमतौर पर /boot/modules/
स्वतंत्र बीडीएस पोर्ट या स्वतंत्र बीडीएस पोर्ट#पैकेज से स्थापित मापांक के लिए, या मालिकाना या अन्यथा बाइनरी-ओनली मापांक के लिए। स्वतंत्र बीडीएस कर्नेल मापांक में आमतौर पर विस्तारण होता है .ko
. एक बार मशीन बूट हो जाने के बाद, उन्हें इसके साथ भारण किया जा सकता है kldload
कमांड, अनलोडेड kldunload
, और के साथ सूचीबद्ध है kldstat
. कर्नेल शुरू होने से पहले मापांक को लोडर से भी भारण किया जा सकता है, या तो स्वचालित रूप से (के माध्यम से /boot/loader.conf
) या हाथ से।
मैकोज़
मैकओस में कुछ भारण करने योग्य कर्नेल मापांक स्वचालित रूप से भारण किए जा सकते हैं। भारण करने योग्य कर्नेल मापांक को इसके द्वारा भी भारण किया जा सकता है kextload
आज्ञा। द्वारा सूचीबद्ध किया जा सकता है kextstat
आज्ञा। भारण करने योग्य कर्नेल मापांक विस्तारण के साथ बंडल (मैकओस) में स्थित हैं .केईएक्सटी
. संचालन सिस्टम के साथ दिए गए मॉड्यूल्स को स्टोर किया जाता है /System/Library/Extensions
निर्देशिका; तीसरे पक्ष द्वारा आपूर्ति किए गए मापांक विभिन्न अन्य निर्देशिकाओं में हैं।
नेटवेयर
नेटवेयर कर्नेल मापांक को नेटवेयर भारण करने योग्य मापांक (एनएलएम) कहा जाता है। एनएलएम को भारण कमांड के माध्यम से नेटवेयर कर्नेल में डाला जाता है, और भार रहित कमांड के माध्यम से हटाया जाता है; modules
कमांड वर्तमान में भारण किए गए कर्नेल मापांक को सूचीबद्ध करता है। एनएलएम नेटवेयर सर्वर पर निर्दिष्ट किसी भी वैध खोज पथ में रह सकते हैं, और उनके पास है .NLM
संचिका नाम विस्तारण के रूप में।
वीएक्सवर्क्स
एक आंकड़े प्राप्त करने योग्य कर्नेल मापांक ( डीकेएम) प्रकार की परियोजना एक .out संचिका उत्पन्न करने के लिए बनाई जा सकती है जिसे बाद में ld कमांड का उपयोग करके कर्नेल स्थान पर भारण किया जा सकता है। यह आंकड़े प्राप्त करने योग्य कर्नेल मापांक unld कमांड का उपयोग करके भार रहित किया जा सकता है।
सोलारिस
सोलारिस के पास एक विन्यास योग्य कर्नेल मापांक भारण पथ है, जो इसके लिए तयशुदा है /platform/platform-name/kernel /kernel /usr/kernel
. अधिकांश कर्नेल मापांक उपनिर्देशिकाओं के अंतर्गत रहते हैं /kernel
; जिन्हें सिस्टम को उस बिंदु तक बूट करने के लिए आवश्यक नहीं माना जाता है जो init प्रारंभ कर सकते हैं अक्सर (लेकिन सदैव नहीं) में पाए जाते हैं /usr/kernel
. DEBUG कर्नेल बिल्ड करते समय सिस्टम सक्रिय रूप से मापांक को भार रहित करने का प्रयास करता है।
बाइनरी संगतता
लिनक्स कर्नेल मापांक के लिए एक स्थिर एपीआई या अनुप्रयोग बाइनरी इंटरफ़ेस प्रदान नहीं करता है। इसका अर्थ है कि विभिन्न कर्नेल संस्करणों के बीच आंतरिक संरचना और कार्य में अंतर हैं, जो संगतता समस्याओं का कारण बन सकता है। उन समस्याओं का मुकाबला करने के प्रयास में, प्रतीक संस्करण डेटा को .modinfo
भारण करने योग्य निष्पादन योग्य और लिंक करने योग्य प्रारूप मापांक का खंड। मापांक भारण करने से पहले इस वर्जनिंग जानकारी की तुलना चल रहे कर्नेल से की जा सकती है; यदि संस्करण असंगत हैं, तो मापांक भारण नहीं होगा।
अन्य संचालन सिस्टम, जैसे Solaris ( संचालन सिस्टम), स्वतंत्र बीडीएस, मैकओस, और माइक्रोसॉफ्ट विंडोज़ कर्नेल API और एप्लिकेशन बाइनरी इंटरफ़ेस को अपेक्षाकृत स्थिर रखते हैं, इस प्रकार इस समस्या से बचते हैं। उदाहरण के लिए, कर्नेल संस्करण 6.0 के विरुद्ध संकलित स्वतंत्र बीडीएस कर्नेल मापांक किसी अन्य स्वतंत्र बीडीएस 6.x संस्करण पर पुनर्संकलन के बिना काम करेगा, उदा। 6.4। हालांकि, वे अन्य प्रमुख संस्करणों के साथ संगत नहीं हैं और उन्हें स्वतंत्र बीडीएस 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 और बाद में रिलीज, यह सिस्टम इंटीग्रिटी प्रोटेक्शन का हिस्सा है।
मैकओस के पुराने संस्करणों में, या यदि केईएक्सटी हस्ताक्षर अक्षम है, कर्नेल विस्तारण बंडल में भारण करने योग्य कर्नेल मापांक को गैर-रूट उपयोगकर्ताओं द्वारा भारण किया जा सकता है यदि OSBundleAllowUserLoad गुण बंडल की संपत्ति सूची में True पर सेट है।[15] हालाँकि, यदि निष्पादन योग्य सांकेतिक अंक संचिका सहित बंडल की कोई भी संचिका रूट और ग्रुप व्हील के स्वामित्व में नहीं है, या समूह या अन्य द्वारा लिखने योग्य है, तो कर्नेल भारण करने योग्य मापांक को भारण करने का प्रयास विफल हो जाएगा।[16]
सोलारिस
कर्नेल मापांक में वैकल्पिक रूप से एक क्रिप्टोग्राफ़िक हस्ताक्षर ELF अनुभाग हो सकता है जो सत्यापित बूट नीति सेटिंग्स के आधार पर भारण पर सत्यापित होता है। कर्नेल यह लागू कर सकता है कि मापांक क्रिप्टोग्राफ़िक रूप से विश्वसनीय प्रमाणपत्रों के एक सेट द्वारा हस्ताक्षरित हैं; कुछ SPARC आधारित प्लेटफॉर्म पर ILOM में OS के बाहर विश्वसनीय प्रमाणपत्रों की सूची रखी जाती है। उपयोक्तास्थान द्वारा शुरू किया गया कर्नेल मापांक लोडिंग विश्वसनीय पथ से तभी संभव है जब सिस्टम सक्षम अपरिवर्तनीय वैश्विक क्षेत्र सुविधा के साथ चल रहा हो।
यह भी देखें
- नेटवेयर भारण करने योग्य मापांक
संदर्भ
- ↑ "बहिष्कृत कर्नेल एक्सटेंशन और सिस्टम एक्सटेंशन विकल्प". 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 –