क्षमताएं कुछ महत्वपूर्ण सिस्टम विशेषाधिकारों के मूल्यांकन को वर्तमान प्रक्रिया से अलग एक अलग थ्रेड में करने की अनुमति देती हैं। इस तरह, आपको सिस्टम के कुछ हिस्सों तक पहुँचने के लिए प्रोग्राम को रूट के रूप में चलाने की आवश्यकता नहीं है।

जरूरतों से उत्पन्न समाधान के रूप में, POSIX.1e की धारा 25 इस मुद्दे के बारे में है। उस खंड और अन्य में परिभाषित विशेषाधिकारों का विकास Linux कर्नेल संस्करण 2.6.26 के रिलीज के साथ पूरा किया गया है। यहाँ वह सब कुछ है जो आपको Linux कर्नेल में क्षमताओं के बारे में जानने की आवश्यकता है।

क्षमताओं को समझना एपीआई तर्क

यूनिक्स-आधारित प्रणालियों में प्राधिकरण नियंत्रण में दो चरण होते हैं:

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

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

instagram viewer
पासवर्ड आवेदन. इसके साथ, सिस्टम में उपयोगकर्ता अपने पासवर्ड बदल सकते हैं। हालांकि, को लिखने के लिए /etc/shadow फ़ाइल, जहां एन्क्रिप्टेड पासवर्ड रखे जाते हैं, रूट उपयोगकर्ता अधिकारों (यानी उपयोगकर्ता आईडी = 0) के साथ काम करना आवश्यक है।

इस समस्या को हल करने के लिए, पासवार्ड एप्लिकेशन में एक SUID बिट है। जो भी उपयोगकर्ता इस एप्लिकेशन को चलाता है, सक्रिय स्वामी (EUID) हमेशा रूट रहेगा:

ls -l /usr/bin/passwd

# आउटपुट
-आरडब्ल्यूएसआर-एक्सआर-एक्स. 1 रूट रूट 32552 जुलाई 23 2021 /usr/bin/passwd

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

समस्या केवल SUID बिट के साथ समाप्त नहीं होती है। जब आप a. पर सुनना चाहते हैं तो आपके पास रूट उपयोगकर्ता अधिकार भी होने चाहिए विशेषाधिकार प्राप्त टीसीपी या यूडीपी पोर्ट यूनिक्स-आधारित प्रणालियों पर 1024 से कम। उदाहरण के लिए, किसी वेब सर्वर के TCP 80 पोर्ट को सुनने में सक्षम होने के लिए, आपको एप्लिकेशन को रूट उपयोगकर्ता के रूप में चलाना होगा।

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

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

लिनक्स क्षमता मॉडल, समझाया गया!

आप Linux कर्नेल में क्षमताओं API का सबसे व्यापक कार्यान्वयन पा सकते हैं। आधुनिक लिनक्स वितरण भी इस नए मॉडल को यथासंभव व्यापक रूप से उपयोग करने का प्रयास करते हैं।

उदाहरण के लिए, पिंग एप्लिकेशन के काम करने के लिए, उसे रॉ सॉकेट खोलने में सक्षम होना चाहिए, जो आमतौर पर केवल रूट उपयोगकर्ताओं के लिए आरक्षित होते हैं। पुराने लिनक्स वितरण में, समस्या यह है कि एप्लिकेशन को SUID बिट दिया जाए ताकि सामान्य उपयोगकर्ता इसका उपयोग कर सकें। इन संस्करणों में, जब आप एप्लिकेशन से SUID बिट को हटाते हैं और एप्लिकेशन को सामान्य उपयोगकर्ता के रूप में चलाने का प्रयास करते हैं, तो आपको निम्न त्रुटि मिलती है:

गुनगुनाहट 8.8.8.8

# आउटपुट
पिंग: आईसीएमपी ओपन सॉकेट: ऑपरेशन की अनुमति नहीं है

जबकि आधुनिक लिनक्स वितरण पर, पिंग एप्लिकेशन में शायद SUID बिट नहीं होता है:

एलएस -एल / ​​बिन / पिंग 

# आउटपुट
-आरडब्ल्यूएक्सआर-एक्सआर-एक्स। 1 रूट रूट 95232 जुलाई 25 2021 /बिन/पिंग

फिर भी, आप एक सामान्य उपयोगकर्ता के रूप में एप्लिकेशन को सफलतापूर्वक चला सकते हैं। इसे संभव बनाने वाला तंत्र यह है कि पिंग एप्लिकेशन में विशेष क्षमता होती है CAP_NET_RAW.

आप के साथ आवेदन की अतिरिक्त क्षमताओं को सीख सकते हैं गेटकैप आदेश इस प्रकार है:

सुडो गेटकैप /bin/ping

# आउटपुट
/बिन/पिंग cap_net_raw=ep

यदि गेटकैप कमांड एक खाली प्रतिक्रिया देता है, तो आप इस मान को मैन्युअल रूप से सेट कर सकते हैं:

सुडो सेटकैप cap_net_raw+ep /bin/ping

प्रक्रिया क्षमता मॉडल

लिनक्स कार्यान्वयन में, प्रत्येक प्रक्रिया की क्षमताओं को तीन शीर्षकों के अंतर्गत समूहीकृत किया जाता है:

क्षमता कथन
अनुमति है इस क्लस्टर में, प्रासंगिक प्रक्रिया के लिए अनुमत अतिरिक्त क्षमताओं की एक सूची है। अनुमति देने का मतलब यह नहीं है कि उस समय इसका सक्रिय रूप से उपयोग किया जा सकता है। अतिरिक्त कार्रवाई के साथ निर्धारित प्रभावी क्षमता में प्राधिकरणों को यहां शामिल करना संभव है।
प्रभावी यह संबंधित प्रक्रिया की वर्तमान में सक्रिय क्षमता सूची दिखाता है। कौशल प्रणाली को विनियमित करने वाले सहायक कार्यों के साथ, एक कौशल को छोड़ना या पुनः प्राप्त करना संभव है। हालांकि, किसी भी मामले में, यह केवल उन्हीं लोगों के बीच किया जा सकता है जो पहले से ही अनुमत समूह में अधिकृत हैं।
दाय जब कोई एप्लिकेशन एक नई प्रक्रिया शुरू करता है, तो नई शुरू की गई प्रक्रिया उन क्षमताओं की सूची प्रदर्शित करती है जो इसे अनुमत सूची से प्राप्त होगी।

किसी भी समय चल रही प्रक्रियाओं के लिए अनुमत, प्रभावी और अंतर्निहित क्षमताओं की सूची को बिटमास्क के रूप में प्रदर्शित किया जाता है कैपप्रम, कैपेफ, और कैपइन्हो फ़ाइल में /proc//status. इसके साथ में CapBnd लाइन में क्षमता सीमा नियंत्रण संचालन में प्रयुक्त बिटमास्क होता है।

उदाहरण के लिए, अपने चल रहे शेल एप्लिकेशन के मूल्यों को पढ़ने का प्रयास करें /proc/self/status फ़ाइल:

बिल्ली / खरीद /स्वयं/स्थिति | ग्रेप कैप

# आउटपुट
कैपिनह: 000000000000000000
कैपप्रम: 000000000000000000
कैपेफ: 000000000000000000
CapBnd: 000001ffffffffff
कैपएम्ब: 000000000000000000

Linux में फ़ाइल क्षमता मॉडल

फाइलों के लिए क्षमता प्रणाली का संचालन इस शर्त पर निर्भर करता है कि इन गुणों को वर्चुअल फाइल सिस्टम (वीएफएस) परत में संग्रहीत किया जा सकता है। प्रक्रिया मॉडल के समान, फाइलों की क्षमताएं तीन शीर्षकों के अंतर्गत आती हैं:

1. अनुमति है

सिस्टम प्रक्रिया की अनुमत क्षमताओं को निर्धारित करता है जब संबंधित निष्पादन योग्य इस क्लस्टर में चलता है।

2. प्रभावी

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

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

आप सोच सकते हैं कि बेहतर लिखित अनुप्रयोग केवल आवश्यकता होने पर ही क्षमताओं का उपयोग करेंगे। यदि बिट सक्रिय है, तो अनुमत सूची में सभी क्षमताएं अनुप्रयोग प्रारंभ होने पर सक्रिय हो जाती हैं।

3. दाय

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

लिनक्स सिस्टम में क्षमताओं की भूमिका

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

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

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

इन 7 सख्त चरणों के साथ अपने Linux सर्वर सुरक्षा में सुधार करें

आगे पढ़िए

साझा करनाकलरवसाझा करनाईमेल

संबंधित विषय

  • लिनक्स
  • प्रोग्रामिंग
  • लिनक्स कर्नेल
  • ऑपरेटिंग सिस्टम

लेखक के बारे में

फ़ातिह कुकुक्कराकुर्ती (8 लेख प्रकाशित)

एक इंजीनियर और सॉफ्टवेयर डेवलपर जो गणित और प्रौद्योगिकी का प्रशंसक है। उन्हें हमेशा कंप्यूटर, गणित और भौतिकी पसंद रही है। उन्होंने गेम इंजन प्रोजेक्ट के साथ-साथ मशीन लर्निंग, कृत्रिम तंत्रिका नेटवर्क और रैखिक बीजगणित पुस्तकालय विकसित किए हैं। इसके अलावा मशीन लर्निंग और लीनियर मैट्रिसेस पर काम करना जारी है।

Fatih Küçükkarakurt की और फ़िल्में या टीवी शो

हमारे समाचार पत्र के सदस्य बनें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें