पासवर्ड प्रांप्ट के बिना रूट के रूप में एक विशिष्ट प्रोग्राम कैसे चलाया जाए?


169

मुझे पासवर्ड के बिना sudo के रूप में कुछ चलाने की आवश्यकता है, इसलिए मैंने visudoअपनी sudoersफ़ाइल में इसका उपयोग किया और इसे जोड़ा :

MYUSERNAME ALL = NOPASSWD: /path/to/my/program

फिर मैंने इसे आजमाया:

$ sudo /path/to/my/program
[sudo] password for MYUSERNAME: 

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

जवाबों:


91

आपके पास sudoersफ़ाइल में एक और प्रविष्टि है जो आपके उपयोगकर्ता से भी मेल खाती है। NOPASSWDनियम है ताकि इसे प्राथमिकता दी जाती है के लिए में है कि एक के बाद की जरूरत है।

ऐसा करने के बाद, sudoसामान्य रूप से सभी आदेशों के लिए एक पासवर्ड के लिए संकेत देगा , सिवाय इसके /path/to/my/programकि यह हमेशा आपके पासवर्ड के लिए पूछे बिना आपको चलने देगा।


6
यह अभी भी काम करेगा अगर /path/to/my/programएक अजगर स्क्रिप्ट थी?
दुखमयी माइक्रोवेव

कर सकते हैं कार्यक्रम के बजाय किसी अन्य नाम, पार्टी के लिए निर्धारित (यानी में हो .bashrc)? या एक शेल स्क्रिप्ट भी अंदर /usr/local/sbin? कठिन परीक्षा लेना।
निकोस एलेक्जेंड्रिस

निकोस - नहीं यह एक उपनाम नहीं हो सकता। यह एक वास्तविक पथ की ओर इशारा करता है।
पॉल हैदरली

sudoers? कहाँ है? अपने उत्तर का उपयोग करने के लिए भारी
Vasilii Suricov

@VasiliiSuricov: यह आमतौर पर है /etc, लेकिन कुछ सिस्टम इसे कहीं और डालते हैं। यदि आप इसे नहीं पा सकते हैं, तो प्रयास करें man sudoers। उस सिस्टम के लिए बनाए manगए समय में उस फ़ाइल के लिए स्थानीय स्थान को पृष्ठ में प्रतिस्थापित किया जाना चाहिए sudo
वॉरेन यंग

135

यदि कई मिलान प्रविष्टियाँ हैं /etc/sudoers, तो sudo अंतिम का उपयोग करता है। इसलिए, यदि आप पासवर्ड प्रॉम्प्ट के साथ किसी भी कमांड को निष्पादित कर सकते हैं, और आप पासवर्ड प्रॉम्प्ट के बिना किसी विशेष कमांड को निष्पादित करने में सक्षम होना चाहते हैं, तो आपको अपवाद की आवश्यकता है।

myusername ALL = (ALL) ALL
myusername ALL = (root) NOPASSWD: /path/to/my/program

के उपयोग पर ध्यान दें (root), कार्यक्रम को रूट के रूप में चलाने की अनुमति देने के लिए लेकिन अन्य उपयोगकर्ताओं के रूप में नहीं। (जब तक आपने निहितार्थ नहीं सोचा हो, न्यूनतम से अधिक अनुमति न दें।)

उन पाठकों के लिए ध्यान दें, जो उबंटू नहीं चल रहे हैं या जिन्होंने डिफ़ॉल्ट सूडो कॉन्फ़िगरेशन को बदल दिया है (उबंटू का सुडो डिफ़ॉल्ट रूप से ठीक है) : उन्नत विशेषाधिकार के साथ शेल स्क्रिप्ट चलाना जोखिम भरा है, आपको एक स्वच्छ वातावरण से शुरू करने की आवश्यकता है (एक बार शेल शुरू होने के बाद, यह बहुत देर हो चुकी है ( शेल स्क्रिप्ट पर सेतु को अनुमति दें देखें ), इसलिए आपको इसकी देखभाल करने के लिए सूडो की आवश्यकता है)। सुनिश्चित करें कि आपके पास Defaults env_resetहै /etc/sudoersया यह विकल्प संकलन-समय डिफ़ॉल्ट है ( sudo sudo -V | grep envइसमें शामिल होना चाहिए Reset the environment to a default set of variables)।


