Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_authz_core

Описание: Основная авторизация
Статус: Базовый
Идентификатор модуля: authz_core_module
Файл исходного кода: mod_authz_core.c
Совместимость: Доступен в Apache HTTPD 2.3 и более поздних версиях

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

Этот модуль предоставляет основные возможности авторизации, позволяя разрешать или запрещать доступ авторизованным пользователям к определённым частям веб-сайта. mod_authz_core предоставляет функциональность для регистрации различных поставщиков авторизации. Он обычно используется совместно с модулем поставщика аутентификации, таким как mod_authn_file и модулем авторизации, таким как mod_authz_user. Он также позволяет применять расширенную логику к обработке авторизации.

Контейнеры авторизации

Директивы контейнеров авторизации <RequireAll>, <RequireAny> и <RequireNone> могут быть объединены друг с другом и с директивой Require для выражения сложной логики авторизации.

Пример ниже выражает следующую логику авторизации. Для доступа к ресурсу пользователь должен быть либо пользователем superadmin, или принадлежать к группе admins и группе LDAP Administrators, и либо принадлежать к группе sales, или обладать атрибутом LDAP dept со значением sales. Кроме того, для доступа к ресурсу, пользователь не должен принадлежать к группе temps или группе LDAP Temporary Employees.

<Directory "/www/mydocs">
    <RequireAll>
        <RequireAny>
            Require user superadmin
            <RequireAll>
                Require group admins
                Require ldap-group "cn=Administrators,o=Airius"
                <RequireAny>
                    Require group sales
                    Require ldap-attribute dept="sales"
                </RequireAny>
            </RequireAll>
        </RequireAny>
        <RequireNone>
            Require group temps
            Require ldap-group "cn=Temporary Employees,o=Airius"
        </RequireNone>
    </RequireAll>
</Directory>

Директивы Require

mod_authz_core предоставляет некоторые универсальные поставщики авторизации, которые могут быть использованы с директивой Require.

Require env

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

SetEnvIf User-Agent "^KnockKnock/2\.0" let_me_in
<Directory "/docroot">
    Require env let_me_in
</Directory>

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

Когда сервер ищет путь через внутренний подзапрос, например, поиск DirectoryIndex или создание списка каталогов с помощью mod_autoindex, переменные среды на уровне запроса не наследуются в подзапросе. Кроме того, директивы SetEnvIf не оцениваются отдельно в подзапросе из-за фаз API, в которых mod_setenvif выполняет действия.

Require all

Поставщик all имитирует функциональность, ранее предоставляемую директивами 'Allow from all' и 'Deny from all'. Этот поставщик может принимать два аргумента: 'granted' или 'denied'. Следующие примеры предоставят или откажут в доступе ко всем запросам.

Require all granted
Require all denied

Require method

Поставщик method позволяет использовать HTTP-метод в решениях по авторизации. Методы GET и HEAD рассматриваются как эквивалентные. Метод TRACE недоступен для этого поставщика, используйте TraceEnable вместо него.

Следующий пример позволит только запросам GET, HEAD, POST и OPTIONS:

Require method GET POST OPTIONS

Следующий пример позволит запросам GET, HEAD, POST и OPTIONS без аутентификации и потребует действительного пользователя для всех остальных методов:

<RequireAny>
     Require method GET POST OPTIONS
     Require valid-user
</RequireAny>

Require expr

Поставщик expr позволяет основывать решения по авторизации на произвольных выражениях.

Require expr "%{TIME_HOUR} -ge 9 && %{TIME_HOUR} -le 17"
<RequireAll>
    Require expr "!(%{QUERY_STRING} =~ /secret/)"
    Require expr "%{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"
</RequireAll>
Require expr "!(%{QUERY_STRING} =~ /secret/) && %{REQUEST_URI} in { '/example.cgi', '/other.cgi' }"

Синтаксис описан в документации ap_expr. До версии httpd 2.4.16 окружающие двойные кавычки НЕЛЬЗЯ опускать.

Обычно выражение оценивается до аутентификации. Однако, если выражение возвращает false и ссылается на переменную %{REMOTE_USER}, будет выполнена аутентификация, и выражение будет повторно оценено.

Создание псевдонимов поставщиков авторизации

