Почему Linux позволяет ‘init =/bin/bash’?

Да; это, вероятно, будет проигнорировано большинством разработчиков ядра. Если проблемой является reproduceable, удалите модуль, который заставляет ядро быть испорченным и видеть, получаете ли Вы все еще панику ядра. Если Вы сделаете, то Вы, более вероятно, получите интерес от людей. Если Вы не делаете, свяжитесь со специалистом по обслуживанию того модуля и дайте ему релевантную информацию. Если трудно воспроизвести, также просто свяжитесь со специалистом по обслуживанию модуля.

Для обнаружения, кто работал над тем модулем можно посмотреть на историю фиксации.

51
04.02.2014, 19:02
6 ответов

Это - функция и используется для системы maintainance: это позволяет системному администратору восстанавливать систему со смешанных файлов инициализации или изменять забытый пароль.

Это сообщение в списке рассылки Red Hat объясняет некоторые вещи:

В подобных Unix системах init является первым процессом, который будет выполнен, и окончательный предок всех процессов, когда-либо выполненных. Это ответственно за запущение всех init скриптов.

Вы говорите ядру Linux выполнять/bin/bash как init, а не система init. [...]

Таким образом Вы ничего не используете, Вы просто используете стандартную функцию ядра.

Кроме того, как отмечено в комментарии, rw флаг является отдельным от init=, это просто говорит системе монтировать корневую файловую систему как чтение-запись (таким образом, Вы можете, например, редактировать неправильно сконфигурированный файл или изменять пароль).

44
27.01.2020, 19:33
  • 1
    Кроме того, rw является абсолютно отдельным от init=. Первый просто говорит ядру монтировать корневое чтение-запись файловой системы. –  Alexios 18.03.2012, 22:20

Ваша система имеет механизмы для выполнения и отладки (как init параметр), и это, вероятно, имеет механизмы защиты, чтобы мешать нежелательным пользователям использовать в своих интересах их. Это функции, не ошибки.

Загрузчик ответственен за запуск ОС. Защита ОС, очевидно, не применяется в той точке. Вы могли просто загрузить другое ядро, initrd, корневая фс или установить различные варианты (как путь init). Если Вы хотите мешать пользователям делать это, это должно быть сделано в загрузчике.

Ваша система (вероятно, ПК, таким образом, BIOS) загружает загрузчик и так, очевидно, безопасность загрузчика, не относится к нему. Если Вы хотите мешать пользователям заставить BIOS загрузиться от USB или такого, необходимо сделать это на том уровне.

Ваша система может быть на столе где-нибудь. Если Вы хотите мешать пользователям открыть coputer и переключить HDD для одного собственного или удалить диск смонтировать его в их машинах, необходимо сделать это на физическом уровне. И это не будет мешать им взять целый стол и уехать в их фургоне отпуска...

Это - способ, которым безопасность. Слоны полностью вниз.

19
27.01.2020, 19:33
  • 1
    Хорошая сводка. Мог бы хотеть добавить шифрование HDD к этому, как возможный ответ против фургона. –  MvG 02.08.2013, 23:56

Когда запуски компьютера, это запускает программу, названную "init", обычно находимым в /bin/init или /sbin/init. Эта программа ответственна за весь системный запуск и создание применимой среды.

Определение init=/bin/bash говорит ядру работать /bin/bash вместо этого (который является оболочкой). Определение rw говорит ядру загружаться с жестким диском в режиме чтения-записи вместо режима только для чтения. Традиционно ядро запускается с диска в режиме только для чтения, и процесс позже проверяет целостность диска прежде, чем переключиться на чтение-запись.

11
27.01.2020, 19:33

Соединенный из kernel.org:

KNL     Is a kernel start-up parameter.

init=   [KNL]
        Format: <full_path>
        Run specified binary instead of /sbin/init as init
        process.

rw      [KNL] Mount root device read-write on boot
6
27.01.2020, 19:33

Это - функция от ядра: это позволяет его “вызывающей стороне”, т.е. загрузчику, большой гибкости. Личинка предоставляет Вам средства использовать эту гибкость при начальной загрузке, но это также предоставляет Вам средства ограничить этот вид вмешательства. Это имеет конкретный смысл в тех случаях, где неавторизованные пользователи могут овладеть процессом начальной загрузки, но иначе запрещены доступа к самому жесткому диску.

1
27.01.2020, 19:33

init=может принимать любой исполняемый файл

init=может принимать любой исполняемый файл, включая сценарии оболочки .

Здесь, например, я демонстрирую, как создать произвольный минимальный скомпилированный Cinit:Как создать собственный дистрибутив Linux, который запускает только одну программу и больше ничего?

Так почему бы ему не не принять /bin/bash, из всех вещей, который является просто обычным исполняемым файлом и может быть действительно полезен?:-)

Затем вам также следует попытаться понять, каковы будут компромиссы -с вашими обычными init, такими как systemd или Busybox,

В основном, с необработанным /bin/bash, вы:

Управление заданием может быть восстановлено при инициализации Busybox и других подобных инициализациях с начальным -вinittab:

tty3::respawn:-/bin/sh

Более обычные inittabзаписи, которые используют вход в систему и продолжают создавать оболочки, если вы нажимаете Ctrl+D,:

::respawn:/sbin/getty -L ttyS0 0 vt100

, которые используют исполняемый файл getty, но TODO :Я не смог создать их сам без запуска Busyboxinit:getty из командной строки?

Вы можете использовать эту настройку , чтобы поэкспериментировать с ней и прийти к указанным выше выводам.

5
27.01.2020, 19:33

Теги

Похожие вопросы