Сетевые сервисы при работе UNIX-системы в качестве сервера (9 глава дипломной работы), страница 4

Сервер доступа малого и среднего масштаба может быть успешно реализован на базе UNIX-компьютера. ОС семейства UNIX обладают штатными средствами поддержки всех вышеперечисленных функций, характерных для удаленного доступа. Модемы рассматриваются как логическое продолжение последовательных устройств ввода-вывода (терминалов), с которых пользователи могут входить в систему. Для этого соответствующие порты программно связываются с процессами getty, обеспечивающими вход удаленных пользователей в систему стандартным образом; однако вместо shell в таком случае запускается процесс pppd, обеспечивающий обмен по установленному соединению на базе протокола РРР. В этом случае удаленные пользователи регистрируются в общесистемной базе пользователей (/etc/passwd), и учет ведется на основе стандартных журналов событий (log-файлов). Возможен и альтернативный вариант, когда аутентификация полностью производится средствами протокола РРР, без участия getty. В этом случае обычно ведется отдельная база пользователей и паролей.

            Более крупные узлы доступа обычно организуются на базе аппаратных серверов доступа. Аппаратный сервер удаленного доступа представляет собой специализированное устройство, во многом аналогичное аппаратному маршрутизатору, но ориентирован на подключение большого числа модемов либо модемного пула. При использовании таких технических решений для аутентификации и статистического учета обычно применяется система удаленной аутентификации пользователей с входящих линий – RADIUS. Один или более аппаратных серверов доступа являются клиентами для программного RADIUS-сервера, который выполняется в среде UNIX на выделенном компьютере. RADIUS-сервер предоставляет крайне гибкие возможности для верификации пользователей и управления их правами, включая интерфейс с внешними СУБД. Однако базовым режимом его функционирования является режим UNIX-аутентификации, когда модемный доступ к аппаратному серверу  предоставляется в соответствии с общесистемной базой пользователей и паролей.

9.8 Суперсервисы inetd и tcpd.

            Обычно сетевой сервис при запуске открывает заданный порт (ТСР или UDP) и ожидает клиентских соединений на этот порт. Если какой-либо клиент устанавливает соединение, сервис порождает дочерний процесс для обслуживания сеанса связи, сам продолжая ожидание последующих соединений. При таком подходе для каждой сетевой службы, которую предоставляет данный узел, должен быть запущен отдельный процесс. Очевидно, что большое число редко используемых служб приводит к неэффективному использованию ресурсов сервера.

            Для решения этой проблемы практически все реализации UNIX используют  суперсервис, обычно представленный процессом inetd (от Internet daemon, т.к. первоначально использовался в основном для мультиплексирования сервисов Internet). Сервис inetd ожидает соединений на ряд портов, каждому из которых сопоставлен соответствующая программа-обработчик. При установлении соединения на любой из этих портов (напр., 110 – РОР3 или 21 - FTP) запускается обработчик, обслуживающий запрос и покидающий память. Чаще всего в роли обработчиков используются стандартные сетевые программы-демоны, способные работать и в автономном режиме.

            Конфигурационным файлом супервервиса inetd является файл /etc/inetd.conf. Каждая строка этого файла представляет собой описание одного сервиса (TCP или UDP порта) и имеет вид:

сервис тип протокол wait/nowait пользователь обработчик параметры

Значения каждого из этих полей:

сервис - имя сетевой службы, сопоставленное порту в файле /etc/services, или номер порта;

тип – тип соединения: stream для режима виртуального соединения или dgram для дейтаграммного режима;

протокол – имя протокола, обычно tcp или udp;

wait/nowait – указывает, следует ли inetd ожидать окончания сеанса для обработки нового клиентского соединения; определяется конкретным сервисом;

пользователь – имя пользователя, от имени и с правами которого запускается процесс-обработчик;

обработчик – полное имя программы-обработчика; сервисы, реализованные на уровне ядра, в этом поле содержат значение «внутренний» (internal).

параметры – параметры командной строки (ключи, файлы и т.п.) для программы-обработчика, включая имя программы.

Строки, начинающиеся с символа #, считаются комментариями.

Пример. Фрагмент файла /etc/inetd.conf:

  # . . .

  ftp    stream  tcp  nowait  root /usr/sbin/ftpd  ftpd

  telnet stream  tcp  nowait  root /usr/sbin/in.telnetd –b/etc/issue

  # . . .

Еще одним средством мультиплексирования клиентских запросов является суперсервис tcpd, который может запускаться вместо любого сервера сетевой службы, использующей протокол TCP. Для обозначения суперсервиса tcpd используются также названия prtmapper и TCP-wrapper.

При установлении соединения tcpd:

-  передает информацию об обращении к сетевой службе демону syslog для внесения в журнал,

-  проверяет, имеет ли право удаленный узел использовать данную службу;

-  если удаленный узел обладает таким правом, tcpd запускает программу-сервер для обработки запроса.

Конфигурационные файлы /etc/hosts.allow и /etc/hosts.deny позволяют задать маски IP-адресов, уполномоченных или не уполномоченных на использование каждого сервиса.

            Сервис tcpd может использоваться совместно с inetd.

Пример. Фрагмент файла /etc/inetd.conf:

  telnet stream  tcp  nowait root /usr/sbin/ftpd  in.telnetd

            Обычно механизм TCP-wrapper используется ограничения доступа к критическим для безопасности системы сервисам. В частности, он позволяет запретить доступ к сервису удаленного входа в систему (telnet) IP-адресами, относящимися к локальной сети. При этом другие сервисы (ftp, http, DNS) могут быть полностью доступны для любых узлов сети в масштабе Internet.