Расширенные поставщики авторизации могут быть созданы в файле конфигурации и назначены имя псевдонима. Затем псевдонимы поставщиков могут быть использованы с директивой Require так же, как и базовый поставщик авторизации. Помимо возможности создавать и назначать псевдоним расширенному поставщику, это также позволяет ссылаться на один и тот же расширенный поставщик авторизации из нескольких мест.

Пример

Пример ниже создаёт два разных псевдонима поставщика авторизации ldap на основе поставщика авторизации ldap-group. Этот пример позволяет одному месту авторизации проверять членство в группе в нескольких хостах ldap:

<AuthzProviderAlias ldap-group ldap-group-alias1 "cn=my-group,o=ctx">
    AuthLDAPBindDN "cn=youruser,o=ctx"
    AuthLDAPBindPassword yourpassword
    AuthLDAPUrl "ldap://ldap.host/o=ctx"
</AuthzProviderAlias>

<AuthzProviderAlias ldap-group ldap-group-alias2 "cn=my-other-group,o=dev">
    AuthLDAPBindDN "cn=yourotheruser,o=dev"
    AuthLDAPBindPassword yourotherpassword
    AuthLDAPUrl "ldap://other.ldap.host/o=dev?cn"
</AuthzProviderAlias>

Alias "/secure" "/webpages/secure"
<Directory "/webpages/secure">
    Require all granted

    AuthBasicProvider file

    AuthType Basic
    AuthName LDAP_Protected_Place

    #implied OR operation
    Require ldap-group-alias1
    Require ldap-group-alias2
</Directory>

Директива AuthMerging

Описание: Управляет способом объединения логики авторизации каждого раздела конфигурации с логикой предыдущих разделов.
Синтаксис:
AuthMerging Off | And | Or
Значение по умолчанию:
AuthMerging Off
Контекст: директория, .htaccess
Переопределение: AuthConfig
Статус: Базовый
Модуль: mod_authz_core

Когда авторизация включена, она обычно наследуется каждым последующим разделом конфигурации, если не указано иное множество директив авторизации. Это действие по умолчанию, соответствующее явным указанием AuthMerging Off.

Однако, могут возникнуть ситуации, когда желательно объединить авторизацию раздела конфигурации с авторизацией предшественника при объединении разделов конфигурации. Для этого доступны два варианта: And и Or.

Когда раздел конфигурации содержит AuthMerging And или AuthMerging Or, его логика авторизации объединяется с логикой ближайшего предшественника (согласно общему порядку разделов конфигурации), который также содержит логику авторизации, как если бы эти два раздела находились совместно внутри директивы <RequireAll> или <RequireAny> соответственно.

Установка AuthMerging не наследуется за пределами раздела конфигурации, в котором она появляется. В следующем примере, только пользователи, принадлежащие к группе alpha могут получить доступ к /www/docs. Пользователи, принадлежащие к группам alpha или beta могут получить доступ к /www/docs/ab. Однако, значение по умолчанию Off AuthMerging применяется к разделу конфигурации <Directory> для /www/docs/ab/gamma, поэтому директивы авторизации этого раздела переопределяют директивы предыдущих разделов. Таким образом, только пользователи, принадлежащие к группе gamma могут получить доступ к /www/docs/ab/gamma.
<Directory "/www/docs">
    AuthType Basic
    AuthName Documents
    AuthBasicProvider file
    AuthUserFile "/usr/local/apache/passwd/passwords"
    Require group alpha
</Directory>

<Directory "/www/docs/ab">
    AuthMerging Or
    Require group beta
</Directory>

<Directory "/www/docs/ab/gamma">
    Require group gamma
</Directory>

<AuthzProviderAlias> Директива

Описание: Заключает группу директив, представляющих расширение базового поставщика авторизации и ссылающегося на указанный псевдоним.
Синтаксис:
<AuthzProviderAlias baseProvider Alias Require-Parameters> ... </AuthzProviderAlias>
Контекст: конфигурация сервера
Статус: Базовый
Модуль: mod_authz_core

<AuthzProviderAlias> и </AuthzProviderAlias> используются для заключения группы директив авторизации, которые могут быть использованы по имени псевдонима с помощью директивы Require.

Если требуется несколько параметров в Require-Parameters, они должны быть заключены в кавычки. В противном случае, во внимание принимается только первый.

