पासवर्ड के बिना sudo कमांड कैसे चलाएं?


235

कैसे करता है ubuntuउबंटू सर्वर 12.04 के लिए एडब्ल्यूएस छवियों पर उपयोगकर्ता passwordless है sudoजब वहाँ में इसके लिए कोई विन्यास है सभी आदेशों के लिए /etc/sudoers?

मैं अमेज़न पर Ubuntu सर्वर 12.04 का उपयोग कर रहा हूं। मैं एक नया उपयोगकर्ता जोड़ना चाहता हूं जिसमें डिफ़ॉल्ट उबंटू उपयोगकर्ता के समान व्यवहार है। विशेष रूप से मैं sudoइस नए उपयोगकर्ता के लिए पासवर्ड रहित चाहता हूं ।

इसलिए मैंने एक नया उपयोगकर्ता जोड़ा है और संपादित करने के लिए चला गया /etc/sudoers(पाठ्यक्रम के विस्कोस का उपयोग करके)। उस फ़ाइल को पढ़ने से ऐसा लग रहा था कि डिफ़ॉल्ट ubuntuउपयोगकर्ता समूह sudoका सदस्य होने से पासवर्ड रहित हो रहा था admin। इसलिए मैंने अपना नया उपयोगकर्ता उसमें जोड़ा। जो काम नहीं किया। फिर मैंने NOPASSWDनिर्देशन को जोड़ने की कोशिश की sudoers। जो भी काम नहीं किया।

वैसे भी, अब मैं बस उत्सुक हूँ। ubuntuयदि उन्हें परिभाषित नहीं किया जाता है तो उपयोगकर्ता को पासवर्ड रहित विशेषाधिकार कैसे प्राप्त होते हैं /etc/sudoers। ऐसा कौन सा तंत्र है जो इसकी अनुमति देता है?


जवाबों:


332

ठीक है, मैंने इसका उत्तर खोज लिया है इसलिए इसे पूर्णता के लिए यहाँ रखा जा सकता है। /etc/sudoersवहाँ अंत में मुझे लगता है कि सिर्फ एक टिप्पणी थी:

#includedir /etc/sudoers.d

हालाँकि इसमें वास्तव में उस निर्देशिका की सामग्री शामिल है। जिसके अंदर फ़ाइल है /etc/sudoers.d/90-cloudimg-ubuntu। जिसमें अपेक्षित सामग्री हो

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

तो यह है कि जहां डिफ़ॉल्ट ubuntu उपयोगकर्ता के लिए sudo कॉन्फ़िगरेशन रहता है।

आपको इस फाइल को विडियो का उपयोग करके संपादित करना चाहिए। निम्न कमांड आपको सही फाइल को विडो के साथ संपादित करने देगा।

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

और एक लाइन जोड़ें जैसे:

aychedee ALL=(ALL) NOPASSWD:ALL

अतं मै।


4
मुझे पूरा यकीन है कि मुझे एक पूर्ण रीबूट करना था।
अय्याशी

2
नए sudo नियमों का उपयोग हर नए लॉग इन उपयोगकर्ता के लिए किया जाएगा - इसलिए आपको कम से कम लॉग इन करने की आवश्यकता है
bluszcz

32
'sudo service sudo पुनरारंभ' काम करता है :)
Laice

4
बाद के संस्करणों में (उदाहरण के लिए 14.04) शामिल फ़ाइल है /etc/sudoers.d/90-cloud-init-users(इसलिए संपादित करने के लिए .. sudo visudo -f /etc/sudoers.d/90-cloud-init-users)। हालाँकि यह जेनरेट की गई एडिटिंग की तुलना में अतिरिक्त फाइल बनाने के लिए क्लीनर होगा। ध्यान दें कि फ़ाइलों को एक से युक्त .या में समाप्त होने वाले ~जाएगा नहीं शामिल किया।
मोलोमबी

2
@ Phil_1984_ सबसे अधिक संभावना है, यह सूडो के अन्य (मानक?) संस्करणों के साथ संगतता की अनुमति देने के लिए एक टिप्पणी के रूप में जोड़ा गया था, जिसमें शामिल करने की अनुमति नहीं है, लेकिन एक अजीब टिप्पणी द्वारा ट्रिप नहीं किया जाएगा। (मानक कठिन हैं; ;-)
jpaugh

94

मैंने पाया कि कई सर्वरों पर इस व्यवहार को आसानी से दोहराने के लिए सबसे सीधी बात यह थी, निम्नलिखित थे:

sudo visudo

इस पंक्ति को बदलें:

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

इस लाइन के लिए:

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

और इसे इस रेखा के नीचे ले जाएँ :

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

अब आपके पास यह होना चाहिए:

# 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

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

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

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

#includedir /etc/sudoers.d

फिर हर उस उपयोगकर्ता के लिए जिसे पासवर्ड के साथ sudo एक्सेस की आवश्यकता होती है :

sudo adduser <user> sudo

और हर उपयोगकर्ता के लिए जिसमें NO पासवर्ड के साथ sudo की आवश्यकता हो :

sudo adduser <user> admin

और अंत में, इसे चलाएं:

sudo service sudo restart

और बस!

संपादित करें: आपको व्यवस्थापक समूह को जोड़ना पड़ सकता है क्योंकि मुझे नहीं लगता कि यह डिफ़ॉल्ट रूप से मौजूद है।

sudo groupadd admin

आप इस आदेश के माध्यम से समूह में डिफ़ॉल्ट AWS ubuntuउपयोगकर्ता भी जोड़ सकते हैं admin:

sudo usermod ubuntu -g admin

नोट: जैसा कि @hata ने उल्लेख किया है, आपको admअपने व्यवस्थापक समूह के नाम के रूप में उपयोग करने की आवश्यकता हो सकती है , यह निर्भर करता है कि उबंटू के किस संस्करण का उपयोग किया जा रहा है।


3
स्वयं पर ध्यान दें: यह स्टैक में कम प्रतिबंधात्मक अनुमतियों को कम करने के लिए एक सम्मेलन है। लेकिन ऐसा नहीं करने से कार्यक्षमता प्रभावित नहीं होगी।
पॉवरटॉम

2
जैसा कि jiminikiz ने बताया, मुझे अपने Ubuntu GNOME 16.04 LTS पर % sudo के बाद % व्यवस्थापक रखना था । साथ ही, व्यवस्थापक समूह आईडी बिल्कुल नहीं है व्यवस्थापक लेकिन ADM मेरी Ubuntu पर। कोई रिबूट की आवश्यकता नहीं थी।
हेटा

5

मैं /etc/sudoers.d/ निर्देशिका के अंतर्गत अपनी फ़ाइल बनाऊंगा - किसी भी अद्यतन के मामले में अमेज़ॅन क्लाउड द्वारा बनाई गई फ़ाइल को अधिलेखित किया जा सकता है। /Etc/sudoers.d में अपनी फ़ाइल बनाने के बाद, यह प्रविष्टि जोड़ें,

<your user name> ALL=(ALL) NOPASSWD:ALL

सिस्टम को रिबूट करें और यह काम करेगा।


2

किसी भी संपादक का उपयोग किए बिना संक्षिप्त जवाब (बैश पर परीक्षण, दूरस्थ मेजबानों पर निष्पादित करने के लिए बहुत जोखिम भरा)।

वर्तमान उपयोगकर्ता के लिए पासवर्ड के बिना काम करने के लिए sudo कॉन्फ़िगर करें:

echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

इसके साथ संपादन जांचें:

sudo visudo -c

सत्यापित करें कि आप पासवर्ड के बिना sudo का उपयोग कर सकते हैं:

sudo cat /etc/sudoers | grep "$USER"

... या बस इसके साथ प्रयास करें:

sudo <anything>

21
यह बहुत खतरनाक सलाह है ... इस गलत को कॉपी और पेस्ट करें और आप खुद को अपने सर्वर से बाहर कर देंगे। इसलिए विस्कोस का उपयोग करने की सलाह। यह जाँचता है कि डिस्क पर सहेजने से पहले सिंटैक्स सही है। तो, किसी के लिए भी जो यह उपयोग करना चाहता है। ऐसा रिमोट सर्वर पर न करें जिसकी आपको परवाह है। आप अपने उत्तर में इस बारे में एक चेतावनी शामिल करना चाह सकते हैं।
aychedee

8
विज़ूडो का उपयोग नहीं करना एक भयानक विचार है। मेरा विश्वास करो, मुझे पता है।
trognanders

1
IMHO, एक कॉपी-पेस्ट एक मैनुअल एडिट से अधिक सुरक्षित है। एक मामूली सरलीकरण:echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
theartofrain 23

4
@theartofrain - आम तौर पर, मैं सहमत होता हूं, लेकिन visudoआपको sudoers फ़ाइल को तोड़ने की अनुमति नहीं देने के बारे में विशेष रूप से अच्छा है, इस प्रकार आपको अपनी मशीन (या कम से कम sudo) से लॉक नहीं करना है।
जॉन वी

3
@JonV आप के माध्यम से visudoभी व्यवस्थापक अधिकार खो सकते हैं, लेकिन आमतौर पर दुर्घटना से नहीं, क्योंकि visudoकेवल sudoers फ़ाइलों के लिए व्याकरण के अनुसार अच्छी तरह से बनने वाले परिवर्तनों को बचाता है । अधिकांश गलतियाँ वाक्यात्मक रूप से गलत हैं, इसलिए वे कोई नुकसान नहीं पहुँचाती हैं visudo। तो /etc/sudoersया में एक फ़ाइल /etc/sudoers.d है बीमार का गठन, sudoएक सुरक्षा उपाय है, जिसके कारण नहीं का उपयोग कर के रूप में किसी के लिए भी विशेषाधिकार तरक्की करने से इनकार कर visudoखतरनाक है। (हालांकि कभी-कभी pkexecइसे बिना रिबूट के ठीक कर सकते हैं ।)
एलियाह कगन

0

यह है कि मैंने एक CICD पाइपलाइन में उपयोग के लिए गैर-रूट, पासवर्ड रहित उपयोगकर्ता को एक अल्पकालिक डॉकर छवि में लागू किया है।

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    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 "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.