3
पूर्व से झूंसी से रूट पर जाने के लिए सुदो सु ना पास - ----- जॉन ऑल = (ऑल) नप्सवाड़ी: / बिन / सु
बोर्टुनैक

5
@adrian यदि आप मनमाने आदेशों को रूट के रूप में अनुमति देना चाहते हैं, तो इसे बनाएं john ALL=(ALL) NOPASSWD: all। वहाँ से गुजरने का कोई मतलब नहीं है su
गिल्स

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

1
@JeffreyLebowski यदि आपके पास एक सूडो रूल है जो स्क्रिप्ट को चलाता है (प्रत्यक्ष या अप्रत्यक्ष रूप से) तो यह महत्वपूर्ण है कि केवल रूट (या वैसे भी जो रूट विशेषाधिकार हैं) स्क्रिप्ट फ़ाइल में लिख सकते हैं, और स्क्रिप्ट फ़ाइल वाली निर्देशिका में और इसके मूल निर्देशिका और इतने पर। इससे कोई फर्क नहीं पड़ता कि कोई भी स्क्रिप्ट फ़ाइल पढ़ सकता है (जब तक कि इसमें कोई पासवर्ड या कुछ और न हो, लेकिन यह एक बुरा विचार है, अगर कोई पासवर्ड है तो इसे अपनी फ़ाइल में होना चाहिए, अन्यथा गलती से इसे लीक करने का बहुत जोखिम होता है जैसे कि इस साइट पर एक प्रश्न में कोड के उस भाग को कॉपी-पेस्ट करना)।
गिल्स

1
@alper No. बहुत कम चीजों को रिबूट करने की आवश्यकता होती है। बदलने के बाद sudoers, आपको कुछ विशेष करने की आवश्यकता नहीं है: sudoइसे हर बार जांचें।
गिल्स

24

चेतावनी : इस उत्तर को असुरक्षित समझा गया है। नीचे टिप्पणी देखें

पूर्ण समाधान: निम्नलिखित चरण आपको वांछित आउटपुट प्राप्त करने में मदद करेंगे:

  1. एक नई स्क्रिप्ट फ़ाइल बनाएं ( create_dir.shअपने इच्छित स्क्रिप्ट नाम के साथ बदलें ):

    vim ~/create_dir.sh
    

    स्क्रिप्ट उपयोगकर्ता के होम डायरेक्टरी में बनाई जाएगी

  2. कुछ आदेश जोड़ें जो केवल rootया एक sudoउपयोगकर्ता निष्पादित कर सकता है जैसे रूट निर्देशिका स्तर पर एक फ़ोल्डर बनाना:

    mkdir /abc
    

    नोट:sudo इन आदेशों में न जोड़ें । सहेजें और बाहर निकलें (उपयोग करके :wq!)

  3. इसे उपयोग करने के लिए अनुमति निष्पादित करें:

    sudo chmod u+x create_dir.sh
    
  4. परिवर्तन करें ताकि इस स्क्रिप्ट को पासवर्ड की आवश्यकता न हो।

    1. sudoersफ़ाइल खोलें :

      sudo visudo -f /etc/sudoers
      
    2. निम्नलिखित पंक्ति को अंत में जोड़ें:

      ahmad ALL=(root) NOPASSWD: /home/ahmad/create_dir.sh
      

      ahmadजो भी आपका उपयोगकर्ता नाम है उसे बदलें । यह भी सुनिश्चित करें कि यह अंतिम पंक्ति है। सुरषित और बहार।

  5. अब जब कमांड चल रहा हो तो sudoइससे पहले जोड़ें :

    sudo ./create_dir.sh
    

    यह एक पासवर्ड के लिए पूछे बिना स्क्रिप्ट फ़ाइल के अंदर कमांड चलाएगा।

यहां बताए गए आसान चरणों का पालन करें http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/


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

15
यह सलाह असुरक्षित है। इसका sudoहिस्सा sudo chmod u+x create_dir.shअनावश्यक है क्योंकि उपयोगकर्ता के पास अपने घर के मालिक के ऊपर स्वामित्व है (संभवतः)। चूंकि उपयोगकर्ता लिख ​​सकता है create_dir.sh, आपने प्रभावी रूप से उस उपयोगकर्ता को एक मुफ्त रूट शेल दिया है।
लेकेनस्टाइन

1
@Lekensteyn उपयोगकर्ता के रूप में चल रहे किसी भी कार्यक्रम के लिए जिसका अर्थ है। हो सकता है कि उपयोगकर्ता बिना पासवर्ड के कुछ भी चलाने की अनुमति दे।
pydsigner

