Index

ЧТО ЭТО ?
ОПИСАНИЕ
ВНУТРЕННИЕ СЕРВИСЫ
ЗАМЕЧАНИЯ
ПРИМЕР
СМОТРИТЕ ДОПОЛНИТЕЛЬНО
ОШИБКИ

 

ЧТО ЭТО ?

xinetd.conf - файл конфигурации для xinetd  

ОПИСАНИЕ

xinetd.conf файл конфигурации в котором определяются сервисы предоставляемые xinetd. Любая строка в начинающаяся с символа '#' считается коментарием. Пустые строки игнорируются.

Файл содержит вхождения(записи) следующего вида:


service <service_name>
{
<attribute> <assign_op> <value> <value> ... ...
}

Оператор присвоенияr, assign_op, может быть один из '=', '+=', '-='. Большинство атрибутов поддерживают только один оператор присваивания, '='. Атрибуты являющиеся наборами значений поддерживают все операторы присваивания. Для любых атрибутов, '+=' означает добавление значения к набору и '-=' означает удаление значения из набора. Список этих атрибутов должен быть указан после того как все атрибуты описаны.

Каждое вхождение определяет сервис идентифицируемый service_name. Далее следует список атрибутов:

id
Этот атрибут используется для однозначного определения сервиса. Он используется потому что есть сервисы которые могут использовать различные протоколы и их необходимо описать в различных секциях файла конфигурации. По умолчанию, значение поля id совпадает с именем сервиса.
type
Может быть использована любая комбинация из следующих значений:
RPC
RPC сервис
INTERNAL
сервис предоставляемый xinetd.
UNLISTED
сервис не указан в стандартном (системном) файле (например /etc/rpc для RPC служб, или /etc/services для не RPC сервисов).
flags
Используется любая комбинация следующих флагов:
REUSE
Устанавливает флаг SO_REUSEADDR для сокета сервиса (on the service socket) (См. setsockopt(2) для дополнительной информации).
INTERCEPT
Перехватывает пакеты или установленные соединения в порядке их поступления из разрешенных мест (Intercept packets or accepted connections in order to verify that they are coming from acceptable locations) (внутренние или multi-threaded сервисы не могут быть перехвачены).
NORETRY
Избегать повторных попыток в случае неудачи запуска (fork)
IDONLY
Разрешать соединения только в случае идентификации удаленного пользователя на удаленной стороне (т.е. на удаленном хосте должен быть запущен сервер идентификации). Этот флаг применяется только к connection-based сервисам. Этот флаг не эффективен если USERID параметр настройки логов не используется.
NAMEINARGS
Заставляет рассматривать первый аргумент в "server_args" как argv[0] когда выполняется программа-сервер, указанная в "server". Это позволяет вам использовать tcpd путем помещения tcpd в "server" и имя сервера в "server_args" как в обычном inetd.
NODELAY
Если служба является tcp сервисом и флаг NODELAY установлен, тогда флаг TCP_NODELAY устанавливается для сокета. Если сервис не tcp, опция не имеет эффекта.
socket_type
Возможные значения для этого атрибута:
stream
stream-based сервис
dgram
datagram-based сервис
raw
сервис требующий прямого доступа к IP
seqpacket
сервис требующий reliable sequential datagram transmission
protocol
определяет протокол который используется сервисом. Протокол должен присутствовать в /etc/protocols. Если этот параметр не определем, сервис будет использовать протокол по умолчанию.
wait
Этот атрибут определяет является ли сервис single-threaded или multi-threaded. Если его значение yes сервис является single-threaded; это означает что xinetd запускает сервер и затем перестает обрабатывать запросы для этого сервера пока запущенный сервер не завершит работу. Если значение атрибута no, то значит сервис является multi-threaded и xinetd продолжит обрабатывать вновь приходящие запросы.
user
определяет uid под которым будет выполняться процесс. В файле /etc/passwd должена сушествовать запись соответствующая указанному uid. Этот параметр не действует если эффективный uid xinetd не соответствует uid супер-пользователя.
group
определяет gid под которым будет выполняться процесс. Имя группы должно существовать в файле /etc/group. Если группа не указана, будет использована к которой принадлежит user (из /etc/passwd). Этот параметр не действует если эффективный uid xinetd не соответствует uid супер-пользователя.
instances
определяет число серверов которое может быть одновременно активировано для одного сервиса (по умолчанию ограничений нет). Значение этого параметра должно быть числом или UNLIMITED
nice
определяет приоритет с которым выполняются процессы сервера. Значением является число (возможно отрицательное) См. nice(3) для дополнительной информации.
server
определяет программу обеспечивающую данный сервис.
server_args
определяет аргументы переданные серверу. В отличие от (In contrast to) inetd, имя сервера не включается в server_args.
only_from
определяет удаленный хост для которого данный сервис разрешен (доступен) Значением является список IP адресов который может быть указан как комбинация следующих вариантов:
a)
в числовой форме %d.%d.%d.%d. Если правые компоненты указаны как "0", то они трактуются как wildcards. Например 128.138.12.0 соответствует всем хостам в сети 128.138.12.0/24, значение 0.0.0.0 соответствует любому адресу интернет.
b)
перечисление адресов в форме %d.%d.%d.{%d,%d,...}. Нет необходимости указывать все четыре компонента (то есть %d.%d.{%d,%d,...%d} (???) так же правильно). Однако перечисляемая часть должна быть в конце адреса.
c)
указать имя сети (из /etc/networks)
d)
имя хоста. Когда соединение с xinetd устанавливается, демон выполняет обратное преобразование и каноническое имя полученное в результате оного сравнивается с указанным именем хоста. Также можно использовать имена доменов в форме .domain.com. Необходимо чтобы в результате обратного преобразования адреса результат попадал в .domain.com.
e)
указать ip адрес/маску подсети в формате 1.2.3.4/32.
""
Указание этого атрибута без значения делает сервис доступным для nobody.
no_access
определяет удаленный хост для которого данный сервис недоступен. Значение может быть указано так же как для параметра only_from Эти два атрибута определяют методы управления доступом реализованные в xinetd. Если эти парамеметры не указаны для сервиса, то он считается доступным для всех. Если оба параметра указаны, срабатывает тот который наиболее точно совпадает с удаленным хостом. Например:
only_from содержит 128.138.209.0 и
no_access содержит 128.138.209.10 в этом случае хост с адресом 128.138.209.10 не получит доступ к сервису.
access_times
определяет промежутки времени в которые сервис доступен. Интервал указывается в форме ЧЧ:ММ-ЧЧ:ММ (соединение должно быть доступно в том числе и на границах указанного временного интервала). Часы указываются в диапазоне с 0 до 23 и минуты с 0 до 59.
log_type
определяет куда направляется вывод логов. Существует два формата:
SYSLOG " syslog_facility [syslog_level]"
Регистрация событий происходит с помощью указанной facility демона syslog. Возможные facility: daemon, auth, user, local0-7. Возможные level names: emerg, alert, crit, err, warning, notice, info, debug. Если уровень не указан, по умолчанию принимается info.
FILE " file [soft_limit [hard_limit]]"
Все регистрируемые события добавляются в файл который создается если не существует. Дополнительно можно указать два лимита на размер лог-файла. Первый лимит - "мягкий", если xinetd достигает указанного значения, то это событие регистрируется используя syslog c уровнем alert. Второй лимит - жесткий лимит: xinetd прекрашает запись событий в лог-файл когда его размер превышает второй лимит и извещает о проишедшем через систему syslog с уровнем alert Если жесткий лимит не указан, по умолчанию он принимается на 1% более мягкого лимита, но при этом приращение должно находиться в диапазоне LOG_EXTRA_MIN и LOG_EXTRA_MAX которые по умолчанию определены как 5K и 20K в config.h).
log_on_success
определяет что за информация записывается когда сервер стартует и когда сервер завершает работу (id сервиса всегда включается в запись). Любая комбинация следующих значений может быть указана:
PID
записывает PID сервера (если сервис предоставлен самим xinetd без запуска нового процесса (forking another process) записанный PID=0)
HOST
записывает адрес удаленного хоста
USERID
записывает id пользователя на удаленном хосте используя протокол идентификации RFC 1413. Эта опция доступна только для multi-threaded stream сервисов.
EXIT
фиксирует факт завершения работы сервера, код завершения или сигнал по которому завершился процесс.
DURATION
регистрирует длительность сессии
log_on_failure
определяет какая информация регистрируется когда сервер не может быть запущен (даже по причине недостатка ресурсов или ограничений системы контроля доступа). ID сервиса всегда включается в запись вместе с причиной неудачи запуска. Любая комбинация следующих значений может быть указана:
HOST
регистрирует IP адрес удаленного хоста.
USERID
регистрирует id пользоватиеля на удаленном хосте используя протокол идентификации (RFC 1413) Эта опция доступна только для multi-threaded stream сервисов.
ATTEMPT
регистрирует неудачные попытки соединения (эта опция подразумевается всеми остальными).
RECORD
записывает информацию с удаленной строны в случае если сервер не может быть запущен. Это позволяет отслеживать попытки использования сервиса. Например, login сервис фиксирует имя локального пользователя, удаленного пользователя и тип терминала. В настоящи момент сервисы поддерживающие эту опцию: login, shell, exec, finger.
rpc_version
определяет версию RPC для RPC сервиса. Версия может быть просто номером или диапазоном в форме number-number.
rpc_number
определяет номер для UNLISTED RPC сервиса (этот атрибут игнорируется если сервис не является unlisted).
env
Значение этого атрибута является списком строк в виде 'name=value'. Эти строки добавляются к существующему окружению (environment) перед стартом сервера (иными словами окружение сервера должно включать среду xinetd плюс указанные стороки).
passenv
Значение этого атрибута - список переменных окружения xinetd которые должны быть переданы в окружение сервера. Пустой список означает что переменные не передаются за исключением тех что явно определены с использованием параметра env (замечание: эти два параметра можно использовать совместно для точного указания какие переменные будут переданы серверу.)
port
определяет порт используемый сервисом. Если этот атрибут указывается для сервиса присутсвующего в /etc/services, он должен совпадать со значением указанным в файле.
redirect
Позволяет tcp сервису быть перенаправленнм на другой хост. Когда приходит запрос на соединение на соответствующем порту xinetd порождает процесс который устанавливает соединение с указанными хостом и портом и переправляет все данные между двумя хостами. Эта опция используется когда Ваши внутренние машины не видны снаружи. Синтаксис следующий: redirect = (ip address)(port) Вместо IP адреса можно использовать имя хоста (hostname). Разрешение имени производится только однажды, когда xinetd стартует и полученный IP адрес используется до тех пор пока xinetd будет перегружен. Параметр "server" не требуется когда эта опция указана и если "server" и "redirect" указаны совместно то "redirect" имеет приоритет.
bind
Позволяет привязать сервис к указанному интерфейсу. Это означает что вы можете настроить телнет-сервер чтобы он слушал только на защищенном внутреннем интерфейсе. Или один порт на одном интерфейсе может выполнять одну функцию, а тотже порт на другом интерфейсе полностью противоположную функцию. Синтаксис: bind = (ip адрес интерфейса).
interface
Синоним bind.
banner
Имя файла содержимое которого отправляется/отображается (be splatted) на удаленный хост когда соединение с сервисом установлено. Этот баннер печатается вне зависимости от контроля доступа. Он всегда печатается при установлении соединения.
banner_success
Имя файла содержимое которого будет отображено на удаленном хосте когда соединение с сервисом разрешено. Этот баннер печатается как только доступ к сервису будет позволен (granted).
banner_fail
Имя файла содержимое которого будет отображено на удаленном хосте когда в соединении с соответствующим сервисом будет отказано. Этот баннер печатается немедленно после отказа в доступе. Это используется для информирования пользователей что они делают что-то не хорошее и что они не должны более так делать в будущем.
per_source
Принимает целое или "UNLIMITED" в качестве аргумента. Параметр определяет максимальное число экземпляров серверных процессов указанного сервиса на IP адрес источника. Значение также может быть указано в секции значений по умолчанию.
cps
Ограничивает скорость обработки входящих соединений. Параметр имеет два аргумента. Первый аргумент - число обрабатываемых входяших соединений в секунду. Если число соединений превышает указанное значение, то сервис становится временно недоступным. Второй аргумент - временной интервал в секундах, который необходимо выдержать перед воостановлением доступности сервиса.
max_load
Принимает вещественное значение показывающее при каком значении загрузки системы сервис должен прекратить обработку запросов и установление соединений. Например: 2 или 2.5 Сервис должен прекратить обрабвтывать запросы при указанном значении загрузки. Это фича является ОС-зависимой и в настоящее время поддерживается только в Linux и Solaris
groups
Может быть "YES" или "NO". Это фикс от Solar Designer'а по проблеме групп (supplementary groups problem). Если параметр установлен в YES, then the server is executed with access to the groups that the server's effective UID has access to. Если значение NO, то сервер выполняется без груповых привелегий (server runs with no group privleges).

