जवाबों:
आप सामान्य रीड, यूनिक्स में फाइलों के लिए अनुमतियों को पढ़ सकते हैं और लिख सकते हैं।
हालाँकि, कई अनुप्रयोगों में, इस प्रकार की अनुमति संरचना - जैसे किसी दिए गए उपयोगकर्ता को दिए गए फ़ाइल को पढ़ने की पूर्ण अनुमति देना, या फ़ाइल को पढ़ने के लिए किसी भी तरह की अनुमति नहीं देना - बहुत ही कठिन है। इस कारण से, यूनिक्स में एक और अनुमति बिट, set-user-ID
बिट शामिल है। यदि यह बिट एक निष्पादन योग्य फ़ाइल के लिए सेट किया गया है, तो जब भी मालिक के अलावा कोई अन्य उपयोगकर्ता फ़ाइल को निष्पादित करता है, तो वह उपयोगकर्ता स्वामी की किसी भी अन्य फ़ाइल तक पहुँचने में मालिक के विशेषाधिकारों को पढ़ने / लिखने / निष्पादित करने वाली सभी फ़ाइल प्राप्त कर लेता है!
किसी फ़ाइल के लिए सेट-यूज़र-आईडी बिट सेट करने के लिए, टाइप करें
chmod u+s filename
सुनिश्चित करें कि आपने समूह-अन्य निष्पादन अनुमति भी निर्धारित की है; यह अच्छा होगा कि ग्रुप-अदर रीड की अनुमति हो। यह सब एक कथन के साथ किया जा सकता है
chmod 4755 filename
इसे बचत यूआईडी के रूप में भी जाना जाता है। लॉन्च की गई फ़ाइल में सेट-यूआईडी बिट है, जो सहेजे गए यूआईडी फ़ाइल के मालिक का यूआईडी होगा। अन्यथा, सहेजा गया UID ही वास्तविक UID होगा।
इस UID का उपयोग किसी विशेष क्रिया को करने के लिए प्रक्रिया के विशेषाधिकारों के मूल्यांकन के लिए किया जाता है। EUID या तो वास्तविक UID में बदल सकता है, या Superuser UID अगर EUID! = 0 हो। अगर EUID = 0, इसे कुछ भी बदला जा सकता है।
इस तरह के कार्यक्रम का एक उदाहरण है passwd
। यदि आप इसे पूर्ण रूप से सूचीबद्ध करते हैं, तो आप देखेंगे कि इसमें सेट-यूआईडी बिट है और मालिक "रूट" है। जब एक सामान्य उपयोगकर्ता, "mtk" कहता है, चलाता है passwd
, तो यह इसके साथ शुरू होता है:
Real-UID = mtk
Effective-UID = mtk
Saved-UID = root
man credentials
इस मामले में जानकारी का एक अच्छा स्रोत है। इस खोज को एसओ पर भी देखें । ऐतिहासिक विवरण के लिए इस संग्रहीत पोस्ट को देखें ।
"सेट यूआईडी" और "प्रभावी यूआईडी" को एक तंत्र कहने के बजाय, यूआईडी की पूरी अवधारणा को कहा जाना चाहिए। विभिन्न यूआईडी के अस्तित्व के औचित्य विशेषाधिकार अलगाव के साथ विभिन्न परेशानियां हैं। यहां तक कि नियमित (अनपेक्षित) उपयोगकर्ताओं को कभी-कभी उन चीजों (एक्सेस संसाधनों) को करने की आवश्यकता होती है जो केवल विशेषाधिकार प्राप्त उपयोगकर्ता ही कर सकते हैं। इसे आसानी से प्राप्त करने के लिए, कार्यक्रम अपने यूआईडी को बदल सकते हैं। इनमें से 3 प्रकार हैं:
वास्तविक यूआईडी - यूआईडी जो एक प्रक्रिया का मालिक है
प्रभावी यूआईडी - यूआईडी एक प्रक्रिया वर्तमान में चलती है - यह किसी भी विशेष समय में प्रक्रिया की वास्तविक क्षमताओं को निर्धारित करती है। यह वह भी है जो ps
आपको USER फ़ील्ड में दिखाता है।
वास्तविक और प्रभावी यूआईडी के बीच आगे और पीछे स्विच करने के लिए इस्तेमाल किया गया सेट यूआईडी - प्लेसहोल्डर
पिछले एक की आवश्यकता इस तथ्य से उत्पन्न होती है, कि नियमित उपयोगकर्ता केवल इन तीनों के बीच स्विच कर सकते हैं और कुछ नहीं और एक सेट्यूड प्रोग्राम को आमतौर पर किसी भी तरह से जानने की आवश्यकता होती है, जो उपयोगकर्ता था जिसने इसे लोड किया (प्लस वास्तविक यूआईडी को तब से नहीं बदला जाना चाहिए। वह भी बड़ा गड़बड़ पैदा करेगा)।
mtk का विस्तार अच्छा है।
passwd
उदाहरण के विशेषाधिकार वृद्धि से एक है - पासवर्ड हमेशा रूट के रूप में चलाता है के बाद से यह फ़ाइलों को केवल रूट में परिवर्तन करने की अनुमति दी है बदल जाना चाहिए। इससे यह महत्वपूर्ण हो जाता है कि पासवार्ड निष्पादन योग्य बफर ओवरफ्लो आदि का खतरा न हो, जैसे कि एक चतुर सामान्य उपयोगकर्ता इसे उपयोग करने में सक्षम कर सकता है जिसके लिए इरादा नहीं था।
एक अन्य तर्क यह है कि उपयोगकर्ता को उसी तरह से सुरक्षित रखें जैसे कि आप उपयोग कर सकते हैं su
यदि आप रूट के रूप में लॉग इन हैं - किसी विशेष कार्य के लिए अपने विशेषाधिकारों को कम या सीमित करने के लिए , उन्हें आगे न बढ़ाएं। उदाहरण के लिए, यदि मुझे एक डेमॉन सेवा शुरू करने की अनुमति है, जिसमें मेरे सामान तक पहुंच की आवश्यकता नहीं है और इसका अपना सामान है, जिसकी सभी को जरूरत है (जैसे, लकड़हारा), तो इसे चलाने का मतलब यह होगा कि इसका केवल उस सामान तक पहुंच हो। और मेरा या किसी का नहीं।
ध्यान दें कि यह संभव है कि यूआईडी प्रोग्रामेटिक रूप से सेट किया जा सकता है, भले ही सूट बिट निष्पादन योग्य पर सेट नहीं है , हालांकि, यह एस्केलेशन के लिए काम नहीं करेगा। यानी, यदि आप एक सामान्य उपयोगकर्ता हैं और एक ऐसा प्रोग्राम लिखते हैं जो किसी बिंदु पर यूआईडी सेट करता है, तो वह प्रोग्राम रूट पर स्विच नहीं हो सकता है। अपाचे इस तरह से काम करता है, मुझे विश्वास है। यह आमतौर पर जड़ से शुरू होता है और इसमें एक प्रक्रिया होती है जो फिर उन बच्चों को कांटे देती है जो यूआईडी को गैर-प्रिवील किए गए उपयोगकर्ता (जैसे, "httpd") में बदल देते हैं। वे बच्चे प्रक्रियाएं हैं जो वास्तविक वेब सर्वर काम करते हैं।