Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_authnz_ldap

Описание: Позволяет использовать каталог LDAP для хранения базы данных аутентификации HTTP Basic.
Статус: Расширение
Идентификатор модуля: authnz_ldap_module
Исходный файл: mod_authnz_ldap.c
Совместимость: Доступен начиная с версии 2.1

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

Этот модуль позволяет интерфейсным модулям аутентификации, таким как mod_auth_basic, аутентифицировать пользователей через каталог LDAP.

mod_authnz_ldap поддерживает следующие возможности:

  • Известно, что модуль поддерживает OpenLDAP SDK (версии 1.x и 2.x), Novell LDAP SDK и SDK iPlanet (Netscape).
  • Сложные политики авторизации можно реализовать, представив их в виде фильтров LDAP.
  • Использует расширенное кэширование операций LDAP с помощью mod_ldap.
  • Поддержка LDAP через SSL (требуется Netscape SDK) или TLS (требуется OpenLDAP 2.x SDK или Novell LDAP SDK).

При использовании mod_auth_basic этот модуль вызывается директивой AuthBasicProvider со значением ldap.

Содержание

  • Общие замечания
  • Принцип работы
    • Этап аутентификации
    • Этап авторизации
  • Директивы Require
    • Require ldap-user
    • Require ldap-group
    • Require ldap-dn
    • Require ldap-attribute
    • Require ldap-filter
    • Require ldap-search
  • Примеры
  • Использование TLS
  • Использование SSL
  • Предоставление сведений для входа
  • Использование Active Directory
  • Использование Microsoft FrontPage с mod_authnz_ldap
    • Принцип работы
    • Замечания

Общие замечания

Этот модуль кэширует результаты аутентификации и авторизации в соответствии с настройками mod_ldap. Изменения на базовом LDAP-сервере не будут немедленно отражены на HTTP-сервере. В частности, это относится к блокировке и отзыву доступа пользователей, смене паролей и изменению членства в группах. Сведения о параметрах кэширования см. в директивах mod_ldap.

Принцип работы

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

mod_authnz_ldap регистрирует провайдер аутентификации authn_ldap и обработчик авторизации authz_ldap. Провайдер аутентификации authn_ldap можно включить с помощью директивы AuthBasicProvider, указав значение ldap. Обработчик authz_ldap расширяет типы авторизации директивы Require, добавляя значения ldap-user, ldap-dn и ldap-group.

Этап аутентификации

На этапе аутентификации mod_authnz_ldap выполняет поиск в каталоге записи, соответствующей имени пользователя, переданному HTTP-клиентом. Если найдена одна уникальная запись, mod_authnz_ldap пытается выполнить привязку к серверу каталога, используя DN этой записи и пароль, переданный HTTP-клиентом. Поскольку сначала выполняется поиск, а затем привязка, этот этап часто называют этапом поиска и привязки. Ниже перечислены действия, выполняемые на этом этапе.

  1. Сформировать поисковый фильтр, объединив атрибут и фильтр, указанные в директиве AuthLDAPURL, с именем пользователя, переданным HTTP-клиентом.
  2. Выполнить поиск в каталоге с помощью сформированного фильтра. Если поиск возвращает не ровно одну запись, запретить или отклонить доступ.
  3. Получить различающееся имя записи, найденной в результате поиска, и попытаться выполнить привязку к серверу LDAP, используя этот DN и пароль, переданный HTTP-клиентом. Если привязка не удалась, запретить или отклонить доступ.

На этапе поиска и привязки используются следующие директивы

AuthLDAPURL Указывает сервер LDAP, базовый DN, атрибут для поиска, а также дополнительный поисковый фильтр.
AuthLDAPBindDN Необязательный DN для привязки на этапе поиска.
AuthLDAPBindPassword Необязательный пароль для привязки на этапе поиска.

Этап авторизации

На этапе авторизации mod_authnz_ldap пытается определить, разрешен ли пользователю доступ к ресурсу. Для многих таких проверок требуется, чтобы mod_authnz_ldap выполнил операцию сравнения на сервере LDAP. Поэтому этот этап часто называют этапом сравнения. mod_authnz_ldap принимает следующие директивы Require, позволяющие определить, приемлемы ли учетные данные:

  • Предоставить доступ, если задана директива Require ldap-user и указанное в ней имя пользователя совпадает с именем, переданным клиентом.
  • Предоставить доступ, если задана директива Require ldap-dn и указанный в ней DN совпадает с DN, полученным из каталога LDAP.
  • Предоставить доступ, если задана директива Require ldap-group и DN, полученный из каталога LDAP (или имя пользователя, переданное клиентом), содержится в группе LDAP или, возможно, в одной из ее подгрупп.
  • Предоставить доступ, если задана директива Require ldap-attribute и атрибут, полученный из каталога LDAP, совпадает с указанным значением.
  • Предоставить доступ, если задана директива Require ldap-filter и поисковый фильтр успешно находит один пользовательский объект, соответствующий DN аутентифицированного пользователя.
  • Предоставить доступ, если задана директива Require ldap-search и поисковый фильтр успешно возвращает один соответствующий объект с любым различающимся именем.
  • в противном случае запретить или отклонить доступ

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

  • Предоставить доступ всем успешно аутентифицированным пользователям, если задана директива Require valid-user. (требуется mod_authz_user)
  • Предоставить доступ, если задана директива Require group и загружен модуль mod_authz_groupfile с установленной директивой AuthGroupFile.
  • другие...

