Модуль 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
- Примеры
- Использование 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-клиентом. Поскольку сначала выполняется поиск, а затем привязка, этот этап часто называют этапом поиска и привязки. Ниже перечислены действия, выполняемые на этом этапе.
- Сформировать поисковый фильтр, объединив атрибут и фильтр, указанные в директиве
AuthLDAPURL, с именем пользователя, переданным HTTP-клиентом. - Выполнить поиск в каталоге с помощью сформированного фильтра. Если поиск возвращает не ровно одну запись, запретить или отклонить доступ.
- Получить различающееся имя записи, найденной в результате поиска, и попытаться выполнить привязку к серверу 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 доступен, но учетная запись пользователя заблокирована или пароль по другой причине непригоден для использования.
См. также
Директива 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.
См. также
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 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. Если регулярное выражение не соответствует входным данным, используется имя пользователя без изменений.См. также
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.
См. также
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