Содержание
Итак, в ряде случаев при попытке войти под пользователем root нас радует вот такая картинка:
Помню, как холодный пот прошиб, когда увидел это на основном межсетевом экране и точно знал, что я не опечатался в написании пароля.
Причины
Причин такого явления несколько:
- Вас взломали. Достаточно частое явление, на самом деле, которое фактически означает полную компрометацию системы и требует принятия незамедлительных мер реагирования.
- Всё-таки банальная опечатка. Учитывая, что Linux-образные системы не отображают вводимые символы даже с маской, мы зачастую не представляем, что вводим на самом деле. Два примера из практики – одна из клавиатур вдруг перестала пропечатывать цифру “6” на основной части. В другом случае – Bluetooth-клавиатура заглючила и ддублирррррроваала некоторые символы просто бешенно. Разумеется, я не смог войти в систему, пока не разобрался с аппаратной частью.
- Пароль забыл/утрачен. Сменён легитимно (вчера отмечали день сисадмина, меняли пароли, наутро всё забыли).
Что делать
Действия в случае компрометации системы заслуживают отдельной статьи. А действия в случае сбоя клавиатуры решаются банальной заменой. Как быть, если нужно восстановить контроль над системой и сбить пароль root на свой?
С использованием монопольного доступа (single-mode)
- Если у вас не стоит пароль на загрузчик (или хотябы он вам известен), то после перезагрузки идём в меню загрузчика:Руководствуемся текстовыми подсказками внизу экрана.
- Нажимаем “e” на клавиатуре на выбранной записи загрузчика (последняя версия ядра у меня сверху).
- В появившемся редакторе загрузочной записи ищем загрузку ядра (строка, начинающаяся с kernel) и нажимаем “e” на этой строке.
- Дописываем в конец строки “single” либо “1” и нажимаем Enter для применения изменений. Отобразится предыдущее меню, в котором жмякаем “b” для загрузки этой загрузочной записи и…
- Загрузится ОС и сразу провалится в оболочку под uid=0 без требования ввести пароль root. Этим и воспользуемся, убедимся, что корневой раздел подмонтирован в режиме записи, сменим пароль root и перезагрузимся:
# mount
# passwd root
# reboot
- Более современные версии ОС выглядят немного пугающе, если залезть внутрь загрузочной записи. Вот пример с Kali Linux и Grub2:
Бояться не стоит. Ищем строку с ядром (начинается с linux) и находим там параметр quiet, стираем и вместо него пишем “init=/bin/bash” – после инициализации ядра запустится командный интерпретатор bash. Ну а дальше – аналогично:
Убедимся, что файловая система подмонтирована в режиме “rw” – здесь это не так, о чём свидетельствует флаг “ro” под первой стрелкой. Перемонтируем её с флагами “rw” и убеждаемся, что всё успешно (вторая стрелка). Ну а дальше – просто переустанавливаем пароль. Файловую систему делать в rw обязательно, т.к. в режиме только чтения (ro) она не позволит модифицировать файл /etc/shadow, в котором у нас находится хеш пароля. - И ещё вариант для совсем безбашенных. Действуем аналогично и редактируем файл /etc/shadow напрямую (стираем оттуда хеш пароля полностью). Тогда можно будет войти под данным пользователем без ввода пароля.
С использованием загрузочного диска
Эта задача как правило чуть более творческая. В качестве загрузочных Linux-дистрибутивов можно использовать что угодно, Live-версии есть почти у всех популярных ОС: Kali, Ubuntu, Debian, так и у специализированных (которые я и рекомендую – Deft Zero, CAINE…).
Покажу на примере Deft, чтобы не быть голословным.
# mkdir /mnt/remote
Создали каталог, куда будем монтировать файловую систему целевой ОС.
# hdparm -r 0 /dev/sda
Т.к. в Deft все устройства монтируются в режим “только чтение”, нужно отключить этот режим для целевого дискового устройства, иначе ничего поменять не получится.
# modprobe dm-mod
Загружаем модуль ядра, отвечающий за работу с LVM (у меня сложный случай – корневой раздел в LVM), если б этого не было – многих шагов можно было избежать. Подробнее про работу с LVM я писал здесь (очень рекомендую).
# vgscan
Сканирование устройств на предмет созданных виртуальных групп томов. Обнаружена группа “vg_vpnsrv”, запомним это название.
# vgchange -ay vg_vpnsrv
Подключаем выбранную группу
# lvs
Определяем наименования разделов внутри виртуальной группы
# mount /dev/vg_vpnsrv/lv_root /mnt/remote -o rw
Монтируем корневой раздел в наш каталог в режиме записи.
Ну а дальше действуем, например, согласно п.7 предыдущего раздела.
Comments: