ubuntu: किसी उपयोगकर्ता को रूट अनुमतियों के साथ स्क्रिप्ट चलाने दें


9

मेरे पास ubuntu 8.04 है और मैं एक बैश स्क्रिप्ट लिखना चाहता हूं rootजो कि प्रत्येक उपयोगकर्ता चला सकता है।

मैं खुद सूडो कर सकता हूं।

मैं उसको कैसे करू?

विशिष्टता : मैं इसे sudo के साथ नहीं करना चाहता, क्योंकि तब उपयोगकर्ताओं को अपना पासवर्ड टाइप करना होगा। मैं बस उन्हें स्क्रिप्ट को रूट के रूप में चलाने के लिए चाहता हूं, शायद कुछ सेटिड, डननो।

जवाबों:


23

यदि यह एक सामान्य बाइनरी था, तो आप चलाकर सेट कर सकते हैं

# chmod u+s /path/to/binary

दुर्भाग्य से, स्क्रिप्ट सेट नहीं की जा सकती हैं। (ठीक है, लेकिन आप इसे नजरअंदाज कर सकते हैं)। इसका कारण यह है कि स्क्रिप्ट की पहली पंक्ति ओएस को बताती है कि स्क्रिप्ट को चलाने के लिए कौन से दुभाषिया है। उदाहरण के लिए यदि आपके पास एक स्क्रिप्ट थी:

#!/bin/bash

आप वास्तव में समाप्त हो जाएगा

/bin/bash /path/to/script

जाहिर है, आपको दुभाषिया को सेतु बनाने की आवश्यकता होगी, जिसका अर्थ यह होगा कि सभी लिपियां सेटिउड होगी। यह बुरा होगा।

आप निम्नलिखित में अपनी / etc / sudoers फ़ाइल में विज़ुदो चलाकर sudo के साथ कर सकते हैं।

ALL ALL=NOPASSWD: /path/to/script

और अब कोई भी उपयोगकर्ता चला सकता है

$ sudo /path/to/script

यह उन्हें अपने पासवर्ड में टाइप किए बिना स्क्रिप्ट चलाने की अनुमति देता है।

एक विकल्प है जिसे कमांड में sudo की आवश्यकता नहीं होती है, जिसके लिए एक छोटे से सेट किए गए बाइनरी को बनाने की आवश्यकता होती है जो आपकी स्क्रिप्ट को निष्पादित करता है, लेकिन हर अतिरिक्त सेटिड बाइनरी एक और संभावित सुरक्षा समस्या को जोड़ता है।


मुझे लगता है कि यह वह उत्तर है जिसकी मुझे तलाश थी। क्या मैं एक बश लिपि, केवल एक द्विआधारी को सेट नहीं कर सकता? (निश्चित रूप से, मैं इसे अप्राप्य बनाने के लिए उपाय करूंगा)
फ्लाईबिसवायर

नहीं, आप स्क्रिप्ट सेतु नहीं बना सकते।
wufulk

wfaulk: आप उपयोग करने में सक्षम थे, लेकिन सबसे हाल ही में लिनक्स डिस्ट्रोस इसे अब अनुमति नहीं देते हैं। आप स्क्रिप्ट को 'संकलित' करने के लिए shc जैसे टूल का उपयोग कर सकते हैं, और फिर उसे सेट कर सकते हैं।
काइल ब्रान्ड

wufulk: बेशक, यह जानबूझकर अक्षम होने के लिए कुछ करने के लिए आपके रास्ते से बाहर हो जाएगा, इसलिए यह शायद एक बुरा विचार है :-)
काइल ब्रांडी

शब्द ALLको एक यूजर नेम से बदल दें ताकि सिर्फ एक ही सूडो बिना पासवर्ड डाले चल सके।
एचडीवी

3

मुझे उस पंक्ति को / END / etc / sudoers के अंत में सम्मिलित करने की आवश्यकता थी : ALL ALL = NOPASSWD: <filename> जाहिर है, बाद में %admin ALL=(ALL) ALLओवरराइड को व्यवस्थापक उपयोगकर्ताओं के लिए पासवर्ड की आवश्यकता थी।