# In this example, for both addresses to be taken into account, they MUST be enclosed
# between quotation marks
<AuthzProviderAlias ip reject-ips "XXX.XXX.XXX.XXX YYY.YYY.YYY.YYY">
</AuthzProviderAlias>

<Directory "/path/to/dir">
    <RequireAll>
        Require not reject-ips
        Require all granted
    </RequireAll>
</Directory>

Директива AuthzSendForbiddenOnFailure

Описание: Отправляет '403 ЗАПРЕЩЕНО' вместо '401 НЕАВТОРИЗОВАНО', если аутентификация прошла успешно, но авторизация не удалась.
Синтаксис:
AuthzSendForbiddenOnFailure On|Off
Значение по умолчанию:
AuthzSendForbiddenOnFailure Off
Контекст: директория, .htaccess
Статус: Базовый
Модуль: mod_authz_core
Совместимость: Доступно в Apache HTTPD 2.3.11 и более поздних версиях

Если аутентификация прошла успешно, но авторизация не удалась, Apache HTTPD по умолчанию ответит с кодом HTTP '401 НЕАВТОРИЗОВАНО'. Это обычно приводит к тому, что браузеры снова отображают диалог пароля пользователю, что нежелательно во всех ситуациях. AuthzSendForbiddenOnFailure позволяет изменить код ответа на '403 ЗАПРЕЩЕНО'.

Предупреждение о безопасности

Изменение ответа в случае отсутствия авторизации ослабляет безопасность пароля, поскольку это раскрывает потенциальному злоумышленнику, что его введённый пароль был верным.

Директива Require

Описание: Проверяет, авторизован ли аутентифицированный пользователь поставщиком авторизации.
Синтаксис:
Require [not] entity-name [entity-name] ...
Контекст: каталог, .htaccess
Переопределение: AuthConfig
Статус: Базовый
Модуль: mod_authz_core

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

Require all granted
Доступ разрешен безусловно.
Require all denied
Доступ запрещен безусловно.
Require env env-var [env-var] ...
Доступ разрешен только если одна из указанных переменных среды установлена.
Require method http-method [http-method] ...
Доступ разрешен только для указанных HTTP-методов.
Require expr expression
Доступ разрешен, если выражение вычисляется в значение true.

Некоторые из допустимых синтаксисов, предоставляемых mod_authz_user, mod_authz_host, и mod_authz_groupfile, включают:

Require user userid [userid] ...
Только указанные пользователи могут получить доступ к ресурсу.
Require group group-name [group-name] ...
Только пользователи из указанных групп могут получить доступ к ресурсу.
Require valid-user
Все валидные пользователи могут получить доступ к ресурсу.
Require ip 10 172.20 192.168.2
Клиенты из указанных диапазонов IP-адресов могут получить доступ к ресурсу.
Require forward-dns dynamic.example.org
Клиенту, IP-адрес которого разрешен по имени dynamic.example.org, будет предоставлен доступ.

Другие модули авторизации, реализующие опции require, включают mod_authnz_ldap, mod_authz_dbm, mod_authz_dbd, mod_authz_owner и mod_ssl.

В большинстве случаев для полной конфигурации аутентификации и авторизации Require должна быть дополнена директивами AuthName, AuthType и AuthBasicProvider или AuthDigestProvider , а также директивами, такими как AuthUserFile и AuthGroupFile (для определения пользователей и групп), чтобы работать корректно. Пример:

AuthType Basic
AuthName "Restricted Resource"
AuthBasicProvider file
AuthUserFile "/web/users"
AuthGroupFile "/web/groups"
Require group admin

Контроль доступа, примененный таким образом, эффективен для всех методов. Это обычно желательно. Если вы хотите применить контроль доступа только к определённым методам, оставив другие методы незащищёнными, поместите оператор Require в раздел <Limit>.

Результат директивы Require может быть отменён с помощью опции not. Как и в случае с другими отменёнными директивами авторизации <RequireNone>, когда директива Require отменяется, она может только отказать или вернуть нейтральный результат, и поэтому никогда не может самостоятельно авторизовать запрос.

В следующем примере все пользователи из групп alpha и beta авторизованы, за исключением тех, кто также входит в группу reject.

<Directory "/www/docs">
    <RequireAll>
        Require group alpha beta
        Require not group reject
    </RequireAll>
</Directory>

Если несколько директив Require используются в одном разделе конфигурации и не содержатся в другой директиве авторизации, такой как <RequireAll>, они неявно содержатся внутри директивы <RequireAny> . Таким образом, первая директива, авторизующая пользователя, авторизует весь запрос, а последующие директивы Require игнорируются.

Предупреждение о безопасности

Будьте осторожны при установке директив авторизации в разделах Location , которые перекрываются с содержимым, подаваемым из файловой системы. По умолчанию эти разделы конфигурации перезаписывают конфигурацию авторизации в Directory и Files разделах.

Директива AuthMerging может использоваться для управления тем, как сливаются разделы конфигурации авторизации.

См. также

  • Руководство по контролю доступа
  • Контейнеры авторизации
  • mod_authn_core
  • mod_authz_host

<RequireAll> Директива

Описание: Оборачивает группу директив авторизации, ни одна из которых не должна завершаться неудачей, и по крайней мере одна из которых должна иметь успех для успеха содержащей директивы.
Синтаксис:
<RequireAll> ... </RequireAll>
Контекст: каталог, .htaccess
Переопределение: AuthConfig
Статус: Базовый
Модуль: mod_authz_core

<RequireAll> и </RequireAll> используются для оборачивания группы директив авторизации, ни одна из которых не должна завершаться неудачей, и по крайней мере одна из которых должна иметь успех, чтобы директива <RequireAll> имела успех.

Если ни одна из директив, содержащихся в директиве <RequireAll>, не завершается неудачей, и по крайней мере одна завершается успешно, то директива <RequireAll> завершается успешно. Если ни одна не имеет успеха и ни одна не завершается неудачей, то она возвращает нейтральный результат. Во всех остальных случаях она завершается неудачей.

См. также

  • Контейнеры авторизации
  • Аутентификация, авторизация и контроль доступа

<RequireAny> Директива

Описание: Оборачивает группу директив авторизации, одна из которых должна иметь успех для успеха содержащей директивы.
Синтаксис:
<RequireAny> ... </RequireAny>
Контекст: каталог, .htaccess
Переопределение: AuthConfig
Статус: Базовый
Модуль: mod_authz_core

<RequireAny> и </RequireAny> используются для оборачивания группы директив авторизации, одна из которых должна иметь успех, чтобы директива <RequireAny> имела успех.

Если одна или несколько директив, содержащихся в директиве <RequireAny>, завершаются успешно, то директива <RequireAny> завершается успешно. Если ни одна не имеет успеха и ни одна не завершается неудачей, то она возвращает нейтральный результат. Во всех остальных случаях она завершается неудачей.

Поскольку отменённые директивы авторизации не могут вернуть успешный результат, они не могут существенно повлиять на результат директивы <RequireAny>. (В худшем случае они могут привести к тому, что директива завершится неудачей, если они завершатся неудачей, а все остальные директивы вернут нейтральное значение). Поэтому отменённые директивы авторизации не допускаются в директиве <RequireAny>.

См. также

  • Контейнеры авторизации
  • Аутентификация, авторизация и контроль доступа

<RequireNone> Директива

Описание: Оборачивает группу директив авторизации, ни одна из которых не должна иметь успех для того, чтобы содержащая директива не завершилась неудачей.
Синтаксис:
<RequireNone> ... </RequireNone>
Контекст: каталог, .htaccess
Переопределение: AuthConfig
Статус: Базовый
Модуль: mod_authz_core

<RequireNone> и </RequireNone> используются для оборачивания группы директив авторизации, ни одна из которых не должна иметь успех для того, чтобы директива <RequireNone> не завершилась неудачей.

Если одна или несколько директив, содержащихся в директиве <RequireNone>, завершаются успешно, то директива <RequireNone> завершается неудачей. Во всех остальных случаях она возвращает нейтральный результат. Таким образом, как и в случае с другой отменённой директивой авторизации Require not, она никогда не может самостоятельно авторизовать запрос, поскольку никогда не может вернуть успешный результат. Однако она может использоваться для ограничения набора пользователей, авторизованных для доступа к ресурсу.

Поскольку отменённые директивы авторизации не могут вернуть успешный результат, они не могут существенно повлиять на результат директивы <RequireNone> . Поэтому отменённые директивы авторизации не допускаются в директиве <RequireNone>.

См. также

  • Контейнеры авторизации
  • Аутентификация, авторизация и контроль доступа

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

Spec-Zone.ru

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