На этапе сравнения mod_authnz_ldap использует следующие директивы:

AuthLDAPURL Атрибут, указанный в URL, используется при операциях сравнения для операции Require ldap-user.
AuthLDAPCompareDNOnServer Определяет поведение директивы Require ldap-dn.
AuthLDAPGroupAttribute Определяет атрибут для сравнений в директиве Require ldap-group.
AuthLDAPGroupAttributeIsDN Указывает, следует ли использовать DN пользователя или его имя при сравнении в директиве Require ldap-group.
AuthLDAPMaxSubGroupDepth Определяет максимальную глубину подгрупп, проверяемых при сравнении в директиве Require ldap-group.
AuthLDAPSubGroupAttribute Определяет атрибут для получения участников подгрупп текущей группы при сравнении в директиве Require ldap-group.
AuthLDAPSubGroupClass Указывает значения objectClass LDAP, используемые для определения того, являются ли запрошенные объекты каталога группами (а не пользователями) при обработке подгрупп директивой Require ldap-group.

Директивы Require

Директивы Apache Require используются на этапе авторизации, чтобы убедиться, что пользователю разрешен доступ к ресурсу. mod_authnz_ldap расширяет типы авторизации значениями ldap-user, ldap-dn, ldap-group, ldap-attribute и ldap-filter. Можно также использовать другие типы авторизации, но для этого может понадобиться загрузить дополнительные модули авторизации.

Начиная с версии 2.4.8, в директивах LDAP require поддерживаются выражения.

Require ldap-user

Директива Require ldap-user указывает, каким именам пользователей разрешен доступ к ресурсу. Получив из каталога уникальный DN, mod_authnz_ldap выполняет операцию сравнения LDAP, используя имя пользователя, указанное в Require ldap-user, чтобы проверить, является ли это имя частью только что полученной записи LDAP. Доступ можно предоставить нескольким пользователям, указав их имена в одной строке через пробел. Если имя пользователя содержит пробел, его необходимо заключить в двойные кавычки. Доступ также можно предоставить нескольким пользователям, используя несколько директив Require ldap-user и указывая по одному пользователю в каждой строке. Например, при AuthLDAPURL, равном ldap://ldap/o=Example?cn (то есть для поиска используется cn), можно использовать следующие директивы Require, чтобы ограничить доступ:

Require ldap-user "Barbara Jenson"
Require ldap-user "Fred User"
Require ldap-user "Joe Manager"

Благодаря тому, как mod_authnz_ldap обрабатывает эту директиву, Barbara Jenson может войти как Barbara Jenson, Babs Jenson или под любым другим cn, указанным в ее записи LDAP. Для поддержки всех значений атрибута в записи пользователя достаточно одной строки Require ldap-user.

Если бы в приведенном выше URL использовался атрибут uid, а не атрибут cn, приведенные выше три строки можно было бы объединить в одну

Require ldap-user bjenson fuser jmanager

Require ldap-group

Эта директива указывает группу LDAP, участникам которой разрешен доступ. В ней указывается различающееся имя группы LDAP. Примечание: не заключайте имя группы в кавычки. Например, предположим, что в каталоге LDAP существует следующая запись:

dn: cn=Administrators, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Barbara Jenson, o=Example
uniqueMember: cn=Fred User, o=Example

Следующая директива предоставит доступ Fred и Barbara:

Require ldap-group cn=Administrators, o=Example

Участников можно искать и в подгруппах указанной группы LDAP, если значение AuthLDAPMaxSubGroupDepth больше 0. Например, предположим, что в каталоге LDAP существуют следующие записи:

dn: cn=Employees, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Managers, o=Example
uniqueMember: cn=Administrators, o=Example
uniqueMember: cn=Users, o=Example

dn: cn=Managers, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Bob Ellis, o=Example
uniqueMember: cn=Tom Jackson, o=Example

dn: cn=Administrators, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Barbara Jenson, o=Example
uniqueMember: cn=Fred User, o=Example

dn: cn=Users, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Allan Jefferson, o=Example
uniqueMember: cn=Paul Tilley, o=Example
uniqueMember: cn=Temporary Employees, o=Example

dn: cn=Temporary Employees, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Jim Swenson, o=Example
uniqueMember: cn=Elliot Rhodes, o=Example

Следующие директивы предоставят доступ Bob Ellis, Tom Jackson, Barbara Jenson, Fred User, Allan Jefferson и Paul Tilley, но не предоставят доступ Jim Swenson или Elliot Rhodes (поскольку они находятся на глубине подгрупп 2):

Require ldap-group cn=Employees, o=Example
AuthLDAPMaxSubGroupDepth 1

Поведение этой директивы изменяют директивы AuthLDAPGroupAttribute, AuthLDAPGroupAttributeIsDN, AuthLDAPMaxSubGroupDepth, AuthLDAPSubGroupAttribute и AuthLDAPSubGroupClass.

Require ldap-dn

