किसी अमान्य '/ etc / sudoers' फ़ाइल को कैसे संशोधित करें?


238

मैं एक अवैध sudoers फ़ाइल कैसे संपादित करूं? यह नीचे दी गई त्रुटि को फेंकता है और यह मुझे इसे ठीक करने के लिए फिर से संपादित करने की अनुमति नहीं देता है।

यहाँ होता है:

$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting

2
इस पृष्ठ पर विचार करने से महान प्रश्न यह है कि त्रुटि help.ubuntu.com/community/RootSudoTimeout

जवाबों:


361

एक आधुनिक उबंटू प्रणाली (और कई अन्य जीएनयू / लिनक्स वितरण) पर, एक दूषित sudoersफ़ाइल को ठीक करना वास्तव में काफी आसान है, और मशीन को लाइव सीडी, या भौतिक एक्सेस का उपयोग करके रिबूट करने की आवश्यकता नहीं है।

एसएसएच के माध्यम से ऐसा करने के लिए, मशीन में लॉग इन करें और कमांड चलाएं pkexec visudo। यदि आपके पास मशीन तक भौतिक पहुंच है, तो एसएसएच अनावश्यक है; बस एक टर्मिनल विंडो खोलें और उस pkexecकमांड को रन करें ।

आप (या कुछ अन्य उपयोगकर्ता) मान लिया जाये कि प्रोग्राम को चलाने के रूप में अधिकृत कर रहे हैं rootPolicyKit साथ, आप अपने पासवर्ड डाल सकते हैं, और फिर इसे चला जाएगा visudoके रूप में root, और आप अपने ठीक कर सकते हैं /etc/sudoers

यदि आपको कॉन्फ़िगरेशन फ़ाइलों में से एक को संपादित करने की आवश्यकता है /etc/sudoers.d(जो इस स्थिति में असामान्य है, लेकिन संभव है), उपयोग करें ।pkexec visudo -f /etc/sudoers.d/filename

यदि आपके पास एक संबंधित स्थिति है जहां आपको समस्या को ठीक करने के लिए रूट के रूप में अतिरिक्त सिस्टम एडमिनिस्ट्रेशन कमांड का प्रदर्शन करना है (इस परिस्थिति में भी असामान्य है, लेकिन दूसरों में आम है), तो आप के साथ एक इंटरैक्टिव रूट शेल शुरू कर सकते हैं pkexec bash। सामान्यतया, आपके द्वारा चलाए sudoजा रहे किसी भी गैर-ग्राफ़िकल आदेश को pkexecइसके बजाय चलाया जा सकता है ।

(यदि rootपॉलिसीकीट के साथ प्रोग्राम चलाने के लिए अधिकृत सिस्टम पर एक से अधिक उपयोगकर्ता खाते हैं , तो उन कार्यों में से किसी के लिए, आपसे वह चयन करने के लिए कहा जाएगा, जिसे आप उपयोग करना चाहते हैं, इससे पहले कि आप अपना पासवर्ड पूछें।


यदि वह काम नहीं करता है - उदाहरण के लिए, यदि कोई उपयोगकर्ता नहीं हैं जो पॉलिसी के रूप में रूट के रूप में प्रोग्राम चलाने के लिए अधिकृत हैं - तो उबंटू लाइव सीडी से बूट करें (सीडी की तरह जिसे आप शायद उबंटू स्थापित करने के लिए उपयोग करते थे) और इसके लिए फाइल सिस्टम माउंट करें स्थापित प्रणाली। आप sudo parted -lअपने विभाजन को देखने के लिए दौड़कर ऐसा कर सकते हैं - शायद केवल एक ext4 विभाजन है, और यह रूट फाइल सिस्टम है।

मान लें कि स्थापित उबंटू सिस्टम का रूट फाइल सिस्टम चालू है / dev / sda1। तब आप इसे माउंट कर सकते थे sudo mount /dev/sda1 /mnt। फिर आप इंस्टॉल किए गए सिस्टम के sudoers फ़ाइल को संपादित कर सकते हैं sudo nano -w /mnt/etc/sudoers। या, और भी बेहतर, आप इसे संपादित कर सकते हैं

sudo visudo -f /mnt/etc/sudoers

(जो आपको गलत सिंटैक्स वाली sudoers फाइल को सेव करने से रोकेगा)।


7
pkexec / usr / sbin / visudo ने डेबियन 7 पर काम किया
marinara

10
पवित्र गाय! आपका बहुत बहुत धन्यवाद! मेरे बेकन को बचा लिया। आदि / sudoers.d / निर्देशिका में सुझाए गए अनुसार एक फ़ाइल जोड़ा गया है एक नियमित पाठ संपादक का उपयोग करें (DON-T__D-O__T-HAT !!!)। उन्नत किए गए विशेषाधिकारों को दर्ज करने की पूरी क्षमता खो दी, संपादन फ़ाइल को संपादित करना। इससे फाइल को संपादित करने में मदद मिली। अजीब हालांकि, मुझे पहले / आदि / sudoers को संपादित करना था, फिर इसने दूसरी फ़ाइल में त्रुटियां पाईं और मेरे लिए इसे खोल दिया। EVEN WEIRDER, के निर्देश में / etc / sudoers फ़ाइल 'inlcudedir /etc/sudoers.d' पर टिप्पणी की गई थी, और इसमें अभी भी शामिल है।
डेनिस

4
@ डेनिस थोड़ा भ्रमित, फाइलों #includeमें निर्देश sudoersविशेष रूप से व्यवहार किया जाता है; अग्रणी #उस स्थिति में टिप्पणी के रूप में व्याख्या करने के लिए शेष पंक्ति का कारण नहीं बनता है। जैसा कि man sudoersकहते हैं: "पाउंड साइन ('#') का उपयोग एक टिप्पणी को इंगित करने के लिए किया जाता है (जब तक कि यह एक # निर्देश का हिस्सा नहीं है या जब तक ..." इसे भी देखें : #includedir sudoers.d ( lzone.de से संग्रहीत ) ब्लॉग )।
एलियाह कगन

5
मेरा उपयोगकर्ता sudoer है, लेकिन मुझे यह त्रुटि मिली: एक अन्य उपयोगकर्ता के रूप में कमांड निष्पादित करने में
SuB

2
Ubuntu 16.04 में, pkexec visudoएक पासवर्ड के लिए पूछता है, जो सही पासवर्ड को स्वीकार नहीं करता है। यह "AUTHENTICATION FAILED" त्रुटि फेंकता है।
जूहा अनटाइनन

54

हमेशा visudoअपने sudoers फ़ाइल को संपादित करने के लिए उपयोग करें, इसे सीधे स्वयं संपादित न करें। यह आपको डिस्क को सहेजने से रोकेगा जब तक कि यह मान्य न हो जाए।


17

4
यह आपदा को नहीं रोकेगा। अपने आप को वैध रूप से अस्वीकार करना काफी आसान है।
यहोशू

क्या स्क्रूटनी द्वारा विस्कोस का उपयोग किया जा सकता है? यदि हां, तो कैसे?
लुकास

मेरे पास विज़ुडो स्थापित नहीं है। तो मैंने pkexec vim किया। फिर यह उपयोगकर्ताओं की सूची दिखाता है और पासवर्ड मांगता है। जब मैं पासवर्ड प्रदान करता हूं, तो यह त्रुटि को "किसी अन्य उपयोगकर्ता के रूप में कमांड निष्पादित करने में त्रुटि: अधिकृत नहीं है" के रूप में फेंकता है। कृपया मदद करें
श्यामखादका

24

में टाइप करें:

pkexec visudo

फिर अंतिम पंक्ति बदलें

#includedir /etc/sudoers

सेवा:

#includedir /etc/sudoers.d

इसे आपकी समस्या का समाधान करना चाहिए।


2
मैंने देखा है कि प्रमुख को हटाने #से #includedirकारणों वाक्यविन्यास त्रुटियों, #, निर्देश का हिस्सा है कम से कम उबंटू 12.10 पर।
SAFX

1
कि बस मुझे बहुत सिरदर्द बचा लिया। धन्यवाद एक टन :)
Addo सोल्यूशंस

1
मेरे पास विज़ुडो स्थापित नहीं है। तो मैंने pkexec vim किया। फिर यह उपयोगकर्ताओं की सूची दिखाता है और पासवर्ड मांगता है। जब मैं पासवर्ड प्रदान करता हूं, तो यह त्रुटि को "किसी अन्य उपयोगकर्ता के रूप में कमांड निष्पादित करने में त्रुटि: अधिकृत नहीं है" के रूप में फेंकता है। कृपया मदद करें
श्यामखादका

11

अगर मेरे जैसे किसी और ने pexexec स्थापित नहीं किया था, या sudoers फ़ाइल को बदलने के लिए vi, visudo, नैनो या किसी अन्य संपादक को चलाने में सक्षम नहीं था, तो आप इस प्रक्रिया के साथ सुनिश्चित हो सकते हैं .. मैं इस के साथ बच गया था:

  • रिबूट
  • रिकवरी मोड के लिए विकल्प के लिए बूट करते समय शिफ्ट कुंजी दबाए रखें (इसे दर्ज करें)
  • रूट के रूप में कमांड लाइन दर्ज करें (मेरे ग्रब मेनू पर दूसरा अंतिम विकल्प)
  • rw के लिए बूट डिवाइस को रीमाउंट करें, और उपयोगकर्ता के लिए सही क्रियान्वयन करें, और फ़ाइल संपादित करें

    mount -n -o remount,rw /
    chmod u+x /etc/sudoers
    nano /etc/sudoers
    

उस गलती को ठीक करें और खुश रहें :)


जबकि @ इलैया-कगन द्वारा सुझाया गया pexexec समाधान आसान प्रतीत होता है, यह अधिक सार्वभौमिक है। मेरी मशीन पर यह पता चला कि कोई pkexec स्थापित नहीं है और निश्चित रूप से मैं इसे स्थापित नहीं कर सका क्योंकि sudo apt-get install pkexec किसी तरह काम नहीं आया।
रनिंग।

इसके अलावा इस दृष्टिकोण के भीतर मैं visudoइसके बजाय प्रयोग करेंगे nano /etc/sudoers
पा ०४०80०

7

