जब आप लिनक्स में एक एक्ज़ीक्यूटेबल फ़ाइल चलाते हैं, तो यह आमतौर पर वर्तमान उपयोगकर्ता और ग्रुप ID के साथ चलती है। हालांकि, ऐसे समय होते हैं जब आपको उस फ़ाइल को किसी अन्य उपयोगकर्ता (जैसे रूट) के रूप में चलाने की आवश्यकता होती है। अपने उपयोगकर्ता खाते को स्विच करने के बजाय, आप setuid का उपयोग करके एक्ज़ीक्यूटेबल को वर्तमान उपयोगकर्ता के बजाय फ़ाइल मालिक के रूप में चला सकते हैं। यहां हम बताएंगे कि setuid कैसे काम करता है और यह उपयोगकर्ताओं को एक्ज़ीक्यूटेबल/बाइनरी को एस्केलेटेड विशेषाधिकारों के साथ चलाने की अनुमति कैसे देता है।
Setuid कैसे काम करता है?
Setuid का अर्थ है SET User ID on execution। मान लीजिए हमारे पास "identity" नामक एक एक्ज़ीक्यूटेबल है जिसे रूट उपयोगकर्ता द्वारा बनाया गया है। जब आप इसे चलाते हैं, तो यह आपकी उपयोगकर्ता ID, ग्रुप ID और उपयोगकर्ता विशेषाधिकारों के साथ चलेगा। यदि "identity" फ़ाइल पर setuid बिट सेट है, तो जब आप इसे चलाते हैं, तो यह रूट उपयोगकर्ता और उसके उपयोगकर्ता विशेषाधिकारों के रूप में चलेगा।
एक उदाहरण के रूप में, हम पहले "identity" फ़ाइल के स्वामित्व की जांच कर सकते हैं और सत्यापित कर सकते हैं कि यह रूट उपयोगकर्ता के स्वामित्व में है। अनुमति स्ट्रिंग में उपयोगकर्ता, ग्रुप और अन्य के लिए एक्ज़ीक्यूटेबल (x) बिट्स सेट दिखाए गए हैं।
उपयोगकर्ता "john1" "identity" फ़ाइल को निष्पादित करता है, जो निष्पादन पर एक प्रक्रिया बन जाती है। जैसा कि प्रक्रिया सूची में दिखाया गया है, प्रक्रिया "john1" उपयोगकर्ता नाम और उपयोगकर्ता ID के तहत बनाई और चलाई जाती है।
अगला, रूट उपयोगकर्ता के रूप में, हम "identity" फ़ाइल का setuid बिट सेट करते हैं:
chmod u+s /usr/bin/identity
"u" दर्शाता है कि setuid बिट (+s) केवल उपयोगकर्ता के लिए सेट किया जाना चाहिए।
मालिक के लिए, अनुमति स्ट्रिंग के एक्ज़ीक्यूटेबल भाग में हम देख सकते हैं कि "x" को "s" से बदल दिया गया है। जब भी आप एक एक्ज़ीक्यूटेबल के लिए "s" देखते हैं, इसका मतलब है कि उस पर setuid बिट सेट किया गया है।
chmod कमांड का संख्यात्मक संस्करण भी नीचे दिखाए अनुसार उपयोग किया जा सकता है।
chmod 4755 /usr/bin/identity
संख्यात्मक अनुमति स्ट्रिंग में 4 का जुड़ना setuid बिट के समावेश को दर्शाता है।
निम्नलिखित वह है जो होता है जब "john1" फिर से "identity" फ़ाइल को निष्पादित करता है। चल रही प्रक्रियाओं की सूची को देखते हुए, हम अब देख सकते हैं कि प्रक्रिया "john1" के बजाय "root" उपयोगकर्ता द्वारा बनाई और चलाई जाती है।
Setuid बिट का महत्वपूर्ण उपयोग
ज्यादातर समय आप विशेषज्ञों से सुनेंगे कि आपको एप्लिकेशन को रूट उपयोगकर्ता के रूप में नहीं चलाना चाहिए। हालांकि, ऐसे उदाहरण हैं जहां कुछ फ़ाइलों को रूट अनुमति के साथ चलाने की आवश्यकता होती है। उदाहरण के लिए, passwd उपयोगिता जो लिनक्स सिस्टम पर डिफ़ॉल्ट रूप से इंस्टॉल होती है, उस पर setuid बिट सेट होता है।
कारण सरल है: एक उपयोगकर्ता के लिए पासवर्ड जानकारी "/etc/passwd" और "/etc/shadow" फ़ाइलों में संग्रहीत होती है, जिन्हें केवल "रूट" द्वारा संशोधित किया जा सकता है। जब "john1" अपने लिए पासवर्ड बदलने का प्रयास करता है, तो उसे उपरोक्त दो फ़ाइलों में जानकारी संशोधित करने की अनुमति की आवश्यकता होगी। passwd पर setuid बिट सेट होने से "john1" को उपयोगकर्ता पासवर्ड बदलने और उन दो फ़ाइलों में जानकारी अपडेट करने के लिए अस्थायी रूप से रूट अनुमति मिलती है।
Setuid सुरक्षा जोखिम
यदि आप सावधान नहीं हैं, तो एक हमलावर आपके सिस्टम को नियंत्रित करने के लिए setuid बाइनरी का फायदा उठा सकता है। उपयोगकर्ताओं को सामान्य रूप से setuid प्रोग्राम इंस्टॉल नहीं होने चाहिए, विशेष रूप से स्वयं के अलावा अन्य उपयोगकर्ताओं के लिए setuid। सबसे महत्वपूर्ण बात, आपके होम फ़ोल्डर में रूट उपयोगकर्ता के लिए कोई setuid सक्षम बाइनरी नहीं होनी चाहिए। ये आमतौर पर ट्रोजन हॉर्स, या मैलवेयर होते हैं।
निष्कर्ष
Setuid को केवल एक्ज़ीक्यूटेबल फ़ाइलों पर सेट किया जा सकता है। इसी तरह, setgid बिट भी सेट किया जा सकता है, जो एक ग्रुप के सभी सदस्यों को मालिक अनुमतियों के साथ एक एक्ज़ीक्यूटेबल चलाने में सक्षम बनाता है।
ध्यान दें कि setuid और setgid बिट्स सुरक्षा-संवेदनशील हैं और केवल योग्य सिस्टम प्रशासकों द्वारा उपयोग किए जाने चाहिए।
अगला पढ़ें:
- लिनक्स में शेयर्ड डायरेक्टरी पर फ़ाइलों को प्रबंधित करने के लिए Sticky Bit का उपयोग कैसे करें
- लिनक्स टर्मिनल में स्पेलिंग चेक कैसे करें
- लिनक्स में फ़ाइलों को खोजने के लिए find, locate, which और whereis कमांड का उपयोग करना