Директива Require ldap-dn позволяет администратору предоставлять доступ на основе различающихся имен. В ней указывается DN, который должен совпасть, чтобы доступ был предоставлен. Если различающееся имя, полученное с сервера каталога, совпадает с различающимся именем в Require ldap-dn, авторизация предоставляется. Примечание: не заключайте различающееся имя в кавычки.

Следующая директива предоставит доступ для конкретного DN:

Require ldap-dn cn=Barbara Jenson, o=Example

Поведение этой директивы изменяет директива AuthLDAPCompareDNOnServer.

Require ldap-attribute

Директива Require ldap-attribute позволяет администратору предоставлять доступ на основе атрибутов аутентифицированного пользователя в каталоге LDAP. Если атрибут в каталоге совпадает со значением, заданным в конфигурации, доступ предоставляется.

Следующая директива предоставит доступ всем, у кого атрибут employeeType равен active

Require ldap-attribute employeeType="active"

Несколько пар «атрибут/значение» можно указать в одной строке через пробел или в нескольких директивах Require ldap-attribute. Перечисление нескольких пар «атрибут/значение» подразумевает операцию ИЛИ. Доступ будет предоставлен, если любое из перечисленных значений атрибутов совпадет со значением соответствующего атрибута в объекте пользователя. Если значение атрибута содержит пробел, двойными кавычками нужно заключить только это значение.

Следующая директива предоставит доступ всем, у кого атрибут city равен "San Jose" или атрибут status равен "Active"

Require ldap-attribute city="San Jose" status="active"

Require ldap-filter

Директива Require ldap-filter позволяет администратору предоставлять доступ на основе сложного поискового фильтра LDAP. Если DN, возвращенный в результате поиска по фильтру, совпадает с DN аутентифицированного пользователя, доступ предоставляется.

Следующая директива предоставит доступ всем, у кого есть мобильный телефон и кто работает в отделе маркетинга

Require ldap-filter "&(cell=*)(department=marketing)"

Разница между директивами Require ldap-filter и Require ldap-attribute состоит в том, что ldap-filter выполняет поиск в каталоге LDAP с помощью указанного поискового фильтра, а не простое сравнение атрибутов. Если достаточно простого сравнения атрибутов, операция сравнения, выполняемая директивой ldap-attribute, будет быстрее поиска, выполняемого директивой ldap-filter, особенно в большом каталоге.

При использовании выражения в фильтре необходимо правильно экранировать фильтры LDAP, чтобы защититься от LDAP-инъекций. Для этого можно использовать функцию ldap.

<LocationMatch ^/dav/(?<SITENAME>[^/]+)/>
  Require ldap-filter (memberOf=cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}},ou=Websites,o=Example)
</LocationMatch>

Require ldap-search

Директива Require ldap-search позволяет администратору предоставлять доступ на основе универсального поискового фильтра LDAP с использованием выражения. Доступ предоставляется, если поисковый фильтр находит ровно одно совпадение, независимо от различающегося имени.

Следующая директива предоставит доступ к URL, соответствующим заданным объектам на сервере LDAP:

<LocationMatch ^/dav/(?<SITENAME>[^/]+)/>
Require ldap-search (cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}} Website)
</LocationMatch>

Примечание: необходимо правильно экранировать все выражения, чтобы защититься от LDAP-инъекций. Для этого можно использовать функцию ldap, как показано в примере выше.

Примеры

  • Предоставить доступ всем, кто есть в каталоге LDAP, используя UID для поиска.
    AuthLDAPURL "ldap://ldap1.example.com:389/ou=People, o=Example?uid?sub?(objectClass=*)"
    Require valid-user
  • Следующий пример аналогичен предыдущему, но в нем опущены параметры с полезными значениями по умолчанию. Обратите также внимание на использование резервного сервера LDAP.
    AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/ou=People, o=Example"
    Require valid-user
  • Следующий пример похож на предыдущий, но вместо UID в нем используется общее имя. Это может быть проблематично, если у нескольких пользователей каталога совпадает cn, поскольку поиск по cn должен возвращать ровно одну запись. Поэтому такой подход не рекомендуется: лучше выбрать атрибут, уникальность которого в каталоге гарантирована, например uid.
    AuthLDAPURL "ldap://ldap.example.com/ou=People, o=Example?cn"
    Require valid-user
  • Предоставить доступ всем участникам группы Administrators. Пользователи должны проходить аутентификацию с помощью UID.
    AuthLDAPURL ldap://ldap.example.com/o=Example?uid
    Require ldap-group cn=Administrators, o=Example
  • Предоставить доступ всем участникам группы, имя которой совпадает с именем хоста виртуального хоста. В этом примере для построения фильтра используется выражение.
    AuthLDAPURL ldap://ldap.example.com/o=Example?uid
    Require ldap-group cn=%{SERVER_NAME}, o=Example
  • В следующем примере предполагается, что у всех сотрудников Example, использующих буквенно-цифровой пейджер, есть атрибут LDAP qpagePagerID. Пример предоставит доступ только тем пользователям (аутентифицированным по UID), у которых есть буквенно-цифровые пейджеры:
    AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(qpagePagerID=*)
    Require valid-user
  • В следующем примере показано, как с помощью фильтров реализовать сложные административные требования. Без фильтров пришлось бы создать новую группу LDAP и следить за тем, чтобы состав ее участников синхронизировался со списком пользователей пейджеров. С фильтрами это становится тривиальной задачей. Требуется предоставить доступ всем, у кого есть пейджер, а также Joe Manager, у которого пейджера нет, но которому нужно получить доступ к тому же ресурсу:

    AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(|(qpagePagerID=*)(uid=jmanager))
    Require valid-user

    Поначалу этот последний пример может показаться сложным, поэтому полезно посмотреть, как будет выглядеть поисковый фильтр в зависимости от того, кто подключается, как показано ниже. Если Fred User подключится как fuser, фильтр будет выглядеть так:

    (&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))

    Предыдущий поиск будет успешным, только если у fuser есть пейджер. Когда Joe Manager подключается как jmanager, фильтр выглядит так:

    (&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))

    Предыдущий поиск будет успешным независимо от того, есть ли у jmanager пейджер.

