Як змінити недійсний файл '/ 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

У сучасній системі Ubuntu (та багатьох інших дистрибутивах GNU / Linux) виправити пошкоджений sudoersфайл насправді досить просто і не потребує перезавантаження, використання живого компакт-диска або фізичного доступу до машини.

Для цього за допомогою SSH увійдіть до машини та запустіть команду pkexec visudo. Якщо у вас є фізичний доступ до машини, SSH непотрібний; просто відкрийте вікно терміналу і запустіть цю pkexecкоманду.

Якщо припустити, що ви (або якийсь інший користувач) уповноважені запускати програми, як і rootу PolicyKit, ви можете ввести свій пароль, і тоді він запуститься visudoяк root, і ви можете виправити свій /etc/sudoers.

Якщо вам потрібно відредагувати один із файлів конфігурації в /etc/sudoers.d(що в цій ситуації нечасто, але можливо), використовуйте .pkexec visudo -f /etc/sudoers.d/filename

Якщо у вас пов’язана ситуація, коли вам потрібно виконати додаткові команди системного адміністрування як root, щоб вирішити проблему (також нечасто за цієї обставини, але поширене в інших), ви можете запустити інтерактивну оболонку кореня pkexec bash. Взагалі кажучи, будь-яка не графічна команда, з якою ви будете запускатися, sudoможе pkexecзамість цього запускатися .

(Якщо в системі, уповноваженій запускати програми, як rootу політиці PolicyKit, є більше одного облікового запису користувача , то для будь-якого з цих дій вам буде запропоновано вибрати, який саме ви хочете використовувати, перш ніж запитати пароль.)


Якщо це не працює - наприклад, якщо немає користувачів, яким дозволено запускати програми як root через PolicyKit, - завантажте його з живого компакт-диска Ubuntu (наприклад, з компакт-диска, який ви, ймовірно, використовували для встановлення Ubuntu) та змонтуйте файлову систему для встановлена ​​система. Ви можете зробити це, запустивши sudo parted -lдля перегляду своїх розділів - мабуть, є лише один розділ ext4, і це коренева файлова система.

Припустимо, коренева файлова система встановленої системи Ubuntu увімкнена / dev / sda1. Тоді ви могли змонтувати його sudo mount /dev/sda1 /mnt. Потім можна редагувати файл судорів встановленої системи за допомогою sudo nano -w /mnt/etc/sudoers. Або, ще краще, ви можете відредагувати його

sudo visudo -f /mnt/etc/sudoers

(що не дозволить вам зберегти файл sudoers з неправильним синтаксисом).


7
pkexec / usr / sbin / visudo працював над debian 7
marinara

10
СВЯТА КОРОВА! Дуже дякую! Врятували моє сало. Додано файл, як було запропоновано, у etc / sudoers.d / каталог ВИКОРИСТАННЯ РЕГУЛЯРНОГО ТЕКСТУВАННЯ (DON-T__D-O__T-HAT !!!). Втратила всю здатність робити підвищені привілеї, ВКЛЮЧИТИ, редагувати файл, що порушує право. Це допомогло відредагувати файл. Дивно, хоча мені спочатку довелося редагувати / etc / sudoers, потім він знайшов помилки в іншому файлі і відкрив це для мене. НАЗАД ВЕСНІЙ, прокоментували директиву у файлі / etc / sudoers "inlcudedir /etc/sudoers.d", і вона все ще включає її.
Денніс

4
@Dennis Дещо заплутано, #includeдирективи у sudoersфайлах трактуються спеціально; ведучий #не спричиняє інтерпретацію решти рядка як коментаря. Як man sudoersговориться: "Знак фунта (" # ") використовується для позначення коментаря (якщо він не є частиною директиви #include або якщо ..." Дивіться також візуально: #includedir sudoers.d (в архіві lzone.de/ блог ).
Елія Каган

5
Мій користувач sudoer, але я отримав цю помилку: Помилка виконання команди як інший користувач: Не дозволено
SuB

2
В Ubuntu 16.04 pkexec visudoзапитує пароль, який не приймає правильний пароль. Він видає помилку "АВТОМЕНТИКАЦІЇ ЗНАТИ".
Juha Untinen

54

Завжди використовуйте visudoдля редагування файлу sudoers, ніколи не редагуйте його безпосередньо самостійно. Це не дозволить вам зберегти його на диску, якщо він не перевірить.


17
заднім числом 20/20
code_monk

4
Це не запобіжить катастрофі. Це досить просто, щоб справедливо відмовити собі.
Джошуа

Чи можуть візудо використовувати скрипти? Якщо так, то як?
Лукас

У мене не встановлено візуально. Так що я зробив pkexec vim. Потім він показує список користувачів і запитує пароль. Коли я надаю пароль, він видає помилку як "Помилка виконання команди як іншого користувача: Не авторизована". Допоможіть, будь ласка
Шиямкхадка

24

Введіть:

pkexec visudo

Потім змініть останній рядок

#includedir /etc/sudoers

До:

#includedir /etc/sudoers.d

