hosts.allow — команда Linux

hosts_access — формат доступа к файлам управления Linux.

Описание

Эта страница руководства описывает Linux как простой язык управления доступом, основанный на шаблонах клиента (имя / адрес хоста, имя пользователя) и сервера (имя процесса, имя / адрес хоста). Примеры приведены в конце. Нетерпеливому читателю рекомендуется перейти к разделу «Примеры» для быстрого ознакомления. Расширенная версия языка управления доступом описана в документе hosts_options (5). Расширения включаются во время сборки программы сборкой с -DPROCESS_OPTIONS.

В следующем тексте daemon — это имя процесса сетевого демона, а client — это имя и / или адрес службы, запрашивающей хост. Имена процессов сетевого демона указываются в файле конфигурации inetd.

Файлы контроля доступа

Программное обеспечение контроля доступа проверяет два файла. Поиск останавливается на первом совпадении.

Доступ будет предоставлен, когда пара (демон, клиент) совпадет с записью в файле /etc/hosts.allowfile.

В противном случае в доступе будет отказано, если пара (daemon, client) совпадет с записью в файле / etc / hosts.deny.

В противном случае доступ будет предоставлен.

Несуществующий файл контроля доступа рассматривается как пустой файл. Таким образом, контроль доступа можно отключить, не предоставляя файлы контроля доступа.

Правила контроля доступа

Каждый файл контроля доступа состоит из нуля или более строк текста. Эти строки обрабатываются в порядке появления. Поиск заканчивается, когда совпадение найдено.

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

Пустые строки или строки, начинающиеся с символа `# ‘, игнорируются. Это позволяет вам вставлять комментарии и пробелы, чтобы таблицы было легче читать.

Все остальные строки должны соответствовать следующему формату, между [] необязательно:

daemon_list: client_list [: shell_command]

daemon_list — это список из одного или нескольких имен процессов демона (значения argv [0]) или подстановочных знаков (см. ниже).

client_list — это список из одного или нескольких имен хостов, адресов хостов, шаблонов или подстановочных знаков (см. ниже), которые будут сопоставляться с именем или адресом хоста клиента.

Более сложные формы daemon @ host и user @ host описаны в разделах, посвященных шаблонам конечных точек сервера и поиску имени пользователя клиента, соответственно.

Элементы списка должны быть разделены пробелами и / или запятыми.

За исключением поисков сетевых групп NIS (YP), все проверки контроля доступа не чувствительны к регистру.

Узоры

Язык управления доступом реализует следующие шаблоны:

Строка, которая начинается с `. ‘ характер. Имя хоста сопоставляется, если последние компоненты его имени соответствуют указанному шаблону. Например, шаблон `.tue.nl ‘соответствует имени хоста` wzv.win.tue.nl’.

Строка, заканчивающаяся символом `. ‘ характер. Адрес хоста сопоставляется, если его первые числовые поля соответствуют заданной строке. Например, шаблон `131.155. ‘ соответствует адресу (почти) каждого хоста в сети Эйндховенского университета (131.155.x.x).

Строка, начинающаяся с символа `@ ‘, обрабатывается как имя сетевой группы NIS (ранее YP). Имя хоста сопоставляется, если оно является членом хоста указанной сетевой группы. Соответствия сетевых групп не поддерживаются для имен процессов демона или для имен пользователей клиента.

Выражение вида `n.n.n.n / m.m.m.m ‘интерпретируется как пара` net / mask’. Адрес хоста IPv4 сопоставляется, если `net ‘равно битовому AND адреса и’ mask ‘. Например, шаблон net / mask `131.155.72.0/255.255.254.0 ‘соответствует каждому адресу в диапазоне от` 131.155.72.0’ до `131.155.73.255 ‘.

Выражение вида `[n: n: n: n: n: n: n: n] / m ‘интерпретируется как пара` [net] / prefixlen’. Адрес хоста IPv6 совпадает, если префиксные биты net равны префиксным битам адреса. Например, шаблон [net] / prefixlen `[3ffe: 505: 2: 1 ::] / 64 ‘соответствует каждому адресу в диапазоне от 3ffe: 505: 2: 1 :: до 3ffe: 505: 2: 1: FFFF: FFFF: FFFF: FFFF.

Строка, которая начинается с символа `/ ‘, рассматривается как имя файла. Имя хоста или адрес совпадают, если оно соответствует какому-либо имени хоста или шаблону адреса, указанному в названном файле. Формат файла — ноль или более строк с нулем или более имен хостов или шаблонов адресов, разделенных пробелами. Шаблон имени файла может использоваться везде, где можно использовать имя хоста или шаблон адреса.

Подстановочные знаки `* ‘и`?’ может использоваться для сопоставления имен хостов или IP-адресов. Этот метод сопоставления нельзя использовать вместе с сопоставлением `net / mask ‘, сопоставление имени хоста начинается с`.’ или сопоставление IP-адреса, заканчивающееся на `. ‘.

Wildcards

