Брандмауэры и специальное программное обеспечение 8 Часть 4

Вид материалаРеферат

Содержание


Структура inittab
inittab от начала и до конца
Подобный материал:
1   ...   24   25   26   27   28   29   30   31   ...   101

Структура inittab


Строки файла inittab, начинающиеся с символа #, являются комментариями и потому командой init не обрабатываются. Очевидно, они предназначены для пользователей системы и помогают понять логику работы файла. Остальные строки имеют обычную для конфигурационных таблиц структуру в виде набора полей, разделенных двоеточием. Поля эти, если перечислять их слева направо, следующие:

- id (идентификатор). Первое поле содержит уникальный идентификатор строки, состоящий из алфавитно-цифровых символов. Максимально допустимая длина идентификатора равна четырем, но на практике, как правило, используются двухсимвольные идентификаторы. В старых системах длина этого поля не могла превышать двух, и большинство комплектов Linux (все, которые я знаю), еще не отошли от этого ограничения;

- runlevel (уровень выполнения). Во втором поле содержится уровень выполнения, на котором следует выполнять эту строку. Если конкретный уровень не указан, строка выполняется на всех уровнях. Примером такой строки с пустым полем уровня выполнения является строка 60 в листинге 7.1;

- action (действие). Значением этого поля является одно из предопределенных ключевых слов. Чаще всего это respawn, но также допустимы и boot, bootwait, ctrlaltdel, initdefault, kbrequest, off, once, ondemand, powerfail, powerokwait, powerwait и sysinit;

- process (процесс). Процесс или программа для выполнения.

Каждой строке файла inittab ставится в соответствие уникальный идентификатор. Выбирать его принято так, чтобы он легко ассоциировался с выполняемым действием. Например, для строки, порождающей getty применительно к первому последовательному порту, подойдет идентификатор s1.

По умолчанию уровни выполнения обозначаются цифрами от 0 до 6 и буквами от А до С (или от а до с). Уровни выполнения 0,1 и 6 являются специальными, и без особой надобности их изменять не следует. Уровень 0 соответствует останову системы, уровень 1 — однопользовательскому режиму, уровень 6 — перезагрузке, поэтому изменение любого из этих уровней может иметь далеко идущие последствия. Остальные уровни, то есть уровни 2-5, можно настраивать совершенно свободно.


ПРИМЕЧАНИЕ

Традиционно для передачи команд init используется telinit, однако можно вызывать init и напрямую. В OpenLinux файл telinit является не отдельной программой, а символической ссылкой, указывающей на init. В других комплектах Linux для этой цели может использоваться жесткая ссылка. Так или иначе, в конечном итоге все равно вызывается init.

В некоторых комплектах Linux имеется команда runlevel (которая, как правило, устанавливается в каталоге /sbin), отображающая номера предыдущего и текущего уровней выполнения. Если предыдущий уровень выполнения отсутствует, как это бывает после перезагрузки, то вместо него выводится буква N, например N 3. Если затем перевести систему в состояние 2 и снова выполнить команду runlevel, то команда отобразит комбинацию чисел 3 2. Кроме того, текущий уровень выполнения отображается как аргумент команды init в листинге информации о процессах (ps ax).

Уровни выполнения всегда обозначаются числами, но программе init в качестве уровня исполнения можно передавать и символьные аргументы. Аргумент Q обсуждается в следующем абзаце. Символы А, В и С (или а, b, с, что функционально одно и то же) используются только с действием ondemand, которое, в свою очередь, используется только с уровнями выполнения А-С. Данное действие позволяет суперпользователю (только суперпользователь может вызывать inittab) порождать процессы по своему усмотрению.

Аргумент Q (можно использовать нижний регистр — q, — это одно и то же) предписывает init заново прочесть конфигурационный файл inittab. Менять inittab можно когда угодно и сколько угодно раз, но заново считывается он лишь в следующих случаях:

- завершение процесса, порожденного init (порождать еще один?);

- получение сигнала о сбое питания (от демона или из командной строки);

- переход с одного уровня выполнения на другой;

- обращение к init с аргументом Q или q.

inittab от начала и до конца


В этом разделе мы пройдемся по строкам листинга 7.1. Ранее мы ознакомились с форматом файла inittab, теперь же рассмотрим, как он работает на практике.

Строки 1-24 являются комментариями, поэтому мы их пропустим и начнем сразу со строки 24. Обычно такая строка выполнялась бы только на уровне выполнения 5. Но в данной записи указано действие initdefault, означающее, что данный уровень выполнения следует сделать уровнем выполнения по умолчанию (этот уровень будет использоваться в случае, если программа init запущена без указания требуемого уровня в командной строке). В OpenLinux (и некоторых других комплектах Linux) уровню 5 ставится в соответствие графический вход в систему, поэтому если вы не желаете, чтобы при загрузке системы подключение к ней осуществлялось в графическом режиме, измените уровень выполнения по умолчанию на 3. Это замечание справедливо также для комплекта Red Hat, однако в Debian уровень выполнения по умолчанию равен 2, а тип входа в систему (графический/обычный) зависит не от уровня выполнения, а от того, запускается или нет сценарий xdm.