Це повинно вирішити вашу проблему.


2
Я помітив, що видалення головного #з #includedirсинтаксичних помилок #є частиною директиви, принаймні, для Ubuntu 12.10.
SAFX

1
Це просто врятувало мені багато головного болю. Дякую тонну :)
Addo Solutions

1
У мене не встановлено візуально. Так що я зробив pkexec vim. Потім він показує список користувачів і запитує пароль. Коли я надаю пароль, він видає помилку як "Помилка виконання команди як іншого користувача: Не авторизована". Допоможіть, будь ласка
Шиямкхадка

11

якщо хтось, як я, не встановив pkexec або не зміг запустити vi, visudo, nano чи будь-який інший редактор, щоб змінити файл sudoers, ви можете бути впевнені в цьому процесі.

  • перезавантажити
  • утримуйте клавішу shift під час завантаження, щоб мати можливість для режиму відновлення (введіть її)
  • ввести командний рядок як корінь (другий останній варіант у моєму меню grub)
  • перезавантажте завантажувальний пристрій для rw та застосуйте exec право для користувача та відредагуйте файл

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

виправте цю помилку і будьте щасливі :)


Хоча рішення pkexec, запропоноване @ eliah-kagan, здається, простіше, але це більш універсально. На моїй машині виявилося, що не встановлено pkexec, і, звичайно, я не міг його встановити, оскільки sudo apt-get install pkexec якось не працював.
працює.t

Також в рамках цього підходу я б застосував visudoзамість цього nano /etc/sudoers.
pa4080

7

Якщо ви зіпсували sudoersфайл, вам потрібно буде:

  • Перезавантажтесь у режим відновлення (натисніть клавішу Escape під час завантаження, виберіть варіант режиму відновлення на екрані grub)
  • Виберіть параметр "Увімкнути мережу" (якщо ви не маєте свою файлову систему, буде встановлено лише для читання. Хто знав)
  • Оберіть опцію "Перейти до кореневої оболонки"
  • запустити 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, яке ніколи не слід запускати як root) фактично надасть користувачеві повний доступ до системи під час запуску як root. Навіть, здавалося б, проста функціональність відкриває двері до повного доступу до коренів. Наприклад, користувач, який може запустити програму, яка може зберегти файл у довільному місці, оскільки root може отримати повний кореневий доступ (вони можуть встановити свій власний /etc/sudoersабо якщо обмеження синтаксису перешкоджають цьому, вони можуть встановити свою власну /etc/crontab).
Eliah Kagan

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

Ви також можете увійти як root на ttyконсолі з Ctrl+ Fn( Fnвід 1 до 6) та запустити visudo.


2

Ви також можете редагувати запис завантаження під час роботи в grub.

Просто перезавантажте комп'ютер і дочекайтеся показів grub. Потім натисніть "e" у записі "Ubuntu", щоб відредагувати його.

Шукайте рядок з "linux =" або "kernel =" і просто додайте "єдиний" в кінець цього рядка.

Потім натисніть F10, щоб завантажити цей тимчасово змінений запис завантаження. Це дасть вам оболонку (без GUI) з правами root і ви можете редагувати файл sudoers з s.th. як нано / тощо / sudoers повертається до свого попереднього стану.

Потім перезавантажте його і зробіть.


2
pkexec visudo

потім поверніть свої помилки


1
не потрібно використовувати pkexec
Брайам

@Braiam visudoмає запускатися як root. Якщо sudoне працює, pkexecіноді так і є. Це висвітлюється моєю попередньою відповіддю ... але це правильна відповідь, visudoсама по собі (коли не запускається як root) не спрацює, і в правильних, коротких відповідях може бути корисна ціна, навіть коли їх рекомендації значно збігаються з іншими відповідями. Звичайно, якщо перейти в режим відновлення, це коренева оболонка, і тоді ні для, sudoні visudoдля таких команд не потрібно pkexec. Можливо, це ви маєте на увазі ...
Елія Каган

0

У Ubuntu 16.04, який працює на VirtualBox (не повинен змінювати), вищезазначені методи не працювали для мене (недійсна рядок у кінці файлу). Що працювало:

  1. Перезавантажте VirtualBox
  2. Нехай він завантажується нормально, поки він не запитає ваше ім'я користувача та пароль у консолі
  3. Увійдіть зазвичай зі своїм іменем користувача
  4. Потім, коли ви опинитесь у консолі (за умови, що ваше поле не завантажується в графічний інтерфейс), просто дайте команду 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 не має сенсу, він працює лише тоді, коли ваш пароль root такий, як у звичайного користувача.
Альфред

Що дуже часто зустрічається в локальній ВМ.
Juha Untinen

0

Гарна практика: вікно резервного термінала та запустіть sudo suйого. На іншому termianl запустіть visudo або sudo vim / etc / sudoers. Якщо щось піде не так, поверніться до терміналу та виправте файл. Ви можете запитати, чому б просто не запустити 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

А потім просто виправити синтаксичну помилку!


Що з головою? Для мене прекрасно працювали.
rien333
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.