2
क्या मैं कुछ भूल रहा हूँ? मेरा मानना ​​है कि संपूर्ण chmodअनावश्यक है, क्योंकि आप sudoअपने विशेषाधिकारों को बढ़ाने के लिए भरोसा कर रहे हैं ।
जी-मैन

10

मुझे लगता है आपकी वाक्य रचना गलत है। कम से कम मैं निम्नलिखित का उपयोग करता हूं जो मेरे लिए काम करता है:

myusername ALL=(ALL) NOPASSWD: /path/to/executable

6
(ALL)भाग वैकल्पिक है, यह पता छोड़ने बिल्कुल वैसा ही प्रभाव पड़ता है। बीत रहा है (root), हालांकि बेहतर होगा, लेकिन इसके अभाव समस्या की व्याख्या नहीं करता।
गाइल्स

इस कमांड के लिए sudo के लिए +1 और कुछ नहीं! पूरे सिस्टम को तोड़ने का कोई कारण नहीं ...
जोहान

3
@ जोहान: यह पहले से ही सवाल में था।
गाइल्स

5

यदि आप sudo का उपयोग करने से बचना चाहते हैं और न ही sudoers config फाइल को बदलना है, तो आप उपयोग कर सकते हैं:

sudo chown root:root path/to/command/COMMAND_NAME
sudo chmod 4775 path/to/command/COMMAND_NAME

यह सूडो की आवश्यकता के बिना कमांड को रूट के रूप में चलाएगा।


वाह, मैंने इस समाधान के बारे में पहले कभी नहीं सुना, मन चकराता है
कुछ तो

सबसे अच्छा जवाब खोजने के लिए मुझे इन चीजों की तह तक जाने की आवश्यकता क्यों है? इस सरल सुरक्षित समाधान के लिए धन्यवाद।
रयाननर्ड

5

यदि आपके पास मंज़रो की तरह एक डिस्ट्रो है, तो आपको पहले एक ऐसी फ़ाइल से निपटना होगा जो / etc / sudoers की परिभाषा को ओवरराइड करता है, आप इसे हटा सकते हैं या अपने नए कॉन्फ़िगरेशन को जोड़ने के लिए सीधे उस फ़ाइल के साथ काम कर सकते हैं।

यह फ़ाइल है:

sudo cat /etc/sudoers.d/10-installer

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

अपनी पसंद की फ़ाइल में, आप अपना वांछित कॉन्फ़िगरेशन प्राप्त करने के लिए निम्न पंक्ति जोड़ सकते हैं:

एक समूह के लिए प्रमाणीकरण पर ध्यान न दें

%group ALL=(ALL) NOPASSWD: ALL

या उपयोगकर्ता के लिए प्रमाणीकरण को अनदेखा करें

youruser ALL=(ALL) NOPASSWD: ALL

या किसी विशिष्ट उपयोगकर्ता के लिए एक निष्पादन योग्य प्रमाणीकरण को अनदेखा करें

youruser ALL=(ALL) NOPASSWD: /path/to/executable

त्वरित नोट: आप प्रमाणीकरण के बिना SUDO का उपयोग करने के लिए एक दरवाजा खोल रहे हैं, इसका मतलब है कि आप अपने सिस्टम से सब कुछ संशोधित कर सकते हैं, इसे जिम्मेदारी के साथ उपयोग कर सकते हैं।


4

सत्यापित करें कि sudo उपनाम नहीं है। ऐसे ही दौड़ो

/usr/bin/sudo /path/to/my/program

उदाहरण के लिए एक शैल उपनाम इस तरह से:

alias sudo="sudo env PATH=$PATH"

इस व्यवहार का कारण हो सकता है।


आप ठीक कह रहे हैं, मेरी टिप्पणी यहाँ आदेश से बाहर थी , इसके लिए क्षमा करें । फिर भी मैं साज़िश कर रहा हूँ - आप कैसे sudoersसूडो द्वारा प्रसंस्करण को बदलने के लिए उपनाम की उम्मीद करते हैं । या आप sudoकिसी चीज़ को रीडायरेक्ट करने की बात कर रहे हैं जो पासवर्ड को स्कूप करने के लिए हमेशा इस त्रुटि संदेश को प्रिंट करता है? यहाँ ऐसा होने की संभावना नहीं है ...
peterph