जब तक स्क्रिप्ट अच्छी तरह से निर्धारित, हानिरहित, अनुमत कार्रवाई और किसी भी पैरामीटर के लिए मान गलत स्क्रिप्ट का कारण नहीं हो सकता है, तब तक कोई सुरक्षा समस्या नहीं होती है, क्योंकि स्क्रिप्ट को रूट के रूप में चलाने की अनुमति है।

लेकिन एक गोत्र है ...

हमेशा कमांड और फ़ाइल नामों में पूर्ण पथ का उपयोग करें। आप की तरह कुछ लिखते हैं तो echo Hello world!में myrootscript, किसी एक लिख सकते हैं ~/bin/echo scriptऔर myrootscriptजड़ जो कुछ उस में है के रूप में अमल होगा।

/bin/echo "Hoping this will keep you safe" :-)


यदि उस स्क्रिप्ट को संपादित करने के लिए मशीन पर एक गैर-रूट उपयोगकर्ता के लिए संभव है, तो उस उपयोगकर्ता के लिए मशीन पर कब्जा करना संभव है। यदि उसी उपयोगकर्ता के पास एक कमजोर पासवर्ड है, तो कुछ भी आपकी मशीन को पूरी तरह से समझौता करने से रोक रहा है।
एचडीवी

2

डिफ़ॉल्ट रूप से, wheelसमूह के सदस्यों को sudoकिसी भी कमांड के रूप में अनुमति दी जाती है root। यह संभव है कि आप sudoआज तक कैसे उपयोग कर रहे हैं ।

किसी अन्य उपयोगकर्ता को अनुमति देने के लिए आपको एक sudoersनियम बनाना होगा । उदाहरण के लिए:

mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh

उपयोगकर्ता की अनुमति देगा mickey.mouseआदेश को चलाने के लिए /usr/local/bin/test.shके रूप में rootएक अतिरिक्त पासवर्ड संकेत की आवश्यकता के बिना।

अधिक जानकारी के लिए आपको यह दस्तावेज़ पढ़ना चाहिए ।


डिबियन / उबंटू पहिया के बजाय व्यवस्थापक समूह का उपयोग करते हैं। यह संभवतः थोड़ा अधिक सटीक नाम है।
डेविड पशले

मुझे पुराने ढंग से बुलाओ, लेकिन ..;)
डैन कार्ली

1
पुराने जमाने: पी
डेविड पशले

0

chmod +s <filename>Suid bit को se करने के लिए उपयोग करें । इसका मतलब यह है कि जब फ़ाइल निष्पादित होती है, तो यह फ़ाइल के स्वामी की अनुमति से चलती है (इसलिए इसे चलाने के लिए इसे रूट करें)।

हालाँकि, यह बहुत ही खतरनाक हो सकता है जैसे बैश स्क्रिप्ट जैसी कोई चीज़, क्योंकि एक उपयोगकर्ता को इसे बदलने का एक तरीका मिल जाता है, वे आसानी से एक रूट शेल हासिल कर सकते हैं। सुनिश्चित करें कि यह रूट को छोड़कर किसी के द्वारा नहीं लिखा जा सकता है।

लिनक्स आपको स्क्रिप्ट पर सेट करने की अनुमति नहीं देता है, ऐसा करने के लिए आपको इसे एक कार्यक्रम के रूप में संकलित करना होगा। इसके बजाय, आप sudoers फ़ाइल (/ etc / sudoers) का उपयोग कर सकते हैं, और इस तरह एक पंक्ति जोड़ सकते हैं।

<username> ALL = NOPASSWD: /path/to/script


0

एक अन्य विकल्प: आप उस स्क्रिप्ट के चारों ओर एक छोटा सेट्यूड सी रैपर कर सकते हैं

  • किसी भी सीमा के लिए जाँचें जिसे आप लागू करना चाहते हैं (उपयोगकर्ता सूची, समय, सिस्टम लोड, ...)
  • यदि वांछित हो तो लॉग / ऑडिट निष्पादन
  • स्क्रिप्ट निष्पादित करता है

की तरह की कई capablities के अपने खुद के सबसेट की तरह sudo

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