Как исправить недействительный файл /etc/sudoers, если доступ root отключен?

Как исправить недействительный файл /etc/sudoers, если доступ root отключен?

Это касается моего Raspberry Pi, на котором у меня установлен Raspbmc. Я знаю, что есть сайт Raspberry Pi StackExchange, но я подумал, что, возможно, здесь я смогу привлечь больше внимания к этой проблеме.

Проблема в том, что я внес изменения /etc/sudoers, пытаясь предоставить NOPASSWDразрешения одному из пользователей, но, полагаю, где-то по пути я испортил файл, и теперь при каждом входе в систему/попытке использования я получаю следующую ошибку sudo:

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

Я нашел похожие посты наУбунтуа такжеПереполнение стека, но проблема в том, что все ответы требуют пароль root, аУчетная запись root по умолчанию отключена в Raspbmc, и я, очевидно, не включил его перед попыткой изменить /etc/sudoers.

Итак, мой вопрос: как мне исправить файл, если у меня не включен root-доступ? Возможно ли это вообще?

решение1

Вы по-прежнему сможете загрузить Pi в однопользовательском режиме, чтобы получить доступ к root.

Используя другой компьютер, измените cmdline.txtи добавьте singleв конец строки.
Затем, когда вы загрузите Pi с SD-карты, он должен автоматически переключить вас в режим root, который позволит вам обновиться./etc/sudoers

решение2

После двух дней исследований и просмотра веб-страниц я наконец нашел решение и смог спасти свою собственную систему Raspberry Pi (без необходимости переформатировать SD-карту и начинать все с нуля)!

ПРИМЕЧАНИЕ:Этот ответ довольно длинный. Если вы хотите быстро добраться до самого решения, я добавил заголовок, к которому вы можете прокрутить вниз. Я рекомендую вам прочитать весь ответ, так как он может дать некоторое представление о различиях между дистрибутивом Raspbian и другими дистрибутивами Linux, а также прояснить, почему многие предлагаемые решения, которые вы найдете в Интернете, могут не работать на вашем Pi.

Поэтому обычно в среде Linux самый быстрый способ восстановить сломанный sudo без необходимости перезагрузки — это использовать PolicyKit или pkexecкоманду вроде этой:

pkexec visudo

Но на Pi это, скорее всего, не сработает, он запросит пароль root, но пароль не будет принят. (Я имею в виду, вы вообще помните, как устанавливали пароль root? Подождите, помните? Тогда переходите к звездочке *.)

Некоторые дистрибутивы Linux, например Ubuntu, поставляются с режимом восстановления, который можно открыть, удерживая клавишу Shift во время загрузки, и предлагает удобный интерфейс и позволяет перейти в командную строку root, где можно получить доступ для исправления поврежденных файлов. Дистрибутив Raspbian Linux для Pi не поставляется с таким режимом восстановления, поэтому это решение не является решением для нас. Тем не менее, Pi предлагает вам при загрузке удерживать клавишу Shift, чтобы войти в какой-то режим восстановления, и, войдя в режим восстановления Pi или в диалоговое окно NOOBS, мы, несомненно, на правильном пути к восстановлению поврежденного sudo на нашем Pi.

Другой распространенный способ исправления sudo — загрузка в однопользовательском режиме, который выводит вас на командную строку root. Это можно сделать, добавив слово singleв конец -файла cmdline.txtна загрузочном разделе системы. В следующий раз, когда ваша система загрузится, она загрузится в однопользовательском режиме.

Мы можем легко попробовать это решение на нашем Pi, потому что, что удобно, режим восстановления Pi или диалог NOOBS позволяют нам редактировать -файл cmdline.txt. В режиме восстановления или диалоге NOOBS нажатием на значок "Изменить конфигурацию" вы открываете редактор, который позволяет редактировать два файла, один из которых - cmdline.txt. Нажатием "OK" в редакторе ваши изменения сохраняются.

К сожалению, при загрузке в однопользовательском режиме или «режиме восстановления» на Pi вы, скорее всего, получите следующее сообщение:

Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.

Press Enter to continue.

Это – а также то, почему ранее упомянутый запрос пароля root не принимал никаких паролей – происходит потому, что Raspbian по умолчанию не имеет установленного пароля для учетной записи root. Это не следует путать с паролем, который ничего не значит или не требует пароля. Raspbian, как и несколько других дистрибутивов Linux (например, Debian, производным от которого является Raspbian), ожидает, что пользователь будет работать как root через sudo, а не через саму учетную запись. Следовательно, учетная запись root находится в состоянии «блокировки», которое мы и испытываем.

*Если вы сами устанавливаете пароль root, например, через команду sudo passwd root, то вы должны иметь возможность использовать pkexec-команду и загрузиться в однопользовательском режиме. Обратите внимание, что когда вы это делаете, вам нужно использовать sudo, поэтому это, очевидно, не решение, если sudo сломан, но я указываю на это, потому что, вероятно, именно поэтому некоторые люди успешно исправляли свои Pi, применяя решения, предлагающие -команду pkexecили однопользовательский режим. Эти люди в какой-то момент вручную устанавливали пароль root, разблокируя учетную запись root своей системы.

Решение

Этот пост в блогеобъясняет, как сделать то, что нам нужно сделать. Действия почти идентичны тем, которые мы предприняли, пытаясь восстановить sudo в однопользовательском режиме. Вам не нужно делать все эти громоздкие вещи, упомянутые в сообщении в блоге, чтобы отредактировать -файл cmdline.txt, вместо этого просто сделайте это в диалоговом окне NOOBS. Ключ в том, чтобы добавить init=/bin/shв конец -файла cmdline.txt. После добавления этого фрагмента в следующий раз, когда вы загрузите свой Pi, вы будете перенаправлены в командную строку root.

Изначально файловая система будет загружена в режиме только для чтения, поэтому перед тем, как что-либо редактировать, вам придется перемонтировать корневой раздел в режиме чтения и записи, выполнив следующую команду:

mount -o remount,rw /dev/mmcblk0p2 /

Теперь вы должны оказаться в командной строке root-оболочки, где вы можете свободно редактировать любой файл, включая неисправные файлы sudo.

решение3

Самое простое решение — загрузить другую ОС на LiveDVD или LiveUSB (в идеале LiveUSB, а в идеале — ОС Linux), затем смонтировать диск и вручную изменить файл. Я уже делал что-то подобное и исправил это таким образом. Все ваши файлы будут видны и доступны для редактирования из Live-системы. Если только вы не зашифровали диск; это немного усложняет ситуацию.

Если у вас возникнут вопросы, дайте мне знать, и я отредактирую этот ответ. Я не уверен, насколько вам будет удобно настраивать Live USB, но это не очень сложно.

Связанный контент