Как исправить неверный файл /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
Я нашел похожие посты как в Ubuntu, так и в StackOverflow, но проблема в том, что для всех ответов требуется пароль root, а учетная запись root отключена по умолчанию на Raspbmc, и я, очевидно, не включал его до попытки изменить /etc/sudoers
,
Итак, мой вопрос: как мне исправить файл, если у меня не включен root-доступ? Это вообще возможно?
3 ответа
Вы по-прежнему сможете загружать Pi в однопользовательском режиме, чтобы получить доступ к root.
Используя другой компьютер, измените cmdline.txt
и добавить single
до конца строки
Затем, когда вы загрузите Pi с SD-карты, он автоматически выведет вас в корневую строку, которая позволит вам обновить /etc/sudoers
После двух дней исследований и просмотра веб-страниц я наконец нашел решение и смог сохранить свою собственную систему Raspberry Pi (без необходимости переформатировать SD-карту и начинать с нуля)!
ПРИМЕЧАНИЕ. Этот ответ довольно длинный. Если вы хотите быстро найти реальное решение, я добавил заголовок, к которому вы можете прокрутить вниз. Тем не менее, я рекомендую вам прочитать весь ответ, поскольку он может дать некоторое представление о различиях между дистрибутивом Raspbian и другими дистрибутивами Linux, а также понять, почему многие из предлагаемых решений, которые вы найдете в Интернете, могут не работать на вашем Pi,
Так что обычно в среде Linux самый быстрый способ восстановить поврежденный sudo без перезагрузки - это с помощью PolicyKit или pkexec
-команда как это:
pkexec visudo
Но на Pi он, скорее всего, не будет работать, он будет запрашивать пароль root, но пароль не принимается. (Я имею в виду, вы даже помните, как установить пароль root? Подождите, вы делаете? Затем перейдите к звездочке *.)
Некоторые дистрибутивы Linux, например Ubuntu, поставляются с режимом восстановления, доступ к которому можно получить, удерживая нажатой клавишу Shift во время загрузки, и предлагает удобный интерфейс и позволяет перетаскивать его в окно командной оболочки, где можно получить доступ к исправить сломанные файлы. Дистрибутив Pi Raspbian Linux не имеет такого режима восстановления, поэтому решение для нас не является решением. Тем не менее, Pi при загрузке предлагает вам удерживать нажатой клавишу Shift, чтобы войти в какой-то режим восстановления, и, войдя в режим восстановления Pi или в диалоговое окно NOOBS, мы, безусловно, находимся на правильном пути восстановления поврежденного sudo на нашем Pi.
Другим распространенным способом восстановления sudo является загрузка в однопользовательском режиме, которая приводит вас к приглашению корневой оболочки. То, как вы делаете это, добавляя слово single
до конца cmdline.txt
-файл в загрузочном разделе системы. В следующий раз, когда ваша система загрузится, она загрузится в однопользовательском режиме.
Мы можем легко попробовать это решение на нашем Pi, потому что, удобно, режим восстановления Pi или диалоговое окно NOOBS позволяет нам редактировать cmdline.txt
-файл. В режиме восстановления или в диалоговом окне NOOBS, нажав кнопку "Редактировать конфигурацию", вы открываете редактор, который позволяет редактировать два файла, один из которых cmdline.txt
, При нажатии "ОК" в редакторе ваши изменения сохраняются.
К сожалению, когда вы загружаетесь в однопользовательский режим или "режим восстановления" на Pi, вы, скорее всего, получите следующее сообщение:
Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.
Press Enter to continue.
Это так же, как и то, почему ранее упомянутое приглашение корневого пароля не принимало никаких паролей, объясняется тем, что в Raspbian по умолчанию не задан пароль для учетной записи root. Это не должно быть перепутано с паролем, который является ничем или что пароль не требовался бы. Raspbian, как и несколько других дистрибутивов Linux (например, Debian, производный от Raspbian), ожидает, что пользователь будет работать как root с помощью sudo, а не через саму учетную запись. Следовательно, корневая учетная запись находится в состоянии блокировки, которое мы испытываем.
* Если вы устанавливаете пароль root, например, с помощью команды sudo passwd root
тогда вы сможете использовать pkexec
-команда и загрузиться в однопользовательском режиме. Обратите внимание, что когда вы делаете это, вам нужно использовать sudo, так что это, очевидно, не является решением, когда sudo нарушен, но я отмечаю это, потому что, возможно, именно поэтому некоторые люди добились успеха в исправлении своих Pi при применении решений, предлагающих pkexec
-командный или однопользовательский режим. Эти люди в какой-то момент ушли и вручную установили пароль root, разблокировав корневую учетную запись своей системы.
Решение
В этом блоге объясняется, как делать то, что нам нужно. Шаги практически идентичны шагам, которые мы предприняли при попытке восстановить sudo в однопользовательском режиме. Вам не нужно делать все громоздкие вещи, о которых упоминается в блоге, чтобы редактировать cmdline.txt
-файл, вместо этого просто сделайте это в диалоге NOOBS. Ключ должен добавить init=/bin/sh
до конца cmdline.txt
-файл. После добавления этого фрагмента при следующей загрузке Pi вы попадете в приглашение командной оболочки root.
Первоначально файловая система будет загружена в режиме только для чтения, поэтому, прежде чем иметь возможность что-либо редактировать, вам потребуется перемонтировать корневой раздел в режиме чтения и записи, выполнив следующую команду:
mount -o remount,rw /dev/mmcblk0p2 /
Теперь вы должны быть в приглашении root-оболочки, где вы можете свободно редактировать любой файл, включая испорченные файлы sudo.
Самое простое решение - это загрузить другую ОС на LiveDVD или LiveUSB (в идеале LiveUSB и в идеале ОС Linux), затем смонтировать диск и вручную изменить файл. Я делал подобные вещи раньше и исправлял это таким образом. Все ваши файлы будут видны и доступны для редактирования из системы Live. Если вы не зашифровали диск; это делает вещи немного сложнее.
Дайте мне знать, если у вас есть вопросы, и я отредактирую этот ответ - я не уверен, насколько вам удобно с настройкой живого USB, но это не очень сложно.