Нет необходимости указывать все вышеперечисленные параметры для каждого сервиса. Необходимыми являются следующие:

socket_type
user
(non-unlisted services only)
server
(non-internal services only)
wait
protocol
(RPC and unlisted services only)
rpc_version
(RPC services only)
rpc_number
(unlisted RPC services only)
port
(unlisted non-RPC services only)

Следующие атрибуты поддерживают все операторы присваивания:

only_from
no_access
log_on_success
log_on_failure
passenv
env
(не поддерживает оператор '-=')

Также эти атрибуты могут появляться более чем однажды в записи описывающей сервис.
Остальные атрибуты поддерживают только оператор '=' и могут появляться в секции описывающей сервис лишь однажды.

Файл конфигурации может содержать секцию для задания значений по-умолчанию, она имеет вид:

defaults
{
<атрибут> = <значение> <значение> ... ...
}

Эта секция задать значения атрибутов для всех секций сервисов где явно не описаны эти атрибуты. Возможные атрибуты:

log_type
log_on_success
(cumulative effect)
log_on_failure
(cumulative effect)
only_from
(cumulative effect)
no_access
(cumulative effect)
passenv
(cumulative effect)
instances
disabled
(cumulative effect)
enabled
(cumulative effect)

Атрибуты с куммулятивным эффектом можно указывать много раз, причем значения будут накапливаться (то есть '=' делает тоже самое что и '+='). За исключением disabled они имеют то же значение как если бы были указаны в секции сервиса. disabled определяет сервисы которые не доступны даже если они имеют собственные секции в файле конфигурации. Это позволяет быстро переконфигурировать xinetd указав нежелательные сервисы как аргументы для disabled вместо того чтобы комментировать соответсивующие секции. Значением этого атрибута является список разделенных пробелами идентификаторов сервиса (id)
enabled имеет те же свойства что и disabled. Разница в том что enabled список разрешенных сервисов. Если атрибут enabled указан, то только разрешенные сервисы будут доступны. Если enabled не указан, то подразумевается что все сервисы разрешены за исключением перечисленных в disabled.

 

