Модуль Apache mod_access_compat
| Описание: | Группирование разрешений на основе хоста (имя или IP-адрес) |
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | access_compat_module |
| Файл исходного кода: | mod_access_compat.c |
| Совместимость: | Доступен в Apache HTTP Server 2.3 как модуль совместимости с предыдущими версиями Apache httpd 2.x. Директивы, предоставляемые этим модулем, устарели из-за новой рефакторизации authz. См. 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] ... |
| Контекст: | каталог, .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. Он выполнит обратный DNS-запрос для IP-адреса, чтобы найти связанное имя хоста, а затем прямой запрос по имени хоста, чтобы убедиться, что оно соответствует исходному 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.
Обратите внимание, что последние три примера соответствуют одному и тому же набору хостов.
IP-адреса IPv6 и подсети 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] ... |
| Контекст: | каталог, .htaccess |
| Переопределение: | Limit |
| Статус: | Расширение |
| Модуль: | mod_access_compat |
Данная директива позволяет ограничивать доступ к серверу на основе имени хоста, IP-адреса или переменных среды. Аргументы для директивы Deny идентичны аргументам для директивы Allow.
Директива Order
| Описание: | Управляет стандартным состоянием доступа и порядком, в котором Allow и Deny оцениваются. |
|---|---|
| Синтаксис: | Order ordering |
| По умолчанию: | Order Deny,Allow |
| Контекст: | каталог, .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 . Для получения подробной информации о слиянии разделов конфигурации см. документацию по Как работают разделы каталога, расположения и файлов.
Слияние разделов конфигурации
При использовании любой директивы данного модуля в новом разделе конфигурации директивы этого модуля не наследуются из предыдущих разделов конфигурации.
Директива Satisfy
| Описание: | Взаимодействие между контролем доступа на уровне хоста и аутентификацией пользователя |
|---|---|
| Синтаксис: | Satisfy Any|All |
| По умолчанию: | Satisfy All |
| Контекст: | каталог, .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