गैर-अनुमति आदेश चलाने पर पासवर्ड के लिए संकेत देने से रोकें


15

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

यहाँ मेरे sudoers फ़ाइल का एक उदाहरण है:

%mygroup ALL=(ALL) NOPASSWD:/usr/local/bin/myscript.sh *

उदाहरण जब वे गलत स्क्रिप्ट चलाते हैं:

# sudo /usr/local/bin/otherscript.sh
[sudo] password for user:
Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>.

वांछित उत्पादन:

Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. Please check the command and try again.

पासवर्ड प्रॉम्प्ट की कमी पर ध्यान दें।

मेरे google-fu ने मुझे विफल कर दिया है और उपयोगकर्ता द्वारा कमांड चलाने की अनुमति देने पर केवल पासवर्ड न मांगने पर परिणाम देता है ।


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

4
यह एक बहुत बड़ा सुरक्षा मुद्दा है। आपको कमांड के रूप में स्क्रिप्ट के साथ sudo का उपयोग नहीं करना चाहिए। लोग सिर्फ स्क्रिप्ट को संपादित कर सकते हैं और जो भी चाहते हैं उसे पूरी तरह से ऑडिट से जोड़कर चला सकते हैं। इसके बजाय स्क्रिप्ट के अंदर sudo को कॉल जोड़ें।
coteyr

1
@coteyr के साथ बाइनरी फ़ाइलों को चलाना sudoकेवल एक समस्या के रूप में बड़ा है, अगर उपयोगकर्ताओं के पास इन फ़ाइलों तक पहुंच है।
दिमित्री ग्रिगोरीव

1
@CarlWitthoft यही कारण है कि आप sudoers में अनुमत कार्यक्रमों को निर्दिष्ट करने के लिए निरपेक्ष पथ का उपयोग करते हैं।
दिमित्री ग्रिगोरीव

1
@DmitryGrigoryev, हाँ, लेकिन अगर आप एक फ़ाइल के लिए sed या कुछ इस तरह का उपयोग करने जा रहे हैं तो sudo का कोई लाभ नहीं है। किसी फ़ाइल को संशोधित करने के लिए एक उपयोगकर्ता को अनुमति देना क्यों फ़ाइलों की अनुमति है। आपको पहिया को सुदृढ़ करने की आवश्यकता नहीं है। यदि आप चाहते हैं कि कोई उपयोगकर्ता किसी फ़ाइल को संशोधित करने में सक्षम हो, तो उन्हें जाने दें। कोई जरूरत नहीं है, या एक पासवर्ड के बिना, एक उपयोगकर्ता को एक फ़ाइल को संशोधित करने की अनुमति देने के लिए sudo के माध्यम से कूदने के लिए लाभ है। आप हमेशा उन्हें अनुमति दे सकते हैं। सही काम के लिए सही उपकरण।
coteyr

जवाबों:


25

के त्वरित पढ़ने से sudo(8)

   -n          The -n (non-interactive) option prevents sudo from
               prompting the user for a password.  If a password is
               required for the command to run, sudo will display an error
               message and exit.

और संदेहियों के लिए:

# grep jdoe /etc/sudoers
jdoe    ALL=(ALL) NOPASSWD: /bin/echo
#

इस प्रकार परीक्षण किया गया:

% sudo echo allowed
allowed
% sudo -n ed             
sudo: a password is required
% sudo ed               

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:

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


वास्तव में। मैं alias sudo="$(which sudo) -n"/ etc / bashrc में कुछ पसंद करूँगा , फिर वांछित के रूप में sudoया तो (समायोजित व्यवहार) या command sudo(डिफ़ॉल्ट व्यवहार) का उपयोग करें।
एक CVn

7

एक चीज जो मेरे लिए काम करती थी, (सूडो संस्करण 1.8.17p1), लेकिन आपकी समस्या का केवल एक हिस्सा संतुष्ट करता है, वह है पासवर्ड की संख्या को 0 पर सेट करना।

Defaults:%mygroup passwd_tries = 0

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


यह भी एक मान्य उत्तर है लेकिन त्रुटि संदेश की कमी भ्रामक हो सकती है। उपरोक्त उत्तर से सही अभी तक अप्रत्याशित त्रुटि भी भ्रामक है। मुझे लगता है कि यह टॉस है। वैकल्पिक उत्तर प्रदान करने के लिए धन्यवाद, विकल्प हमेशा सराहे जाते हैं!
user184982

2

आप नहीं कर सकते।

यह बताने का कोई तरीका नहीं है कि आप कौन हैं जब तक कि आपने प्रमाणित नहीं किया है, और, डिफ़ॉल्ट रूप से आप पासवर्ड के बिना प्रमाणित नहीं कर सकते।

आप USB कीज़, फिंगर प्रिंट स्कैनर, वॉयस ऑउटफिट, फेस रिकग्निशन या अन्य सामान का एक गुच्छा उपयोग करने के लिए प्रमाणीकरण बदल सकते हैं, लेकिन बिंदु एक ही है।

आप प्रमाणित नहीं कर सकते, और प्रमाणित करने से पहले आपको सूडो में कोई व्यवसाय नहीं है जो आपको बताए कि आप क्या कर सकते हैं या नहीं चला सकते हैं।


2
जब आप सूडो चलाते हैं तो अपना पासवर्ड टाइप करना पहचान नहीं है ("बताएं कि आप कौन हैं")। सूडो को पता है कि तुम कौन हो। अपना पासवर्ड टाइप करना उपस्थिति की पुष्टि है।
गिल्स एसओ- बुराई को रोकना '

मैं उपस्थिति की पुष्टि को "प्रमाणीकरण" मानता हूं। जैसा कि प्रमाणीकरण में, फिर प्राधिकरण।
coteyr

2
उत्तर कहता है "प्रमाणीकरण" नहीं "पहचान"। जबकि sudo को पता है कि आप किसका दावा करते हैं, उस टर्मिनल पर लॉग इन किए गए उपयोगकर्ता के आधार पर, यह नहीं जानता कि आप कौन हैं जब तक आपने उस पहचान को प्रमाणित नहीं किया है।
डेव शेरोमैन

2

@StrongBad ने एक टिप्पणी की जो उत्तर देने के योग्य है:

मुझे लगता है कि सबसे अच्छा समाधान एक रैपर स्क्रिप्ट लिखना होगा जो हमेशा sudoसही मापदंडों के साथ कॉल करता है। (शामिल करें -n)

आवरण लिपि तर्क-वितर्क आदि कर सकती है, जिससे कि सूडो लिपि यथासंभव छोटी हो जाती है और इसलिए उसमें कीड़े पड़ने की संभावना कम होती है।


1

यह नहीं हो सकता। स्रोत कोड को बदलने और अपने स्वयं के कांटे को संकलित करने का एकमात्र तरीका हैsudo


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