ВНУТРЕННИЕ СЕРВИСЫ (INTERNAL SERVICES)

xinetd предоставляет следующие сервисы собственными силами (как stream так datagram based): echo, time, daytime, chargen, and discard. На эти сервисы действуют те же ограничения доступа как и на остальных за исключением того что в этом случает xinetd не порождает новый процесс. По этому для этих сервисов (time, daytime, and the datagram-based echo, chargen, and discard) нет ограничений на количество запускаемых процессов.

xinetd также предоставляет два UNLISTED внутренних stream-based сервиса: servers и services. Первый из вышеупомянутых предоставляет информацию о выполняющихся серверах, а следующий предоставляет список доступных в данный момент сервисов. Список содержит по одному сервису в строке и в каждой строке содержится имя сервиса, протокол (e.g. "tcp") и номер порта.

Существует так же администативный интерфейс выполненный в виде внутреннего сервиса. Зарезервированным именем сервиса является "xadmin" и он всегда является внутренним сервисом. Для этого сервиса нужно указать номер порта и вероятно задать правила доступа, потому что никакой парольной защиты не существует. Используя телнет на этот порт можно получить у xinetd некоторую информацию.  

ПРИМЕЧАНИЯ

1.
Следующие атрибуты сервиса не могут быть изменены при переконфигурации: socket_type, wait, protocol, type.
2.
Когда атрибуты only_from и no_access не указаны для сервиса (непосредственно или через defaults) проверка адреса считается успешной (то есть доступ не запрещен)
3.
Проверка адреса основана на IP адресе удаленного хоста, а не на его доменном имени. Это сделано потому что определение IP адреса может занять довольно много времени (так как xinetd single-threaded процесс, то на время преобразования работа демона оказывается блокированной и он не может обрабатывать другие запросы.) Обратной стороной этой схемы является то что если IP адрес удаленного хоста изменился, то доступ для этого хоста может быть запрещен до переконфигурации xinetd. Вообще то отказ в доступе зависит от конкретных настроек системы. Например если адрес хоста с 1.2.3.4 сменился на 1.2.3.5 и only_from указан как 1.2.3.0 то хосту в доступе отказано не будет.
4.
Если указана опция регистрации USERID и удаленный хост не использует протокол идентификации в доступе не будет отказано если только не используется флаг IDONLY
5.
Перехват (Interception) осуществляется через запуск отдельного процесса который работает как фильтр между удаленным хостом(хостами) и локальным сервером. Очевидно что это снижает производительность и вам в пользу чего сделать выбор безопасности или производительности для каждого сервиса. Следующие таблицы иллюстрируют это. Первая показывает увеличение времени передачи датаграмм для UDP сервисов в зависимости от размера датаграммы. Для TCP сервисов мы измеряли снижение полосы пропускания при активизации опции перехвата посылая определенное количество данных с клиента на сервер. Снижение полосы пропускания преведено в байт в секунду и в процентах от значения полученного при отключенном перехвате. Все измерения были произведены на SparcStation IPC под управлением SunOS 4.1.

