Демон inetd (произносится «ай-нет-ди») запускается в процессе загрузки из файла инициализации, такого как /etc/rc2.d/S72inetsvc. При запуске inetd обращается к своему файлу настройки, /etc/inetd.conf. Файл настройки содержит имена служб, которые inetd слушает и запускает. Службы можно добавлять или удалять, внося изменения в файл inetd.conf.

Демон inetd (произносится «ай-нет-ди») запускается в процессе загрузки из файла инициализации, такого как /etc/rc2.d/S72inetsvc. При запуске inetd обращается к своему файлу настройки, /etc/inetd.conf. Файл настройки содержит имена служб, которые inetd слушает и запускает. Службы можно добавлять или удалять, внося изменения в файл inetd.conf.

Пример записи из такого файла для системы Solaris 8:

ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd

Поля записи файла inetd.conf, слева направо:

имя - Имя службы в том виде, в каком оно приводится в файле /etc/services. В приведенном примере это поле имеет значение ftp.

  • тип - Тип службы доставки данных, или тип сокета. Распространенные типы сокетов:
  • stream - Служба потоковой доставки, предоставляемая TCP, то есть байтовый поток TCP.
  • dgram - Служба доставки пакетов (дейтаграмм), предоставляемая UDP.
  • raw - Служба прямых дейтаграмм IP.

В примере используется потоковый сокет.

протокол - Имя протокола в том виде, в каком оно приводится в файле /etc/protocols. Обычно принимает значение «tcp» или «udp». Значения «tcp6» и «udp6» в Solaris позволяют отразить тот факт, что служба способна работать как по протоколу IPv4, так и по протоколу IPv6. Протоколом транспортного уровня для FTP является TCP, поэтому наш пример содержит в поле протокола значение tcp6.

wait-status - Поле может иметь значение «wait» либо «nowait.» Обычно, но не всегда, серверы, использующие для доставки данных службы дейтаграмм, требуют значения «wait», а потоковые серверы требуют значения «nowait». Состояние «wait» предписывает inetd ожидать освобождения сокета сервером, прежде чем начать прием последующих запросов через этот сокет. Состояние «nowait» позволяет inetd немедленно начать принимать дополнительные запросы соединений, поступающие через сокет.


Серверы с состоянием «nowait» задействуют для работы сокеты, отличные от тех, по которым получен запрос соединений, то есть используют динамически выделяемые сокеты.

uid - Значение uid - это имя пользователя, с полномочиями которого работает сервер. Допустимо имя любого существующего пользователя, но обычно это имя root. Есть и ряд исключений. Например, в стандартном варианте настройки Solaris 8 служба finger и сервер шрифтов fs (Sun Font Server) работают с полномочиями пользователя nobody, из соображений безопасности.

сервер - Абсолютное имя программы сервера, исполняемой демоном inetd. Поскольку наш пример относится к системе Solaris, использовано имя /usr/ sbin/in.ftpd. Имена и пути могут варьироваться в различных системах. Демон inetd способен самостоятельно обслуживать запросы к отдельным нетребовательным к ресурсам службам. Это более эффективно, чем запускать самостоятельные внешние серверы. Чтобы задействовать внутреннюю службу inetd, достаточно указать ключевое слово «internal» в поле имени сервера.

аргументы - Произвольные аргументы командной строки, передаваемые при вызове программе сервера. Перечень всегда начинается с argv[0] (то есть с имени вызываемой программы). Руководство по каждой конкретной программе документирует допустимые аргументы командной строки. В приведенном примере передается только имя программы, in. ftpd.

Существует ряд ситуаций, требующих правки файла inetd.conf. Например, возникла необходимость заблокировать существующую службу. Настройки по умолчанию содержат информацию о полном наборе серверов. Далеко не нее эти серверы требуются на средней системе, а из соображений безопасности имеет смысл отключать невостребованные службы на некоторых машинах. Чтобы заблокировать службу, добавьте символ # в начало соответствующей записи (строка становится комментарием) и передайте сигнал принудительного завершения серверу inetd. Получив сигнал, демон inetd повторно прочитает файл настройки, и новые указания вступят в действие немедленно.


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

#    Tftp service is provided primarily for booting. Most sites run this
#    only on machines acting as "boot servers."
#
#tftp dgram udp6 wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot
#
# Finger, systat and netstat give out user information which may be
# valuable to potential "system crackers." Many sites choose to disable
# some or all of these services to improve security.
finger stream tcp6 nowait nobody /usr/sbin/in.fingerd in.fingerd

В этой части файла отражены две службы TCP/IP. Одна из них, tftp, закомментирована. Протокол TFTP - это специальный вариант протокола FTP, позволяющий выполнять передачу файлов без проверки имени пользователя и пароля. Протокол, таким образом, представляет потенциальную угрозу безопасности системы и часто блокируется в файле inetd.conf. Вторая служба - finger, комментарии для которой предполагают, что ее имеет смысл заблокировать.

В качестве примера изменения файла inetd.conf мы перенастроим систему на предоставление службы tftp, которая бывает необходима для поддержки бездисковых устройств. Во-первых, удалим символ комментария из записи tftp при помощи любимого текстового редактора. (В этом примере используется sed, любимый редактор всех пользователей!) Затем определим идентификатор процесса inetd и передадим ему сигнал SIGHUP. Следующие команды решают поставленную задачу:

# cd /etc
#    mv inetd.conf inetd.conf.org
# cat inetd.conf.org | sed s/#tftp/tftp/ > inetd.conf
#    ps -acx | grep inetd
144 ? I 0:12 inetd
# kill -HUP 144

В некоторых случаях может возникнуть необходимость в изменении имени сервера или аргументов его вызова. Для примера снова обратимся к записи tftp. Строка содержит аргументы командной строки, передаваемые tftp-cepверу при вызове. Ключ -s /tftpboot закрывает самую очевидную прореху в безопасности tftp: запрещает пользователям получать файлы, расположенные за пределами каталога, указанного в качестве аргумента ключа -s. Для того чтобы воспользоваться другим каталогом, потребуется изменить файл inetd.conf. Серверам, вызываемым inetd, передаются только те аргументы командной строки, которые указаны в файле inetd.conf.