Довольно непрятная проблема, с которой могут столкнуться админы 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, можете исправлять проблему и сохранять файл.