Использование TLS

Чтобы использовать TLS, см. директивы mod_ldap LDAPTrustedClientCert, LDAPTrustedGlobalCert и LDAPTrustedMode.

В качестве второго необязательного параметра директивы AuthLDAPURL можно указать тип соединения, переопределяющий тип по умолчанию, заданный директивой LDAPTrustedMode. Это позволяет обновить соединение, установленное по URL ldap://, до защищенного соединения через тот же порт.

Использование SSL

Чтобы использовать SSL, см. директивы mod_ldap LDAPTrustedClientCert, LDAPTrustedGlobalCert и LDAPTrustedMode.

Чтобы указать защищенный сервер LDAP, используйте в директиве AuthLDAPURL ldaps:// вместо ldap://.

Предоставление сведений для входа

При выполнении аутентификации этим модулем атрибуты LDAP, указанные в директиве AuthLDAPURL, помещаются в переменные окружения с префиксом "AUTHENTICATE_".

При выполнении авторизации этим модулем атрибуты LDAP, указанные в директиве AuthLDAPURL, помещаются в переменные окружения с префиксом "AUTHORIZE_".

Если поле атрибутов содержит имя пользователя, общее имя и номер телефона, CGI-программа сможет получить эти сведения без выполнения дополнительного независимого запроса LDAP.

Это может значительно упростить разработку и настройку некоторых веб-приложений.

Использование Active Directory

Установка Active Directory может одновременно поддерживать несколько доменов. Чтобы различать пользователей из разных доменов, в запись пользователя каталога можно добавить идентификатор под названием User Principal Name (UPN). Обычно UPN состоит из имени учетной записи пользователя и компонентов домена, например somebody@nz.example.com.

Возможно, вы захотите настроить модуль mod_authnz_ldap для аутентификации пользователей из любого домена леса Active Directory. Тогда и somebody@nz.example.com, и someone@au.example.com можно будет аутентифицировать одним и тем же запросом.

Для этого Active Directory поддерживает концепцию глобального каталога. Глобальный каталог представляет собой доступную только для чтения копию выбранных атрибутов всех серверов Active Directory в лесу Active Directory. Запрос к глобальному каталогу позволяет искать во всех доменах одним запросом, не выполняя поиск на серверах, соединенных потенциально медленными каналами связи.

Если глобальный каталог включен, он представляет собой независимый сервер каталога, работающий на порту 3268 (3269 для SSL). Чтобы найти пользователя, выполните поиск по поддереву по атрибуту userPrincipalName с пустым корнем поиска, например:

AuthLDAPBindDN apache@example.com
AuthLDAPBindPassword password
AuthLDAPURL ldap://10.0.0.1:3268/?userPrincipalName?sub

Пользователям потребуется вводить User Principal Name в качестве имени для входа, например somebody@nz.example.com.

Использование Microsoft FrontPage с mod_authnz_ldap

Обычно FrontPage использует собственные файлы пользователей и групп веб-сайта FrontPage (то есть модули mod_authn_file и mod_authz_groupfile) для обработки всей аутентификации. К сожалению, нельзя просто перейти на аутентификацию LDAP, добавив нужные директивы: это нарушит работу форм Permissions в клиенте FrontPage, которые пытаются изменить стандартные текстовые файлы авторизации.

После создания веб-сайта FrontPage для добавления к нему аутентификации LDAP достаточно добавить следующие директивы в каждый файл .htaccess, создаваемый на веб-сайте

AuthLDAPURL       "the url"
AuthGroupFile     "mygroupfile"
Require group     "mygroupfile"

Принцип работы

FrontPage ограничивает доступ к веб-сайту, добавляя директиву Require valid-user в файлы .htaccess. Директива Require valid-user успешно срабатывает для любого пользователя, который действителен с точки зрения LDAP. Это означает, что действительным пользователем считается любой, у кого есть запись в каталоге LDAP, тогда как FrontPage считает действительными только тех, кто указан в локальном файле пользователей. Заменив ldap-group авторизацией по файлу групп, можно позволить Apache обращаться к локальному файлу пользователей (которым управляет FrontPage), а не к LDAP, при авторизации пользователя.

После добавления директив, указанных выше, пользователи FrontPage смогут выполнять все операции управления из клиента FrontPage.

