शेल स्क्रिप्ट: इसके अंदर sudo का उपयोग करें बनाम इसे sudo के साथ चलाएं?


13

शेल स्क्रिप्ट लिखते समय, जिसमें कुछ लेकिन सभी कमांडों को सुपरसुसर विशेषाधिकारों की आवश्यकता नहीं होती है, क्या मुझे चाहिए

  • सूडो को उन कमांड्स में जोड़ें, जिन्हें सुपरसुसर विशेषाधिकारों की आवश्यकता होती है, और सुडोल के बिना शेल स्क्रिप्ट को चलाते हैं, या

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

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

पहले तरीके में मुझे अलग-अलग सुडोकू कमांड के लिए अपना पासवर्ड कई बार प्रदान करने की आवश्यकता हो सकती है, जबकि सुपरसुसर विशेषाधिकारों को केवल उन कमांडों को दिया जाता है जिनकी उन्हें आवश्यकता होती है।

सुरक्षा चिंता से, पहला तरीका बेहतर है। सुविधा के लिए, दूसरा तरीका बेहतर है।

  1. मैं पहले तरीके को अपनाने की सोच रहा हूं। इसलिए मुझे शेल स्क्रिप्ट में कई sudo कमांडों को अपने पासवर्ड प्रदान करने की असुविधा से निपटना होगा।

  2. स्टीफन हैरिस ने लिखा :

    एक अच्छी तरह से लिखी गई स्क्रिप्ट यह पता लगाएगी कि क्या वह सही अनुमतियों के साथ चल रहा है और सूडो को बिल्कुल नहीं बुला रहा है, लेकिन बहुत सारी खराब स्क्रिप्ट है

    तो क्या मुझे दूसरे तरीके का इस्तेमाल करना चाहिए? यदि ऐसा है तो,

    • मैं यह कैसे लिख सकता हूं कि "स्क्रिप्ट यह पता लगाएगी कि क्या वह सही अनुमतियों के साथ चल रहा है और sudo को बिल्कुल नहीं बुला रहा है"?

    • मैं सूडो के साथ स्क्रिप्ट चलाते समय कमांडरों को विशेषाधिकारों को देने की समस्या से बचने के लिए इसकी सुरक्षा में सुधार कैसे कर सकता हूं?

  3. क्या यह सरल दृष्टिकोण दोनों दृष्टिकोणों में सबसे अच्छा होगा: कमांडो में सुडो को जोड़ें जो केवल इसकी आवश्यकता है, और सुडो के साथ या बिना स्क्रिप्ट को चलाएं या नहीं, इस पर निर्भर करता है कि मुझे सुविधा या सुरक्षा चाहिए? क्या इस दृष्टिकोण में कुछ समस्या है?

धन्यवाद।


मैंने सोचा sudoथा कि एक डिफ़ॉल्ट क्रेडेंशियल कैश है। क्या यह आपके प्लेटफ़ॉर्म पर अक्षम है?
पाइप

@ पिप उनकी स्क्रिप्ट उदाहरण के लिए एक निश्चित समय के लिए सो रही हो सकती है, और इस तरह से कैश काम नहीं कर सकता है।
LinuxSecurityFreak 8

जवाबों:


15

अपने पहले अंक को संबोधित करने के लिए:

मैं यह कैसे लिख सकता हूं कि "स्क्रिप्ट यह पता लगाएगी कि क्या वह सही अनुमतियों के साथ चल रहा है और sudo को बिल्कुल नहीं बुला रहा है"?

रूट के लिए एक सरल और POSIX चेक है:

#!/bin/sh
is_user_root ()
{
    [ "$(id -u)" -eq 0 ]
}

वैकल्पिक रूप से, बैश में, अधिक प्रदर्शन-संचालित कोडर उपयोग करना चाहते हैं:

#!/bin/bash
is_user_root ()
{
    [ ${EUID:-$(id -u)} -eq 0 ]
}

ध्यान दें कि मैंने जानबूझकर कोड को फिर से उपयोग के लिए कार्यों में लपेटा है।

अपने दूसरे अंक को संबोधित करने के लिए:

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

