यदि आप निष्पादन योग्य पर एक नज़र डालें sudo
:
$ which sudo
/usr/bin/sudo
$ ls -la /usr/bin/sudo
---s--x--x 2 root root 208808 Jun 3 2011 /usr/bin/sudo
आप देखेंगे कि यह अनुमति बिट्स को वहन करता है ---s--x--x
। इन्हें निम्न प्रकार से तोड़ा जा सकता है:
-|--s|--x|--x
- - first dash denotes if a directory or a file ("d" = dir, "-" = file)
--s - only the setuid bit is enabled for user who owns file
--x - only the group execute bit is enabled
--x - only the other execute bit is enabled
इसलिए जब कोई प्रोग्राम सेट किया गया होता है तो वह बिट सक्षम होता है (जिसे SUID भी कहा जाता है) इसका मतलब है कि जब कोई इस प्रोग्राम को चलाता है तो यह उस उपयोगकर्ता के क्रेडेंशियल के साथ चलेगा जो फ़ाइल का मालिक है, उर्फ। इस मामले में जड़।
उदाहरण
अगर मैं निम्नलिखित कमांड को उपयोगकर्ता के नमूने के रूप में चलाता हूं:
$ whoami
saml
$ sudo su -
[sudo] password for saml:
आप देखेंगे कि sudo
वास्तव में निष्पादन जड़ के रूप में चल रहा है:
$ ps -eaf|grep sudo
root 20399 2353 0 05:07 pts/13 00:00:00 sudo su -
सेतु तंत्र
यदि आप उत्सुक हैं कि SUID कैसे काम करती है तो एक नज़र डालें man setuid
। यहां मैन पेज का एक अंश दिया गया है, जो इसे मेरे से बेहतर बताता है:
setuid () कॉलिंग प्रक्रिया की प्रभावी उपयोगकर्ता आईडी सेट करता है। यदि कॉलर का प्रभावी यूआईडी रूट है, तो वास्तविक यूआईडी और सेव्ड सेट-यूजर-आईडी भी सेट हैं। Linux के अंतर्गत, setuid () को POSIX संस्करण की तरह _POSIX_SAVED_IDS सुविधा के साथ लागू किया जाता है। यह एक सेट-यूजर-आईडी (रूट के अलावा) प्रोग्राम को अपने सभी उपयोगकर्ता विशेषाधिकारों को छोड़ने के लिए, कुछ अन-विशेषाधिकारित कार्य करने की अनुमति देता है, और फिर एक प्रभावी तरीके से मूल प्रभावी उपयोगकर्ता आईडी को पुनः प्राप्त करता है।
यदि उपयोगकर्ता रूट है या प्रोग्राम सेट-यूजर-आईडी-रूट है, तो विशेष ध्यान रखा जाना चाहिए। सेट्यूड () फ़ंक्शन कॉलर की प्रभावी उपयोगकर्ता आईडी की जांच करता है और यदि यह सुपरयूज़र है, तो सभी प्रक्रिया-संबंधित उपयोगकर्ता आईडी यूआईडी पर सेट हैं। ऐसा होने के बाद, कार्यक्रम के लिए रूट विशेषाधिकार प्राप्त करना असंभव है।
यहां मुख्य अवधारणा यह है कि कार्यक्रमों में एक वास्तविक उपयोगकर्ता (यूआईडी) और एक प्रभावी (ईयूआईडी) है। जब यह बिट सक्षम हो जाता है, तो Setuid प्रभावी उपयोगकर्ता (EUID) सेट कर रहा है।
तो कर्नेल के दृष्टिकोण से यह ज्ञात है कि हमारे उदाहरण में, saml
अभी भी मूल मालिक (UID) है, लेकिन EUID को जिस किसी के साथ सेट किया गया है, वह निष्पादन योग्य का स्वामी है।
setgid
मुझे यह भी उल्लेख करना चाहिए कि जब हम सूडो कमांड पर अनुमतियों को तोड़ रहे हैं तो बिट्स का दूसरा समूह समूह अनुमतियों के लिए था। समूह बिट्स में भी सेटयूडी के समान कुछ होता है जिसे सेट समूह आईडी (उर्फ सेटगिड, एसजीआईडी) कहा जाता है। यह SUID के समान काम करता है सिवाय इसके कि यह मालिक क्रेडेंशियल्स के बजाय समूह क्रेडेंशियल्स के साथ प्रक्रिया को चलाता है।
संदर्भ
sudo -s
इसके बजाय आपको इसका उपयोग करना चाहिएsudo su
क्योंकि यह एक बेकार उपयोग हैsu
। :)