Пункт 95. Модуль Apache mod_access_compat
Предоставленные директивы 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 from all|host|env=[!]env-variable
[host|env=[!]env-variable] ... |
Контекст: | каталог, .htaccess |
Переопределить: | Ограничение |
Положение дел: | Расширение |
Модуль: | mod_access_compat |
Директива Allow
влияет на то, какие хосты могут получить доступ к области сервера. Доступ можно контролировать по имени хоста, IP-адресу, диапазону IP-адресов или другим характеристикам клиентского запроса, зафиксированным в переменных среды.
Первым аргументом этой директивы всегда является
from
. Последующие аргументы могут принимать три различных формы. Если Allow from all
указано, то всем хостам разрешен доступ, в соответствии с настройкой директив
Deny
и Order
, как описано ниже. Чтобы разрешить доступ к серверу только определенным хостам или группам хостов, хост можно указать в любом из следующих форматов:
- (частично) доменное имя
-
Разрешить с example.org
Разрешить из .net example.edu
Хостам, чьи имена совпадают с этой строкой или оканчиваются на нее, разрешен доступ. Сопоставляются только полные компоненты, поэтому приведенный выше пример будет соответствовать, foo.example.org
но не будет соответствовать fooexample.org
. Эта конфигурация заставит Apache httpd выполнять двойной поиск DNS по IP-адресу клиента, независимо от настройки директивы HostnameLookups
. Он выполнит обратный поиск DNS по IP-адресу, чтобы найти связанное имя хоста, а затем выполнит прямой поиск по имени хоста, чтобы убедиться, что оно соответствует исходному IP-адресу. Доступ будет разрешен только в том случае, если прямой и обратный DNS согласованы и совпадения имени хоста.
- Полный IP-адрес
-
Разрешить с 10.1.2.3
Разрешить от 192.168.1.104 192.168.1.205
IP-адрес хоста, которому разрешен доступ
- Частичный IP-адрес
-
Разрешить с 10.1
Разрешить от 10 172,20 192 168,2
Первые 1–3 байта IP-адреса для ограничения подсети.
- Пара сеть/сетевая маска
-
Разрешить с 10.1.0.0/255.255.0.0
Сеть abcd и сетевая маска wxyz Для более точного ограничения подсети.
- Спецификация network/nnn CIDR
-
Разрешить с 10.1.0.0/16
Аналогичен предыдущему случаю, за исключением того, что маска сети состоит из nnn старших битов 1.
Обратите внимание, что последние три приведенных выше примера соответствуют одному и тому же набору хостов.
Адреса IPv6 и подсети IPv6 можно указать, как показано ниже:
Разрешить с 2001:db8::a00:20ff:fea7:ccea
Разрешить с 2001:db8::a00:20ff:fea7:ccea/10
Третий формат аргументов директивы
Allow
позволяет управлять доступом к серверу на основе существования переменной среды. Когда указано, запросу разрешается доступ, если существует переменная окружения env-variable
. Если указано, то запросу разрешается доступ, если переменная окружения env-variable не существует. Сервер предоставляет возможность гибко задавать переменные среды на основе характеристик клиентского запроса с помощью директив, предоставляемых
. Следовательно, эту директиву можно использовать для разрешения доступа на основе таких факторов, как клиенты
(тип браузера), или другие поля заголовка HTTP-запроса. Allow from
env=env-variable
Allow from env=!env-variable
mod_setenvif
User-Agent
Referer
SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
<Каталог "/docroot">
Порядок Запретить, Разрешить
Запретить от всех
Разрешить из env=let_me_in
</Каталог>
В этом случае браузерам со строкой пользовательского агента, начинающейся с, KnockKnock/2.0
будет разрешен доступ, а всем остальным будет отказано.
Объединение разделов конфигурации
Когда любая директива, предоставляемая этим модулем, используется в новом разделе конфигурации, никакие директивы, предоставляемые этим модулем, не наследуются от предыдущих разделов конфигурации.
Запретить директиву
Описание: | Контролирует, каким хостам запрещен доступ к серверу |
Синтаксис: | Deny from all|host|env=[!]env-variable
[host|env=[!]env-variable] ... |
Контекст: | каталог, .htaccess |
Переопределить: | Ограничение |
Положение дел: | Расширение |
Модуль: | mod_access_compat |
Эта директива позволяет ограничить доступ к серверу на основе имени хоста, IP-адреса или переменных среды. Аргументы директивы Deny
идентичны аргументам директивы Allow
.
Директива о порядке
Описание: | Управляет состоянием доступа по умолчанию и порядком, в котором
оцениваются Allow и . Deny |
Синтаксис: | Order ordering |
По умолчанию: | Order Deny,Allow |
Контекст: | каталог, .htaccess |
Переопределить: | Ограничение |
Положение дел: | Расширение |
Модуль: | 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
и устарел в его пользу.
Ключевые слова могут быть разделены только запятой;
между ними не допускается пробел .
Соответствовать |
Разрешить, Запретить результат |
Запретить, Разрешить результат |
Только совпадение разрешено |
Запрос разрешен |
Запрос разрешен |
Соответствовать только отказу |
Запрос отклонен |
Запрос отклонен |
Не совпадает |
По умолчанию вторая директива: Denied |
По умолчанию вторая директива: разрешено |
Совпадение как Разрешить, так и Запретить |
Финальный контроль матча: Отказано |
Финальный контроль матча: разрешено |
В следующем примере всем хостам в домене example.org разрешен доступ; всем остальным хостам отказано в доступе.
Порядок Запретить, Разрешить
Запретить от всех
Разрешить с example.org
В следующем примере всем хостам в домене example.org разрешен доступ, за исключением хостов в поддомене foo.example.org, которым доступ запрещен. Всем хостам, не входящим в домен example.org, отказано в доступе, потому что состояние по умолчанию — Deny
доступ к серверу.
Заказать Разрешить, Запретить
Разрешить с example.org
Отклонить от foo.example.org
С другой стороны, если Order
в последнем примере изменить на Deny,Allow
, всем хостам будет разрешен доступ. Это происходит из-за того, что независимо от фактического порядка следования директив в конфигурационном файле директивы
Allow from example.org
будут оцениваться последними и переопределять директивы Deny from foo.example.org
. Всем хостам, не входящим в example.org
домен, также будет разрешен доступ, поскольку состояние по умолчанию — Allow
.
Наличие директивы Order
может повлиять на доступ к части сервера даже при отсутствии сопутствующих Allow
и Deny
директив из-за ее влияния на состояние доступа по умолчанию. Например,
<Каталог "/www">
Заказать Разрешить, Запретить
</Каталог>
будет запрещать любой доступ к /www
каталогу, поскольку состояние доступа по умолчанию установлено на
Deny
.
Директива Order
управляет порядком обработки директивы доступа только в рамках каждой фазы обработки конфигурации сервера. Это подразумевает, например, что
директива Allow
or Deny
, встречающаяся в
<Location>
разделе, всегда будет оцениваться после директивы Allow
or Deny
, встречающейся в
<Directory>
разделе или
.htaccess
файле, независимо от установки директивы
Order
. Дополнительные сведения об объединении разделов конфигурации см. в документации о том, как работают разделы «Каталог», «Местоположение» и «Файлы».
Объединение разделов конфигурации
Когда любая директива, предоставляемая этим модулем, используется в новом разделе конфигурации, никакие директивы, предоставляемые этим модулем, не наследуются от предыдущих разделов конфигурации.
Удовлетворить директиву
Описание: | Взаимодействие между контролем доступа на уровне хоста и аутентификацией пользователя |
Синтаксис: | Satisfy Any|All |
По умолчанию: | Satisfy All |
Контекст: | каталог, .htaccess |
Переопределить: | Аутконфиг |
Положение дел: | Расширение |
Модуль: | mod_access_compat |
Совместимость: | Под влиянием <Limit> и <LimitExcept> в версии 2.0.51 и выше |
Политика доступа, если используется и то Allow
, и другое Require
. Параметр может быть либо , All
либо Any
. Эта директива полезна только в том случае, если доступ к определенной области ограничен как именем пользователя/паролем, так и адресом хоста клиента. В этом случае поведение по умолчанию ( All
) требует, чтобы клиент прошел ограничение доступа к адресу и ввел допустимое имя пользователя и пароль. С этой Any
опцией клиенту будет предоставлен доступ, если он либо пройдет ограничение хоста, либо введет действительное имя пользователя и пароль. Это можно использовать для ограничения области паролем, но для допуска клиентов с определенных адресов без запроса пароля.
Например, если вы хотите, чтобы люди в вашей сети имели неограниченный доступ к части вашего веб-сайта, но требовали, чтобы люди за пределами вашей сети вводили пароль, вы могли бы использовать конфигурацию, подобную следующей:
Требовать действительного пользователя
Разрешить с 192.168.1
Удовлетворить любой
Еще одно частое использование директивы Satisfy
— ослабление ограничений доступа к подкаталогу:
<Каталог "/var/www/private">
Требовать действительного пользователя
</Каталог>
<Каталог "/var/www/private/public">
Разрешить от всех
Удовлетворить любой
</Каталог>
В приведенном выше примере аутентификация потребуется для
/var/www/private
каталога, но не для /var/www/private/public
каталога.
Начиная с версии 2.0.51 Satisfy
директивы могут быть ограничены конкретными методами с помощью разделов <Limit>
и <LimitExcept>
.
Объединение разделов конфигурации
Когда любая директива, предоставляемая этим модулем, используется в новом разделе конфигурации, никакие директивы, предоставляемые этим модулем, не наследуются от предыдущих разделов конфигурации.
Смотрите также