बैश स्क्रिप्टिंग: स्क्रिप्ट को रूट के रूप में चलाने की आवश्यकता है (या sudo के साथ)


26

मैं एक बश लिपि (उबंटू में) लिखने की कोशिश कर रहा हूं जो टार का उपयोग करके एक निर्देशिका का बैकअप लेगा।

मैं स्क्रिप्ट में एक जांच कैसे कर सकता हूं ताकि इसे केवल रूट के रूप में (या सूडो के साथ) चलाया जा सके?

उदाहरण के लिए, यदि कोई उपयोगकर्ता स्क्रिप्ट चलाता है, तो यह कहना चाहिए कि इस स्क्रिप्ट को sudo विशेषाधिकार के साथ चलाया जाना चाहिए, और फिर छोड़ दिया जाना चाहिए। यदि स्क्रिप्ट को रूट के रूप में निष्पादित किया जाता है, तो यह चेक को अतीत में जारी रखेगा।

मुझे पता है कि वहाँ एक आसान समाधान होना चाहिए, मैं अभी इसे googling द्वारा खोजने में सक्षम नहीं हूं।

जवाबों:


37

प्रभावी यूआईडी खींचने के लिए इस कमांड का उपयोग करें:

id -u

यदि परिणाम '0' है तो स्क्रिप्ट या तो रूट के रूप में चल रही है, या sudo का उपयोग कर रही है। आप कुछ ऐसा करके चेक चला सकते हैं:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

5
मैं आईडी (जैसे, / usr / बिन / आईडी) को पूरी तरह से योग्य बनाने की सलाह दूंगा। अन्यथा एक कुटिल उपयोगकर्ता अपनी स्क्रिप्ट / बाइनरी लिख सकता है जो हमेशा 0 देता है और फिर इसे उस स्थान पर रख देता है जो पहले निष्पादित उपयोगकर्ताओं के मार्ग में मौजूद है।
ktower

माना। एक संपादन के साथ फिक्सिंग।
स्कॉट पैक

6
किसी भी 'कुटिल' स्क्रिप्ट को पूरा करने की कोशिश कर आप आईडी के लिए पूर्ण पथ का उपयोग कर बंद नहीं किया जाएगा।
अभिषेकशील

मैं अभिषेक से सहमत हूं ... यह एक बैश स्क्रिप्ट है। 'आईडी' को क्वॉलिफाइ करने से कोई भी रोक नहीं पाएगा, जो वैसे भी चेक के आसपास पाने के लिए गंभीर है। पोर्टेबिलिटी के लिए इसे अयोग्य घोषित करने के लिए बेहतर है।
क्रिस

1
यह "sudo" आवश्यकता को संबोधित नहीं करता है।
ग्रेग

17

मुझे लगता है कि आप जानते हैं कि स्वामित्व को जड़ से बदलकर

chown root:root file

और 700 पर अनुमतियाँ सेट करना

chmod 700 file

आप सुडो के रूप में चलाने के सुझाव के बिना - एक ही बात को पूरा करेंगे।

लेकिन मैं इस उत्तर को पूर्णता के लिए पोस्ट करूंगा।


3
यह स्वीकृत उत्तर की तुलना में अधिक उपयुक्त समाधान है। - मेरा $ 0.02
क्रिस

साइड नोट: स्क्रिप्ट को गिट में जांचना कठिन हो जाता है। ठीक करने के लिए,sudo git add <file>
चैम एलियाह

2

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

यदि आप किसी भी यूआईडी सुझाव की तुलना में उपयोगकर्ता को सूचित करना चाहते हैं, तो ठीक है, लेकिन वे एक सुरक्षा एहतियात के रूप में घोड़े पर टायर के समान उपयोगी हैं - स्क्रिप्ट को कॉपी करने से एक उपयोगकर्ता को रोकने के लिए कुछ भी नहीं है, अगर स्टेटमेंट निकाल रहा है, और वैसे भी यह चल रहा है।

यदि यह एक सुरक्षा मुद्दा है, तो स्क्रिप्ट को रूट, रूट के स्वामित्व वाले 700 पर सेट किया जाना चाहिए, ताकि यह किसी अन्य उपयोगकर्ता द्वारा पठनीय या निष्पादन योग्य न हो।


या, यह हो सकता है कि स्क्रिप्ट को अपने काम को पूरा करने के लिए केवल फाइलों तक पहुंचने या रूट तक पहुंचने की आवश्यकता हो, जैसा कि मेरे मामले में है
chrisbunney

2

आप whoami कमांड का उपयोग कर सकते हैं।

if [ ! "`whoami`" = "root" ]
then
    echo "\nPlease run script as root."
    exit 1
fi

वास्तव में uid 0 पूर्ण विशेषाधिकार वाला विशेष उपयोगकर्ता खाता है। "रूट" बस उस यूआईडी के लिए सबसे आम लेबल / नाम मैप किया गया है। इसका 'मूल' होना जरूरी नहीं है और एक हमलावर इसका फायदा उठाने की कोशिश कर सकता है।
0xSheepdog

2

बैश वैरिएबल $EUIDप्रभावी UID स्क्रिप्ट को दिखाता है कि स्क्रिप्ट चल रही है, यदि आप यह सुनिश्चित करना चाहते हैं कि स्क्रिप्ट रूट के रूप में चलती है, तो चेक वेथर $EUIDमें मान 0 या नहीं होता है:

if [ $EUID -ne 0 ]; then
    echo "$0 is not running as root. Try using sudo."
    exit 2
fi

यह /usr/bin/id(bash लिपियों के लिए!) के समाधान से बेहतर है, क्योंकि इसके लिए किसी बाहरी कमांड की आवश्यकता नहीं है।


1
सिर्फ बाहर निकलने के बजाय, echoलाइन के साथ sudo "$0" "$@"प्रतिस्थापित exit 2करके और उसके साथ प्रतिस्थापित करके उपयोगकर्ता को sudo लॉगिन के लिए संकेत दे सकता है exit $?
schumacher574

अच्छा विचार। हालाँकि यह सवाल एक स्क्रिप्ट के लिए कहा गया कि छोड़ो, खुद से सुडोल नहीं।
neuhaus

0

केवल स्क्रिप्ट को रूट द्वारा रन करने योग्य बनाने का एक सरल तरीका यह है कि स्क्रिप्ट को लाइन से शुरू किया जाए:
#!/bin/su root


-1

"# / / bin / su root" सुपर उपयोगकर्ता मोड में उपयोगकर्ताओं को रूट पासवर्ड का उपयोग किए बिना स्क्रिप्ट चलाने की अनुमति देता है। यदि आप चाहते हैं कि सुपर उपयोगकर्ता स्क्रिप्ट को रूट के परिणामों के साथ चलाएं, तो यह ऐसा करता है।

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