यह समझने के लिए कि कैसे os.getuid
और os.geteuid
भिन्न हैं, आपको यह समझने की आवश्यकता है कि वे पाइथन विशिष्ट फ़ंक्शन नहीं हैं (os
मॉड्यूल उपसर्ग के अलावा)। वे फ़ंक्शन getuid
और geteuid
सिस्टम कॉल को लपेट रहे हैं जो अनिवार्य रूप से सभी यूनिक्स-जैसे ऑपरेटिंग सिस्टम द्वारा प्रदान किए जाते हैं।
तो, पाइथन डॉक्स (जो बहुत अधिक विवरण देने की संभावना नहीं है) को देखने के बजाय, आपको अपने ऑपरेटिंग सिस्टम के दस्तावेज़ों को देखना चाहिए। उदाहरण के लिए, Here लिनक्स के लिए प्रासंगिक दस्तावेज है। विकिपीडिया में भी एक अच्छा article on Unix User IDs है।
नियमित यूआईडी और प्रभावी यूआईडी के बीच का अंतर यह है कि जब आप ऐसा कुछ करते हैं जो केवल विशेष पहुंच (जैसे फ़ाइल पढ़ने या लिखने, या कुछ सिस्टम कॉल करने) की आवश्यकता होती है तो केवल ईयूआईडी की जांच की जाती है। यूआईडी वास्तविक उपयोगकर्ता को इंगित करता है जो कार्रवाई कर रहा है, लेकिन अनुमतियों की जांच करते समय यह आमतौर पर नहीं माना जाता है। सामान्य कार्यक्रमों में वे वही होंगे। कुछ कार्यक्रम अपने ईयूआईडी को उन कार्यों से जोड़ने या घटाने के लिए बदलते हैं जिन्हें उन्हें लेने की अनुमति है। एक छोटा नंबर भी अपने यूआईडी को बदलता है, प्रभावी रूप से दूसरे उपयोगकर्ता बनने के लिए।
यहां एक उदाहरण है जो एक ईयूआईडी बदलता है: passwd
प्रोग्राम (जिसका उपयोग आपके पासवर्ड को बदलने के लिए किया जाता है) को रूट उपयोगकर्ता द्वारा स्वामित्व वाली सिस्टम की पासवर्ड फ़ाइल में लिखना चाहिए। नियमित उपयोगकर्ता उस फ़ाइल को नहीं लिख सकते हैं, क्योंकि यदि वे कर सकते हैं, तो वे सभी के पासवर्ड भी बदल सकते हैं। इसे हल करने के लिए, passwd
प्रोग्राम की फ़ाइल अनुमतियों में थोड़ा सा सेट है (जिसे setuid bit
के नाम से जाना जाता है) जो ओएस को इंगित करता है कि इसे प्रोग्राम के मालिक (जैसे root
) के ईयूआईडी के साथ चलाया जाना चाहिए, भले ही इसे किसी अन्य उपयोगकर्ता द्वारा लॉन्च किया जाए । passwd
प्रोग्राम लॉन्च करने वाले उपयोगकर्ता के रूप में UID
और उसके ईयूआईडी रूट के रूप में देखेगा। सिस्टम पासवर्ड फ़ाइल को लिखने के लिए यूरोपीय संघ को विशेषाधिकार प्राप्त करने की आवश्यकता है। यूआईडी भी उपयोगी है, क्योंकि passwd
को यह जानने की जरूरत है कि यह किस उपयोगकर्ता के लिए पासवर्ड बदल रहा है।
कुछ अन्य मामले हैं जहां यूआईडी और ईयूआईडी मेल नहीं खाएंगे, लेकिन वे बहुत आम नहीं हैं। उदाहरण के लिए, सुपर उपयोगकर्ता के रूप में चलने वाला एक फ़ाइल सर्वर अपने ईयूआईडी को किसी विशिष्ट उपयोगकर्ता से मेल खाने के लिए बदल सकता है जो कुछ फ़ाइल मैनिप्लेशंस का अनुरोध कर रहा है। उपयोगकर्ता के ईयूआईडी का उपयोग करने से सर्वर को उन चीजों तक पहुंचने से बचने की अनुमति मिलती है जिन्हें उपयोगकर्ता को स्पर्श करने की अनुमति नहीं है।
वे सेटुइड प्रोग्राम में समान नहीं हैं (और वे रूट के रूप में चल रहे किसी भी प्रोग्राम के लिए अलग हो सकते हैं और स्पष्ट रूप से सेट्यूइड को कॉल कर सकते हैं)। इसका मतलब यह है कि जब आपकी स्क्रिप्ट शुरू होती है तो वे * वही होते हैं। –