क्या मैं एक स्क्रिप्ट हमेशा रूट के रूप में निष्पादित कर सकता हूं?


27

स्क्रिप्ट को रूट के रूप में निष्पादित करने के लिए, कोई फर्क नहीं पड़ता कि कौन इसे निष्पादित करता है?

मैं सेतु के बारे में पढ़ता हूं लेकिन मुझे यकीन नहीं है कि यह कैसे करना है।

मैं लिनक्स, Ubuntu 12.04 LTS का उपयोग कर रहा हूं।


आप किस लिनक्स वितरण पर हैं? या यूनिक्स, यहां तक ​​कि?
22'12

@slhck लिनक्स, उबंटू 12
हैप्पीडेवेलर

3
setuidस्क्रिप्ट पर काम नहीं करेगा - यह इन दिनों अधिकांश * निक्स वितरण पर सुरक्षा कारणों से अक्षम है। आप इसे सेट कर सकते हैं, लेकिन इसे अनदेखा किया जाएगा। हो सकता है कि आप अपनी वास्तविक समस्या के बारे में अधिक बता सकें ताकि हम आपको इसके बजाय हल करने में मदद कर सकें? क्या स्क्रिप्ट है? आपको इसे रूट के रूप में निष्पादित करने की आवश्यकता क्यों है? sudoएक विकल्प का उपयोग कर रहा है?
22'12

क्या आपने कोशिश की है sudo -s?
नाम फुंग

जवाबों:


29

वास्तव में सावधान रहें: सेतु के साथ संयुक्त स्क्रिप्ट खतरनाक हैं!

सबसे पहले, कृपया इस प्रश्न / उत्तर पर एक नज़र डालें , विशेष रूप से इस उत्तर और सुरक्षा चेतावनी पर

यदि आप अभी भी setuidसेट के साथ अपनी स्क्रिप्ट को निष्पादित करना चाहते हैं , तो आप एक संक्षिप्त सी प्रोग्राम को आवरण के रूप में लिख सकते हैं और setuidसंकलित बाइनरी पर बिट सेट कर सकते हैं ।

आवरण उदाहरण:

int main(void) {        
    setuid(0);
    clearenv();
    system("/absolute/path/to/your/script.sh");
}

एक अन्य समाधान का उपयोग कर sudo( यहां उल्लेख किया गया है ):

  1. मूल के रूप में, अपनी स्क्रिप्ट तक लिखने (और शायद अन्य) तक पहुंच को रोकें:

    chown root /absolute/path/to/your/script.sh
    chmod 700 /absolute/path/to/your/script.sh
    
  2. यह सत्यापित करें कि मूल को छोड़कर कोई भी स्क्रिप्ट को प्रतिस्थापित कर सकता है , उदाहरण के लिए मूल फ़ोल्डर के अभिगम अधिकार को संशोधित करके:

    जड़ जड़ / निरपेक्ष / पथ / को / आपके /
    chmod 755 / निरपेक्ष / पथ / को / आपके /
    
  3. इसके /etc/sudoersसाथ sudo एक्सेस अधिकारों को संशोधित करें visudo:

    All ALL = (रूट) NOPASSWD: /absolute/path/to/your/script.sh
    

    सेटिंग्स के बारे में अधिक विवरण (उदाहरण के लिए विशिष्ट उपयोगकर्ताओं या समूहों तक पहुंच को प्रतिबंधित करना) को sudoers manpage में पाया जा सकता है।

बाद में, सभी उपयोगकर्ता बिना पासवर्ड के रूट के रूप में स्क्रिप्ट को चला सकते हैं:

sudo /absolute/path/to/your/script.sh

यह ऊपर के आवरण / सेतु के घोल का उपयोग करने के समान है।


3
विशिष्ट खतरे बहुत स्पष्ट नहीं हैं, लेकिन वे पर्यावरण के चारों ओर भारी घूमते हैं। अधिकांश कार्यक्रमों के विपरीत, शेल स्क्रिप्ट के व्यवहार को दर्जनों पर्यावरण चर द्वारा महत्वपूर्ण रूप से बदला जा सकता है, पर्याप्त है ताकि व्यापक सुरक्षा उपायों के बिना, ऐसी स्क्रिप्ट को आसानी से मनमाने कोड को निष्पादित करने में धोखा दिया जा सके।
स्टेफनी

1
आपको उस आवरण में सिस्टम कॉल से पहले क्लीयरेनव () को कॉल करना चाहिए, जिससे वातावरण पूरी तरह से उड़ जाए ताकि स्क्रिप्ट को हेरफेर करने के लिए कोई भी बुरी सेटिंग न हो। kernel.org/doc/man-pages/online/pages/man3/clearenv.3.html
स्टेफ़नी

@ स्टेफ़नी मुझे कुछ गलत करना चाहिए, क्योंकि यह सब एक सामान्य कार्य के लिए बहुत पागल लग रहा है। यह वही है जो मैं करने की कोशिश कर रहा हूं: serverfault.com/questions/401405/…
HappyDeveloper

@HappyDeveloper भी एक सेटिउड स्क्रिप्ट के लिए पागल नहीं है, क्योंकि एक खराब सुरक्षित व्यक्ति किसी के लिए भी रूट करने का एक रास्ता है जो इसे चलाने का प्रबंधन करता है।
स्टेफनी

4
sudoसभी उपयोगकर्ताओं को एक विशेष कार्यक्रम (या स्क्रिप्ट) तक पहुंच प्रदान करने के लिए इस्तेमाल किया जा सकता है। उस अर्थ में, यह एक फैंसी सेतुइड आवरण के रूप में कार्य करता है। ऐसा लगता है कि आम तौर पर अपने स्वयं के setuid आवरण लिखने से बेहतर विकल्प होगा।
जजलिन

4

सबसे आसान और सुरक्षित तरीका फ़ाइल अनुमतियों में SETUID बिट्स का उपयोग करना है। इस तरह से कमांड की अनुमति मालिक की अनुमति को फाइल करने के लिए बढ़ाई जाएगी।

संस्करण से स्क्रिप्ट को रोकने के लिए सभी बिट्स के लिए लिखना सेट न करें।


0

मुझे नहीं पता कि यह उपयोगी हो सकता है लेकिन, स्क्रिप्ट को केवल रूट के रूप में चलाने के लिए, आप स्क्रिप्ट के पहले भाग पर इस शेलबैंग का उपयोग कर सकते हैं:

#!/bin/su root
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.