суббота, 14 апреля 2018 г.

Ошибка синтаксиса sudoers


При попытке настроить срабатывание одного из скриптов, который обращается к системной функции от имени обычного пользователя системы, возникла необходимость внести изменения в полномочия пользователя через файл /etc/sudoers

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

~ $ visudo
visudo: /etc/sudoers: Отказано в доступе

После ввода "правильной" команды открывается окно редактора nano с загруженным в него содержанием файла sudoers.

Авторы публикаций поясняют, что при таком способе будет проверяться правильность синтаксиса вносимых в него изменений.

Вследствие отсутствия необходимости использования редактора nano мне не было известно назначение клавиш, с помощью которых производится запись в файл вносимых изменений:


И только в дальнейшем после "подсказки друга" мне стало известно, что символ ^ соответствует клавише Ctrl.

Поэтому редактирование мной файла sudoers производилось более привычным способом – sudo gedit /etc/sudoers

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

>>> /etc/sudoers: ошибка синтаксиса near line 21 <<<
sudo: parse error in /etc/sudoers near line 21
sudo: no valid sudoers sources found, quitting
sudo: не удаётся инициализировать модуль политики

Следствием этого стало невозможным использование любых начинающихся с sudo команд, а также символ ошибки в значке, отображающем доступность обновлений системы


К счастью, "лечение" сломанного механизма сводится к выполнению одной команды:

    pkexec visudo

После ввода пароля суперпользователя будет открыт тот же редактор nano с загруженным в него содержанием файла sudoers.

Соотнесите содержание своего файла с содержанием по умолчанию (без строк, начинающихся с символа комментария #):

root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL

Исправьте свои "неверные" записи или приведите файл к исходного значению, после чего нажмите на комбинацию клавиш Ctrl и o. На последующий запрос нажмите y:


Далее, используя клавишу Backspace, удалите в наименовании файла .tmp и на вопрос о перезаписи существующего файла снова нажмите клавишу y:



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


8 комментариев:

  1. а если так:
    user@mail:~$ pkexec visudo
    ==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
    Authentication is needed to run `/usr/sbin/visudo' as the super user
    Authenticating as: ,,, (user)
    Password:
    polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freeesktop.PolicyKit1.Error.Failed: No session for cookie
    ==== AUTHENTICATION FAILED ===
    Error executing command as another user: Not authorized

    This incident has been reported.

    ОтветитьУдалить
  2. 1. открыть две сессии ssh на целевом сервере (там где испортил sudoers)
    2. в первой сессии получить PID bash, исполнив (echo $$)
    3. во второй сессии запустить authentication agent (pkttyagent --process (pid из п.2)
    4. вернуться в первую сессию и там запустить pkexec visudo

    ОтветитьУдалить
  3. И мне помогло! Спасибо большое, а то уже собиралась Убунту сносить

    ОтветитьУдалить
  4. Что делать если так?
    Cannot run program visudo: no such file directory

    ОтветитьУдалить