Язык управления доступом поддерживает явные подстановочные знаки, включая:

‘ВСЕ’

Универсальный шаблон, всегда совпадает.

‘МЕСТНЫЙ’

Соответствует любому хосту, имя которого не содержит символ точки.

‘UNKNOWN’

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

‘ИЗВЕСТЕН’

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

‘Paranoid’

Соответствует любому хосту, чье имя не соответствует его адресу. Когда tcpd создается с параметром -DPARANOID (режим по умолчанию), он отбрасывает запросы от таких клиентов даже перед просмотром таблиц контроля доступа. Сборка без -DPARANOID, когда вы хотите больше контроля над такими запросами.

«» ОПЕРАТОРЫ

‘КРОМЕ’

Использование по назначению имеет вид: `list_1 EXCEPT list_2 ‘; эта конструкция соответствует всему, что соответствует list_1, если не соответствует list_2. Оператор EXCEPT может использоваться в daemon_lists и client_lists. Оператор EXCEPT может быть вложенным: если язык управления разрешит использование скобок, то `EXCEPT b EXCEPT c ‘будет анализироваться как` (EXCEPT (b EXCEPT c))’. 

Команды оболочки

Если первое согласованное правило контроля доступа содержит команду оболочки, эта команда подвергается% замен (см. Следующий раздел). Результат выполняется дочерним процессом / bin / sh со стандартным вводом, выводом и ошибкой, связанной с / dev / null. Укажите `» в конце команды терминала, если вы не хотите ждать, пока она не завершится.

Команды оболочки не должны полагаться на параметр PATH в inetd. Вместо этого им следует использовать абсолютные имена путей или начинать с явного выражения PATH = любой другой.

Документ hosts_options (5) описывает альтернативный язык, который использует поле команды оболочки другим и несовместимым способом.

% Расширений

В командах оболочки доступны следующие расширения:

% a (% A) — Адрес хоста клиента (сервера).

% с — Информация о клиенте: user @ host, user @ address, имя хоста или просто адрес, в зависимости от объема доступной информации.

% d — Имя процесса демона (значение argv [0]).

% h (% H) — Имя или адрес хоста клиента (сервера), если имя хоста недоступно.

% n (% N) — Имя хоста клиента (сервера) (или «неизвестно», или «параноик»).

%п — Идентификатор процесса демона.

% s — Информация о сервере: daemon @ host, daemon @ address или просто имя демона, в зависимости от объема доступной информации.

% U — Имя пользователя клиента (или «неизвестно»).

%% — Расширяется до одного символа `% ‘.

Символы в% расширениях, которые могут запутать оболочку, заменяются символами подчеркивания.

Шаблоны конечных точек сервера

Чтобы отличить клиентов по сетевому адресу, к которому они подключаются, используйте шаблоны в форме:

имя_процесса @ host_pattern: список_клиентов …

Подобные шаблоны можно использовать, когда у машины разные интернет-адреса с разными интернет-именами. Поставщики услуг могут использовать эту возможность, чтобы предлагать FTP, GOPHER или WWW архивы с именами в Интернете, которые могут даже принадлежать различным организациям. Смотрите также параметр `twist ‘в документе hosts_options (5). Некоторые системы (Solaris, FreeBSD) могут иметь более одного интернет-адреса на одном физическом интерфейсе; с другими системами вам, возможно, придется прибегнуть к псевдоинтерфейсам SLIP или PPP, которые живут в выделенном сетевом адресном пространстве.

Host_pattern подчиняется тем же правилам синтаксиса, что и имена и адреса хостов в контексте client_list. Обычно информация о конечных точках сервера доступна только для сервисов, ориентированных на соединение.

Поиск имени клиента

Когда клиентский хост поддерживает протокол RFC 931 или одного из его потомков (TAP, IDENT, RFC 1413), программы-оболочки могут получать дополнительную информацию о владельце соединения. Информация об имени пользователя клиента, когда она доступна, регистрируется вместе с именем хоста клиента и может использоваться для сопоставления с такими шаблонами, как:

daemon_list: … user_pattern @ host_pattern …

Оболочки демона можно настроить во время компиляции для выполнения поиска по имени пользователя на основе правил (по умолчанию) или для всегда опроса клиентского хоста. В случае поиска имени пользователя по правилам приведенное выше правило будет вызывать поиск имени пользователя только тогда, когда и daemon_list, и host_patternmatch.

Шаблон пользователя имеет тот же синтаксис, что и шаблон процесса демона, поэтому применяются те же шаблоны (членство в сетевой группе не поддерживается). Однако не стоит увлекаться поиском имени пользователя.

Информация имени пользователя клиента не может быть доверенной, когда она больше всего необходима, то есть когда клиентская система была взломана. В общем, ALL и (UN) KNOWN являются единственными шаблонами имен пользователей, которые имеют смысл.

Поиск имени пользователя возможен только для служб на основе TCP и только в том случае, если на клиентском хосте запущен подходящий демон; во всех остальных случаях результат «неизвестен».

