Запуск в многопользовательском режиме


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

Как только FreeBSD завершает поиск аппаратных устройств и подключение соответствующих драйверов, она запускает сценарий  командного интерпретатора /etc/rc. Этот сценарий монтирует все файловые системы, запускает сетевые интерфейсы, настраивает устройства, идентифицирует доступные разделяемые библиотеки и производит все остальные действия, необходимые для подготовки системы к работе в нормальном режиме. Различные системы на запуске предъявляют различные требования. Несмотря на то, что практически любой сервер должен смонтировать жесткий диск, тем не менее требования, которые предъявляет веб-сервер, существенно отличаются от требований, которые предъявляет сервер баз данных, даже если они работают в  совершенно идентичном аппаратном окружении. Это означает, что файл /etc/rc должен быть максимально гибким. Достигается это за счет передачи некоторых полномочий другим сценариям командного  интерпретатора, ответственным за отдельные аспекты системы.

Сценарий /etc/rc контролируется файлами /etc/defaults/rc.conf и /etc/rc.conf.

/etc/rc.conf и /etc/defaults/rc.conf

Как и конфигурационный файл загрузчика, настройки, используемые сценарием /etc/rc, размещаются в двух файлах: настройки по  умолчанию — в файле /etc/defaults/rc.conf и локальные настройки — в файле /etc/rc.conf. Настройки в файле /etc/rc.conf имеют более высокий  приоритет перед любыми настройками в файле /etc/defaults/rc.conf точно так же, как и в случае с загрузчиком.

Файл /etc/defaults/rc.conf огромен. Он содержит довольно много  переменных, часто называемых knobs (кнопки) или tunables (элементы настройки). Здесь не рассматриваются все эти переменные — не только потому, что knobs постоянно добавляются (такой список немедленно устареет), но также потому, что довольно много переменных не находит широкого применения на серверах. В стандартной системе FreeBSD переменной rc.conf может быть почти все — от раскладки  клавиатуры до поведения TCP/IP. Полный перечень переменных вы найдете в своей системе, на странице руководства rc.conf(5).

В следующих разделах будут рассмотрены типичные записи из /etc/rc.conf. Каждая запись представлена в /etc/defaults/rc.conf один раз. Редактирование той или иной записи означает ее замену в /etc/rc.conf. Для каждой переменной будет приводиться значение по умолчанию.

Параметры запуска

Следующие несколько параметров rc.conf управляют конфигурированием самой системы FreeBSD и тем, как она запускает другие программы. Эти параметры определяют, как будут запускаться все  остальные программы и службы в системе.

Если у вас обнаруживаются проблемы с запуском самого сценария /etc/rc и подчиненных ему сценариев, вам, возможно, потребуется разрешить их работу в отладочном режиме. Это позволит вам получить дополнительную информацию, способную прояснить, почему сценарий не запускается.

rc_debug="NO"

Если вам не нужен полный вывод в отладочном режиме, а хотелось бы получить лишь некоторую дополнительную информацию о работе сценария /etc/rc, активируйте вывод информационных сообщений с  помощью переменной rc_info:

rc_info="NO"

Одна из распространенных проблем, связанных с нехваткой памяти, — недостаточный объем пространства для свопинга. Подробнее о пространстве для свопинга мы поговорим в главе 19, но вы можете настроить использование дополнительного пространства для свопинга  непосредственно на этапе загрузки системы:

swapfile="NO"

Параметры файловой системы

Система FreeBSD может использовать память как файловую систему, о чем подробно будет рассказываться в главе 8. Обычно эта  возможность используется для создания файловой системы /tmp в памяти, так как операции с памятью выполняются существенно быстрее, чем с жестким диском. Прочитав главу 8, вы сможете реализовать это на практике. В файле rc.conf имеются переменные, которые позволят вам создать файловую систему /tmp в памяти и определить ее размер. Вы можете также указывать параметры, которые используются системой FreeBSD для работы с полноценными файловыми системами.  (Наиболее нетерпеливые из вас могут озадачиться, что означает флаг -S. Этот флаг запрещает использование механизма Soft Updates. Если вы  представления не имеете, о чем идет речь, тогда терпите до главы 8.) Если у вас появится необходимость реализовать файловую систему /tmp в памяти, установите параметр tmpmfs в значение YES и определите  желаемый размер файловой системы /tmp с помощью параметра tmpsize.

tmpmfs="AUTO"
tmpsize="20m"
tmpmfs_flags="-S"

