Запоротый sudo

Если вы запороли root доступ в линукс например копаясь в файле /etc/sudoers и теперь при попытке выполнить команду от имени суперпользователя (sudo) вы получаете что-то типа:

user@PC:~$ sudo apt update
>>> /etc/sudoers: syntax error near line 21 <<<
sudo: parse error in /etc/sudoers near line 21
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

То вы можете попытаться исправить свой косяк удалив то что дописали с помощью команды:

pkexec visudo

После ввода команды вы получите запрос на ввод пароля, и если например у вас не получается запустить данную команду и на экране вы видите что-то типа:

user@PC:~$ pkexec visudo
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/usr/sbin/visudo’ as the super user
Authenticating as: User,,, (user)
Password:
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
This incident has been reported.

То придется доставать бубен, а если точней то открывать второе окно терминала или если вы подключены по ssh запускать еще одну сессию. Далее будет Терминал-1 и Терминал-2 до конца процедуры окна терминалов не закрываем. Подразумевается что вы залогинились в обоих терминалах и они оба ожидают ввода вами команды, далее:

1) В окне Терминал-1 вводим команду:

echo $$

В ответ вы получите номер PID процесса данного терминала. Запоминаем его.

2) В Терминале-2 вводим команду:

pkttyagent —process «PID процесса» (Например: pkttyagent —process 5141)

Где «PID процесса» это идентификатор который мы получили в первом пункте. После ввода команды в Терминале-2 запускается агент и ожидает дальнеших действий.

3) Переключаемся на Терминал-1 и вводим ранее не срабатывавшую команду:

pkexec visudo

4) После ввода команды в окне Терминал-2 появится всякий текст и запрос на ввод пароля. Вводим пароль root пользователя и нажимаем Enter.

5) Если пароль введен верно вы получите сообщение «==== AUTHENTICATION COMPLETE ===» и в окне Терминала-1 откроется редактор с открытым файлом /etc/sudoers в котором вы можете исправить то что ранее там натворили. На этом этапе в окне Терминала-2 вы можете завершить работу pkttyagent нажав Ctr+C или же просто его закрыв.

Некоректные строки в файле /etc/sudoers вы могли видеть при попытке запустить программы с командой sudo, в моем примере это была строка — >>> /etc/sudoers: syntax error near line 21 <<< то-есть на строке 21 была ошибка синтаксиса, исправив которую все пришло в норму. Также при остановке либо закрытии редактора также будет видно сообщение о ошибке.

Также хотелось бы обратить внимание на то что написано в самом верху файла /etc/sudoers, а именно «This file MUST be edited with the ‘visudo’ command as root.» то-есть для изменения данного файла не стоит лазить в него руками, данный файл ДОЛЖЕН редактироваться с помощью команды visudo запущенной от пользователя с root правами (sudo visudo). Это избавит вас от головной боли и даже если вы там что-то натворите то при выходе из редактора данный файл будет проверен и в случае если там что-то не так вы получите сообщение об ошибке с указанием неверных строк и запрос на действие:

>>> /etc/sudoers: syntax error near line 21 <<<
What now?

У вас есть 3 варианта:

Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)

e — Повторно открыть файл для редактирования.
x — Закрыть файл и отменить сделанные изменения.
Q — Не смотря ни на что сохранить сделанные изменения в файл (ОПАСНО!).

Спасибо за внимание к статье и всего доброго =).

Author: Ameteus

Добавить комментарий