Как мне отредактировать неверный файл sudoers? Выдает приведенную ниже ошибку и не позволяет мне снова редактировать, чтобы это исправить.
Вот что происходит:
$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting
В современной системе Ubuntu (и многих других дистрибутивах GNU/Linux) исправить поврежденный файл sudoers
на самом деле довольно просто и не требует перезагрузки, используя живой CD, или физического доступа к машине.
Для этого по SSH войдите на машину и выполните команду pkexec visudo
. Если у вас есть физический доступ к машине, SSH не нужен; просто откройте окно терминала и выполните эту команду pkexec
.
Предположим, что вы (или другой пользователь) авторизованы для запуска программ в качестве root
с помощью PolicyKit, вы можете ввести свой пароль, а затем запустить visudo
в качестве root
, и вы можете исправить ваши /etc/sudoers
.
Если вам нужно отредактировать один из конфигурационных файлов в /etc/sudoers. d
(что редко встречается в данной ситуации, но возможно), используйте pkexec visudo -f /etc/sudoers.d/filename
.
Если у вас есть связанная с этим ситуация, когда вам необходимо выполнить дополнительные команды системного администрирования в качестве root для исправления проблемы (также редко встречающейся в данной ситуации, но распространенной в других), вы можете запустить интерактивную корневую оболочку с pkexec bash
. Вообще говоря, любая неграфическая команда, которую вы бы запустили с sudo
, может быть запущена вместо pkexec
.
(Если в системе более одной учётной записи пользователя, уполномоченного запускать программы под именем root
с помощью PolicyKit, то для любого из этих действий, перед тем, как запросить пароль, вас попросят выбрать, какую из них вы хотите использовать. )
sudo parted -l
для просмотра разделов - вероятно, это только один ext4 раздел, и это корневая файловая система.
Предположим, что корневая файловая система установленной системы Ubuntu находится на /dev/sda1
. Затем вы можете смонтировать его с помощью /dev/sda1 /mnt
. Затем можно отредактировать файл sudoers установленной системы с помощью sudo nano -w /mnt/etc/sudoers
. Или, что еще лучше, вы можете отредактировать его с помощью
sudo visudo -f /mnt/etc/sudoers
(что предотвратит сохранение файла sudoers с неправильным синтаксисом).
Всегда используйте visudo
для редактирования файла sudoers,никогда не редактируйте его сами. Это предотвратит сохранение его на диск, если он не прошел проверку.
Если вы испортили свой файл sudoers
, вам необходимо:
visudo
, исправьте ваш файл источник: - http://mario.net.au/content/recover-etcsudoers-ubuntu-1204
Нет ничего плохого #include sudoer.d удаление #include sudoer.d не имеет никакого значения.
Но убедитесь, что у вас нет синтаксических ошибок. У меня была такая же проблема, но я потратил часы на ее исправление и просто понял, что это синтаксические ошибки. Обратитесь к руководству и исправьте их.
Например Скажите, что ваше имя пользователя: dolly Я использовал следующее, что неверно
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:root /etc/sudoers.d chmod u=rwx,g=rx,o=rx /etc/sudoers.d/ chmod u=r,g=r,o= /etc/sudoers.d/*
только группа и пользователь root должны читать privelege
Вы также можете редактировать загрузочную запись, находясь в grub.
Просто перезагрузите компьютер и дождитесь появления grub. Затем нажмите «e» в записи «Ubuntu», чтобы отредактировать ее.
Найдите строку с «linux =» или «kernel =» и просто добавьте «single» в конец этой строки.
Затем нажмите F10, чтобы загрузить эту временно измененную загрузочную запись. Это даст вам оболочку (без графического интерфейса) с правами root, и вы сможете редактировать файл sudoers с помощью s.th. как nano / etc / sudoers обратно в предыдущее состояние.
Затем перезагрузитесь и все готово.
Введите:
pkexec visudo
Затем измените последнюю строку
#includedir /etc/sudoers
Кому:
#includedir /etc/sudoers.d
Это должно решить вашу проблему.
если у кого-то вроде меня не было установлено pkexec , или он не смог запустить vi, visudo, nano или любой другой редактор для изменения файла sudoers, вы можете быть уверены в этом процессе .. Меня спасло следующее:
перемонтируйте загрузочное устройство для rw, примените право exec для пользователя и отредактируйте файл
mount -n -o remount, rw /
chmod u + x / и т.д. / sudoers
visudo / etc / sudoers
исправьте эту ошибку и будьте счастливы :)
Dir kënnt Iech och aloggen als Root op enger tty
Konsol mat Ctrl + Fn ( Fn vun 1 bis 6) a lafen visudo
.
В Ubuntu 16.04, запущенном на VirtualBox (не должно быть никакой разницы), вышеописанные методы не сработали (недействительная строка в конце файла). Сработало следующее:
su -
, а затем дайте пароль собственного имени пользователя. root@ubuntu-xenial:~#
, если /etc/sudoers
не слишком сломан или пуст. Не уверен, что произойдет в этом случае.visudo
и исправить файл.Ctrl + X
и появится запрос Save modified buffer (Сохранить измененный буфер). Нажмите Y
и Enter
Если ваша /etc/sudoers
пуста или чего-то не хватает, и вы можете это отредактировать, то вот содержимое моего:
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
Хорошая практика: создайте резервную копию окна терминала и запустите там sudo su
. На другом терминале запустите visudo или sudo vim / etc / sudoers. Если что-то пойдет не так, вернитесь к первому терминалу и исправьте файл. Вы можете спросить, почему бы просто не запустить sudo su
перед visudo
в одном терминале? Это тоже работает, но выше риск того, что вы закроете терминал до того, как узнаете об этом.
Есть способ более простое решение. Без перезагрузки, режима восстановления или pkgexec
( pkgexec
не работал и понятия не имею, почему и как я должен его использовать), просто выполните:
su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano
А затем просто исправьте синтаксическая ошибка!
Когда это происходит с системой без графического интерфейса пользователя (возможно, с вашим рабочим сервером), 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
ПРИМЕЧАНИЕ: Используя этот подход, после выполнения вашей команды, возможно, ваш доступ к оболочке исчезнет. Но я уверен, что потеря одного сеанса оболочки намного лучше, чем потеря вашего сервера! (Согласно странице руководства , это нормальное поведение: когда его службы больше не нужны, процесс может быть остановлен.)
Добавление этого для новой волны виртуальных машин Linux на основе WSL. Когда я заблокировал себя на своей виртуальной машине WSL2 на основе Debian (Pengwin), в которой не было pkexec и не был установлен пароль root, вот что я обнаружил, решило проблему:
<distro.exe> config --default-user root
Пример:
ubuntu1804.exe config --default-user root
или
pengwin.exe config --default-user root