2
मुझे ओपी जैसी ही समस्या हो रही थी। यह alias sudo="sudo env PATH=$PATH"मेरे होने के कारण निकला ~/.bashrc। केवल अपने लिए इसे हल करने और नेत्रहीन बस अपने व्यवसाय के बारे में जाने के बजाय, मैंने अपना उत्तर किसी और के लिए संभव समाधान के रूप में प्रस्तुत किया जो इस धागे के साथ आता है।
सेपरो

1
यह ठीक है, लेकिन जब यह स्पष्ट नहीं होता है (जो इस मामले में कम से कम कुछ लोगों के लिए नहीं है) तो कुछ संदर्भ प्रदान करने और जादू-टोने का उपयोग करके लोगों को नेत्रहीन रूप से रोकने के जवाब में स्पष्टीकरण देना अच्छा है। +2 (- (- (1) + +1)। :)
पीटर जूल

2

जब आप अपनी स्क्रिप्ट निष्पादित करते हैं तो आपको इसे चलाने की आवश्यकता होती है sudo /path/to/my/script

संपादित करें: किसी अन्य उत्तर के लिए आपकी टिप्पणी के आधार पर, आप इसे एक आइकन से चलाना चाहते हैं। आपको एक .desktopफाइल बनाने की आवश्यकता होगी जो आपके प्रोग्राम को sudo के साथ निष्पादित करती है, जैसे टर्मिनल पर।

आप gtk-sudoविज़ुअल पासवर्ड प्रॉम्प्ट के लिए उपयोग करने पर भी विचार कर सकते हैं ।

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


7
शेल स्क्रिप्ट को सेटिउड न बनाएंशेल स्क्रिप्ट पर सेतु को अनुमति दें देखें ।
गाइल्स

मैंने इस बात का जिक्र भी नहीं किया क्योंकि यह इतना बुरा विकल्प है। मैंने इसे केवल इसलिए हटा दिया क्योंकि मैं चिंतित हूं कि यह पूछने वाला चेतावनी के साथ सलाह का भी उपयोग कर सकता है कि यह बुरी सलाह थी!
कालेब

2

इसने मेरे लिए इस मुद्दे को हल कर दिया (कुछ अन्य उत्तरों की भी कोशिश की, जिससे शायद मदद मिली):

जिस स्क्रिप्ट को मैं कॉल कर रहा था /usr/bin, वह एक ऐसी निर्देशिका थी , जिसमें मेरे पास लिखने की अनुमति नहीं है (हालांकि मैं आमतौर पर वहां कोई भी फाइल पढ़ सकता हूं)। स्क्रिप्ट को chmodded + x (निष्पादन योग्य अनुमति) दिया गया था, लेकिन यह अभी भी काम नहीं किया। इस फाइल को अपने होम डाइरेक्टरी में एक पथ पर ले जाना, इसके बजाय /usr/bin, मैं अंत में एक पासवर्ड दर्ज किए बिना इसे सूडो के साथ कॉल करने में सक्षम था।

इसके अलावा मुझे कुछ संदेह है (भविष्य के पाठकों के लिए स्पष्ट करना): आपको सूडो के रूप में अपनी स्क्रिप्ट को चलाने की आवश्यकता है। स्क्रिप्ट को कॉल करते sudoसमय टाइप करें । अपनी स्क्रिप्ट के अंदर उस कमांड के लिए उपयोग न करें , जिसे वास्तव में रूट (मेरे मामले में कीबोर्ड बैकलाइट बदलना) की आवश्यकता है। शायद यह भी काम करता है, लेकिन आपको इसकी आवश्यकता नहीं है, और ऐसा लगता है कि बेहतर समाधान नहीं।sudo


दूसरे पैराग्राफ में मेरी समस्या का जवाब था
एम। अहमद ज़फ़र

@MuhammadAhmadZafar यह मदद की!
ल्यूक

3
वास्तव sudoमें एक स्क्रिप्ट के अंदर का उपयोग पूरी तरह से ठीक है बशर्ते आपके पास sudoersपासवर्ड के बिना सवाल चलाने के लिए उपयुक्त अधिकार (सेट इन ) हों। यह चीजों को थोड़ा अधिक सुरक्षित बनाता है।
पीटर

वास्तव में इस उत्तर का उपयोग चरण-दर-चरण के रूप में दोबारा लिखा जा सकता है 'यह है कि आप इसे कैसे करते हैं' अन्य उत्तरों के साथ संवाद के बजाय
वालरस द कैट

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

