
Это касается моего 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, но это не очень сложно.