यदि प्रोग्राम को निष्पादित करने के लिए आपको रूट की आवश्यकता होती है, तो आप कैसे जान सकते हैं?


10

मैं समझता हूं कि यह थोड़ा मौलिक है और शायद एक मूर्खतापूर्ण प्रश्न है, लेकिन मैं इसका उत्तर नहीं पा सका हूं।

मैं समझता हूं कि हर फ़ाइल में "Executable"बिट है।

मैंने यह मान लिया कि जिन कार्यक्रमों की आवश्यकता होती है root, वे rootउपयोगकर्ता और rootसमूह के स्वामित्व वाले होते हैं, जिनके लिए Executableबिट नहीं होगा Otherऔर जो गैर-रूट उपयोगकर्ताओं को निष्पादित करने से रोकेंगे। लेकिन में /binऔर /sbinनिर्देशिका मैं देख रहा हूँ कि सभी फ़ाइलों की अनुमति की तरह है-rwxr-xr-x

तो क्या वास्तव में यह निर्धारित करता है कि किसी उपयोगकर्ता को किसी चीज़ को निष्पादित करने के लिए रूट अनुमति की आवश्यकता है?


1
डिफ़ॉल्ट रूप से, आप या कोई भी उपयोगकर्ता किसी भी कार्यक्रम को निर्देशिका /binया /sbinनिर्देशिका से निष्पादित कर सकता है । समस्या यह है कि उन कार्यक्रमों में से कुछ अलग चल रहे हैं, जिसके आधार पर उपयोगकर्ता उन्हें चलाता है।
राडू राईडेनू

जवाबों:


13

शायद ही कभी, यह कोड में है। उदाहरण के लिए, मध्य में hwclock.c, आप पाएंगे:

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

यदि आप रूट हैं या नहीं, तो प्रोग्राम का व्यवहार बदल जाएगा।

अधिकांश अन्य मामलों में, यह निहित है; गिरी को सौंप दिया। उदाहरण के लिए, यदि प्रोग्राम सिस्टम कॉल को कॉल करता है जो आपको सिस्टम को रिबूट करने देता है, तो यह रूट होने पर ही काम करेगा। यदि आप रूट नहीं हैं, तो आपके पास "अनुमति अस्वीकृत" त्रुटि होगी जो आवेदन (यदि अच्छी तरह से लिखा गया है) बस आपको रिपोर्ट करता है। या आप किसी फ़ाइल को हटाने की कोशिश कर रहे हैं; यदि आपके पास इसे करने के लिए फ़ाइल पर सही अनुमति है, तो यह सफल होगा; यदि नहीं, तो यह निर्भर करता है कि आप रूट हैं या नहीं --- जब rmकॉल unlink()कर्नेल अनुमतियों की जांच करेगा।

तो नहीं, सिद्धांत रूप में आप केवल निष्पादन योग्य की अनुमति को देखकर यह नहीं कह सकते हैं कि प्रोग्राम को रूट विशेषाधिकारों की आवश्यकता है या नहीं। बहुत सारे कार्यक्रमों के लिए उन्हें केवल कुछ ऑपरेशन की आवश्यकता होगी, इसलिए ऐसा कुछ करना वास्तव में मुश्किल होगा। के मामले hwclockमें एक (किसी को भी घड़ी पढ़ सकते हैं लेकिन केवल रूट सेट कर सकते हैं) है, लेकिन उनमें से सैकड़ों देखते हैं ( kill, rm, cat...)

फिर सेतु कार्यक्रमों की संबंधित और दिलचस्प दुनिया है ...


तो मूल रूप से कर्नेल "इसका प्रभारी" है? यदि प्रोग्राम एक सिस्टम कॉल करता है, तो कर्नेल यह निर्धारित करता है कि क्या प्रोग्राम चलाने वाले उपयोगकर्ता को रूट करना है और इसे लागू करना है?
डीन

2
असल में, हाँ। कार्यक्रम अतिरिक्त परीक्षण कर सकता है, लेकिन अनुमति जांच कर्नेल स्तर पर है। सेतु-मूल कार्यक्रम अपवाद हैं; वे हमेशा रूट के रूप में चलते हैं इसलिए उन्हें स्वयं अनुमति के लिए जांच करने की आवश्यकता होती है (और सुरक्षा दोषों का एक अच्छा फ़ॉन्ट है ...)
रमनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.