Linux network инструкция администратора

    778b1c86   

Суперсервер inetd


Таким образом, почти все версии Un*x запускают "суперсервер", который создает сокеты для ряда услуг и слушает их одновременно при использовании системного вызова select(2). Когда отдаленный хост запрашивает одну из услуг, суперсервер замечает это и порождает другой сервер, установленный для этого порта, а сам продолжает слушать соединения.

Обычно используется суперсервер inetd, Internet Daemon. Он запускается при начальной загрузке системы и берет список услуг, к которым он обращается из файла запуска /etc/inetd.conf . В дополнение к вызываемым серверам там есть ряд тривиальных услуг, которые являются внутренними сервисами inetd. Они включают chargen, который просто генерирует ряд знаков и daytime, который возвращает время.

Каждая запись в файле /etc/inetd.conf состоит из единственной строки, состоящей из следующих полей:

service type protocol wait user server cmdline

Значения полей:

service Задает имя сервиса. Service name должно быть переведено в номер порта с помощью файла /etc/services . Этот файл будет описан в соответствующем разделе.

type

Определяет тип сокета: stream (для протоколов, ориентированных на соединение) или dgram (для датаграмных протоколов). TCP-сервисы должны всегда использовать stream, в то время как UDP-услуги должны всегда использовать dgram.

protocol Задает транспортный протокол для этого сервиса. Это поле должно быть подходящим названием протокола, найденным в файле protocols.

wait Эта опция применяется только на dgram. Это может быть wait или nowait. Если определен wait, то inetd

выполняет одновременно только один сервер для порта. Иначе после запуска сервера он немедленно продолжит слушать порт. Это полезно для серверов, которые читают все входящие датаграммы и завершают работу. Большинство RPC-серверов имеет этот тип и должны определять wait . Противоположный тип, "многопоточные" серверы, могут быть запущены в нескольких копиях, но это редко используется. Эти серверы должны определять nowait. Сокеты stream должны всегда использовать nowait.




user Это поле является идентификатором пользователя, от имени которого работает сервис. Часто это будет root, но некоторые сервисы могут применять различных пользователей. Это очень хорошая идея применения принципа наименьшего количества привилегий, который заявляет, что Вы не должны запускать команду от имени привилегированного пользователя, если программа не требует этого для функционирования. Для примера, NNTP (сервер новостей) будет запущен от имени news, а сервисы, вызывающие возможное нарушение защиты (tftp или finger), будут работать как nobody.

server Задает полный путь к программе сервера, который будет выполнен. Внутренние сервисы помечаются ключевым словом internal.

cmdline Командная строка, которую нужно выполнить на сервере. Она включает аргумент 0, который является именем команды. Обычно это не будет именем программы сервера, если программа ведет себя по-разному, когда вызывается с различными именами. Это поле пусто для внутренних сервисов.

Пример файла inetd.conf показан в примере 12-1.

Сервис finger закомментирован, чтобы он не был доступен. Это часто делается из соображений безопасности, потому что может использоваться нападающими для того, чтобы получить имя пользователя на Вашей системе.


Содержание раздела