Замечания

  • При выборе URL LDAP атрибут для аутентификации должен быть пригоден для использования в файле пользователей mod_authn_file. Для этого идеально подходит идентификатор пользователя.
  • При добавлении пользователей через FrontPage администраторам следует выбирать имена пользователей, уже существующие в каталоге LDAP (по очевидным причинам). Кроме того, пароль, введенный администратором в форму, игнорируется, поскольку Apache будет выполнять аутентификацию по паролю в базе данных LDAP, а не по паролю в локальном файле пользователей. Это может запутать администраторов веб-сайта.
  • Для поддержки FrontPage Apache должен быть скомпилирован с mod_auth_basic, mod_authn_file и mod_authz_groupfile. Это необходимо, поскольку Apache по-прежнему будет использовать файл групп mod_authz_groupfile для определения уровня доступа пользователя к веб-сайту FrontPage.
  • Директивы необходимо поместить в файлы .htaccess. Их размещение внутри директив <Location> или <Directory> не сработает. Это связано с тем, что mod_authnz_ldap должен иметь возможность получить директиву AuthGroupFile из файлов FrontPage .htaccess, чтобы определить, где искать список действительных пользователей. Если директивы mod_authnz_ldap находятся не в том же файле .htaccess, что и директивы FrontPage, этот обходной прием не сработает, поскольку mod_authnz_ldap не сможет обработать файл .htaccess и найти файл пользователей, которым управляет FrontPage.

Директива AuthLDAPAuthorizePrefix

Описание: Задает префикс переменных окружения, устанавливаемых при авторизации
Синтаксис:
AuthLDAPAuthorizePrefix prefix
Значение по умолчанию:
AuthLDAPAuthorizePrefix AUTHORIZE_
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap
Совместимость: Доступна начиная с версии 2.3.6

Эта директива позволяет переопределить префикс переменных окружения, устанавливаемых при авторизации LDAP. Если указано AUTHENTICATE_, потребители этих переменных окружения будут видеть одинаковые сведения независимо от того, выполняла ли LDAP аутентификацию, авторизацию или обе операции.

Примечание

Переменные авторизации не устанавливаются, если пользователь авторизован на основании Require valid-user.

Директива AuthLDAPBindAuthoritative

Описание: Определяет, используются ли другие провайдеры аутентификации, когда пользователя можно сопоставить с DN, но сервер не может успешно выполнить привязку с учетными данными пользователя.
Синтаксис:
AuthLDAPBindAuthoritative off|on
Значение по умолчанию:
AuthLDAPBindAuthoritative on
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap

По умолчанию к последующим провайдерам аутентификации обращаются только в том случае, если пользователя невозможно сопоставить с DN, но не тогда, когда сопоставление возможно, однако пароль пользователя не удается проверить привязкой LDAP. Если для AuthLDAPBindAuthoritative задано значение off, другие настроенные модули аутентификации смогут проверить пользователя, если привязка LDAP (с учетными данными текущего пользователя) завершится ошибкой по любой причине.

Это позволяет пользователям, присутствующим одновременно в LDAP и AuthUserFile, проходить аутентификацию, если сервер LDAP доступен, но учетная запись пользователя заблокирована или пароль по другой причине непригоден для использования.

См. также

  • AuthUserFile
  • AuthBasicProvider

Директива AuthLDAPBindDN

Описание: Необязательный DN для привязки к серверу LDAP
Синтаксис:
AuthLDAPBindDN distinguished-name
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap

Необязательный DN для привязки к серверу при поиске записей. Если он не указан, mod_authnz_ldap выполнит анонимную привязку.

Директива AuthLDAPBindPassword

Описание: Пароль, используемый вместе с DN для привязки
Синтаксис:
AuthLDAPBindPassword password
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap
Совместимость: exec: добавлен в версии 2.4.5.

Пароль для привязки, используемый вместе с DN для привязки. Обратите внимание, что пароль для привязки, вероятно, является конфиденциальными данными и должен быть надлежащим образом защищен. Используйте AuthLDAPBindDN и AuthLDAPBindPassword, только если они действительно необходимы для поиска в каталоге.

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

#Password used as-is
AuthLDAPBindPassword secret

#Run /path/to/program to get my password
AuthLDAPBindPassword exec:/path/to/program

#Run /path/to/otherProgram and provide arguments
AuthLDAPBindPassword "exec:/path/to/otherProgram argument1"

Директива AuthLDAPCharsetConfig

Описание: Файл конфигурации преобразования языков в кодировки
Синтаксис:
AuthLDAPCharsetConfig file-path
Контекст: конфигурация сервера
Статус: Расширение
Модуль: mod_authnz_ldap

Директива AuthLDAPCharsetConfig задает расположение файла конфигурации преобразования языков в кодировки. Путь к файлу указывается относительно ServerRoot. В этом файле задается список расширений языков и соответствующих им наборов символов. Большинство администраторов используют предоставляемый файл charset.conv, сопоставляющий распространенные расширения языков с наборами символов.

Файл содержит строки следующего формата:

Language-Extension charset [Language-String] ...

