Недавно я обнаружил, что если я редактирую GRUB перед загрузкой и добавляю, rw init=/bin/bash
я получаю корневую оболочку.
Находясь в состоянии, когда я хочу понять все, я хотел бы знать, почему это происходит. Я имею в виду, это ошибка? это особенность? это поможет администраторам исправить положение вещей, поскольку оно работает только при наличии физического доступа к компьютеру?
Это предусмотрено GRUB или реальным ядром?
Ответы:
Это функция, которая используется для обслуживания системы: она позволяет сисадмину восстанавливать систему из испорченных файлов инициализации или менять забытый пароль.
Этот пост в списке рассылки Red Hat объясняет некоторые вещи:
Таким образом, вы ничего не используете, вы просто используете стандартную функцию ядра.
Кроме того, как отмечено в комментарии, этот
rw
флаг отделен от негоinit=
, он просто указывает системе монтировать корневую файловую систему в режиме «чтение-запись» (например, вы можете отредактировать неверно сконфигурированный файл или изменить пароль).источник
rw
полностью отделен отinit=
. Первый просто говорит ядру смонтировать корневую файловую систему для чтения-записи.Ваша система имеет механизмы для запуска и отладки (например, параметр init) и, вероятно, имеет механизмы безопасности, которые не позволяют нежелательным пользователям воспользоваться ими. Это особенности, а не ошибки.
Загрузчик отвечает за запуск ОС. Безопасность ОС явно не применяется в этот момент. Вы можете просто загрузить другое ядро, initrd, root fs или установить другие параметры (например, путь инициализации). Если вы хотите, чтобы пользователи не делали этого, это должно быть сделано в загрузчике.
Ваша система (вероятно, ПК, поэтому BIOS) загружает загрузчик, и, очевидно, безопасность загрузчика не распространяется на него. Если вы хотите помешать пользователям загружать биос с USB или тому подобное, вам нужно сделать это на этом уровне.
Ваша система может быть где-то на столе. Если вы хотите, чтобы пользователи не открывали компьютер и не переключали жесткий диск на свой собственный или не извлекали диск для установки его на своих машинах, вам нужно сделать это на физическом уровне. И это не помешает им взять весь стол и уехать на своем фургоне ...
Такова безопасность. Слоны все время вниз.
источник
Когда компьютер запускается, он запускает программу с именем «init», обычно находящуюся в
/bin/init
или/sbin/init
. Эта программа отвечает за весь запуск системы и создание удобной среды.Указание
init=/bin/bash
указывает ядру работать/bin/bash
вместо него (который является оболочкой). Указаниеrw
указывает ядру загружаться с жесткого диска в режиме чтения-записи вместо режима только для чтения. Традиционно ядро запускается с диска в режиме «только чтение», а затем процесс проверяет целостность диска перед переключением на чтение и запись.источник
Собранный вместе с kernel.org :
источник
Это особенность ядра: она позволяет своему «вызывающему», то есть загрузчику, большую гибкость. Grub предоставляет вам средства, позволяющие использовать эту гибкость при загрузке, но также предоставляет вам средства для ограничения этого вида вмешательства . Это имеет особый смысл в тех случаях, когда неавторизованные пользователи могут получить доступ к процессу загрузки, но в противном случае им отказано в доступе к самому жесткому диску.
источник
init=
может взять любой исполняемый файлinit=
может взять любой исполняемый файл, включая сценарии оболочки .Вот, например, я демонстрирую, как создать произвольный минимальный скомпилированный Си
init
: Как создать пользовательский дистрибутив Linux, который запускает только одну программу и ничего больше?Так почему бы не принять
/bin/bash
все вещи, которые являются обычным исполняемым файлом и могут быть полезны? :-)Далее, вы также должны попытаться понять, какие компромиссы будут с вашей обычной,
init
такой как systemd или Busybox 'В основном, с сырой
/bin/bash
, вы:init
существуютУправление заданиями может быть восстановлено в Busybox 'init и других подобных устройствах с лидирующим
-
вinittab
:Более обычные
inittab
записи, которые используют логин и продолжают порождать оболочки при нажатии Ctrl + D:которые используют
getty
исполняемый файл, но TODO: я сам не смог их создать без Busyboxinit
: getty start из командной строки?Вы можете использовать эту настройку, чтобы поэкспериментировать с ней и прийти к вышеуказанным выводам.
источник