После двух дней исследований и просмотра веб-страниц я, наконец, нашел решение и смог сохранить свою собственную систему 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
-com и загрузиться в однопользовательском режиме. Обратите внимание, что когда вы делаете это, вам нужно использовать sudo, так что, очевидно, это не решение проблемы, когда sudo нарушено, но я указываю на это, потому что, возможно, именно поэтому некоторые люди добились успеха в исправлении своих Pi при применении решений, предлагающих pkexec
-командный или однопользовательский режим. Эти люди в какой-то момент ушли и вручную установили пароль root, разблокировав корневую учетную запись своей системы.
Решение
В этом блоге объясняется, как делать то, что нам нужно. Шаги практически идентичны шагам, которые мы предприняли при попытке восстановить sudo в однопользовательском режиме. Вам не нужно делать все громоздкие вещи, о которых упоминается в блоге, чтобы редактировать cmdline.txt
, вместо этого просто делайте это в диалоговом окне NOOBS. Ключ заключается в добавлении init=/bin/sh
в конец cmdline.txt
. После добавления этого фрагмента при следующей загрузке Pi вы попадете в приглашение командной оболочки root.
Первоначально файловая система будет загружена в режиме только для чтения, поэтому, прежде чем иметь возможность что-либо редактировать, вам придется перемонтировать корневой раздел в режиме чтения и записи, выполнив следующую команду:
mount -o remount,rw /dev/mmcblk0p2 /
Теперь вы должны быть в приглашении root-оболочки, где вы можете свободно редактировать любой файл, включая испорченные файлы sudo.