मैं अंदर हूं /sbin
और मैं देख रहा हूं कि shutdown
इसकी अनुमति है rwxr-xr-x
। क्या इसका मतलब यह नहीं है कि कोई भी इसे अंजाम दे सकता है?
shutdown
कमांड के बारे में बात कर रहा है ।
shutdown
।
मैं अंदर हूं /sbin
और मैं देख रहा हूं कि shutdown
इसकी अनुमति है rwxr-xr-x
। क्या इसका मतलब यह नहीं है कि कोई भी इसे अंजाम दे सकता है?
shutdown
कमांड के बारे में बात कर रहा है ।
shutdown
।
जवाबों:
कोई भी निष्पादित कर सकता है shutdown
, लेकिन सिस्टम शटडाउन को ट्रिगर करने के लिए रूट विशेषाधिकार की आवश्यकता होती है। लेकिन shutdown
सेटिउड नहीं है, और इसलिए केवल रूट इसे सफलतापूर्वक निष्पादित कर सकता है। यह shutdown
कार्यक्रम आपके विशेषाधिकारों की जांच करने के लिए काफी अच्छा है और आपको बताए कि क्या कोई समस्या है, लेकिन अगर यह भोलेपन से सिस्टम शटडाउन की कोशिश करता है, तो भी कुछ नहीं होगा।
आनंद: मैं विशाल गहरे से आत्माओं को बुला सकते हैं।
HOTSPUR: क्यों, इसलिए मैं या कोई भी आदमी कर सकता है; लेकिन क्या वे तब आएंगे जब आप उनके लिए फोन करेंगे?
(हेनरी IV से)
shutdown
से अलग नहीं है /bin/rm
। हर कोई इसे निष्पादित कर सकता है, लेकिन एक नियमित उपयोगकर्ता को हटा नहीं सकता है /etc
, या किसी अन्य उपयोगकर्ता के घर की निर्देशिका नहीं कर सकता है ।
विशेष रूप से: केवल रूट विशेषाधिकारों (प्रभावी यूआईडी 0) के साथ चलने वाली एक प्रक्रिया इनिट सिस्टम को सिस्टम सेवाओं को रोकने, सभी उपयोगकर्ता प्रक्रियाओं को समाप्त करने और सिस्टम कॉल को जारी करने का निर्देश दे सकती है जो वास्तव में मशीन को रोकती है। (यदि shutdown
इसे सेट किया गया था, तो यह जड़ के रूप में चलेगा जो इसे लागू करता है, लेकिन यह नहीं है।)
shutdown
GUI से कॉल करने के बारे में क्या , उदाहरण के लिए कंट्रोल-अल्ट-डेल के साथ? यह महसूस करना महत्वपूर्ण है कि उस मामले में, shutdown
सीधे द्वारा शुरू किया गया है init
और यह रूट विशेषाधिकारों के साथ चलता है। तो हर कोई जो कंसोल तक चलता है, संभवतः इसे बंद कर सकता है। यदि यह वांछनीय नहीं है, तो नियंत्रण-ऑल्ट-डिलीट वास्तव में चलेगा shutdown -a
। (दस्तावेज़ देखें कि @ some1 ने उनके उत्तर में उद्धृत किया है)। जो यह shutdown
जांचने के लिए कहता है कि वर्तमान में लॉग इन उपयोगकर्ता इसे चलाने के लिए अधिकृत है या नहीं। लेकिन यह केवल प्रासंगिक है क्योंकि shutdown
इस परिदृश्य में जड़ के रूप में चल रहा है।
shutdown
, लेकिन यह कार्यक्रम वास्तव में एक सिस्टम शटडाउन को ट्रिगर नहीं कर सकता है जब तक कि वर्तमान उपयोगकर्ता के पास रूट विशेषाधिकार न हों। सही?
shutdown
। निष्पादक कार्यक्रम उपयोगकर्ता के परमिट के साथ चलाया जाता है जो निष्पादन योग्य का मालिक होता है। उदाहरण के लिए, /etc/passwd
रूट अनुमतियों के साथ आपको पासवर्ड फ़ाइल को संशोधित करने की अनुमति देता है। के लिए मैनपेज देखें chmod
।
/usr/bin/passwd
रूट अनुमतियों के साथ रन " होना चाहिए था ! /etc/passwd
निष्पादन योग्य नहीं है (यह "पासवर्ड फ़ाइल" संशोधित किया जा रहा है)।
shutdown
यदि आपका UID 0 है, तो बाइनरी स्वयं जाँच करता है।
स्ट्रेस आउटपुट देखें:
strace /sbin/shutdown -r -h now
...
...
geteuid() = 10001
setuid(10001) = 0
getuid() = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1) = ?
shutdown
कि आपकी UID 0.
if(getuid() != 0) printf("Need to be root");
। जो वास्तव में स्रोत कोड से पता चलता है।
ऐसा प्रतीत होता है कि शटडाउन एक्सेस सूची की जांच करेगा यदि आप इसे -a से चिह्नित करते हैं:
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
चूंकि आप वर्तमान में इसे -a फ्लैग के बिना कॉल कर रहे हैं, यह केवल रूट शटडाउन की अनुमति देने के लिए डिफ़ॉल्ट है।
यदि आप चाहते हैं कि अतिरिक्त उपयोगकर्ता कमांड चलाने में सक्षम हों, तो उस फ़ाइल को कॉन्फ़िगर करें और ध्वज का उपयोग करें।
Why can't I execute shutdown when the permission is rwxr-xr-x?
अनुमति बिट्स आवश्यक रूप से उपयोगकर्ता या समूह के आधार पर अभिगम नियंत्रण को बाहर नहीं करते हैं।
-a
कमांडलाइन से इसे कॉल करने से कोई फर्क नहीं पड़ेगा: shutdown -a
अभी भी रूट अनुमतियों के साथ निष्पादित किया जाना चाहिए (जो init
नियंत्रण-ऑल-डेल पर आपूर्ति करता है)।