यह सामान्य रूप से सूडो फ़ाइल और सूडो कमांड से संबंधित एक काफी जटिल प्रश्न है ।
नोट: मैंने उबंटू डेस्कटॉप 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 इस कमांड को चलाएं:
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 (जैसा कि अन्य उत्तरों द्वारा सुझाया गया है) हैं
/etc/sudoers कभी-कभी सिस्टम अपडेट द्वारा संशोधित किया जाता है, जबकि फाइलें /etc/sudoers.d नहीं हैं
द 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: