init FreeBSD

Краткое описание

init - последняя стадия процесса загрузки. init, как правило, автоматическую перезагрузку последовательности, описанной в rc(8), и если перезагрузка происходит успешно, выполняется вход в многопользовательские операции. В случае аварийного завершения сценария перезагрузки init запускает однопользовательскую среду - оболочку суперпользователя на консоли. init могут быть переданы параметры загрузки программы, чтобы уберечь систему во время загрузки в многопользовательском режиме и вместо одномользовательской оболочки, без старта обычно запускающихся при этом процессов-демонов. Затем система приостанавливается, позднее может перейти в многопользовательский режим в существующий однопользовательской оболочке (с ^D). В этом случае init запускает загрузочный файл /etc/rc в "быстром" режиме - пропускается проверка диска.

Если в файле ttys(5) ввод с консоли определен как "insecure", то init будет требовать, чтобы перед тем, как система будет загружена в однопользовательском режиме, был введен пароль суперпользователя. Если стоит "secure console", то проверка консоли будет пропущена.

Ядро запускается с 4-мя различными уровнями безопасности. Любой процесс суперпользователя может повышать уровень безопасности, но не может его снизить. Уровни бывают:

-1

Постоянный "небезопасный" режим - всегда запускает систему с уровнем 0. Значение по умолчанию.

0

Режим "insecure" (небезопасный): изменяемые или только добавляемые флаги могут быть выключены. Может быть разрешено чтение и запись для всех устройств.

1

Безопасный (secure) режим. Флаги "система неизменна" либо "только добавление" не могут быть выключены. не могут быть открыты для записи /dev/mem и /dev/kmem, диски для монтирования файловых ситем; модули ядра могут быть загруженными или незагруженными.

2

"highly secure" (уровень безопасности выше средного) то же, что и уровень 1, в дополнительно диски не могут быть открыты для записи (одидание mount) и либо смонтированы, либо нет. Этот уровень исключает порчу (или искажение) файлов путем размонтирования их, а также налагает запрет на запуск newfs(8)в то время как система находится в многопользовательском режиме. В дополнение к этому строго ограничено изменение времени ядра, менее чем эквивалентно 1 сек. Попытка изменить больше будет вызывать запись в журнал сообщения "Time adjustment clamped to +1 second"

3

"Ceтевой" безопасный режим - самый высокий. К уровню 2 добавляется неизменяемый пакетный IP-фильтр (см. ipfirewall и ipfw) и dummynet, конфигурация которого не может быть откорректирована.

Если уровень безопасности "не нуль", то init оставляет его неизменным. В противном случае init поднимает уровень до 1 первый раз перед переходом в многопользовательский режим. Поскольку уровень не может быть уменьшен, это будет по крайней мере 1 для последующей операции даже при возврате в однопользовательский режим.

Если уровень выше, чем 1, и желателен в то же время запуск в многополозовательском режиме, это может быть установлено в файле wtmp(5). B этом случае для цикла перезапуска используется новый getty.

init может быть также использован для сохранения произвольного запуска демонов и затем автоматического их перезапуска в случае их сбоя. В этом случае первое поле в файле tty(5) должно содержать ссылку на путь к конфигурационному файлу устройства и будет передано процессу-демону как окончательный аргумент его командной строки. Это аналогично средству, предлагаемому в AT&T System V UNIX /etc/unittab.

Строка статуса (on, off, secure, getty или window information) может быть изменена в файле tty(5) без перезагрузки путем отправки сигнала SIGNHUP в init командой "kill -HUP 1". При получении этого сигнала init читает файл tty(5) повторно. Когда строка в tty(5) выключена, init будет посылать сигнал SIGNHUP в управляющий процесс для сессии, которая ассоциирована с этой строкой. Для любых строк, которые были предварительно выключены в файле tty(5) и впоследствии включены, init выполнит команду, указанную во втором поле. Если команда или окно были изменены, то это изменение воздействует на завершающей стадии текущего сеанса входа в систему. Если строка закомментирована либо вообще удалена, из файла tty(5), то init не будет делать ничего. Однако он будет "жаловаться", что отношение между строками в файле tty(5) и записями записями в файле utmp(5) не синхронизировано, так что такая практика не рекомендуется.

init будет завершать многопользовательские операции и продолжать работу в однопользовательском режиме, если посланный сигнал "останов" (TERM), например, "kill -TERM 1". Если остаются незавершенные (по причине блокировки) процессы, то init не будет ожидать пока все процессы завершаться (этого может не случиться никогда), но сделает тайм-аут 30 секунд, при этом будут печататься предупреждающие сообщения.

init будет прекращать создание новых процессов и разрешать системе медленно "замирать", если посланный терминальный сегнал останова (TSTR), - "kill -TSTR 1". Позже будет продолжены полные многопользовательские процессы или выполнен останов и запуск однопользовательской оболочки. Этот обработчик прерываний используется командами reboot и halt.

init будет останавливать все возможные процессы (опять же, он не будет ждать для заблокированных процессов) и перезагружать компьютер в случае, если послан сигнал прерывания (interrupt signal, INT) - "kill -INT 1". Это полезно для завершения работы компьютера "чисто изнутри" ядра или из Х, когда компьютер зависает.

init будет делать то же самое, кроме того, он будет останавливать машину, если посылается определенный пользователем сигнал 1 (USR1) или будет останавливать и отключать питание (если такую возможность дает аппаратное обеспечение), если послан определенный пользователем сигнал 2 (USR2).

Когда происходит завершение работы системы, init будет требовать запустить скрипт /etc/rc.shutdown. Этот скрипт может быть использован для корректного завершения специальных программ, таких как сервер новосте indd.

6

перезагрузка компьютера

с

заблокировать дальнейшие логины

q

пересканировать файл tty(5)

Диагностика

getty repeating too quickly on port %s, sleeping Процесс, будуче запущенным, быстро завершается каждый раз после запуска. Это часто вызывает "писк" - звуковой сигнал. init будет "спать" - бездействовать в течение 30 секунд, а затем продолжает попытки запустить процесс.

some processes would not die; ps axl advised. Процесс завис, его нельзя снять, если система закрыта. Это состояние обычно вызывается процессом, который помещен в драйвер устройства из-за того, что устройство находится в сoстоянии ошибки.

Дополнение

Системы без sysctl ведут себя как на уровне 1.

Слишком ранняя установка уровня безопасности 1 в процессе загрузки может предохранить fsck от "ремонта" несогласованных файловых систем. Предпочтительно устанавливать уровень безопасности в конце файла /etc/rc после завершения всех действий по запуску многопользовательского режима.

Файлы

/dev/console

устройство системная консоль

/dev/tty*

терминальные порты, найденные в файле tty(5)

/var/run/utmp

записи текущих пользователей системы

/var/log/wtmp

записи всех входов и выходов

/etc/ttys

информационный файл инициализации терминала

/etc/rc

команды запуска системы

/etc/rc.shutdown

команды завершения работы системы

Обновлено: 12.03.2015