सुडोर्स फ़ाइल, उपयोगकर्ता के लिए NOPASSWD, सभी कमांड को सक्षम करती है


142

प्रस्तावना

यह सूडर्स फाइल और सामान्य रूप से सूडो कमांड से जुड़ा एक काफी जटिल प्रश्न है।

ध्यान दें: मैंने उबंटू डेस्कटॉप 13.04 पर चलने वाली एक समर्पित मशीन पर ये बदलाव किए हैं, कि मैं विशुद्ध रूप से सीखने के उद्देश्यों के लिए उपयोग करता हूं। मैं समझता हूं कि NOPASSWD sudo को सक्षम करने के लिए यह एक बड़ा सुरक्षा जोखिम है।

सवाल

प्रारंभ में, sudoers फ़ाइल (/ etc / sudoers) में मेरा एकमात्र परिवर्तन एक पंक्ति थी, एक उपयोगकर्ता विनिर्देश जिसे सभी पासवर्डों को दर्ज किए बिना sudo के साथ चलने के लिए 'nicholsonjf' को सक्षम करना चाहिए था (देखें लाइन 'nicholsonjf' से शुरू होती है) '):

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
nicholsonjf    ALL=NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

हालाँकि, यह काम नहीं किया, और मुझे हर बार अपने पासवर्ड के लिए संकेत दिया जाता था जब मैं 'nicholsonjf' के रूप में एक कमांड चलाता था। एक बार जब मैं सूडो और एडमिन समूहों से ol निकोलसनसजफ ’को हटाकर मैं केवल सूडो कमांड को 'निचलोलसनजफ' के रूप में चलाने में सक्षम था।

क्या कोई समझा सकता है कि इसने काम क्यों किया?

क्या ऐसा इसलिए है क्योंकि उपयोगकर्ता 'nicholsonjf' को 'व्यवस्थापक' और 'sudo' (sudoers फ़ाइल में नीचे देखा गया) के दो समूह विनिर्देशों से sudo अधिकार प्राप्त हो रहे थे, जो 'nicholsonjf' उपयोगकर्ता विनिर्देश को अधिलेखित कर रहे थे क्योंकि वे और नीचे थे विन्यास फाइल?


7
नोट: सभी = NOPASSWD: सभी सभी = (ALL) NOPASSWD हो गया है: सभी वरना यह काम नहीं करता है ...
आन्द्रे Verwijs

इस उत्तर को भी देखें: askubuntu.com/questions/139723/sudo-does-not-ask-for-password/…
जेबी।

जवाबों:


164

आपके द्वारा जोड़ी गई रेखा ओवरराइड हो गई थी। से man sudoers:

जब एक उपयोगकर्ता के लिए कई प्रविष्टियाँ मेल खाती हैं, तो उन्हें क्रम में लगाया जाता है। जहां कई मैच होते हैं, अंतिम मैच का उपयोग किया जाता है (जो जरूरी नहीं कि सबसे विशिष्ट मैच हो)।

आपके मामले nicholsonjfमें समूह का एक सदस्य था sudoइसलिए उसके लिए यह लाइन लागू की गई:

%sudo   ALL=(ALL:ALL) ALL

यदि आप प्रविष्टियों को ओवरराइड करना चाहते हैं तो /etc/sudoersउनके बाद नई प्रविष्टियाँ डालें।

नई प्रविष्टि की तरह दिखना चाहिए

myuser ALL=(ALL) NOPASSWD: ALL एकल उपयोगकर्ता के लिए, या

%sudo ALL=(ALL) NOPASSWD: ALL एक समूह के लिए।


6
पूर्ण समाधान के लिए मैं NOPASSWDइस उत्तर में कुछ देखना चाहूंगा ...
डैनियल एल्डर 15

22
मुझे लगता है, समाधान होना चाहिए:%sudo ALL=(ALL) NOPASSWD:ALL
डैनियल एल्डर

3
@ डैनियलअल्ड: प्रश्न से विनिर्देश पंक्ति nicholsonjf ALL=NOPASSWD: ALLसही है। यह गलत जगह पर था जैसा कि मैंने उत्तर में बताया था। ------ Runasविनिर्देश - आपके मामले में (ALL)- वैकल्पिक है। यदि आप विनिर्देश को छोड़ देते हैं, तो आप कमांड को चला सकते हैं rootऔर आप उपयोग नहीं कर सकते -uऔर -gविकल्प sudo
पाबूक

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

4
इसके अलावा, सुधार के बजाय, अगर कुछ डेबियन / ubuntu आधारित (आमतौर पर लागू किया जा सकता है, इसे कहीं और नहीं देखा जा सकता है) का उपयोग करते हुए, आपका पूर्ण सर्वोत्तम-अभ्यास शर्त /etc/sudoers.d/ में फ़ाइल में कस्टम कमांड जोड़ना और sudersers छोड़ना है खुद पैकेज मैनेजर द्वारा प्रबंधित किया जाना चाहिए।
एक्वेरियन

119

किसी एकल उपयोगकर्ता के लिए, अपनी sudoersफ़ाइल के अंत में इस लाइन का उपयोग करके जोड़ेंsudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

एक समूह के लिए

%supergroup  ALL=(ALL) NOPASSWD: ALL

8
इससे पहले कि मैं इस जवाब को पढ़ता हूं मैंने किया %sudo ALL=NOPASSWD: ALLऔर यह काम करता है। क्या मैं केवल वही हूं जो विस्तारित बैकस-नौर फॉर्म को वास्तव में समझना मुश्किल है?
विंस

4
@Vince अपने आदेश का उपयोग किया जब मैं sudosudo विशेषाधिकार के बिना उपयोगकर्ता के रूप में पासवर्ड के बिना नहीं कर सकते । जैसे sudo -u root -iकाम करता है, लेकिन sudo -u git -iनहीं करता है।
NeverEndingQueue

यह स्वीकृत की तुलना में काफी अधिक उपयोगी उत्तर है, जबकि यह ओपी के सवाल का जवाब देता है, शायद यह नहीं है कि अधिकांश लोग इस पृष्ठ पर Google की तलाश में किस माध्यम से पहुंचते हैं।
महमूद अल-कुद्सी

3

जब उपयोगकर्ता उपयोग करता है sudoतो पासवर्ड के लिए वर्तमान उपयोगकर्ता को संकेत देने के लिए कभी नहीं

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

यह नामक एक फाइल बनाएगा /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passwordऔर इसका अर्थ यह होगा कि आपके द्वारा उस कमांड को चलाने वाले उपयोगकर्ता को sudoकमांड निष्पादित करते समय उनके पासवर्ड के लिए संकेत नहीं दिया जाएगा । आपको अन्य संदर्भों में पासवर्ड के लिए संकेत दिया जाएगा, जैसे कि उबंटू सॉफ्टवेयर ग्राफ़िकल ऐप से सामान स्थापित करना ।

इसे इस तरह से करने के फायदे echoकमांड का /etc/sudoersउपयोग करने के लिए लाइन में जोड़ने पर sudo visudo(जैसा कि अन्य उत्तरों द्वारा सुझाया गया है) हैं

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

sudo cat /etc/sudoers.d/READMEइस सुविधा के अनुसार (अतिरिक्त सूडोअर फाइलें डालने में /etc/sudoers.d) को डेबियन 1.7.2p1-1 के बाद से डिफ़ॉल्ट रूप से सक्षम किया गया है, जो कि 1990 के दशक के अंत में आया था (उबंटू डेबियन पर आधारित है )।


(यदि आप एक बेहतर फ़ाइल नाम के साथ आ सकते हैं तो मेरे उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें)
बोरिस

0

जैसा कि विंस ने एक टिप्पणी में उल्लेख किया है , आप इस लाइन का उपयोग कर सकते हैं:

%sudo ALL=NOPASSWD: ALL

(यह उन उत्तरों में दर्शाई गई पंक्तियों से अलग है , और इसने मेरे लिए समस्या को हल कर दिया है।)


@ एलियाह यह अन्य उत्तरों से अलग नहीं है। यह सब supergroupफेडरर के जवाब में प्लेसहोल्डर को बदल देता है sudo। आगे क्या, समूह के लिए एक और उपयोगकर्ता wheel? या किसी अन्य समूह का उपयोग करने वाला उपयोगकर्ता होता है?
मोरू

1
@ मरमू "यह सब supergroupफेडरर के जवाब में प्लेसहोल्डर को बदल देता है sudo।" क्या? जगह supergroupके साथ sudoलाइन में %supergroup ALL=(ALL) NOPASSWD:ALLपैदावार %sudo ALL=(ALL) NOPASSWD:ALL, नहीं %sudo ALL=NOPASSWD: ALL
एलियाह कगन

जो निश्चित रूप से बदतर है, क्योंकि अब NOPASSWD केवल लक्ष्य उपयोगकर्ता के रूप में जड़ के लिए है। तो, यह भी सही ढंग से सवाल का जवाब नहीं है!
मुरु

@muru क्या है नहीं भी यकीनन , तथापि, के एक प्रतिस्थापन है supergroupके साथ sudo। यह इसका अपना उत्तर है, धन्यवाद पद या किसी अन्य उत्तर की प्रति नहीं। लेकिन हां, मैं सहमत हूं: जब तक कि वे इरादा नहीं करते हैं , यह अधिकांश उपयोगकर्ताओं के लिए अन्य उत्तर के तरीकों के रूप में अच्छा नहीं होगा। (लेकिन, विशेष रूप से इस सवाल पर विचार करते हुए "सभी कमांड्स," नहीं "सभी लक्षित उपयोगकर्ताओं को कहते हैं," मुझे नहीं लगता कि यह वास्तव में पूछे गए प्रश्न का उत्तर देने का प्रयास भी नहीं कर रहा है।)
एलियाह कगन

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