Еще одна популярная возможность файловых систем FreeBSD — это  собственная реализация шифруемых разделов. Система FreeBSD «из  коробки» поддерживает две различных файловых системы с  шифрованием: GBDE и GELI. Файловая система с шифрованием диска на низком уровне (Geom Based Disk Encryption, GBDE) была первой шифруемой файловой системой, предназначенной для использования в военном  ведомстве. GELI — немного более дружественная технология, чем GBDE, и в отличие от GBDE соответствует иным стандартам. (Вам  определенно стоит прочитать главу 18, прежде чем вы решитесь активировать один из этих механизмов!)

gbde_autoattach_all="NO"
gbde_devices="NO"
gbde_attach_attempts="3"
gbde_lockdir="/etc"
geli_devices=""
geli_tries=""
geli_default_flags=""
geli_autodetach="YES"
geli_swap_flags="-a aes -l 256 -s 4096 -d"

После перехода в многопользовательский режим FreeBSD по  умолчанию монтирует корневой раздел в режиме чтения/записи. Если вам необходимо обеспечить доступ к корневому разделу в режиме только для чтения, вы можете установить следующую переменную в значение NO. Многие считают, что так безопаснее, но это может вступать в  противоречие с потребностями некоторых программных продуктов и, кроме того, это помешает вам редактировать какие-либо файлы,  расположенные в корневом разделе!

root_rw_mount="YES"

Когда во время загрузки FreeBSD пытается смонтировать файловые системы, она проверяет их внутреннюю целостность. Если ядро  обнаруживает существенные проблемы, оно пытается автоматически  исправить их с помощью fsck -y. Хотя в некоторых ситуациях это бывает совершенно необходимо, тем не менее в общем случае эта операция  далеко не безопасна. (Обязательно прочтите внимательно главу 8,  прежде чем активировать эту возможность!)

fsck_y_enable="NO"

Ядро может также обнаруживать незначительные неполадки в  файловых системах, которые могут быть устранены «на лету» посредством запуска fsck в фоновом режиме, в то время как система работает в  многопользовательском режиме, о чем подробно рассказывается в главе 8. При определенных обстоятельствах эта возможность может вызывать проблемы с безопасностью. Вы можете контролировать использование утилиты fsck в фоновом режиме и определять, как долго система должна ожидать, прежде чем запустить fsck в фоне.

background_fsck="YES"
background_fsck_delay="60"

Разнообразные сетевые демоны

В состав FreeBSD входит ряд небольших программ (или демонов),  которые работают в фоновом режиме и обслуживают соответствующие сервисы. Мы будем рассматривать многие из этих сервисов на  протяжении всей книги, но здесь упомянем некоторые настройки, которые будут интересны опытным системным администраторам. Один из  наиболее известных демонов — syslog(8). Протоколирование работы  системы — это Самое Мудрое Решение. Файлы журналов занимают  настолько важное место, что большая часть главы 20 посвящена теме  протоколирования средствами FreeBSD и для FreeBSD.

syslogd_enable="YES"

Как только вами будет принято решение о запуске демона  протоколирования, вы сможете точно определить, как он должен запускаться, установив параметры командной строки. Система FreeBSD будет  использовать эти параметры при запуске данного демона. Для всех  программ, включенных в rc.conf, можно задать параметры командной строки в следующем формате.

syslogd_flags="-s"

Другой популярный демон — inetd(8), сервер малых сетевых служб. (Демон inetd будет рассматриваться в главе 15.)

inetd_enable="NO"

Одна из задач, которые обычно решаются с помощью FreeBSD, является обслуживание системы доменных имен (Domain Name System, DNS) с помощью демона named(8). DNS — это дорожная карта Интернета,  которая позволяет простым людям пользоваться сетью. Поскольку  прежде чем начать приносить пользу, сервер DNS должен быть сначала сконфигурирован, то по умолчанию запуск этого демона запрещен. DNS будет рассматриваться в главе 14.

named_enable="NO"

Очень часто используется демон Secure Shell (SSH), обеспечивающий безопасное подключение по сети. Если вам необходимо обеспечить сетевое соединение с удаленной системой, вам определенно потребуется служба SSH.

sshd_enable="NO"

Настройка демона SSH может выполняться через параметры командной строки, однако чаще всего для этих целей используются файлы в каталоге /etc/ssh. Подробности приводятся в главе 15.

sshd_flags=""

Операционная система FreeBSD включает в себя самое разнообразное программное обеспечение, которое обеспечивает синхронизацию  системных часов с остальным миром. Чтобы извлекать пользу из этого программного обеспечения, его необходимо настроить. Эту тему мы рассмотрим в главе 15.

ntpd_enable="NO"
ntpd_flags="-p /var/run/ntpd.pid -f /var/db/ntpd.drift"

