Damaged /etc/sudoers — syntax error | Поврежденный /etc/sudoers — ошибка в синтаксисе

Довольно непрятная проблема, с которой могут столкнуться админы linux, и далее расскажу, как все исправить не перезагружая сервер.

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

>>> /etc/sudoers: syntax error near line 123 <<<
sudo: parse error in /etc/sudoers near line 123
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

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

Но, есть варианты, как этого избежать:

$ pkexec visudo

либо, если у вас файлы находятся в /etc/sudoers.d/:

$ pkexec visudo -f /etc/sudoers.d/<file>

Однако, и это может быть не все, как я видел при поиске решения, некоторые сталкивались с тем, что пользователь при попытке выполнения команды, авторизацию не пройдет и мы увидим:

==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/usr/sbin/visudo' as the super user
Authenticating as: user,,, (name) Password:  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
This incident has been reported.

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

$ echo $$
3071

Итак, у нас есть PID сессии и мы теперь открываем вторую сессию SSH и там выполняем:

$ pkttyagent --process <PID>

Теперь идем обратно в первый сеанс и выполняем там:

$ pkexec visudo

Смотрим во второй сеанс — там должен появиться запрос на ввод пароля пользователя, ну и на этот раз тут должно пройти все успешно:

==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authenticating as: user,,, (name)
Password: 
==== AUTHENTICATION COMPLETE ===

И теперь в первой сессии запустится редоктор файла /etc/sudoers, можете исправлять проблему и сохранять файл.

Оставьте комментарий