आप इस बारे में बहुत कुछ नहीं कर सकते। कम से कम मेरे दिमाग में कुछ नहीं आया। अगर मैंने स्क्रिप्ट देखी, तो मेरे पास सुझाव हो सकते हैं। लेकिन चूंकि आपने इसे अपने प्रश्न में शामिल नहीं किया है ... यदि आप पूरी स्क्रिप्ट को साथ sudoया साथ चलाते हैं root, तो मुझे इसे नियंत्रित करने का कोई तरीका नहीं दिखता है।

टिप्पणी को संबोधित करने के लिए:

आपको क्या लगता है "इसके अंदर sudo का उपयोग करें बनाम इसे sudo के साथ चलाएं"

मेरी लिपियों में, मैं आमतौर पर बाद के दृष्टिकोण के साथ आगे बढ़ता हूं, लेकिन इसका मतलब यह नहीं है कि मैं आपको इसकी सलाह देता हूं। क्योंकि यह इस बात पर निर्भर करता है कि स्क्रिप्ट किसके लिए है - rootकेवल के लिए; कुछ उपयोगकर्ताओं के पास sudoअधिकार होने के अपवाद के साथ उपयोगकर्ता के लिए; आपको किसी भी मूल्य के साथ उत्तर देने में सक्षम होने के लिए प्रश्न में अपनी स्क्रिप्ट को शाब्दिक रूप से शामिल करना होगा।


sudo -u "$SUDO_USER" command...?
माइकल होमर

धन्यवाद। आपको क्या लगता है "इसके अंदर sudo का उपयोग करें बनाम इसे sudo के साथ चलाएं"?
टिम

धन्यवाद। क्या यह सरल दृष्टिकोण दोनों दृष्टिकोणों में से सबसे अच्छा होगा: कमांडो में सुडो को जोड़ें जो केवल इसकी आवश्यकता है, और सूडो के साथ या उसके बिना स्क्रिप्ट को चलाएं या नहीं, इस पर निर्भर करता है कि मुझे सुविधा या सुरक्षा चाहिए? क्या इस दृष्टिकोण में कुछ समस्या है?
टिम

@MichaelHomer मैं सोच रहा था कि यहाँ क्या sudo -u "$SUDO_USER" commandकरना चाहिए?
टिम

@ हालांकि मुझे उस दृष्टिकोण से कोई समस्या नहीं है, किसी को उचित तर्क के साथ आपत्ति हो सकती है। यह वास्तव में आपके मूल प्रश्न के दायरे से बाहर है। मुझे अब अपना मासिक एम-डिस्क बैकअप करने की आवश्यकता है, इसलिए मुझे आज तक उपलब्ध नहीं लगता, इसके लिए खेद है। मुझे उम्मीद है कि मैंने मुख्य बिंदु का जवाब कम से कम दिया। कल मिलते हैं।
LinuxSecurityFreak

-4

मुझे लगता है कि मैं इसका जवाब दे सकता हूं।

तो क्या मुझे दूसरे तरीके का इस्तेमाल करना चाहिए?

कोई कारण नहीं है कि आपको यहां समस्या होनी चाहिए, यही कारण है:

यदि केवल एक कमांड है जिसे रूट के रूप में चलाने की आवश्यकता है, तो आपके स्क्रिप्ट के अंदर या क्योंकि runआपका प्रोग्राम लंबी सड़क है। क्या आप भूल गए हैं कि प्रोग्रामर आलसी हैं?rootsudosudo

आप कई आदेशों की जरूरत है runके रूप में rootतो के रूप में चलाते rootया sudo

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

यदि अन्य उपयोगकर्ताओं को runआपके कार्यक्रम की आवश्यकता है, तो sudoउन लोगों के लिए सेटअप करें क्योंकि sudoबहुत अधिक अनुकूलन योग्य है और आपकी आवश्यकताओं को पूरा करेगा।

यहाँ एक उदाहरण है sudo:

हमेशा visudoफ़ाइल को संपादित करते समय उपयोग करें .....

kate ALL=(ALL) NOPASSWD: /usr/local/bin/script ARG1 ARG2

