सुडोर्स फ़ाइल, उपयोगकर्ता के लिए एनओपीएएसडब्ल्यूडी सक्षम करें, सभी कमांड

प्रस्तावना

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

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

प्रश्न

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

# 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_resetDefaults        mail_badpassDefaults        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 specificationroot    ALL=(ALL:ALL) ALLnicholsonjf    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

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

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

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

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

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

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

%sudo   ALL=(ALL:ALL) ALL

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

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

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

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

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

superuser ALL=(ALL) NOPASSWD:ALL

एक समूह के लिए

%supergroup  ALL=(ALL) NOPASSWD:ALL

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

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

यह नामक एक फ़ाइल बनाता है /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-password निम्नलिखित सामग्री के साथ:

<YOUR USERNAME> ALL=(ALL:ALL) NOPASSWD: ALL

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

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

ध्यान दें कि आपको अभी भी अन्य संदर्भों में पासवर्ड के लिए संकेत दिया जा सकता है, जैसे कि सामान स्थापित करना Ubuntu सॉफ्टवेयर ग्राफिकल ऐप।

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

जैसा कि मैं इस पर शोध कर रहा था, मुझे एहसास हुआ कि इसमें एक पंक्ति है /etc/sudoers फ़ाइल जो एक टिप्पणी नहीं है, लेकिन एक निर्देश यह निर्देशिका के तहत कोई भी फ़ाइल या फ़ोल्डर बनाता है /etc/sudoers/* की सामग्री को ओवरराइड करें /etc/sudoers.

यह एक डरपोक छोटा निर्देश है, क्योंकि यह पहली नज़र में एक टिप्पणी की गई रेखा प्रतीत होती है । यह इस तरह दिखता है:

#includedir /etc/sudoers.d

इस तरह मैंने उबंटू की आधार छवि के साथ सीआईसीडी पाइपलाइन में उपयोग के लिए एक अल्पकालिक डॉकर छवि में गैर-रूट, पासवर्ड रहित उपयोगकर्ता को लागू किया है:18.04:

RUN \  useradd -U foo -m -s /bin/bash -p foo -G sudo && passwd -d foo && passwd -d root && \  sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \  sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \  sed -i /etc/sudoers -re 's/^#includedir.*/## Removed the #include directive! ##"/g' && \  echo "Customized the sudoers file for passwordless access!" && \  echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \  echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \  echo "foo user:";  su foo -c 'whoami && id' && \  echo "root user:"; su root -c 'whoami && id'

उपरोक्त कोड के साथ क्या होता है:

  • उपयोगकर्ता और समूह foo बनाया जाता है ।
  • उपयोगकर्ता foo दोनों में जोड़ा जाता है foo और sudo समूह।
  • होम निर्देशिका पर सेट है /home/foo.
  • खोल पर सेट है /bin/bash.
  • sed कमांड इनलाइन अपडेट करता है /etc/sudoers अनुमति देने के लिए फ़ाइल foo और root उपयोगकर्ताओं passwordless का उपयोग करने के लिए sudo समूह।
  • sed कमांड अक्षम करता है #includedir निर्देश जो उपनिर्देशिकाओं में किसी भी फाइल को इन इनलाइन अपडेट को ओवरराइड करने की अनुमति देगा ।