Datagram size (bytes)Latency (msec)
641.19
2561.51
10241.51
40963.58

Bytes sentBandwidth reduction
10000x64941 (1.2%)
10000x2564,231 (1.8%)
10000x1024319,300 (39.5%)
10000x4096824,461 (62.1%)

 

ПРИМЕР

#
# Sample configuration file for xinetd
# Примерный файл конфигурации  
#

defaults
{
log_type
= FILE /var/log/servicelog
log_on_success
= PID
log_on_failure
= HOST RECORD
only_from
= 128.138.193.0 128.138.204.0 128.138.209.0
only_from
= 128.138.252.1
instances
= 10
disabled
= rstatd
} # # Note 1: the protocol attribute is not required # Замечание 1: атрибут протокола не требуется # # Note 2: the instances attribute overrides the default # Замечание 2: Атрибуты в секциях переопределяют дефолтовые # service login {
socket_type
= stream
protocol
= tcp
wait
= no
user
= root
server
= /usr/etc/in.rlogind
instances
= UNLIMITED
} # # Note 1: the instances attribute overrides the default # Note 2: the log_on_success flags are augmented # Замечание 2: к флагу log_on_success добавлено значение # service shell {
socket_type
= stream
wait
= no
user
= root
instances
= UNLIMITED
server
= /usr/etc/in.rshd
log_on_success
+= HOST RECORD
} service ftp {
socket_type
= stream
wait
= no
nice
= 10
user
= root
server
= /usr/etc/in.ftpd
server_args
= -l
instances
= 4
log_on_success
+= DURATION HOST USERID
access_times
= 2:00-9:00 12:00-24:00
} # # This entry and the next one specify internal services. Since this # is the same service using a different socket type, the id attribute # is used to uniquely identify each entry # # Эта секция а также следующая описывают внутренние сервисы. Здесь одинаковые # сервисы используют различные типы сокетов, и атрибут id используется для # однозначного определения каждой секции # service echo {
id
= echo-stream
type
= INTERNAL
socket_type
= stream
user
= root
wait
= no
} service echo {
id
= echo-dgram
type
= INTERNAL
socket_type
= dgram
user
= root
wait
= no
} service servers {
type
= INTERNAL UNLISTED
protocol
= tcp
port
= 9099
socket_type
= stream
wait
= no
} # # Sample RPC service # Пример RPC сервиса # service rstatd {
type
= RPC
socket_type
= dgram
protocol
= udp
server
= /usr/etc/rpc.rstatd
wait
= yes
user
= root
rpc_version
= 2-4
env
= LD_LIBRARY_PATH=/etc/securelib
} # # Sample unlisted service # Пример umlisted сервиса # service unlisted {
type
= UNLISTED
socket_type
= stream
protocol
= tcp
wait
= no
server
= /home/user/some_server
port
= 20020
}
 

