Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_access_compat

Описание: Группировка правил авторизации на основе хоста (имени или IP-адреса)
Статус: Расширение
Идентификатор модуля: access_compat_module
Исходный файл: mod_access_compat.c
Совместимость: Доступен в Apache HTTP Server 2.3 как модуль совместимости с предыдущими версиями Apache httpd 2.x. Директивы, предоставляемые этим модулем, объявлены устаревшими в связи с переработкой авторизации. См. mod_authz_host

Краткое описание

Директивы, предоставляемые mod_access_compat, используются в разделах <Directory>, <Files> и <Location>, а также в файлах .htaccess для управления доступом к определённым частям сервера. Доступ можно контролировать на основе имени хоста клиента, IP-адреса или других характеристик запроса клиента, записанных в переменных окружения. Директивы Allow и Deny используются для указания клиентов, которым разрешён или запрещён доступ к серверу, а директива Order задаёт состояние доступа по умолчанию и настраивает взаимодействие директив Allow и Deny.

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

Примечание

Директивы, предоставляемые mod_access_compat, объявлены устаревшими в связи с появлением mod_authz_host. Технически возможно смешивать старые директивы, такие как Order, Allow или Deny, с новыми, такими как Require, но это не рекомендуется. Этот модуль создан для поддержки конфигураций, содержащих только старые директивы, чтобы упростить переход на версию 2.4. Дополнительную информацию см. в руководстве по обновлению.

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

Объединение разделов конфигурации

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

Директива Allow

Описание: Управляет тем, каким хостам разрешён доступ к области сервера
Синтаксис:
Allow from all|host|env=[!]env-variable [host|env=[!]env-variable] ...
Контекст: directory, .htaccess
Переопределение: Limit
Статус: Расширение
Модуль: mod_access_compat

Директива Allow определяет, каким хостам разрешён доступ к области сервера. Доступ можно контролировать по имени хоста, IP-адресу, диапазону IP-адресов или другим характеристикам запроса клиента, записанным в переменных окружения.

Первый аргумент этой директивы всегда — from. Последующие аргументы могут иметь одну из трёх форм. Если указано Allow from all, доступ разрешён всем хостам с учётом настроек директив Deny и Order, описанных ниже. Чтобы разрешить доступ к серверу только определённым хостам или группам хостов, хост можно указать в одном из следующих форматов:

Частичное доменное имя
Allow from example.org
Allow from .net example.edu

Доступ разрешён хостам, имена которых совпадают с этой строкой или заканчиваются ею. Совпадение проверяется только по полным компонентам, поэтому приведённый выше пример совпадёт с foo.example.org, но не совпадёт с fooexample.org. Эта конфигурация заставит Apache httpd выполнить двойной DNS-поиск IP-адреса клиента независимо от значения директивы HostnameLookups. Сначала для IP-адреса будет выполнен обратный DNS-поиск, чтобы найти связанное с ним имя хоста, а затем для этого имени будет выполнен прямой поиск, чтобы убедиться, что оно соответствует исходному IP-адресу. Доступ будет разрешён, только если результаты прямого и обратного DNS-поиска согласуются, а имя хоста соответствует заданному.

Полный IP-адрес
Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205

IP-адрес хоста, которому разрешён доступ

Частичный IP-адрес
Allow from 10.1
Allow from 10 172.20 192.168.2

Первые 1–3 байта IP-адреса для ограничения доступа к подсети.

Пара сеть/маска подсети
Allow from 10.1.0.0/255.255.0.0

Сеть a.b.c.d и маска подсети w.x.y.z. Для более точного ограничения доступа к подсети.

Запись сети в формате CIDR /nnn
Allow from 10.1.0.0/16

Аналогично предыдущему случаю, за исключением того, что маска подсети состоит из nnn старших битов, равных 1.

Обратите внимание, что последние три приведённых выше примера соответствуют одному и тому же набору хостов.

Адреса и подсети IPv6 можно указывать, как показано ниже:

Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10

Третий формат аргументов директивы Allow позволяет управлять доступом к серверу на основе наличия переменной окружения. Если указано Allow from env=env-variable, запросу разрешён доступ, если существует переменная окружения env-variable. Если указано Allow from env=!env-variable, запросу разрешён доступ, если переменная окружения env-variable не существует. Сервер позволяет гибко задавать переменные окружения на основе характеристик запроса клиента с помощью директив, предоставляемых mod_setenvif. Поэтому эту директиву можно использовать для разрешения доступа с учётом таких факторов, как User-Agent клиента (тип браузера), Referer или другие поля заголовка HTTP-запроса.

SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
<Directory "/docroot">
    Order Deny,Allow
    Deny from all
    Allow from env=let_me_in
</Directory>

В этом случае браузерам, строка user-agent которых начинается с KnockKnock/2.0, будет разрешён доступ, а всем остальным — запрещён.

Объединение разделов конфигурации

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

Директива Deny

Описание: Управляет тем, каким хостам запрещён доступ к серверу
Синтаксис:
Deny from all|host|env=[!]env-variable [host|env=[!]env-variable] ...
Контекст: directory, .htaccess
Переопределение: Limit
Статус: Расширение
Модуль: mod_access_compat

Эта директива позволяет ограничивать доступ к серверу на основе имени хоста, IP-адреса или переменных окружения. Аргументы директивы Deny идентичны аргументам директивы Allow.

Директива Order

