Как изменить недопустимый файл "/etc/sudoers"?

Как мне отредактировать недопустимый файл sudoers? Он выдает приведенную ниже ошибку и не позволяет мне снова редактировать, чтобы исправить ее.

Вот что происходит:

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

В современной системе Ubuntu (и многих других дистрибутивах GNU/Linux) исправление поврежденного sudoers файл на самом деле довольно прост и не требует перезагрузки, использования live CD или физического доступа к компьютеру.

Чтобы сделать это через SSH, войдите в систему на компьютере и выполните команду pkexec visudo. Если у вас есть физический доступ к компьютеру, SSH не нужен; просто откройте окно терминала и запустите это pkexec команда.

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

Если вам нужно отредактировать один из файлов конфигурации в /etc/sudoers.d (что редко встречается в данной ситуации, но возможно), используйте pkexec visudo -f /etc/sudoers.d/имя файла.

Если у вас возникла связанная с этим ситуация, когда вам необходимо выполнить дополнительные команды системного администрирования от имени root для устранения проблемы (также необычно в этом случае, но часто встречается в других), вы можете запустить интерактивную корневую оболочку с помощью pkexec bash. Вообще говоря, любая неграфическая команда, которую вы бы выполнили с sudo может быть запущен с pkexec вместо.

(Если в системе имеется более одной учетной записи пользователя, авторизованной для запуска программ как root с помощью PolicyKit для любого из этих действий вам будет предложено выбрать, какое из них вы хотите использовать, прежде чем будет запрошен ваш пароль.)


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

Предположим, что корневая файловая система установленной системы Ubuntu включена /dev/sda1. Тогда вы могли бы смонтировать его с помощью sudo mount /dev/sda1 /mnt. Затем вы можете отредактировать файл sudoers установленной системы с помощью sudo nano -w /mnt/etc/sudoers. Или, что еще лучше, вы можете отредактировать его с помощью

sudo visudo -f /mnt/etc/sudoers

(что помешает вам сохранить файл sudoers с неправильным синтаксисом).

Всегда используйте visudo чтобы отредактировать свой файл sudoers, никогда не редактируйте его непосредственно самостоятельно. Это помешает вам сохранить его на диск, если он не будет проверен.

Введите:

pkexec visudo

Затем измените последнюю строку

#includedir /etc/sudoers

К:

#includedir /etc/sudoers.d

Это должно решить вашу проблему.

если бы у кого-то еще, как у меня, не было pkexec установлен или не удалось запустить vi, visudo, nano или любой другой редактор для изменения файла sudoers, вы можете быть уверены в этом процессе.. Я был спасен этим:

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

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

исправьте эту ошибку и будьте счастливы :)

Когда это происходит с системой без графического интерфейса пользователя (возможно, с вашим рабочим сервером), pkexec сбой с этим сообщением об ошибке:

polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie==== AUTHENTICATION FAILED ===Error executing command as another user: Not authorized

В этой ситуации, используя pkttyagent может быть полезно. Если вы хотите удалить поврежденный файл в sudoers.d каталог, используйте это:

pkttyagent -p $(echo $$) | pkexec rm /etc/sudoers.d/FILENAME

Если вы хотите восстановить настройки по умолчанию /etc/sudoers, вы можете использовать эта суть чтобы скопировать конфигурации по умолчанию, поместите их в место, к которому нет доступа root (например, ваш $HOME). Затем вы можете перезаписать свой файл sudoers:

pkttyagent -p $(echo $$) | pkexec cp ~/sudoers /etc/sudoers

записка: Используя этот подход, после выполнения вашей команды, вероятно, ваш доступ к оболочке исчезнет. Но я уверен, что потеря одного сеанса оболочки намного лучше, чем потеря вашего сервера! (В соответствии с страница руководства, это нормальное поведение: когда его услуги больше не нужны, процесс может быть остановлен.)

Если вы испортили свой sudoers файл, вам нужно будет:

  • Перезагрузитесь в режим восстановления (нажмите escape во время загрузки, выберите опцию режима восстановления на экране grub)
  • Выберите опцию "Включить сеть" (если вы этого не сделаете, ваша файловая система будет смонтирована как доступная только для чтения. кто знал)
  • Выберите опцию "Перейти в корневую оболочку"
  • бежать visudo, исправьте свой файл
  • Перезагрузка с помощью обычной опции grub

источник :- http://mario.net.au/content/recover-etcsudoers-ubuntu-1204

Нет ничего плохого #включить sudoer.dremoving #включить sudoer.d не будет иметь никакого значения.

Но, пожалуйста, убедитесь, что у вас нет никаких синтаксических ошибок.У меня была такая же проблема, но я потратил несколько часов на исправление и просто понял, что это синтаксические ошибки.Обратитесь к руководству и исправьте их.

Например, предположим, что ваше имя пользователя : dollyI использовало следующее, что неверно

 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

надеюсь, это поможет

запустите режим восстановления, затем введите это

корень chown -R:root /etc/sudoers.dchmod u=rwx,g=rx,o=rx /etc/sudoers.d/chmod u=r,g=r,o= /etc/sudoers.d/*

только группа и пользователь root должны иметь привилегию чтения

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

pkexec visudo

затем исправьте свои ошибки

Если pkexec также не работает, вы можете использовать Docker, что довольно удивительно. Ссылка на решение по умолчанию сервера: sudo - Ubuntu: borked my sudoers file, how can I fix it? - Server Fault Приношу свои извинения за вторжение с комментарием. У меня недостаточно репутации, чтобы ответить должным образом.

отличный вопрос, учитывая, что эта страница создает эту ошибку RootSudoTimeout - Community Help Wiki

По теме: Можно ли переустановить sudo после удаления?