2015-09-08 9 views
50

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

$ echo $UID 
1014 
$     

अन्य दो आईडी के लिए क्या खड़ा है। और प्रभावी उपयोगकर्ता आईडी और सहेजी गई उपयोगकर्ता आईडी का उपयोग क्या है और जहां हम इसे सिस्टम में उपयोग करते हैं।

+0

एफवाईआई - विकिपीडिया पृष्ठ पर उल्लिखित फ़ाइल सिस्टम उपयोगकर्ता आईडी भी है: https://en.wikipedia.org/wiki/User_identifier –

उत्तर

75

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

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

जब आप लॉग इन करते हैं, तो लॉगिन शेल वास्तविक फ़ाइल और वास्तविक उपयोगकर्ता आईडी को उसी फ़ाइल (आपके असली उपयोगकर्ता आईडी) को पासवर्ड फ़ाइल द्वारा आपूर्ति के रूप में सेट करता है।

अब, यह भी होता है कि आप एक setuid कार्यक्रम क्रियान्वित, और किसी अन्य उपयोगकर्ता के रूप में चल अलावा (जैसे root) setuid कार्यक्रम भी अपनी ओर से कुछ करने के लिए माना जाता है। यह कैसे काम करता है?
सेटयूड प्रोग्राम निष्पादित करने के बाद, इसमें आपकी असली आईडी होगी (क्योंकि आप प्रक्रिया स्वामी हैं) और फ़ाइल स्वामी के प्रभावी उपयोगकर्ता आईडी (उदाहरण के लिए root) क्योंकि यह सेट्यूइड है।

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

अब सेटुइड प्रोग्राम का वापस स्विच करने का कोई तरीका नहीं है क्योंकि सभी कर्नेल जानता है कि आपकी आईडी है और ... आपकी आईडी। बैंग, तुम मर चुके हो

यह सहेजा गया सेट-उपयोगकर्ता आईडी है।

+0

सहेजे गए-सेट उपयोगकर्ता आईडी के बारे में उस अंतिम बिंदु पर अधिक स्पष्टता के लिए, देखें [विकिपीडिया।] (Https://en.wikipedia.org/wiki/User_identifier#Saved_user_ID) – GDP2

+0

क्या आप मुझे कुछ रीडिंग्स पर इंगित कर सकते हैं जहां मुझे पता चल सकता है कि कौन सी सीईएस असली यूआईडी की जांच करती है? धन्यवाद – mik1904

+0

@ mik1904: सबसे महत्वपूर्ण बात यह है कि आप का उपयोग करने की संभावना है जो वास्तव में _checks_ असली यूआईडी 'पहुंच' है। यह 99.9% है। इसके अलावा 'setfsuid' (लेकिन शायद ही कभी आवश्यक), और कुछ बहुत कम स्तर के funcs, और आपको प्राथमिकताओं या शेड्यूलर को प्राप्त/सेट करने के लिए वास्तविक उपयोगकर्ता आईडी की आवश्यकता है (लेकिन इसके लिए चेक नहीं किया गया है), और हैंडलर सिग्नल करने के लिए पास की गई आईडी या द्वारा लौटाई गई आईडी 'प्रतीक्षा करें' एट अल। _are_ असली आईडी। 'निष्पादित करें' जांचें नहीं, लेकिन अगर आप वास्तविक उपयोगकर्ता आईडी बदल चुके हैं तो _ विफल हो सकता है। इसके अलावा 'कांटा' जांच नहीं करता है, लेकिन यदि आप असली यूआईडी पर अधिकतम प्रक्रिया कोटा तक पहुंचते हैं तो _ विफल हो सकता है। Google 'साइट: man7.org' वाला आपका मित्र यहां है। – Damon

संबंधित मुद्दे