Описание: Управляет состоянием доступа по умолчанию и порядком обработки директив Allow и Deny.
Синтаксис:
Order ordering
Значение по умолчанию:
Order Deny,Allow
Контекст: directory, .htaccess
Переопределение: Limit
Статус: Расширение
Модуль: mod_access_compat

Директива Order вместе с директивами Allow и Deny управляет трёхэтапной системой контроля доступа. На первом этапе обрабатываются либо все директивы Allow, либо все директивы Deny — в зависимости от директивы Order. На втором этапе обрабатываются остальные директивы (Deny или Allow). На третьем этапе обрабатываются все запросы, не соответствующие ни одной из директив первых двух этапов.

Обратите внимание, что обрабатываются все директивы Allow и Deny, в отличие от типичного межсетевого экрана, где используется только первое совпадение. Применяется последнее совпадение (это также отличается от типичного межсетевого экрана). Кроме того, порядок строк в файлах конфигурации не имеет значения: все строки Allow обрабатываются как одна группа, все строки Deny рассматриваются как другая группа, а состояние по умолчанию учитывается отдельно.

Порядок может быть одним из следующих:

Allow,Deny
Сначала проверяются все директивы Allow; должна совпасть хотя бы одна, иначе запрос отклоняется. Затем проверяются все директивы Deny. Если совпадает хотя бы одна, запрос отклоняется. Наконец, все запросы, не совпавшие ни с одной директивой Allow или Deny, по умолчанию запрещаются.
Deny,Allow
Сначала проверяются все директивы Deny; если совпадает хотя бы одна, запрос отклоняется, если только он также не совпадает с директивой Allow. Все запросы, не совпавшие ни с одной директивой Allow или Deny, разрешаются.
Mutual-failure
Этот порядок имеет тот же эффект, что и Order Allow,Deny, и объявлен устаревшим в пользу последнего.

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

Совпадение Результат Allow,Deny Результат Deny,Allow
Совпадает только Allow Запрос разрешён Запрос разрешён
Совпадает только Deny Запрос запрещён Запрос запрещён
Нет совпадений По умолчанию используется вторая директива: запрещено По умолчанию используется вторая директива: разрешено
Совпадают Allow и Deny Результат определяется последним совпадением: запрещено Результат определяется последним совпадением: разрешено

В следующем примере всем хостам в домене example.org разрешён доступ; всем остальным хостам доступ запрещён.

Order Deny,Allow
Deny from all
Allow from example.org

В следующем примере всем хостам в домене example.org разрешён доступ, кроме хостов в поддомене foo.example.org, которым доступ запрещён. Доступ хостам, не входящим в домен example.org, запрещён, поскольку состояние по умолчанию — Deny доступ к серверу.

Order Allow,Deny
Allow from example.org
Deny from foo.example.org

С другой стороны, если в последнем примере заменить Order на Deny,Allow, доступ будет разрешён всем хостам. Это происходит потому, что независимо от фактического порядка директив в файле конфигурации Allow from example.org обрабатывается последней и переопределяет Deny from foo.example.org. Доступ также будет разрешён всем хостам, не входящим в домен example.org, поскольку состояние по умолчанию — Allow.

Наличие директивы Order может повлиять на доступ к части сервера даже при отсутствии сопутствующих директив Allow и Deny, поскольку она влияет на состояние доступа по умолчанию. Например:

<Directory "/www">
    Order Allow,Deny
</Directory>

запретит весь доступ к каталогу /www, поскольку состояние доступа по умолчанию установлено в Deny.

Директива Order управляет порядком обработки директив доступа только в пределах каждой фазы обработки конфигурации сервера. Это означает, например, что директива Allow или Deny, расположенная в разделе <Location>, всегда будет обработана после директивы Allow или Deny, расположенной в разделе <Directory> или файле .htaccess, независимо от значения директивы Order. Подробные сведения об объединении разделов конфигурации см. в документации Как работают разделы Directory, Location и Files.

Объединение разделов конфигурации

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

Директива Satisfy

Описание: Взаимодействие контроля доступа на уровне хоста и аутентификации пользователя
Синтаксис:
Satisfy Any|All
Значение по умолчанию:
Satisfy All
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_access_compat
Совместимость: На поведение влияют директивы <Limit> и <LimitExcept> в версии 2.0.51 и более поздних

Политика доступа, если используются обе директивы Allow и Require. Параметр может иметь значение All или Any. Эта директива полезна только в том случае, если доступ к определённой области ограничен одновременно именем пользователя и паролем и адресом хоста клиента. В этом случае поведение по умолчанию (All) требует, чтобы клиент прошёл проверку ограничения доступа по адресу и ввёл действительные имя пользователя и пароль. При использовании параметра Any клиенту будет разрешён доступ, если он пройдёт проверку ограничения по хосту или введёт действительные имя пользователя и пароль. Это можно использовать, чтобы ограничить доступ к области паролем, но разрешить клиентам с определённых адресов входить без запроса пароля.

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

Require valid-user
Allow from 192.168.1
Satisfy Any

Ещё один распространённый способ применения директивы Satisfy — ослабить ограничения доступа для подкаталога:

<Directory "/var/www/private">
    Require valid-user
</Directory>

<Directory "/var/www/private/public">
    Allow from all
    Satisfy Any
</Directory>

В приведённом выше примере для каталога /var/www/private потребуется аутентификация, но для каталога /var/www/private/public она не потребуется.

Начиная с версии 2.0.51 директивы Satisfy можно ограничить определёнными методами с помощью разделов <Limit> и <LimitExcept>.

Объединение разделов конфигурации

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

См. также

  • Allow
  • Require

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_access_compat.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API