Суперсервер inetd
В поставку большинства систем UNIX, включая Linux, входит суперсервер, который поддерживает широкий набор служб. Вероятно, наибольшую известность получил суперсервер UNIX под названием inetd; версию inetd включают в свои системы большинство поставщиков.
Первоначально стимулом к созданию суперсервера inetd явилось стремление создать эффективный механизм, способный обеспечить поддержку множества служб без использования слишком большого объема системных ресурсов. В частности, хотя такие службы TCP/IP, как ECHO и CHARGEN, необходимы для проверки или отладки, они редко применяются в производственной системе. Развертывание сервера для каждой из таких служб требует затрат системных ресурсов (например, резервирования записей в таблице процессов и места в области подкачки). Кроме того, отдельные процессы конкурируют за доступ к памяти, если они работают параллельно. Поэтому объединение серверов в один суперсервер позволяет уменьшить издержки без потери функциональных возможностей. Это интересно! Молниезащита на http://www.groze.net.
Суперсервер inetd является динамически настраиваемым3; информация о его конфигурации хранится в виде текста ASCII в файле /etc/inetd.conf. Каждая запись в этом файле может включать от шести и более полей, как показано в табл. 15.1. Первые шесть полей являются обязательными и не должны содержать пробельных символов; последние слова в строке представляют собой параметры.
Таблица 15.1. Поля записи в файле конфигурации inetd
| Поле | Назначение |
| service name | Имя предоставляемой службы (имя должно присутствовать в базе данных служб системы) |
| socket type | Тип используемого сокета (должен представлять собой допустимый тип сокета, такой как stream или dgram) |
| protocol | Имя протокола, используемого со службой (должен представлять собой допустимый протокол, такой как ten или udp) |
| wait status | Значение wait, которое указывает, что суперсервер inetd должен ждать завершения обработки программой поддержки службы одного запроса, и только после этого приступать к обработке другого, или nowait, которое разрешающего параллельную обработку |
| userid | Имя учетной записи пользователя, с правами которого должна работать программа поддержки службы. Специальная учетная запись root предоставляет |
Сразу после запуска или реконфигурации суперсервер inetd должен создать ведущий сокет для каждой новой службы, указанной в файле конфигурации. Для этого сервер inetd интерпретирует файл конфигурации и извлекает из него значения отдельных полей. Поле с обозначением типа сокета используется для определения того, какой тип сокета (stream или dgram) должен применяться для ведущего сокета. Сервер inetd должен также выполнить привязку к сокету локального порта протокола. Чтобы определить номер порта протокола, сервер inetd извлекает из файла поля с именем службы и протокола и использует их для передачи запроса в базу данных служб операционной системы. База данных возвращает номер порта протокола, предназначенного для использования с этой службой; если база данных служб не содержит записи, соответствующей комбинации значений полей с именем службы и протокола, суперсервер inetd не может поддерживать такую службу.