1

एक अन्य संभावना हो सकती है कि आप अपनी स्क्रिप्ट चलाने के लिए सुपर कमांड का उपयोग करें, कॉन्फ़िगर करें

super /path/to/your/script

आप कुछ द्विआधारी चलाना चाहते हैं निष्पादन योग्य (जैसे कि आप में संकलित किया है ELF कुछ सी स्रोत कोड से बाइनरी) -which है नहीं रूट के रूप में एक script-, आप हो सकता है यह बनाने पर विचार setuid (और वास्तव में /bin/login, /usr/bin/sudoऔर /bin/suऔर superसब है कि तकनीक का उपयोग कर रहे हैं )। हालांकि, बहुत सावधान रहें, आप एक बड़ा सुरक्षा छेद खोल सकते हैं

इसके विपरीत, आपके कार्यक्रम को समान रूप से कोडित किया जाना चाहिए (ताकि "अभिनय" से पहले सभी तर्कों और पर्यावरण और बाहरी स्थितियों की जांच करें, एक संभावित शत्रुतापूर्ण उपयोगकर्ता को मानते हुए), फिर आप सेटीडीड (2) और दोस्तों का उपयोग कर सकते हैं ( ध्यान से सेटिस्लाइड (2) देखें ) ( क्षमताओं को भी देखें (7) और क्रेडेंशियल्स (7) और निष्पादित करें (2) ...)

इस तरह के बाइनरी को स्थापित करते समय आप chmod (1)chmod u+s पढ़ेंगे ।

लेकिन बहुत सावधान रहें

इस तरह की चीज़ को कोड करने से पहले एडवांस्ड लिनक्स प्रोग्रामिंग सहित सेतु के बारे में कई बातें पढ़ें ।

ध्यान दें कि एक स्क्रिप्ट, या किसी भी कुटिया एड बात, setuid नहीं हो सकता। लेकिन आप इसे (सी में) एक छोटे से सेटिड-बाइनरी रैपिंग को कोड कर सकते हैं।


0

आदर्श रूप से यदि आप कस्टमाइज़ कर रहे हैं कि आपके द्वारा किस कमांड को चलाया जा सकता है , तो फ़ाइल को सीधे संपादित करने के बजाय sudoएक अलग फ़ाइल में इन परिवर्तनों को करना चाहिए । आपको हमेशा फ़ाइल को संपादित करने के लिए भी उपयोग करना चाहिए । आपको आदेशों पर कभी भी अनुदान नहीं देना चाहिए ।/etc/sudoers.d/sudoersvisudoNOPASSWDALL

उदाहरण: sudo visudo -f /etc/sudoers.d/mynotriskycommand

अनुमति देने के लिए अपनी लाइन डालें: myuser ALL= NOPASSWD: /path/to/your/program

तब सहेजें और बाहर निकलें और visudoआपको कोई भी वाक्यविन्यास त्रुटि होने पर चेतावनी देगा।

आप sudo -lअपने उपयोगकर्ता द्वारा दी गई अनुमतियों को देखने के लिए भाग सकते हैं , यदि उपयोगकर्ता के किसी विशेष NOPASSWDकमांड से %groupyouarein ALL=(ALL) ALLआपके पासवर्ड के लिए संकेत दिए गए आउटपुट में कोई भी आदेश दिखाई देगा ।

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

आप 00-99 या aa / bb / cc के उपसर्ग का उपयोग करके फ़ाइल नाम आदेश को नियंत्रित कर सकते हैं, हालांकि यह भी ध्यान रखें कि यदि आपके पास कोई भी फाइल है जिसमें संख्यात्मक उपसर्ग नहीं है, तो वे गिने हुए फ़ाइलों के बाद लोड करेंगे, ओवरराइडिंग सेटिंग्स। ऐसा इसलिए है क्योंकि आपकी भाषा सेटिंग्स "लेक्सिकल सॉर्टिंग" के आधार पर शेल पहले नंबर का उपयोग करता है और फिर "आरोही" क्रम में सॉर्ट करते समय ऊपरी और निचले हिस्से को इंटरलेव कर सकता है।

दौड़ने की कोशिश करें printf '%s\n' {{0..99},{A-Z},{a-z}} | sortऔर printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortदेखें कि आपकी वर्तमान भाषा प्रिंट करती है AaBbCcया ABCफिर abcयह निर्धारित करने के लिए कि उपयोग करने के लिए सबसे अच्छा "अंतिम" अक्षर उपसर्ग क्या होगा।