sudo आपके प्रोग्राम / स्क्रिप्ट के अंदर उपयोगकर्ताओं को बदलने के लिए भी बहुत अच्छा है, यहाँ मेरा एक स्क्रिप्ट से एक लाइन है:

sudo -i -u "$user" user="$user" CURRENTDIR="$CURRENTDIR" BASHRC="$BASHRC" bash <<'EOF'

मैं यह कैसे लिख सकता हूं कि "स्क्रिप्ट यह पता लगाएगी कि क्या वह सही अनुमतियों के साथ चल रहा है और sudo को बिल्कुल नहीं बुला रहा है"?

https://www.cyberciti.biz/tips/shell-root-user-check-script.html
how-do-i-i-निर्धारण-if-a-script-is-running-with-root-अनुमतियाँ

bash/sh:

#!/bin/bash
# (Use #!/bin/sh for sh)
if [ `id -u` = 0 ] 
then
        echo "I AM ROOT, HEAR ME ROAR"
fi

csh:

#!/bin/csh
if ( `id -u` == "0" ) 
then
        echo "I AM ROOT, HEAR ME ROAR"
endif

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
  echo "You must be a root user" 2>&1
  exit 1
else
  mount /dev/sdb1 /mnt/disk2
fi

सज्जन @terdon से अनुरोध द्वारा संपादित करें:

अपनी स्क्रिप्ट के बारे में इस तरह सोचें…।

क्या यह एक सार्वजनिक स्क्रिप्ट है (आपके अलावा अन्य लोग इसका उपयोग करेंगे) स्क्रिप्ट क्या करती है? क्या यह आपको समय बताता है? या यह 200 सिस्टम पर iptables अद्यतन करता है? यदि केवल आप इसका उपयोग करते हैं, तो क्या यह काम / पेशेवर से संबंधित है या यह व्यक्तिगत उपयोग के लिए है?

आपको बस पहले से जानना होगा कि आपके उपयोगकर्ता-समूह में क्या है, यही है।

अगर यह writtenप्रवेश देने या बेचने के लिए है, तो भी, क्यों नहीं scriptचलने दिया जाना चाहिए root?? इससे क्या नुकसान हो सकता है?

वास्तविक स्क्रिप्ट / प्रोग्राम अक्सर विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में चलते हैं और कोई भी इसका उल्लेख नहीं करता है कि कोई समस्या नहीं है, लेकिन जब प्रोग्रामर, मेरे जैसे ज्यादातर नौसिखिए इन चीजों के बारे में बात करते हैं, तो यह एक वास्तविक सुरक्षा खतरा है ..... आपकी पोस्ट में लड़का क्या है करने के लिए कहने के लिए है, जबकि नहीं सुंदर ढंग से है कि कुछ लोगों को देखो है कोशिश कर रहा है उल्लेख नियंत्रण आप में से है systemऔर अपने कोड .... आप अधिक अनुमतियों के लिए फ़ाइलों को सेट से आप उपयोग करने जा रहे हैं, तो आप में सभी चेक की क्या ज़रूरत है अपने तर्क या प्रतिभाशाली प्रोग्रामर आपके कोड में खतरों को देखने के लिए जा रहा है?

अपने तो code needs root, उपयोग sudoकर रहे हैं, और यदि कई बस इसे के रूप में चलाने root....... मेरा उत्तर यहाँ समाप्त होता है ओफ़्फ़


2
@somethingSomething आपको समझा सकता है कि आप हमेशा स्क्रिप्ट को रूट के रूप में चलाने की सिफारिश कर रहे हैं, तब भी जब केवल एक ही कमांड है जिसे रूट विशेषाधिकारों की आवश्यकता है? आप अपने उत्तर में दो संभावनाएँ देते हैं (रूट कमांड या कई विशेषाधिकारों की आवश्यकता होती है) लेकिन आप दोनों के लिए एक ही बात सुझाते हैं।
terdon

2
मैंने इस मुद्दे के बारे में सोचा है और इसी तरह की अन्य चर्चाओं को पढ़ा है। यह उत्तर मुझे भ्रमित करता है। (लेकिन, आपके पास पहले से ही पर्याप्त वोट हैं।)
जो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.