Модуль 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>.
Объединение разделов конфигурации
При использовании любой директивы этого модуля в новом разделе конфигурации директивы этого модуля из предыдущих разделов конфигурации не наследуются.
См. также
© 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