Хорошо известная ошибка ядра UNIX может привести к потере обслуживания, когда поиск по имени пользователя блокируется брандмауэром. Оболочка README документ описывает процедуру, чтобы выяснить, есть ли в вашем ядре эта ошибка.

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

Выборочный поиск по имени пользователя может облегчить последнюю проблему. Например, правило вроде:
daemon_list: @pcnetgroup ALL @ ALL

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

Обнаружение атак спуфинга адресов

Недостаток в генераторе порядковых номеров многих реализаций TCP / IP позволяет злоумышленникам легко выдавать себя за доверенных хостов и проникать через, например, службу удаленной оболочки. Служба IDENT (RFC931 и т. Д.) Может использоваться для обнаружения таких и других атак, связанных с подделкой адресов узлов.

Прежде чем принять запрос клиента, упаковщики могут использовать службу IDENT, чтобы выяснить, что клиент вообще не отправлял запрос. Когда клиентский хост предоставляет услугу IDENT, отрицательный результат поиска IDENT (клиент совпадает с `UNKNOWN @ host ‘) является убедительным доказательством атаки спуфинга хоста.

Положительный результат поиска IDENT (клиент соответствует `KNOWN @ host ‘) менее заслуживает доверия. Злоумышленник может подделать как клиентское соединение, так и поиск IDENT, хотя сделать это намного сложнее, чем подделать только клиентское соединение. Может также случиться так, что сервер IDENT клиента лжет.

Поиск IDENT не работает со службами UDP.

Примеры

Язык достаточно гибок, чтобы различные типы политики контроля доступа можно было выразить с минимальными усилиями. Хотя в языке используются две таблицы контроля доступа, наиболее распространенные политики могут быть реализованы, если одна из таблиц является тривиальной или даже пустой.

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

В примерах используются имена хостов и доменов. Их можно улучшить, включив информацию об адресе и / или сети / маске, чтобы уменьшить влияние временных сбоев поиска на сервере имен.

В основном закрыто

В этом случае доступ запрещен по умолчанию. Доступ разрешен только явно авторизованным хостам.

Политика по умолчанию (без доступа) реализована с помощью простого файла запрета:

/etc/hosts.deny: ВСЕ: ВСЕ

Это запрещает все услуги всем хостам, если им не разрешен доступ по записям в файле allow.

Явно авторизованные хосты перечислены в файле разрешения. Например:

/etc/hosts.allow: ALL: LOCAL @some_netgroup
ALL: .foobar.edu ЗА ИСКЛЮЧЕНИЕ Terminalserver.foobar.edu

Первое правило разрешает доступ от хостов в локальном домене (без `. ‘В имени хоста) и от членов сетевой группы some_netgroup. Второе правило разрешает доступ со всех хостов в домене thefoobar.edu (обратите внимание на начальную точку), за исключением Terminalserver.foobar.edu.

В основном открытый

Здесь доступ предоставляется по умолчанию; только явно указанные хосты получают отказ в обслуживании.

Политика по умолчанию (доступ предоставлен) делает файл разрешения избыточным, чтобы его можно было опустить. Явно неавторизованные хосты перечислены в файле deny. Например:

/etc/hosts.deny: ALL: some.host.name, .some.domain
ВСЕ, КРОМЕ in.fingerd: other.host.name, .other.domain

Первое правило запрещает некоторым хостам и доменам все сервисы; второе правило все еще разрешает запросы пальцев от других хостов и доменов.

Ловушки

Следующий пример разрешает запросы tftp от хостов в локальном домене (обратите внимание на начальную точку). Запросы от любых других хостов отклоняются. Вместо запрошенного файла злоумышленнику отправляется зондирование пальца. Результат отправляется суперпользователю.

/etc/hosts.allow:

in.tftpd: LOCAL, .my.domain
/etc/hosts.deny:
in.tftpd: ALL: spawn (/ some / where / safe_finger -l @% h | \
/ usr / ucb / mail -s% d-% h root)

Команда safe_finger поставляется с оболочкой tcpd и должна быть установлена ​​в подходящем месте. Это ограничивает возможный ущерб от данных, отправляемых удаленным сервером finger. Это дает лучшую защиту, чем стандартная команда пальцев.

Расширение последовательностей% h (клиентский хост) и% d (имя службы) описано в разделе о командах оболочки.

Не заминируйте своего пальца демоном, если вы не готовы к бесконечным петлям пальцев.

В сетевых брандмауэрах этот трюк может быть продвинут еще дальше. Типичный сетевой брандмауэр предоставляет ограниченный набор услуг для внешнего мира. Все другие сервисы могут быть «прослушены», как в примере выше tftp. Результат — отличная система раннего предупреждения. 

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

tcpd (8) программа-демон tcp / ip.
tcpdchk (8), tcpdmatch (8), тестовые программы.

Используйте команду man (% man), чтобы увидеть, как команда используется на вашем компьютере.

Ссылка на основную публикацию