FreeBSD включает в себя также небольшой демон SNMP, который  обеспечивает работу инструментальных средств управления на базе  протокола SNMP. Мы будем рассматривать настройку SNMP в главе 19.

bsnmpd_enable="NO"

Сетевые параметры

Эти параметры управляют настройкой сетевых функций FreeBSD во время начальной загрузки. Каждый компьютер в Интернете должен иметь имя хоста (hostname). Имя хоста — это полное доменное имя  системы, например www.absolutefreebsd.org. Многие программы не смогут нормально работать без такого имени.

hostname=""

В состав FreeBSD входят несколько различных пакетов,  предназначенных для реализации межсетевого экрана. Мы коротко рассмотрим пакетный фильтр (Packet Filter, PF) в главе 9. Активация и  деактивация пакетного фильтра производится в rc.conf с помощью следующей переменной:

pf_enable="NO"

TCP/IP — это довольно старый сетевой протокол*, который  неоднократно подвергался изменениям и расширениям. Некоторые  изменения и дополнения были объединены в «TCP Extensions» (Расширения TCP), как описывается в главе 6. Многие операционные системы могут воспользоваться преимуществами расширений TCP, но наиболее  старые на это не способны. Если у вас возникают сложности при  взаимодействии с достаточно древними узлами сети, запретите  использование расширений TCP.

tcp_extensions="YES"

Для вас может представлять интерес информация о неудачных  попытках подключения сети к вашей системе. Описанная далее  возможность поможет вам обнаружить попытки сканирования портов и  несанкционированного вторжения, однако наряду с полезной  информацией она будет накапливать в протоколах системы массу ненужного мусора. Для интереса можно включить эту функцию на короткое  время, просто чтобы посмотреть, что в действительности происходит в  вашей сети. (Тем не менее помните, что она действительно может  вызывать изжогу у администратора.) Установите эту переменную в значение 1, чтобы система записывала в файл протокола информацию о неудачных попытках соединения.

log_in_vain="0"

Маршрутизаторы используют протокол ICMP для уведомления клиентских компьютеров о наличии сетевых шлюзов для конкретных маршрутов. Хотя существуют допустимые варианты использования ICMP, этот протокол широко используется хакерами для перехвата данных. Если в сети переадресация ICMP не применяется, установка этого  параметра незначительно усилит защиту системы. О том, применяется ли переадресация ICMP, можно спросить у сетевого администратора.

icmp_drop_redirect="NO"

А если вы и есть сетевой администратор и не можете ответить на этот вопрос, просто включите протоколирование пакетов переадресации,  получаемых вашей системой, в файл /var/log/messages.* Обратите внимание: если ваш сервер атакуют злоумышленники, это быстро может привести к переполнению жесткого диска сообщениями в файле протокола.

icmp_log_redirect="NO"

Чтобы подключиться к сети, необходимо каждому сетевому  интерфейсу присвоить IP-адрес. Некоторые подробности этой процедуры  приводятся в главе 6. Получить перечень имеющихся сетевых интерфейсов можно с помощью команды ifconfig(8). Добавьте названия всех  сетевых интерфейсов, каждый в отдельной строке, и укажите в кавычках информацию о настройках. Например, чтобы присвоить сетевому  интерфейсу em0 IP-адрес 172.18.11.3 и сетевую маску 255.255.254.0, следует ввести следующую строку:

ifconfig_em0="inet 172.18.11.3 netmask 255.255.254.0"

Если в сети используется DHCP, тогда вместо IP-адреса следует указать значение dhcp.

ifconfig_em0="dhcp"

Аналогичным образом производится назначение сетевому интерфейсу псевдонима (alias). Псевдоним — это не фактический IP-адрес сетевого интерфейса, но интерфейс будет откликаться на этот IP-адрес, о чем подробнее рассказывается в главе 6. Система FreeBSD в состоянии  обеспечить поддержку нескольких тысяч псевдонимов для единственного сетевого интерфейса при помощи записей в rc.conf следующего вида:

ifconfig_em0_aliasnumber="address netmask 255.255.255.255"

Номера псевдонимов должны охватывать непрерывный ряд чисел и  начинаться с 0. Если в порядковых номерах псевдонимов появится  разрыв, то псевдонимы с номерами выше разрыва не будут установлены во время загрузки. (Это довольно типичная проблема, и если вы  столкнетесь с ней, проверьте список псевдонимов.) Например, псевдоним адреса 192.168.3.4 должен быть определен как:

ifconfig_em0_alias0="192.168.3.4 netmask 255.255.255.255"

Комментарии запрещены.