СМОТРИТЕ ДОПОЛНИТЕЛЬНО

xinetd(1L),

xinetd.log(5)

Postel J., Echo Protocol, RFC 862, May 1983

Postel J., Discard Protocol, RFC 863, May 1983

Postel J., Character Generator Protocol, RFC 864, May 1983

Postel J., Daytime Protocol, RFC 867, May 1983

Postel J., Harrenstien K., Time Protocol, RFC 868, May 1983

StJohns M., Identification Protocol, RFC 1413, February 1993

BUGS

Дополнительные ids групп не поддерживаются.
(Supplementary group ids are not supported.)

Если флаг INTERCEPT не используется, контроль адресов удаленного хоста не производится когда wait установлен в yes и socket_type - stream.

Если флаг INTERCEPT не используется, контроль адреса удаленного хоста для сервисов у которых wait - yes и socket_type - dgram выполняется только для первого пакета. Сервер может принимать пакеты с хостов не перечисленных с списках контроля доступа. Это может случаться с RPC сервисами.

Нет возможности поместить SPACE в переменную окружения.

Когда wait - yes и socket_type - stream, сокет переданный серверу может только принимать соединения (can only accept connections).

Флаг INTERCEPT не поддерживается для внутренних и multi-threaded сервисов.

Index


йЮПРЮ яЮИРЮ