💡 Полезные Советы

Как сбросить пароль Raspberry Pi оффлайн (через редактирование shadow)

09.02.26
6

С моей Raspberry Pi 5 всё не так, при добавлении init=/bin/sh в cmdline.txt на Raspberry Pi появляется чёрный экран и кулер работает на максимуме, явный симптом зависания и проблема глубже на уровне железа. Поэтому я заказал UART провод, скоро подключимся по COM порту с помощью PuTTy и посмотрим, какие проблемы при старте системы. 

Раз init=/bin/sh ведёт себя нестабильно, можно сбросить пароль оффлайн, изменив shadow на карте памяти. Если у вас Windows, используйте виртуальную машину (VirtualBox/VMware) с любым Live-образом Linux (Ubuntu/Debian).

Шаг 1: Подготовка VirtualBox (если у вас Windows).
Проброс USB-картридера в виртуальную машину часто вызывает трудности, так как Windows "захватывает" устройство первой.

  1. Установите VirtualBox Extension Pack (обязательно для работы USB 2.0/3.0).
  2. Вставьте картридер с флешкой в ПК.
  3. В настройках машины: USB -> Поставьте галочку Включить контроллер USB -> Нажмите иконку с плюсом ("Добавить фильтр") -> Выберите ваш картридер (например, Generic Mass Storage).
  4. Важно: Теперь извлеките картридер из ПК. Запустите виртуальную машину.
  5. Когда Linux загрузится, вставьте картридер обратно в порт. Благодаря фильтру он сразу "пробросится" внутрь виртуальной машины.

Шаг 2: Монтирование файловой системы (выполняйте только если карта не смонтировалась автоматически - см. Бонус внизу)

  1. Узнайте имя вашего диска:
    1. lsblk
    2. Обычно карта памяти видна как sdb или mmcblk0. На ней будет два раздела:
      1. маленький bootfs (FAT32)
      2. большой rootfs (EXT4) - он нам и нужен.
  2. Смонтируйте раздел с системой (замените sdb2 на ваш раздел):

    sudo mkdir -p /mnt/rpi
    sudo mount /dev/sdb2 /mnt/rpi
    

Шаг 3: Удаление пароля

Нам нужно отредактировать файл /etc/shadow, где хранятся хеши паролей.

  1. Сделайте резервную копию на всякий случай:

    sudo cp /mnt/rpi/etc/shadow /mnt/rpi/etc/shadow.bak
  2. Откройте файл в редакторе:

    sudo nano /mnt/rpi/etc/shadow
    
  3. Найдите строку с вашим пользователем (обычно pi, root или ваш логин). Она выглядит примерно так:

    user:$6$kH...поток_символов...:19000:0:99999:7:::
  4. Что делать: Удалите всё, что находится между первым и вторым двоеточием.
    1. Было: user:$6$aBcDeF...:12345:...
    2. Стало: user::12345:...
    3. Примечание: Двоеточия должны остаться, между ними должно быть пусто. Это означает "пароль не задан".
  5. Сохраните файл: Ctrl+O -> Enter -> Ctrl+X.

Шаг 4: Завершение

  1. Размонтируйте диск перед извлечением, чтобы не повредить файловую систему:

    sudo umount /mnt/rpi
  2. Вставьте карту обратно в Raspberry Pi и включите его.
  3. Система пустит вас без пароля (или попросит логин - введите имя пользователя и нажмите Enter).
  4. Сразу же задайте новый пароль:
  5. passwd

Бонус: если раздел уже смонтирован (пример с /run/media/...) [Как у меня]

Во многих десктоп‑дистрибутивах (KDE, GNOME, XFCE) флешки и SD‑карты автоматически монтируются файловым менеджером в /run/media/ИМЯ_ПОЛЬЗОВАТЕЛЯ/МЕТКА_НОСИТЕЛЯ.

Это значит, что вам может не понадобиться вручную монтировать раздел в /mnt - достаточно сразу отредактировать файл по уже существующему пути.


Например, если система смонтировала root‑раздел Raspberry Pi как /run/media/merion/rootfs, достаточно выполнить:

sudo nano /run/media/merion(ваше имя пользователя)/rootfs/etc/shadow

Дальнейшие действия те же: найти нужного пользователя и очистить поле с хешем пароля между первым и вторым двоеточием, сохранить файл и корректно размонтировать устройство.

Чем отличается /mnt от /run/media ?

/mnt - исторически "универсальная" точка для ручного временного монтирования, куда админ сам монтирует нужный раздел командой mount.

/media и /run/media - стандартные места для автоматического монтирования съёмных носителей (флешки, SD‑карты и т.п.) через udisks/desktop‑окружение, обычно подподкаталог /run/media/ПОЛЬЗОВАТЕЛЬ/….