यदि आपने अपनी sudoersफ़ाइल गड़बड़ कर दी है , तो आपको निम्न की आवश्यकता होगी:

  • रिकवरी मोड में रिबूट (बूट के दौरान भागने, ग्रब स्क्रीन पर रिकवरी मोड विकल्प चुनें)
  • 'नेटवर्किंग सक्षम करें' विकल्प चुनें (यदि आप नहीं जानते कि आपका फाइल सिस्टम केवल पढ़ने के लिए माउंट किया जाएगा। कौन जानता था।
  • 'ड्रॉप टू रूट शेल' विकल्प का चयन करें
  • चलाएं visudo, अपनी फ़ाइल ठीक करें
  • सामान्य ग्रब विकल्प के साथ रिबूट करें

स्रोत: - http://mario.net.au/content/recover-etcsudoers-ubuntu-1204


नमस्ते, क्या यह मौजूदा सिस्टम की iptables, फ़ाइलों को हटा देता है?
श्यामखड़का

6

कुछ भी गलत नहीं है #include sudoer.d #include sudoer.d को हटाने से कोई फर्क नहीं पड़ेगा।

लेकिन कृपया सुनिश्चित करें कि आपके पास कोई सिंटैक्स त्रुटियां नहीं हैं। मेरे पास एक ही मुद्दा था, लेकिन ठीक करने के लिए घंटों बिताए और पता लगा कि वे सिंटैक्स त्रुटियां हैं। मैनुअल का संदर्भ लें और उन्हें सही करें।

उदाहरण के लिए कहें कि आपका उपयोगकर्ता नाम है: डॉली मैंने निम्नलिखित का उपयोग किया है जो गलत है

 dolly ALL = (ALL) ALL NO PASSWD: ALL

सही वाक्यविन्यास है

dolly ALL = (ALL) ALL //give permission to everything, not good

या

dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission

उम्मीद है की यह मदद करेगा


यह सुनिश्चित करने की तुलना में एक बेहतर तरीका है कि आपके पास वाक्यविन्यास त्रुटियां नहीं हैं visudo, इन फ़ाइलों को संपादित करते समय हमेशा उपयोग करना है, जिससे यह सुनिश्चित होता है कि आपके पास फ़ाइल को संशोधित करने से पहले आपके लिए वाक्यविन्यास त्रुटियां नहीं हैं। visudoकेवल संपादन के लिए नहीं है /etc/sudoers- यह फ़ाइलों को भी बनाएगा और संपादित करेगा /etc/sudoers.d। यह जो भी पाठ संपादक आप चाहते हैं के साथ भी काम करेगा। देखें मैनपेज जानकारी के लिए।
एलियाह कगन

विशिष्ट अनुमति देने के लिए, कृपया ध्यान दें कि यह केवल बहुत ही सरल कमांड / ऐप के लिए उपयोगी है, क्योंकि कोई भी पर्याप्त रूप से जटिल ऐप (जिसमें thunderbirdकभी भी रूट के रूप में नहीं चलाया जाना चाहिए) प्रभावी रूप से रूट के रूप में चलाने पर उपयोगकर्ता को पूर्ण सिस्टम एक्सेस देगा। यहां तक ​​कि प्रतीत होता है कि सरल कार्यक्षमता पूर्ण रूट एक्सेस का द्वार खोलती है। उदाहरण के लिए, एक उपयोगकर्ता जो एक प्रोग्राम चला सकता है जो एक फ़ाइल को एक मनमाना स्थान पर सहेज सकता है क्योंकि रूट पूर्ण रूट एक्सेस प्राप्त कर सकता है (वे अपने स्वयं को स्थापित कर सकते हैं /etc/sudoers, या यदि सिंटैक्स सीमाएं इसे रोकती हैं, तो वे स्वयं को स्थापित कर सकते हैं /etc/crontab)।
एलियाह कगन

3

पुनर्प्राप्ति मोड चलाएँ, फिर इसे टाइप करें

chown -R root: root /etc/sudoers.d
chmod u = rwx, g = rx, o = rx /etc/sudoers.d/
chmod u = r, g = r, o = /etc/sudoers.d/*

केवल समूह और उपयोगकर्ता रूट को प्रिविलेज पढ़ना चाहिए


3

आप + ( 1 से 6) के ttyसाथ कंसोल पर रूट के रूप में लॉगिन कर सकते हैं और चला सकते हैं ।CtrlFnFnvisudo


2

आप अपने बूट प्रविष्टि को ग्रब में भी संपादित कर सकते हैं।

बस अपने पीसी रिबूट, और दिखाने के लिए ग्रब की प्रतीक्षा करें। फिर इसे संपादित करने के लिए "उबंटू" प्रविष्टि पर "ई" दबाएं।

"लाइनक्स" या "कर्नेल =" के साथ एक लाइन देखें और बस उस लाइन के अंत में एक "सिंगल" जोड़ें।

फिर इस अस्थायी रूप से संशोधित बूट प्रविष्टि को बूट करने के लिए F10 दबाएं। यह आपको मूल अधिकारों के साथ एक शेल (GUI के बिना) देगा और आप sudoers फ़ाइल को s.th के साथ संपादित कर सकते हैं। नैनो / etc / sudoers की तरह अपनी पिछली स्थिति में।

फिर रिबूट और उसके किए।


2
pkexec visudo

फिर अपनी गलतियों को वापस लाएं


1
pkexec उपयोग करने के लिए आवश्यक नहीं
Braiam

@Braiam visudoको रूट के रूप में चलाना होगा। अगर sudoकाम नहीं करता है, pkexecकभी-कभी करता है। यह मेरे पहले उत्तर द्वारा कवर किया गया है ... लेकिन यह एक सही उत्तर है, visudoस्वयं (जब रूट के रूप में नहीं चलाया जाता है) काम नहीं करेगा, और सही, संक्षिप्त उत्तर में मूल्य भी हो सकते हैं, जब उनकी सिफारिशें अन्य उत्तरों के साथ बहुत अधिक हो। बेशक, अगर एक वसूली मोड में चला जाता है कि एक रूट खोल और फिर न sudoहै और न ही visudoआदेशों की तरह के लिए आवश्यक है pkexec। शायद यही आपका मतलब है ...
एलियाह कगन

0

Ubuntu 16.04 एक वर्चुअलबॉक्स पर चल रहा है (अंतर नहीं करना चाहिए), उपरोक्त तरीके मेरे लिए काम नहीं करते थे (फ़ाइल के अंत में अमान्य पंक्ति)। क्या काम था:

  1. VirtualBox को पुनरारंभ करें
  2. इसे सामान्य रूप से बूट होने दें, जब तक कि यह कंसोल में आपका उपयोगकर्ता नाम और पासवर्ड नहीं मांगता
  3. सामान्य रूप से अपने उपयोगकर्ता नाम के साथ लॉगिन करें
  4. फिर जब आप कंसोल में समाप्त हो जाते हैं (बशर्ते आपका बॉक्स GUI में बूट न ​​हो), तो बस कमांड दें su -और फिर अपना उपयोगकर्ता नाम पासवर्ड दें।
  5. यह अब root@ubuntu-xenial:~#तुरंत खत्म होना चाहिए , अगर /etc/sudoersबहुत ज्यादा टूटा या खाली नहीं है। निश्चित नहीं है कि उस मामले में क्या होगा।
  6. तब आप बस visudoफ़ाइल को चला सकते हैं और ठीक कर सकते हैं ।
  7. तब Ctrl + Xऔर यह संशोधित बफर को बचाने के लिए संकेत देगा। प्रेस YऔरEnter
  8. बॉक्स को पुनरारंभ करें और इसे अभी काम करना चाहिए।

यदि आपका सामान /etc/sudoersखाली है या कुछ गायब है, और आप उसे संपादित कर सकते हैं, तो यहाँ मेरा विषय है:

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL

आपका चरण 4 कोई मतलब नहीं है, यह केवल तब काम करता है जब आपका रूट पासवर्ड आपके सामान्य उपयोगकर्ता के समान हो।
अल्फ्रेड

जो एक स्थानीय VM में बहुत आम है।
जूचा अनटाइनन

0

अच्छा अभ्यास: एक बैकअप टर्मिनल विंडो और sudo suवहां चलाएं । एक अन्य टर्मिनेल पर विस्कोस या सुडो विम / इत्यादि / सुडोल चलाते हैं। यदि कुछ भी गलत होता है, तो टर्मिनल एक पर वापस जाएं और फ़ाइल को ठीक करें। आप पूछ सकते हैं, एक टर्मिनल में बस sudo suपहले क्यों नहीं चलती visudo? यह काम करता है, लेकिन इससे पहले कि आप इसे जानते हैं टर्मिनल बंद करने का आपको अधिक जोखिम है।


-1

एक तरह से सरल उपाय है। रिबूटिंग के बिना, पुनर्प्राप्ति मोड, या pkgexec( pkgexecकाम नहीं किया और पता नहीं क्यों या मुझे इसका उपयोग कैसे करना चाहिए), बस करें:

su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano

और फिर सिंटैक्स त्रुटि को ठीक करें!


नीचे के साथ क्या है? मेरे लिए पूरी तरह से काम किया।
r33333
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.