WikiDer > Inetd

Inetd

inetd (яnterсеть служба daemon) является супер-сервер демон на многих Unix системы, которые обеспечивают Интернет Сервисы. Для каждой настроенной службы он прослушивает запросы от подключающихся клиентов. Запросы обслуживаются путем создания процесса, который запускает соответствующий исполняемый файл, но простые службы, такие как эхо обслуживаются самим inetd. Внешние исполняемые файлы, запускаемые по запросу, могут быть однопоточными или многопоточными. Впервые появившись в 4.3BSD,[1] обычно он расположен в / usr / sbin / inetd.

Функция

Часто называют супер-сервер, inetd прослушивает указанный порты используется интернет-службами, такими как FTP, POP3, и телнет. Когда TCP пакет или UDP пакет прибывает с определенным номером порта назначения, inetd запускает соответствующую серверную программу для обработки соединения. Для служб, которые не должны работать с высокими нагрузками, этот метод использует память более эффективно, поскольку определенные серверы запускаются только при необходимости. Более того, в программах для конкретных служб не требуется сетевой код, поскольку inetd подключает сокеты напрямую к стандартный ввод, стандартный вывод и stderr порожденного процесса. Для протоколов с частым трафиком, таких как HTTP и POP3, выделенный сервер, который непосредственно перехватывает трафик, может быть предпочтительным.

Настраивать

Список сервисов, которые будут обслуживаться, дается в файле конфигурации, обычно /etc/inetd.conf. А GUI для управления файлом конфигурации является дополнительным аксессуаром. Демону может потребоваться сигнал, чтобы перечитать свою конфигурацию. Например, телнет можно настроить следующим образом (линия, взятая с машины, работающей AIX версия 5.1):

telnet stream tcp6 nowait root / usr / sbin / telnetd telnetd -a

Первое слово, телнет, - официальное название службы. Это разрешается с помощью системной базы данных для сопоставления номеров портов и протоколов с именами служб. В этом случае, / etc / services должен содержать:

телнет 23 / TCP

Второе и третье слова описывают тип сокета и базовый протокол соответственно. В / и т.д. / протоколы база данных консультируется.

Четвертое слово - это переключатель «ждать / сейчас». Однопоточный сервер ожидает, что inetd дождется завершения чтения всех данных. В противном случае inetd позволяет серверу запускаться и запускать новые параллельные процессы для новых запросов.

Пятое слово - это имя пользователя из / etc / passwd база данных, от имени которой должна работать служебная программа.

Наконец, указывается путь и аргументы внешней программы. Как обычно, первым аргументом является название программы. В этом примере inetd предлагается запустить программу. / usr / sbin / telnetd с аргументами командной строки telnetd -a. inetd автоматически подключает сокет к stdin, stdout и stderr серверной программы.

Обычно сокеты TCP обрабатываются путем создания отдельного сервера для одновременной обработки каждого соединения. Сокеты UDP обычно обрабатываются одним экземпляром сервера, который обрабатывает все пакеты на этом порту.

Некоторые простые сервисы, такие как эхо, обрабатываются непосредственно inetd, без создания внешнего сервера.

Создание службы inetd

Это простая служба inetd, написанная на C. Он ожидает аргумент командной строки, содержащий имя файла для файла журнала, а затем регистрирует все строки, отправленные через сокет, в файл журнала. Обратите внимание, что это очень небезопасный пример программы.

#включают <stdio.h>#включают <stdlib.h>int главный(int argc, char **argv){  const char *fn = argv[1];  ФАЙЛ *fp = fopen(fn, "а +");  если (fp == НОЛЬ)     выход(EXIT_FAILURE);  char ул[4096];  / * inetd передает нам свою информацию в stdin. * /  пока (fgets(ул, размер ул, стандартный ввод)) {    fputs(ул, fp);    fflush(fp);  }  fclose(fp);  возвращаться 0;}

В примере используется stdio функций и реагирует на сетевой трафик, поступающий на стандартный ввод. В этом случае мы хотим, чтобы все сообщения регистрировались в одном файле, поэтому нам нужен только один экземпляр службы, работающий для обслуживания всех запросов. Это означает, что UDP - правильный протокол для использования. Во-первых, необходимо выбрать неиспользуемый номер порта. В этом примере будет использоваться 9999. В / etc / services запись будет выглядеть так:

errorLogger 9999 / udp

И запись в /etc/inetd.conf будет выглядеть так:

errorLogger dgram udp wait root / usr / local / bin / errlogd errlogd /tmp/logfile.txt

Это говорит inetd запустить / USR / местные / бен / errlogd программа с командной строкой: errlogd /tmp/logfile.txt (обратитесь к inetd.conf страница руководства для информации по другим аргументам). Первый аргумент содержит имя файла, которое будет использоваться для файла журнала: /tmp/logfile.txt. inetd запустит службу при необходимости и подключит порт 9999 к потокам ввода и вывода, и все строки, отправленные на этот порт, будут записаны в файл. Указав ждать, он сообщает inetd использовать только один экземпляр сервера для обработки всех запросов.

Примечание: функциональные возможности приведенного выше примера обычно реализуются с помощью системный журнал и такой процесс, как syslogd. syslogd обычно запускается параллельно с inetd, а не как служба inetd.

inetd замены

В последние годы из-за ограничений безопасности в исходном дизайне inetd его заменили на xinetd, rlinetd, ucspi-tcpи другие во многих системах. Распределение Linux особенно есть много вариантов и Mac OS X (начиная с Mac OS X v10.2) использует xinetd. По версии Mac OS X v10.4, Apple объединила функции inetd в запуск.

Услуги, предоставляемые inetd, можно полностью исключить. Это становится все более распространенным, когда машины предназначены для одной функции. Например, HTTP-сервер можно настроить так, чтобы он просто запускал httpd и другие порты не открыты. На выделенном брандмауэре не могли быть запущены службы.

systemd поддерживает службы inetd и расширяет активацию сокетов за пределы обмена сообщениями IP (AF INET+6) включить AF UNIX, AF NETLINK и больше.[2][3]

Проблемы безопасности

Хотя концепция inetd как диспетчера служб небезопасна по своей сути, длинный список служб, которые традиционно предоставляет inetd, заставил специалистов по компьютерной безопасности задуматься. Необходимо было рассмотреть возможность того, что услуга имеет уязвимость, которую можно использовать, или просто злоупотребляют ею. Мантрой стало отключение ненужных сервисов и «отключение по умолчанию». Не редко можно найти /etc/inetd.conf почти со всеми услугами закомментировано в современном дистрибутиве Unix.

Смотрите также

Рекомендации

внешняя ссылка