0

किसी भी उपयोगकर्ता को पासवर्ड के बिना प्रोग्राम को सुडो के रूप में निष्पादित करने की अनुमति देने के लिए आप निम्नलिखित पंक्ति जोड़ सकते हैं

%sudo ALL=(root) NOPASSWD: /path/to/your/program

में /etc/sudoers

ध्यान दें कि % sudo इसे बनाते हैं।


हालांकि, एक sudo नियम को पूरा करने का यह एक तरीका है, यह इस सवाल का जवाब नहीं देता है कि इस नियम पर NOPASSWD ध्वज सेट करने के बाद भी पासवर्ड प्रॉम्प्ट क्यों हुआ। एक विचार के लिए स्वीकृत उत्तर देखें कि ऐसा क्यों हुआ।
जेफ स्कालर

0

निम्नलिखित उस मामले के लिए है, जहां आप पासवर्ड के बिना एक कमांड चलाना चाहते हैं, यदि उसके पास विकल्पों का एक विशिष्ट सेट है, जहां विकल्पों का एक हिस्सा परिवर्तनशील है । AFAIK sudoers घोषणाओं में चर या मान पर्वतमाला का उपयोग करना संभव नहीं है, अर्थात आप स्पष्ट रूप से पहुंच की अनुमति दे सकते हैं command option1लेकिन इसके लिए नहीं command option2:

user_name ALL=(root) /usr/bin/command option1

लेकिन अगर संरचना है command option1 value1, जहां value1भिन्न हो सकते हैं, तो आपको प्रत्येक संभावित मूल्य के लिए स्पष्ट sudoers लाइनों की आवश्यकता होगी value1। शेल स्क्रिप्ट इसके चारों ओर एक रास्ता प्रदान करती है।

यह उत्तर एम। अहमद ज़फ़र के जवाब से प्रेरित था और वहाँ सुरक्षा के मुद्दे को ठीक करता है।

  1. एक शेल स्क्रिप्ट बनाएं जहां आप बिना कमांड के कॉल करें sudo
  2. रूट-विशेषाधिकार प्राप्त फ़ोल्डर (जैसे /usr/local/bin/) में स्क्रिप्ट को सहेजें , फ़ाइल रूट-स्वामित्व (जैसे chown root:wheel /usr/local/bin/script_name) दूसरों के लिए कोई लेखन पहुंच (जैसे ) के साथ बनाएं chmod 755 /usr/local/bin/script_name
  3. दृश्यदर्शी का उपयोग कर sudoers के लिए अपवाद जोड़ें:

    user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name

  4. अपनी स्क्रिप्ट चलाएँ sudo script_name

उदाहरण के लिए, मैं macOS पर डिस्प्ले स्लीप टाइमआउट बदलना चाहता हूं। यह प्रयोग किया जाता है:

sudo pmset displaysleep time_in_minutes

मैं नींद के समय को एक निर्दोष कार्रवाई को बदलने पर विचार करता हूं जो पासवर्ड टाइपिंग की परेशानी को सही नहीं ठहराता है, लेकिन pmsetकई चीजें कर सकता है और मैं सूडो पासवर्ड के पीछे इन अन्य चीजों को रखना चाहूंगा।

इसलिए मेरे पास निम्नलिखित स्क्रिप्ट है /usr/local/bin/ds:

#!/bin/bash
if [ $# -eq 0 ]; then
        echo 'To set displaysleep time, run "sudo ds [sleep_time_in_minutes]"'
else
        if [[ $1 =~ ^([0-9]|[1-9][0-9]|1[0-7][0-9]|180)$ ]]; then
                pmset displaysleep $1 
        else
                echo 'Time must be 0..180, where 0 = never, 1..180 = number of minutes'
        fi
fi

sudoersफ़ाइल के अंत में मेरे पास निम्न पंक्ति है:

user_name ALL=(root) NOPASSWD: /usr/local/bin/ds

3 मिनट में टाइमआउट सेट करने के लिए, मैं अपनी स्क्रिप्ट को साधारण उपयोगकर्ता खाते से चलाता हूं user_name:

sudo ds 3

PS मेरी स्क्रिप्ट का अधिकांश भाग इनपुट सत्यापन है, जो अनिवार्य नहीं है, इसलिए निम्नलिखित भी काम करेगा:

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