Как изменить неверный файл '/ etc / sudoers'?

Как мне отредактировать неверный файл 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
276
задан 17 January 2019 в 00:27

15 ответов

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


Если это не сработает - например, если нет пользователей, уполномоченных запускать программы от имени root через PolicyKit - то загрузитесь с живого компакт-диска Ubuntu (например, с компакт-диска, который Вы, вероятно, использовали для установки Ubuntu) и смонтируйте файловую систему для установленной системы. Вы можете сделать это, запустив sudo parted -l для просмотра разделов - вероятно, это только один ext4 раздел, и это корневая файловая система.

Предположим, что корневая файловая система установленной системы Ubuntu находится на /dev/sda1. Затем вы можете смонтировать его с помощью /dev/sda1 /mnt. Затем можно отредактировать файл sudoers установленной системы с помощью sudo nano -w /mnt/etc/sudoers. Или, что еще лучше, вы можете отредактировать его с помощью

sudo visudo -f /mnt/etc/sudoers

(что предотвратит сохранение файла sudoers с неправильным синтаксисом).

416
ответ дан 17 January 2019 в 00:27

Всегда используйте visudo для редактирования файла sudoers,никогда не редактируйте его сами. Это предотвратит сохранение его на диск, если он не прошел проверку.

64
ответ дан 17 January 2019 в 00:27

Если вы испортили свой файл sudoers , вам необходимо:

  • Перезагрузиться в режим восстановления (нажмите escape во время загрузки, выберите вариант режима восстановления на экран grub)
  • Выберите опцию «Включить сеть» (если вы этого не сделаете, ваша файловая система будет смонтирована как доступная только для чтения. Кто знал)
  • Выберите опцию «Отбросить в корневую оболочку»
  • запустить visudo , исправьте ваш файл
  • Перезагрузитесь с обычным параметром grub

источник: - http://mario.net.au/content/recover-etcsudoers-ubuntu-1204

7
ответ дан 17 January 2019 в 00:27

Нет ничего плохого #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

надеюсь, что это поможет

4
ответ дан 17 January 2019 в 00:27

запустите режим восстановления, затем введите этот

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

3
ответ дан 17 January 2019 в 00:27

Вы также можете редактировать загрузочную запись, находясь в grub.

Просто перезагрузите компьютер и дождитесь появления grub. Затем нажмите «e» в записи «Ubuntu», чтобы отредактировать ее.

Найдите строку с «linux =» или «kernel =» и просто добавьте «single» в конец этой строки.

Затем нажмите F10, чтобы загрузить эту временно измененную загрузочную запись. Это даст вам оболочку (без графического интерфейса) с правами root, и вы сможете редактировать файл sudoers с помощью s.th. как nano / etc / sudoers обратно в предыдущее состояние.

Затем перезагрузитесь и все готово.

1
ответ дан 17 January 2019 в 00:27

Введите:

pkexec visudo

Затем измените последнюю строку

#includedir /etc/sudoers

Кому:

#includedir /etc/sudoers.d

Это должно решить вашу проблему.

29
ответ дан 17 January 2019 в 00:27

если у кого-то вроде меня не было установлено pkexec , или он не смог запустить vi, visudo, nano или любой другой редактор для изменения файла sudoers, вы можете быть уверены в этом процессе .. Меня спасло следующее:

  • перезагрузка
  • удерживайте клавишу Shift во время загрузки, чтобы иметь возможность выбора режима восстановления (введите его)
  • введите командную строку как root (вторая последняя опция в моем меню grub)
  • перемонтируйте загрузочное устройство для rw, примените право exec для пользователя и отредактируйте файл

     mount -n -o remount, rw /
    chmod u + x / и т.д. / sudoers
    visudo / etc / sudoers
     

исправьте эту ошибку и будьте счастливы :)

13
ответ дан 17 January 2019 в 00:27

Dir kënnt Iech och aloggen als Root op enger tty Konsol mat Ctrl + Fn ( Fn vun 1 bis 6) a lafen visudo .

2
ответ дан 17 January 2019 в 00:27

В Ubuntu 16.04, запущенном на VirtualBox (не должно быть никакой разницы), вышеописанные методы не сработали (недействительная строка в конце файла). Сработало следующее:

  1. Перезапустите VirtualBox
  2. Пусть он загрузится нормально, пока не запросит имя пользователя и пароль в консоли
  3. Войдите нормально с именем пользователя
  4. Затем, когда вы окажетесь в консоли (при условии, что ваш ящик не загрузится в GUI), просто дайте команду su -, а затем дайте пароль собственного имени пользователя.
  5. Теперь оно должно появиться в строке root@ubuntu-xenial:~#, если /etc/sudoers не слишком сломан или пуст. Не уверен, что произойдет в этом случае.
  6. Тогда можно просто запустить visudo и исправить файл.
  7. Затем Ctrl + X и появится запрос Save modified buffer (Сохранить измененный буфер). Нажмите Y и Enter
  8. Перезапустите окно и оно должно работать.

Если ваша /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
1
ответ дан 17 January 2019 в 00:27
pkexec visudo

затем вернуть ошибки

2
ответ дан 17 January 2019 в 00:27

Хорошая практика: создайте резервную копию окна терминала и запустите там sudo su . На другом терминале запустите visudo или sudo vim / etc / sudoers. Если что-то пойдет не так, вернитесь к первому терминалу и исправьте файл. Вы можете спросить, почему бы просто не запустить sudo su перед visudo в одном терминале? Это тоже работает, но выше риск того, что вы закроете терминал до того, как узнаете об этом.

1
ответ дан 22 November 2019 в 22:41

Есть способ более простое решение. Без перезагрузки, режима восстановления или 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

А затем просто исправьте синтаксическая ошибка!

0
ответ дан 22 November 2019 в 22:41

Когда это происходит с системой без графического интерфейса пользователя (возможно, с вашим рабочим сервером), 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

ПРИМЕЧАНИЕ: Используя этот подход, после выполнения вашей команды, возможно, ваш доступ к оболочке исчезнет. Но я уверен, что потеря одного сеанса оболочки намного лучше, чем потеря вашего сервера! (Согласно странице руководства , это нормальное поведение: когда его службы больше не нужны, процесс может быть остановлен.)

1
ответ дан 5 January 2021 в 23:49

Добавление этого для новой волны виртуальных машин Linux на основе WSL. Когда я заблокировал себя на своей виртуальной машине WSL2 на основе Debian (Pengwin), в которой не было pkexec и не был установлен пароль root, вот что я обнаружил, решило проблему:

  • Откройте Windows Powershell от имени администратора (щелкните правой кнопкой мыши «Запуск от имени администратора»)
  • Установите на виртуальной машине пользователя по умолчанию как root (потому что он не запрашивает пароль) согласно в этом практическом руководстве :
<distro.exe> config --default-user root

Пример:

ubuntu1804.exe config --default-user root 

или

pengwin.exe config --default-user root
  • Перезапустите свой дистрибутив.
  • Теперь вы должны быть пользователем root и можете приступить к устранению проблемы с sudo.
  • Повторите процесс, чтобы вернуть пользователя по умолчанию к нормальному состоянию.
1
ответ дан 5 January 2021 в 23:49

Другие вопросы по тегам:

Похожие вопросы: