название
hosts_access - формат файлов управления доступом к хосту Linux.
Описание
На этой странице руководства описывается Linux как простой язык управления доступом, основанный на шаблонах клиентов (имя хоста / адрес, имя пользователя) и сервер (имя процесса, имя узла / адрес). Примеры приведены в конце. Для нетерпеливого читателя рекомендуется перейти к разделу «Примеры» для быстрого введения. Расширенная версия языка управления доступом описана в hosts_options (5) документа. Расширения включаются во время сборки программы, создавая с помощью -DPROCESS_OPTIONS.
В следующем тексте, демон это имя процесса процесса сетевого демона и клиент это имя и / или адрес службы запроса хоста. Имена процессов сетевого демона указаны в файле конфигурации inetd.
Файлы контроля доступа
Программное обеспечение контроля доступа поддерживает два файла. Поиск останавливается в первом матче.
Доступ будет предоставлен, если пара (демона, клиента) будет соответствовать записи в /etc/hosts.allow файл.
В противном случае доступ будет отклонен, если пара (демона, клиента) соответствует записи в /etc/hosts.deny файл.
В противном случае доступ будет предоставлен.
Не существующий файл управления доступом обрабатывается как пустой файл. Таким образом, управление доступом может быть отключено путем предоставления файлов управления доступом.
Правила контроля доступа
Каждый файл управления доступом состоит из нуля или более строк текста. Эти строки обрабатываются в порядке появления. Поиск завершается, когда найдено совпадение.
Символ новой строки игнорируется, когда ему предшествует символ обратной косой черты. Это позволяет вам разбить длинные строки, чтобы их было легче редактировать.
Пустые строки или строки, начинающиеся с символа `# ', игнорируются. Это позволяет вставлять комментарии и пробелы, чтобы таблицы легче читать.
Все остальные строки должны соответствовать следующему формату, вещи между являются необязательными:
daemon_list: client_list : shell_command
daemon_list представляет собой список одного или нескольких имен процессов демона (значения argv 0) или подстановочные знаки (см. ниже).
список клиентов представляет собой список из одного или нескольких имен хостов, адресов хостов, шаблонов или подстановочных знаков (см. ниже), которые будут сопоставляться с именем или адресом хоста клиента.
Более сложные формы демон @ хост а также пользователь @ хост объясняются в разделах на шаблонах конечных точек сервера и на проверках имени пользователя клиента, соответственно.
Элементы списка должны быть разделены пробелами и / или запятыми.
За исключением поиска в сетях NIS (YP), все проверки контроля доступа нечувствительны к регистру.
Узоры
Язык управления доступом реализует следующие шаблоны:
Строка, начинающаяся с символа `. ' персонаж. Имя хоста сопоставляется, если последние компоненты его имени соответствуют указанному шаблону. Например, шаблон `.tue.nl 'соответствует имени узла` wzv.win.tue.nl'.
Строка, которая заканчивается символом `. ' персонаж. Адрес хоста сопоставляется, если его первые числовые поля соответствуют заданной строке. Например, шаблон `131.155. ' соответствует адресу (почти) каждого хоста в сети Университета Эйндховена (131.155.x.x).
Строка, начинающаяся с символа `@ ', рассматривается как имя netgroup NIS (ранее YP). Имя хоста сопоставляется, если он является членом хоста указанной сетевой группы. Матчи Netgroup не поддерживаются для имен процессов демона или для имен пользователей клиента.
Выражение формы «n.n.n.n / m.m.m.m» интерпретируется как пара «сеть / маска». Адрес хоста IPv4 сопоставляется, если `net 'равно побитовой И адреса и маски. Например, шаблон 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 сопоставляется, если биты `prefixlen '` net' равны битам `prefixlen 'адреса. Например, шаблон 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))'.
Команды оболочки
Если первое правило контроля доступа содержит команду оболочки, эта команда подвергается% замен (см. Следующий раздел). Результат выполняется / Бен / ш дочерний процесс со стандартным входом, выходом и ошибкой, подключенной к / DEV / нуль , Укажите «&» в конце команды терминала, если вы не хотите ждать, пока она не завершится.
Команды Shell не должны полагаться на настройку PATH для inetd. Вместо этого они должны использовать абсолютные имена путей, или они должны начинаться с явного выражения PATH = any.
hosts_options (5) документ описывает альтернативный язык, который использует поле командной оболочки другим и несовместимым образом.
% Расширения
В командах оболочки доступны следующие расширения:
% a (% A) - Адрес хоста клиента (сервера).
% с - Информация о клиенте: user @ host, user @ address, имя хоста или просто адрес, в зависимости от того, сколько информации доступно.
% d - Имя процесса демона (значение argv 0).
% h (% H) - Имя или адрес хоста клиента (сервера), если имя хоста недоступно.
% n (% N) - Имя хоста клиента (сервера) (или «неизвестно» или «параноидально»).
%п - Идентификатор процесса демона.
% s - Информация о сервере: daemon @ host, daemon @ address или просто имя демона, в зависимости от того, сколько информации доступно.
% U - Имя пользователя клиента (или «неизвестно»).
%% - Расширяется до одного символа `% '.
Символы в% расширения, которые могут запутать оболочку, заменяются символами подчеркивания.
Шаблоны конечных точек сервера
Чтобы отличать клиентов по сетевому адресу, к которому они подключаются, используйте шаблоны формы:
имя_процесса @ host_pattern: client_list …
Такие шаблоны можно использовать, когда на компьютере есть разные интернет-адреса с разными именами интернет-хостов. Поставщики услуг могут использовать этот объект, чтобы предлагать архивы FTP, GOPHER или WWW с именами интернет-сайтов, которые могут принадлежать другим организациям. См. Также параметр «поворот» в документе 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_pattern матч.
Шаблон пользователя имеет тот же синтаксис, что и шаблон процесса демона, поэтому применяются одинаковые подстановочные знаки (членство в netgroup не поддерживается). Однако не следует увлекаться поиском имени пользователя.
Информация о имени пользователя клиента не может быть доверена, когда это необходимо больше всего, то есть когда клиентская система была скомпрометирована. В общем, ALL и (UN) KNOWN - это единственные шаблоны имен пользователей, которые имеют смысл.
Поиск имени пользователя возможен только с помощью служб на основе TCP и только тогда, когда хост-клиент запускает подходящий демон; во всех остальных случаях результат «неизвестен».
Известная ошибка ядра UNIX может привести к потере обслуживания, когда поиск пользователей будет заблокирован брандмауэром. В документе README обертки описывается процедура, чтобы выяснить, имеет ли ваше ядро эту ошибку.
Поиск пользователей может привести к заметным задержкам для пользователей, не относящихся к UNIX. Тайм-аут по умолчанию для поиска имени пользователя составляет 10 секунд: слишком короткий, чтобы справляться с медленными сетями, но достаточно долго, чтобы раздражать пользователей ПК.
Выборочные поисковые запросы пользователей могут облегчить последнюю проблему. Например, правило вроде:daemon_list: @pcnetgroup ALL @ ALL
будет соответствовать членам netgroup без учета имени пользователя, но будет выполнять поиск имени пользователя со всеми другими системами. Недостаток генератора порядковых номеров многих реализаций TCP / IP позволяет злоумышленникам легко олицетворять доверенные хосты и прорываться через, например, удаленную оболочную службу.Служба IDENT (RFC931 и т. Д.) Может быть использована для обнаружения таких и других атак слияния адресов хоста. Перед принятием клиентского запроса обертки могут использовать службу IDENT, чтобы узнать, что клиент вообще не отправил запрос. Когда клиентский хост предоставляет службу IDENT, отрицательный результат поиска IDENT (клиент соответствует `UNKNOWN @ host ') является убедительным доказательством атаки подмены хостов. Положительный результат поиска IDENT (клиент соответствует `KNOWN @ host ') менее достоверен. Злоумышленник может обманывать как клиентское соединение, так и поиск IDENT, хотя сделать это намного сложнее, чем спуфинг только клиентского соединения. Возможно также, что клиентский IDENT-сервер лежит. Примечание. Запросы IDENT не работают с службами UDP. Язык достаточно гибкий, что различные типы политики контроля доступа могут быть выражены с минимумом суеты. Хотя язык использует две таблицы контроля доступа, наиболее распространенные политики могут быть реализованы, если одна из таблиц является тривиальной или даже пустой. При чтении приведенных ниже примеров важно понять, что таблица разрешений проверяется перед таблицей deny, что поиск завершается, когда найдено совпадение, и этот доступ предоставляется, когда совпадение не найдено вообще. В примерах используются имена хостов и доменов. Их можно улучшить, включив информацию о адресе и / или сети / сетевой маске, чтобы уменьшить влияние сбоев поиска временного имени сервера. В этом случае доступ запрещен по умолчанию. Разрешен доступ только к явно разрешенным узлам. Политика по умолчанию (без доступа) реализована с помощью тривиального файла запрета: /etc/hosts.deny: ВСЕ: ВСЕ Это отрицает всю службу для всех хостов, если только им не разрешен доступ к записям в файле разрешения. Явным образом разрешенные хосты перечислены в файле разрешения. Например: /etc/hosts.allow: ALL: LOCAL @some_netgroupALL: .foobar.edu EXCEPT terminalerver.foobar.edu Первое правило разрешает доступ с хостов в локальном домене (нет «.» В имени хоста) и от членов some_netgroup сетевая_группа. Второе правило разрешает доступ со всех хостов в foobar.edu домен (обратите внимание на ведущую точку), за исключением terminalserver.foobar.edu . При этом доступ предоставляется по умолчанию; только явно указанным хостам отказано в обслуживании. Политика по умолчанию (предоставленный доступ) делает разрешенный файл избыточным, так что его можно опустить. Явные неавторизованные хосты перечислены в файле deny. Например: /etc/hosts.deny: ALL: some.host.name, .some.domainALL EXCEPT 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 daemon wrapper program.tcpdchk (8), tcpdmatch (8), тестовые программы.
Важный: Использовать человек команда ( % человек ), чтобы увидеть, как команда используется на вашем конкретном компьютере. Обнаружение атак на спуфинг адресов
Примеры
В основном закрыто
В основном открыт
Ловушки ловушки
Смотрите также