ПРИМЕЧАНИЕ

В данном случае рассматривается система Caldera OpenLinux, откуда и взят рассматриваемый здесь файл inittab, поэтому если вы используете другой комплект Linux или другую версию OpenLinux, то ваш файл inittab, скорее всего, будет отличаться от рассматриваемого здесь. Однако основные концепции в любом случае будут одинаковы.

После строки установки уровня выполнения по умолчанию следуют строки (27-30), в которых осуществляется запуск сценариев инициализации системы. Как явствует из их названий, эти сценарии загружают модули, инициализируют последовательные порты и выполняют прочие действия, которые необходимо выполнить в процессе загрузки системы. В строке 30 указано действие bootwait, поэтому на ней программа init приостановится и будет ждать, пока не завершится выполнение указанного в ней сценария. Все четыре строки (27-30) будут выполняться одновременно, однако до завершения процесса из строки 30 init не будет запускать никаких других процессов. Это позволяет завершить все подготовительные действия, необходимые для перехода к следующему этапу: запуску демонов и порождению getty.

Строки 33 и 34 вызывают два сценария, выполняющихся при переходе системы в состояние 1, иначе говоря, в однопользовательский режим. Программа sulogin нужна для того, чтобы пользователь, обладающий возможностью физического доступа к системе, не смог получить привилегии суперпользователя без знания соответствующего пароля. В противном случае любой желающий смог бы получить полную власть над системой, просто перезагрузив ее в однопользовательском режиме. Без этой строки система, загрузившись в однопользовательском режиме, не станет запрашивать пароль у пользователя, а сразу же предоставит ему доступ к командной оболочке с привилегиями суперпользователя. Однако при наличии физического доступа к системе защиту с использованием программы sulogin можно обойти, о чем подробней рассказывается в следующей главе.

Строки с 36 по 42 выполняются при смене уровней выполнения. Каждая такая строка представляет собой вызов сценария с именем rс и номером уровня, на который переходит система, в качестве аргумента. Так, при переходе с уровня 5 на уровень 3 будет выполнена строка 39, которая вызовет rс с аргументом 3.

Строка 44 выводит запрос на ввод пароля суперпользователя. Данная строка является мерой предосторожности на случай, если после перехода на уровень выполнения 6 система не перезагрузится должным образом.

Строка 47 перехватывает комбинацию клавиш Ctrl+Alt+Del, осуществляя по ней перезагрузку системы. При желании вместо перезагрузки можно получить останов системы, для чего в этой строке нужно заменить -r на -h. Или же можно просто убрать -r, и тогда по нажатию этих клавиш система будет переходить в однопользовательский режим, предоставляющий доступ к командной оболочке с правами суперпользователя.

Строка 50 перехватывает комбинацию клавиш Alt+T. На данный момент никаких осмысленных действий по ней не делается, а лишь выводится сообщение о том, что ее нужно настраивать самостоятельно. При установке OpenLinux по умолчанию, то есть с использованием bash, данная последовательность команд игнорируется (это также относится и к большинству других дистрибутивов, в которых bash является оболочкой по умолчанию). Поэтому сначала нужно изменить настройку соответствия клавиш таким образом, чтобы bash передавал эту комбинацию, не интерпретируя ее, после чего можно заменять ту часть строки, где стоит echo, на удобную для вас команду.

Строки 56, 59, 60 и 63 представляют интерес лишь для тех, у кого есть источник бесперебойного питания, совместимый с демоном питания powerd. Демон питания может наблюдать за состоянием последовательно порта и в случае возникновения тех или иных событий, связанных с питанием, этот демон способен выполнять действия, указанные в файле inittab. В комплект поставки OpenLinux демон питания не входит. Проблема в том, что в настоящее время лишь очень немногие источники бесперебойного питания работают с демоном, независимо от того, какой у вас комплект Linux.

Строки с 67 по 72 порождают процессы getty для виртуальных терминалов. Обратите внимание, что в однопользовательском режиме доступен лишь один виртуальный терминал. Если хочется иметь побольше свободной памяти, то можно уменьшить число виртуальных терминалов на уровне выполнения 5. Например, до одного: в графическом режиме они особенно и не нужны, поэтому одного будет вполне достаточно. Для увеличения числа виртуальных терминалов нужно просто добавить дополнительные строки к уже существующим (с уникальными идентификаторами, разумеется).

В строках 50, 56, 59 и 60 поле уровня выполнения содержит пустую строку. Это означает, что данные строки выполняются на любом уровне.

Наконец, в последней строке с номером 75 на уровне выполнения 5 порождается процесс kdm (KDE Display Manager). В комплекте Red Hat вместо kdm может использоваться xdm или gdm. В Debian всегда используется уровень выполнения 2, a xdm запускается не через inittab, а точно так же, как и все остальные серверы.


ПРИМЕЧАНИЕ

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