Регистр символов в расширении не имеет значения. Пустые строки и строки, начинающиеся с символа решетки (#), игнорируются.

Директива AuthLDAPCompareAsUser

Описание: Использовать учетные данные аутентифицированного пользователя для выполнения сравнений при авторизации
Синтаксис:
AuthLDAPCompareAsUser on|off
Значение по умолчанию:
AuthLDAPCompareAsUser off
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap
Совместимость: Доступна начиная с версии 2.3.6

Если эта директива включена и mod_authnz_ldap аутентифицировал пользователя, для сравнений LDAP при авторизации используются запрошенное различающееся имя (DN) и пароль HTTP Basic аутентификации аутентифицированного пользователя вместо учетных данных сервера, заданных в конфигурации.

Проверки авторизации ldap-attribute, ldap-user и ldap-group (только для одного уровня) используют сравнения.

Эта директива влияет только на сравнения, выполняемые при обработке вложенных групп, если также включена директива AuthLDAPSearchAsUser.

Используйте эту директиву, только если ваш сервер LDAP не принимает анонимные операции сравнения и вы не можете использовать выделенную учетную запись AuthLDAPBindDN.

См. также

  • AuthLDAPInitialBindAsUser
  • AuthLDAPSearchAsUser

AuthLDAPCompareDNOnServer Directive

Описание: Использовать LDAP-сервер для сравнения DN
Синтаксис:
AuthLDAPCompareDNOnServer on|off
Значение по умолчанию:
AuthLDAPCompareDNOnServer on
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap

Если задана, mod_authnz_ldap будет использовать LDAP-сервер для сравнения DN. Это единственный надежный способ сравнения DN. mod_authnz_ldap выполнит поиск в каталоге DN, указанного директивой Require dn, затем получит DN и сравнит его с DN, полученным из записи пользователя. Если эта директива не задана, mod_authnz_ldap просто сравнивает строки. При таком подходе возможны ложноотрицательные результаты, но он значительно быстрее. Обратите внимание, что кэш mod_ldap в большинстве случаев ускоряет сравнение DN.

AuthLDAPDereferenceAliases Directive

Описание: Когда модуль должен раскрывать псевдонимы
Синтаксис:
AuthLDAPDereferenceAliases never|searching|finding|always
Значение по умолчанию:
AuthLDAPDereferenceAliases always
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap

Эта директива указывает, когда mod_authnz_ldap будет раскрывать псевдонимы при выполнении операций LDAP. По умолчанию используется always.

AuthLDAPGroupAttribute Directive

Описание: Атрибуты LDAP, используемые для определения пользователей — членов групп.
Синтаксис:
AuthLDAPGroupAttribute attribute
Значение по умолчанию:
AuthLDAPGroupAttribute member uniqueMember
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap

Эта директива указывает, какие атрибуты LDAP используются для проверки членства пользователей в группах. Чтобы указать несколько атрибутов, можно использовать эту директиву несколько раз. Если директива не задана, mod_authnz_ldap использует атрибуты member и uniqueMember.

AuthLDAPGroupAttributeIsDN Directive

Описание: Использовать DN имени пользователя клиента при проверке членства в группе
Синтаксис:
AuthLDAPGroupAttributeIsDN on|off
Значение по умолчанию:
AuthLDAPGroupAttributeIsDN on
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap

Если задано значение on, эта директива указывает использовать уникальное имя (DN) пользователя клиента при проверке членства в группе. В противном случае будет использоваться имя пользователя. Например, предположим, что клиент передал имя пользователя bjenson, которому соответствует DN LDAP cn=Babs Jenson, o=Example. Если эта директива задана, mod_authnz_ldap проверит, является ли cn=Babs Jenson, o=Example членом группы. Если директива не задана, mod_authnz_ldap проверит, является ли bjenson членом группы.

AuthLDAPInitialBindAsUser Directive

Описание: Определяет, выполняет ли сервер первоначальный поиск DN с использованием имени пользователя базовой аутентификации вместо анонимного доступа или заданных в конфигурации учетных данных сервера
Синтаксис:
AuthLDAPInitialBindAsUser off|on
Значение по умолчанию:
AuthLDAPInitialBindAsUser off
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap
Совместимость: Доступна начиная с версии 2.3.6

По умолчанию сервер преобразует имя пользователя базовой аутентификации в уникальное имя LDAP (DN), выполняя запрос анонимно либо с использованием выделенной учетной записи и пароля. Эта директива заставляет сервер выполнять первоначальный поиск DN, используя переданные пользователем имя и пароль без изменений.

Если имя пользователя без изменений не позволяет выполнить привязку, но требует некоторого форматирования, см. AuthLDAPInitialBindPattern.

Используйте эту директиву только в том случае, если ваш LDAP-сервер не принимает анонимные запросы и вы не можете использовать выделенную учетную запись AuthLDAPBindDN.

Недоступна только для авторизации

Эту директиву можно использовать только в том случае, если данный модуль выполняет аутентификацию пользователя. Она не действует, если модуль используется исключительно для авторизации.

См. также

  • AuthLDAPInitialBindPattern
  • AuthLDAPBindDN
  • AuthLDAPCompareAsUser
  • AuthLDAPSearchAsUser

AuthLDAPInitialBindPattern Directive

Описание: Задает преобразование имени пользователя базовой аутентификации, используемое при подключении к LDAP-серверу для поиска DN
Синтаксис:
AuthLDAPInitialBindPattern regex substitution
Значение по умолчанию:
AuthLDAPInitialBindPattern (.*) $1 (remote username used verbatim)
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap
Совместимость: Доступна начиная с версии 2.3.6

Если для AuthLDAPInitialBindAsUser задано значение ON, имя пользователя базовой аутентификации будет преобразовано согласно аргументам регулярного выражения и подстановки.

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

Используйте эту директиву только в том случае, если ваш LDAP-сервер не принимает анонимные запросы и вы не можете использовать выделенную учетную запись AuthLDAPBindDN.

AuthLDAPInitialBindPattern (.+) $1@example.com
AuthLDAPInitialBindPattern (.+) cn=$1,dc=example,dc=com

Недоступна только для авторизации

Эту директиву можно использовать только в том случае, если данный модуль выполняет аутентификацию пользователя. Она не действует, если модуль используется исключительно для авторизации.

Отладка

Преобразованный DN записывается в переменную окружения LDAP_BINDASUSER. Если регулярное выражение не соответствует входным данным, используется имя пользователя без изменений.

См. также

  • AuthLDAPInitialBindAsUser
  • AuthLDAPBindDN

AuthLDAPMaxSubGroupDepth Directive

Описание: Задает максимальную глубину вложенности подгрупп, при достижении которой поиск пользователя прекращается.
Синтаксис:
AuthLDAPMaxSubGroupDepth Number
Значение по умолчанию:
AuthLDAPMaxSubGroupDepth 10
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap
Совместимость: Доступна начиная с версии 2.3.0

Если для этой директивы задано ненулевое значение X и используется директива Require ldap-group someGroupDN, предоставленные учетные данные пользователя будут проверяться на членство в объекте каталога someGroupDN или в любой группе, входящей в текущую группу, вплоть до максимального уровня вложенности X, заданного этой директивой.

Более подробный пример см. в разделе Require ldap-group.

Производительность вложенных групп

Если AuthLDAPSubGroupAttribute пересекается с AuthLDAPGroupAttribute (как происходит по умолчанию и требуется распространенными схемами LDAP), поиск подгрупп в больших группах без кэширования может быть очень медленным. Если вы используете большие группы без вложенности, задайте для AuthLDAPMaxSubGroupDepth значение 0.

AuthLDAPRemoteUserAttribute Directive

Описание: Использовать значение атрибута, полученного при запросе пользователя, для установки переменной окружения REMOTE_USER
Синтаксис:
AuthLDAPRemoteUserAttribute uid
Значение по умолчанию: none
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap

Если эта директива задана, переменной окружения REMOTE_USER будет присвоено значение указанного атрибута. Убедитесь, что этот атрибут включен в список атрибутов в определении AuthLDAPURL, иначе директива не будет действовать. Если эта директива задана, она имеет приоритет над AuthLDAPRemoteUserIsDN. Директива полезна, если вы хотите, чтобы пользователи входили на веб-сайт с помощью адреса электронной почты, а серверному приложению в качестве идентификатора пользователя требуется имя пользователя.

AuthLDAPRemoteUserIsDN Directive

Описание: Использовать DN имени пользователя клиента для установки переменной окружения REMOTE_USER
Синтаксис:
AuthLDAPRemoteUserIsDN on|off
Значение по умолчанию:
AuthLDAPRemoteUserIsDN off
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap

Если для этой директивы задано значение on, переменной окружения REMOTE_USER будет присвоено полное уникальное имя аутентифицированного пользователя, а не только имя пользователя, переданное клиентом. По умолчанию эта директива отключена.

AuthLDAPSearchAsUser Directive

Описание: Использовать учетные данные аутентифицированного пользователя для выполнения поисковых запросов авторизации
Синтаксис:
AuthLDAPSearchAsUser on|off
Значение по умолчанию:
AuthLDAPSearchAsUser off
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap
Совместимость: Доступна начиная с версии 2.3.6

Если директива задана и mod_authnz_ldap выполнила аутентификацию пользователя, LDAP-поиски для авторизации будут использовать запрошенное уникальное имя (DN) и пароль базовой HTTP-аутентификации этого пользователя вместо учетных данных сервера, заданных в конфигурации.

Для проверок авторизации ldap-filter и ldap-dn используются поисковые запросы.

Эта директива влияет только на сравнения, выполняемые при обработке вложенных групп, если также включена AuthLDAPCompareAsUser.

Используйте эту директиву только в том случае, если ваш LDAP-сервер не принимает анонимные запросы и вы не можете использовать выделенную учетную запись AuthLDAPBindDN.

См. также

  • AuthLDAPInitialBindAsUser
  • AuthLDAPCompareAsUser

AuthLDAPSubGroupAttribute Directive

Описание: Задает метки атрибутов (по одному значению в строке директивы), используемые для определения членов текущей группы, которые сами являются группами.
Синтаксис:
AuthLDAPSubGroupAttribute attribute
Значение по умолчанию:
AuthLDAPSubGroupAttribute member uniqueMember
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap
Совместимость: Доступна начиная с версии 2.3.0

Объект группы LDAP может содержать пользователей и группы (так называемые вложенные группы или подгруппы). Директива AuthLDAPSubGroupAttribute определяет метки атрибутов для членов-групп, а директива AuthLDAPGroupAttribute определяет метки атрибутов для членов-пользователей. Чтобы использовать несколько атрибутов, можно указывать эту директиву несколько раз. Если директива не задана, mod_authnz_ldap использует атрибуты member и uniqueMember.

AuthLDAPSubGroupClass Directive

Описание: Задает значения objectClass LDAP, определяющие объекты каталога, которые являются группами при обработке подгрупп.
Синтаксис:
AuthLDAPSubGroupClass LdapObjectClass
Значение по умолчанию:
AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap
Совместимость: Доступна начиная с версии 2.3.0

Объект группы LDAP может содержать пользователей и группы (так называемые вложенные группы или подгруппы). Директива AuthLDAPSubGroupAttribute определяет метки атрибутов для членов, которые могут быть подгруппами текущей группы (в отличие от членов-пользователей). Директива AuthLDAPSubGroupClass задает значения objectClass LDAP, используемые для проверки, что эти потенциальные подгруппы действительно являются объектами-группами. Затем в проверенных подгруппах можно искать дополнительные записи пользователей или подгрупп. Чтобы использовать несколько атрибутов, можно указывать эту директиву несколько раз. Если директива не задана, mod_authnz_ldap использует значения groupOfNames и groupOfUniqueNames.

AuthLDAPURL Directive

Описание: URL, задающий параметры поиска LDAP
Синтаксис:
AuthLDAPURL url [NONE|SSL|TLS|STARTTLS]
Контекст: directory, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_authnz_ldap

URL в формате RFC 2255, задающий параметры поиска LDAP. Синтаксис URL:

ldap://host:port/basedn?attribute?scope?filter

Чтобы Apache по очереди пробовал несколько URL LDAP, используйте следующий синтаксис:

AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/dc=..."

Предупреждение: Если указано несколько серверов, всю строку URL необходимо заключить в кавычки; в противном случае возникнет ошибка: «AuthLDAPURL принимает один аргумент — URL для определения подключения LDAP». Разумеется, для каждого из этих серверов можно указать параметры поиска.

ldap
Для обычного LDAP используйте строку ldap. Для защищенного LDAP используйте ldaps. Защищенный LDAP доступен только в том случае, если Apache скомпонован с библиотекой LDAP, поддерживающей SSL.
host:port

Имя и порт LDAP-сервера (по умолчанию localhost:389 для ldap и localhost:636 для ldaps). Чтобы указать несколько резервных LDAP-серверов, перечислите их через пробел. mod_authnz_ldap будет по очереди пытаться подключиться к каждому серверу, пока не установит соединение. Если указано несколько LDAP-серверов, весь URL LDAP необходимо заключить в двойные кавычки.

После подключения к серверу соединение остается активным в течение всего времени работы процесса httpd или до отключения LDAP-сервера.

Если LDAP-сервер отключится и существующее соединение будет разорвано, mod_authnz_ldap попытается подключиться повторно, начиная с основного сервера и по очереди проверяя остальные резервные серверы. Обратите внимание, что это не то же самое, что настоящий циклический поиск.

basedn
DN ветви каталога, откуда следует начинать все поисковые запросы. Как минимум здесь должен быть указан корень дерева каталогов, но можно также указать поддерево каталога.
attribute
Атрибут, по которому выполняется поиск. Хотя RFC 2255 допускает список атрибутов, разделенных запятыми, будет использоваться только первый атрибут независимо от их количества. Если атрибуты не указаны, по умолчанию используется uid. Рекомендуется выбрать атрибут, значение которого уникально для всех записей используемого поддерева. Все перечисленные атрибуты будут помещены в окружение с префиксом AUTHENTICATE_ для использования другими модулями.
scope
Область поиска. Может иметь значение one или sub. Обратите внимание, что RFC 2255 также поддерживает область base, но этот модуль ее не поддерживает. Если область не указана или задана область base, по умолчанию используется область sub.
filter
Допустимый фильтр поиска LDAP. Если фильтр не указан, по умолчанию используется (objectClass=*), который выполняет поиск всех объектов в дереве. Длина фильтров ограничена примерно 8000 символами (определением MAX_STRING_LEN в исходном коде Apache). Этого должно быть достаточно для любого приложения. Начиная с версии 2.4.10 ключевое слово none отключает использование фильтра; это требуется некоторым примитивным LDAP-серверам.

При выполнении поиска атрибут, фильтр и имя пользователя, переданное HTTP-клиентом, объединяются в поисковый фильтр вида (&(filter)(attribute=username)).

Например, рассмотрим URL ldap://ldap.example.com/o=Example?cn?sub?(posixid=*). Когда клиент пытается подключиться с именем пользователя Babs Jenson, результирующий поисковый фильтр будет иметь вид (&(posixid=*)(cn=Babs Jenson)).

Можно добавить необязательный параметр, позволяющий URL LDAP переопределить тип подключения. Допустимы следующие значения:

NONE
Установить незащищенное соединение через порт LDAP по умолчанию. Это соответствует ldap:// на порту 389.
SSL
Установить защищенное соединение через порт защищенного LDAP по умолчанию. Это соответствует ldaps://
TLS | STARTTLS
Установить защищенное соединение с повышенным уровнем защиты через порт LDAP по умолчанию. По умолчанию соединение устанавливается через порт 389, после чего переключается на защищенное соединение через тот же порт.

Примеры URL AuthLDAPURL см. выше.

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

Spec-Zone.ru

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