euid, ruid, suid
उपयोगकर्ता पहचान चरण
ruid
: रियल उपयोगकर्ता आईडी उस उपयोगकर्ता को दर्शाता है जिसने प्रक्रिया प्रारंभ की है।euid
: प्रभावी उपयोगकर्ता आईडी के रूप में जाना जाता है, यह उपयोगकर्ता पहचान को स्थापित करने के लिए सिस्टम द्वारा उपयोग किया जाता है। सामान्यत:euid
ruid
का प्रतिबिम्ब करता है, सिवाय उदाहरणों के जैसे कि SetUID बाइनरी क्रियान्वयन, जहांeuid
फ़ाइल के मालिक की पहचान लेता है, इसलिए विशेष कार्यान्वयन अनुमतियाँ प्रदान करता है।suid
: यह सहेजी गई उपयोगकर्ता आईडी महत्वपूर्ण है जब एक उच्च-विशेषाधिकार प्रक्रिया (सामान्यत: जड़) को कुछ कार्य करने के लिए अस्थायी रूप से अपने विशेषाधिकारों से वंचित करने की आवश्यकता होती है, केवल इसके बाद अपनी प्रारंभिक उच्च स्थिति को पुनः प्राप्त करने के लिए।
महत्वपूर्ण नोट
एक प्रक्रिया जो रूट के तहत काम नहीं कर रही है, केवल अपना euid
मौजूदा ruid
, euid
, या suid
के समान बना सकती है।
set*uid फ़ंक्शनों की समझ
setuid
: प्राथमिक धारणाओं के विपरीत,setuid
मुख्य रूप सेruid
को संशोधित करता है बल्किeuid
। विशेष रूप से विशेषाधिकारी प्रक्रियाओं के लिए, यह निर्दिष्ट उपयोगकर्ता के साथruid
,euid
, औरsuid
को समान करता है, अक्सर रूट, इन IDs को मजबूत बनाने के कारण। विस्तृत अनुशासन मिल सकता है setuid man page में।setreuid
औरsetresuid
: ये फ़ंक्शनruid
,euid
, औरsuid
को सूक्ष्म रूप से समायोजित करने की अनुमति देते हैं। हालांकि, उनकी क्षमताएँ प्रक्रिया के विशेषाधिकार स्तर पर निर्भर हैं। गैर-रूट प्रक्रियाओं के लिए, संशोधन मौजूदा मूल्यों की सीमित होती हैruid
,euid
, औरsuid
की। विपरीत, रूट प्रक्रियाएँ या उनके पासCAP_SETUID
क्षमता हो सकती हैं इन IDs को इसके मान को निर्धारित कर सकती हैं। अधिक जानकारी प्राप्त की जा सकती है setresuid man page और setreuid man page से।
ये कार्यक्षमताएँ सुरक्षा उपाय के रूप में नहीं डिज़ाइन की गई हैं बल्कि इच्छित कार्यान्वयन फ्लो को सुविधाजनक बनाने के लिए, जैसे जब एक कार्यक्रम अपने प्रभावी उपयोगकर्ता आईडी को संशोधित करके किसी अन्य उपयोगकर्ता की पहचान अपनाता है।
विशेष रूप से, जब setuid
रूट के लिए विशेषाधिकार उन्नयन के लिए एक सामान्य विकल्प हो सकता है (क्योंकि यह सभी IDs को रूट के साथ समान करता है), तो इन फ़ंक्शनों के बीच भिन्नता को समझने और उपयोगकर्ता आईडी के व्यवहार को विभिन्न परिस्थितियों में कैसे नियंत्रित किया जाए, यह महत्वपूर्ण है।
लिनक्स में कार्यक्रम निष्पादन तंत्र
execve
सिस्टम कॉल
execve
सिस्टम कॉलकार्यक्षमता:
execve
पहले तर्क द्वारा निर्धारित एक कार्यक्रम प्रारंभ करता है। यह दो सरणियों,argv
के लिए तर्क औरenvp
के लिए पर्यावरण, लेता है।व्यवहार: यह कॉलर की मेमोरी स्थान को बनाए रखता है लेकिन स्टैक, हीप, और डेटा सेगमेंट को ताजगी देता है। कार्यक्रम कोड नए कार्यक्रम द्वारा बदल दिया जाता है।
उपयोगकर्ता आईडी संरक्षण:
ruid
,euid
, और सहायक समूह आईडी अपरिवर्तित रहते हैं।अगर नया कार्यक्रम SetUID बिट सेट है तो
euid
में सूक्ष्म परिवर्तन हो सकता है।suid
कोeuid
से अपडेट किया जाता हैexecve
के पश्चात।दस्तावेज़ीकरण: विस्तृत जानकारी
execve
man page पर उपलब्ध है।
system
फ़ंक्शन
system
फ़ंक्शनकार्यक्षमता:
execve
की विपरीत,system
fork
का उपयोग करके एक बच्चा प्रक्रिया बनाता है और उस बच्चा प्रक्रिया मेंexecl
का उपयोग करके एक कमांड को निष्पादित करता है।कमांड निष्पादन:
execl("/bin/sh", "sh", "-c", command, (char *) NULL);
के माध्यम सेsh
के माध्यम से कमांड निष्पादित करता है।व्यवहार:
execl
execve
का एक रूप होने के बावजूद, यह एक नए बच्चा प्रक्रिया के संदर्भ में समान रूप से काम करता है।दस्तावेज़ीकरण: अधिक जानकारी
system
man page से प्राप्त की जा सकती है।
bash
और sh
का SUID के साथ व्यवहार
bash
और sh
का SUID के साथ व्यवहारbash
:-p
विकल्प है जोeuid
औरruid
को कैसे व्यवहारित किया जाता है, इस पर प्रभाव पड़ता है।-p
के बिना, अगर वे पहले से भिन्न हैं, तोbash
euid
कोruid
सेट करता है।-p
के साथ, प्रारंभिकeuid
संरक्षित रहता है।अधिक विवरण
bash
man page पर उपलब्ध है।sh
:bash
में-p
के समान एक तंत्र नहीं है।उपयोगकर
संकलन और अनुमतियाँ:
विश्लेषण:
ruid
औरeuid
पहले 99 (कोई नहीं) और 1000 (फ्रैंक) के रूप में शुरू होते हैं।setuid
दोनों को 1000 के लिए संरेखित करता है।system
/bin/bash -c id
को निष्पादित करता है क्योंकि sh से bash तक का सिमलिंक है।-p
के बिनाbash
euid
कोruid
के समान करने के लिए समायोजित करता है, जिससे दोनों 99 (कोई नहीं) होते हैं।
मामला 2: सिस्टम के साथ setreuid का उपयोग करना
सी कोड:
संकलन और अनुमतियाँ:
व्यावहारिकरण और परिणाम:
विश्लेषण:
setreuid
दोनों ruid और euid को 1000 पर सेट करता है।system
बैश को आमंत्रित करता है, जो उनके समानता के कारण उपयोगकर्ता आईडी को बनाए रखता है, असल में frank के रूप में कार्य करता है।
मामला 3: execve के साथ setuid का उपयोग
लक्ष्य: setuid और execve के बीच बातचीत का अन्वेषण।
व्यावहारिक और परिणाम:
विश्लेषण:
ruid
99 रहता है, लेकिन euid 1000 पर सेट किया गया है, setuid के प्रभाव के साथ।
सी कोड उदाहरण 2 (बैश को कॉल करना):
व्यावहारिकरण और परिणाम:
विश्लेषण:
यद्यपि
setuid
द्वाराeuid
को 1000 पर सेट किया जाता है, लेकिन-p
की अनुपस्थिति के कारणbash
ruid
(99) पर euid को रीसेट कर देता है।
सी संकेत उदाहरण 3 (bash -p का उपयोग करके):
व्यावहारिकरण और परिणाम:
संदर्भ
Last updated