Модуль 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 и iPlanet (Netscape) SDK.
- Сложные политики авторизации могут быть реализованы путём представления политики с помощью фильтров 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, для которых может потребоваться загрузка дополнительных модулей авторизации.
- Предоставить доступ всем успешно аутентифицированным пользователям, если есть директива
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
Директивы 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 указывает, какие имена пользователей могут получить доступ к ресурсу. После того как mod_authnz_ldap извлёк уникальный DN из каталога, он выполняет LDAP-операцию сравнения, используя имя пользователя, указанное в директиве Require ldap-user, чтобы определить, является ли этот пользователь частью только что полученной записи LDAP. Доступ нескольким пользователям можно предоставить, перечислив имена пользователей в строке через пробелы. Если имя пользователя содержит пробелы, оно должно быть заключено в двойные кавычки. Доступ нескольким пользователям также можно предоставить, используя несколько директив Require ldap-user, по одному пользователю в строке. Например, с AuthLDAPURL (т.е., cn используется для поиска), следующие директивы Require могут быть использованы для ограничения доступа:
Require ldap-user "Barbara Jenson" Require ldap-user "Fred User" Require ldap-user "Joe Manager"
Из-за того, как mod_authnz_ldap обрабатывает эту директиву, Барбара Дженсен могла войти как Барбара Дженсен, Барбара или любое другое значение cn, которое она имеет в своей записи LDAP. Для поддержки всех значений атрибута в записи пользователя достаточно единственной строки Require ldap-user.
Если вместо атрибута cn в URL использовался атрибут uid, три строки выше можно было бы свернуть в:
Require ldap-user bjenson fuser jmanager
Require ldap-group
Эта директива указывает LDAP-группу, члены которой имеют разрешение на доступ. Она принимает имя в формате distinguished name LDAP-группы. Обратите внимание: имя группы не должно быть заключено в кавычки. Например, предположим, что в каталоге LDAP существовала запись:
dn: cn=Administrators, o=Example objectClass: groupOfUniqueNames uniqueMember: cn=Barbara Jenson, o=Example uniqueMember: cn=Fred User, o=Example
Следующая директива предоставит доступ как Фреду, так и Барбаре:
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
Следующие директивы позволят получить доступ Бобу Эллису, Тому Джексону, Барбаре Дженсен, Фреду Юзеру, Аллану Джефферсону и Полу Тилли, но не позволят получить доступ Джиму Свенсону или Эллиоту Родсу (поскольку они находятся на глубине вложенности подгрупп 2):
Require ldap-group cn=Employees, o=Example AuthLDAPMaxSubGroupDepth 1
Поведение этой директивы изменяется директивами AuthLDAPGroupAttribute, AuthLDAPGroupAttributeIsDN, AuthLDAPMaxSubGroupDepth, AuthLDAPSubGroupAttribute, и AuthLDAPSubGroupClass.
Требовать ldap-dn
Директива Require ldap-dn позволяет администратору предоставлять доступ на основе имени с отличительными характеристиками. Она указывает DN, которому должно соответствовать имя с отличительными характеристиками для предоставления доступа. Если имя с отличительными характеристиками, полученное с сервера каталогов, соответствует имени с отличительными характеристиками в Require ldap-dn, то авторизация предоставляется. Примечание: не заключайте имя с отличительными характеристиками в кавычки.
Следующая директива предоставит доступ к конкретному DN:
Require ldap-dn cn=Barbara Jenson, o=Example
Поведение этой директивы изменяется директивой AuthLDAPCompareDNOnServer.
Требовать ldap-атрибут
Директива 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"
Требовать ldap-фильтр
Директива 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, используя их 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
- Предоставить доступ любому пользователю в группе Администраторы. Пользователи должны пройти аутентификацию с помощью своего 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 и убедиться, что члены группы остаются синхронизированными с пользователями пейджеров. Это становится тривиальным с помощью фильтров. Цель состоит в предоставлении доступа любому пользователю, у которого есть пейджер, а также предоставлении доступа Джоу Менеджеру, у которого нет пейджера, но которому необходимо получить доступ к тому же ресурсу:
AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(|(qpagePagerID=*)(uid=jmanager)) Require valid-user
Это может показаться запутанным, поэтому полезно оценить, как будет выглядеть фильтр поиска в зависимости от того, кто подключается, как показано ниже. Если Фред Юзер подключается как
fuser, фильтр будет выглядеть так(&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))Вышеупомянутый поиск увенчается успехом только в том случае, если у fuser есть пейджер. Когда Джоу Менеджер подключается как jmanager, фильтр выглядит так
(&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))Вышеупомянутый поиск будет успешным, независимо от того, есть ли у jmanager пейджер или нет.
Использование TLS
Для использования TLS см. директивы mod_ldap LDAPTrustedClientCert, LDAPTrustedGlobalCert и LDAPTrustedMode.
Дополнительный второй параметр может быть добавлен к AuthLDAPURL для переопределения типа подключения по умолчанию, установленного LDAPTrustedMode. Это позволит подключению, установленным с помощью ldap:// Url, быть модернизированным до безопасного подключения на том же порту.
Использование SSL
Для использования SSL см. директивы mod_ldap LDAPTrustedClientCert, LDAPTrustedGlobalCert и LDAPTrustedMode.
Для указания защищенного сервера LDAP используйте ldaps:// в директиве AuthLDAPURL вместо ldap://.
Размещение информации о входе
при выполнении модулем аутентификации, атрибуты ldap, указанные в директиве AuthLDAPURL, помещаются в переменные среды с префиксом "AUTHENTICATE_".
при выполнении модулем авторизации, атрибуты ldap, указанные в директиве AuthLDAPURL, помещаются в переменные среды с префиксом "AUTHORIZE_".
Если поле атрибута содержит имя пользователя, общее имя и номер телефона пользователя, программа CGI получит доступ к этой информации без необходимости выполнения второго независимого запроса к LDAP для получения этой дополнительной информации.
Это может значительно упростить кодирование и конфигурацию, необходимую в некоторых веб-приложениях.
Использование Active Directory
Установка Active Directory может поддерживать несколько доменов одновременно. Для различения пользователей между доменами может быть добавлен идентификатор, называемый именем принципа пользователя (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
Пользователям нужно будет вводить свое имя принципа пользователя в качестве логина в формате somebody@nz.example.com.
Использование Microsoft FrontPage с mod_authnz_ldap
Обычно FrontPage использует веб-специфичные файлы пользователей/групп FrontPage (т.е., модули mod_authn_file и mod_authz_groupfile ) для обработки всей аутентификации. К сожалению, простое изменение на аутентификацию LDAP путем добавления соответствующих директив невозможно, так как это нарушит формы Разрешений в клиенте FrontPage, которые пытаются изменить стандартные текстовые файлы авторизации.
После создания веб-сайта FrontPage добавление аутентификации LDAP сводится к добавлению следующих директив в каждый файл .htaccess , который создается в веб-приложении
AuthLDAPURL "the url" AuthGroupFile "mygroupfile" Require group "mygroupfile"
Как это работает
FrontPage ограничивает доступ к веб-сайту, добавляя директиву Require valid-user к файлам .htaccess. Директива Require valid-user будет успешной для любого пользователя, который действителен с точки зрения LDAP. Это означает, что любой, у кого есть запись в каталоге LDAP, считается действительным пользователем, тогда как FrontPage рассматривает только тех людей в локальном файле пользователей как действительных. Заменив авторизацию группы ldap файлом группы, Apache разрешается обращаться к локальному файлу пользователей (который управляется FrontPage) — вместо LDAP — при обработке авторизации пользователя.
После добавления директив, как указано выше, пользователи FrontPage смогут выполнять все операции управления из клиента FrontPage.
Ограничения
- При выборе URL LDAP атрибут, используемый для аутентификации, должен быть таким, чтобы он был также действительным для помещения в файл пользователей
mod_authn_file. Идентификатор пользователя идеально подходит для этого. - При добавлении пользователей через FrontPage администраторы FrontPage должны выбирать имена пользователей, которые уже существуют в каталоге LDAP (по понятным причинам). Кроме того, пароль, который администратор вводит в форму, игнорируется, так как Apache фактически будет выполнять аутентификацию по паролю в базе данных LDAP, а не по паролю в локальном файле пользователей. Это может вызвать путаницу у веб-администраторов.
- Apache должен быть скомпилирован с
mod_auth_basic,mod_authn_fileиmod_authz_groupfileдля использования поддержки FrontPage. Это связано с тем, что 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, но не если пользователь может быть сопоставлен с DN, а его пароль не может быть проверен с помощью LDAP bind. Если AuthLDAPBindAuthoritative установлено в off, другие настроенные модули аутентификации получат возможность проверить пользователя, если LDAP bind (с текущими учетными данными пользователя) завершится неудачей по любой причине.
Это позволяет пользователям, присутствующим как в LDAP, так и в AuthUserFile, выполнять аутентификацию, когда LDAP-сервер доступен, но учетная запись пользователя заблокирована или пароль по какой-либо причине недоступен.
См. также
Директива AuthLDAPBindDN
| Описание: | Необязательный DN для использования при подключении к LDAP-серверу |
|---|---|
| Синтаксис: | AuthLDAPBindDN distinguished-name |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
Необязательный DN, используемый для подключения к серверу при поиске записей. Если не указано, mod_authnz_ldap будет использовать анонимное подключение.
Директива AuthLDAPBindPassword
| Описание: | Пароль, используемый совместно с bind DN |
|---|---|
| Синтаксис: | AuthLDAPBindPassword password |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
| Совместимость: | exec: добавлен в 2.4.5. |
Пароль подключения для использования совместно с bind 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 off |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
| Совместимость: | Доступно в версии 2.3.6 и более поздних |
При установленной директиве и выполнении аутентификации пользователя mod_authnz_ldap, LDAP-сравнения для авторизации используют запрошенный DN (имя объекта) и пароль HTTP-базовой аутентификации аутентифицированного пользователя вместо настроенных учетных данных сервера.
Проверки авторизации ldap-attribute, ldap-user и ldap-group (только одноуровневые) используют сравнения.
Эта директива действует только на сравнения, выполняемые во время обработки вложенных групп, когда также включена AuthLDAPSearchAsUser.
Эта директива должна использоваться только в том случае, если ваш LDAP-сервер не поддерживает анонимные сравнения, и вы не можете использовать выделенный AuthLDAPBindDN.
См. также
Директива AuthLDAPCompareDNOnServer
| Описание: | Использование LDAP-сервера для сравнения DN |
|---|---|
| По умолчанию: | 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
| Описание: | Когда модуль будет де-ссылать псевдонимы |
|---|---|
| По умолчанию: | AuthLDAPDereferenceAliases always |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
Эта директива определяет, когда mod_authnz_ldap будет де-ссылать псевдонимы во время LDAP-операций. По умолчанию — always.
Директива AuthLDAPGroupAttribute
| Описание: | LDAP-атрибуты, используемые для идентификации пользователей, входящих в группы. |
|---|---|
| По умолчанию: | AuthLDAPGroupAttribute member uniqueMember |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
Эта директива указывает, какие LDAP-атрибуты используются для проверки принадлежности пользователей к группам. Несколько атрибутов могут быть использованы, указав эту директиву несколько раз. Если не указано, то mod_authnz_ldap использует атрибуты member и uniqueMember.
Директива AuthLDAPGroupAttributeIsDN
| Описание: | Использование DN имени пользователя клиента при проверке принадлежности к группе |
|---|---|
| По умолчанию: | AuthLDAPGroupAttributeIsDN on |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
При установленной директиве on, эта директива указывает использовать имя объекта (DN) имени пользователя клиента при проверке принадлежности к группе. В противном случае будет использоваться имя пользователя. Например, предположим, что клиент отправил имя пользователя bjenson, которое соответствует LDAP-DN cn=Babs Jenson, o=Example. Если эта директива установлена, mod_authnz_ldap будет проверять, является ли группа членом cn=Babs Jenson, o=Example. Если эта директива не установлена, то mod_authnz_ldap будет проверять, является ли группа членом bjenson.
Директива AuthLDAPInitialBindAsUser
| Описание: | Определяет, использует ли сервер начальный поиск DN с использованием имени пользователя основного аутентификационного пользователя вместо анонимного или с жестко заданными учетными данными сервера |
|---|---|
| Синтаксис: | AuthLDAPInitialBindAsUser off|on |
| По умолчанию: | AuthLDAPInitialBindAsUser off |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
| Совместимость: | Доступно в версии 2.3.6 и более поздних |
По умолчанию сервер анонимно или с использованием выделенного пользователя и пароля преобразует имя пользователя основного аутентификационного пользователя в отличительный имя (DN) LDAP. Данная директива заставляет сервер использовать точное имя пользователя и пароль, предоставленные входящим пользователем, для выполнения начального поиска DN.
Если точное имя пользователя не может быть напрямую связано, но требует некоторого косметического преобразования, см. AuthLDAPInitialBindPattern.
Данная директива должна использоваться только в том случае, если ваш сервер LDAP не принимает анонимные запросы, и вы не можете использовать выделенного AuthLDAPBindDN.
Не доступно с только авторизацией
Эта директива может использоваться только в том случае, если данный модуль выполняет аутентификацию пользователя, и не оказывает никакого эффекта, когда данный модуль используется исключительно для авторизации.См. также
Директива AuthLDAPInitialBindPattern
| Описание: | Указывает преобразование имени пользователя основного аутентификационного пользователя, которое будет использоваться при подключении к серверу 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
| Описание: | Указывает максимальную глубину вложенности подгрупп, которая будет обработана перед прекращением поиска пользователя. |
|---|---|
| Синтаксис: | 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 в ноль.
Директива AuthLDAPRemoteUserAttribute
| Описание: | Использование значения атрибута, возвращённого во время запроса пользователя, для установки переменной окружения REMOTE_USER |
|---|---|
| Синтаксис: | AuthLDAPRemoteUserAttribute uid |
| По умолчанию: | none |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
Если эта директива установлена, значение переменной окружения REMOTE_USER будет установлено в значение указанного атрибута. Убедитесь, что этот атрибут включён в список атрибутов в определении AuthLDAPURL, в противном случае данная директива не будет иметь эффекта. Эта директива, если присутствует, имеет приоритет над AuthLDAPRemoteUserIsDN. Данная директива полезна в случаях, когда пользователи должны входить на сайт используя адрес электронной почты, а приложение обратной связи ожидает имя пользователя в виде идентификатора пользователя.
Директива AuthLDAPRemoteUserIsDN
| Описание: | Использование DN имени клиента для установки переменной окружения REMOTE_USER |
|---|---|
| Синтаксис: | AuthLDAPRemoteUserIsDN on|off |
| По умолчанию: | AuthLDAPRemoteUserIsDN off |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
Если эта директива установлена в включенное состояние, значение переменной окружения REMOTE_USER будет установлено в полное отличительное имя аутентифицированного пользователя, а не только в имя пользователя, переданное клиентом. По умолчанию она выключена.
Директива AuthLDAPSearchAsUser
| Описание: | Использование учетных данных аутентифицированного пользователя для выполнения поисков авторизации |
|---|---|
| Синтаксис: | 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
| Описание: | Указывает метки атрибутов, по одному значению на строку директивы, используемые для различения членов текущей группы, являющихся группами. |
|---|---|
| Синтаксис: | AuthLDAPSubGroupAttribute attribute |
| По умолчанию: | AuthLDAPSubGroupAttribute member uniqueMember |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
| Совместимость: | Доступно в версии 2.3.0 и более поздних |
Объект LDAP-группы может содержать членов, которые являются пользователями и членами, которые являются группами (называемыми вложенными или подгруппами). Директива AuthLDAPSubGroupAttribute идентифицирует метки членов группы, а директива AuthLDAPGroupAttribute идентифицирует метки пользовательских членов. Несколько атрибутов могут использоваться, указывая эту директиву несколько раз. Если не указано, то mod_authnz_ldap использует атрибуты member и uniqueMember.
Директива AuthLDAPSubGroupClass
| Описание: | Указывает значения LDAP objectClass, которые идентифицируют объекты каталога, являющиеся группами во время обработки подгрупп. |
|---|---|
| Синтаксис: | AuthLDAPSubGroupClass LdapObjectClass |
| По умолчанию: | AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames |
| Контекст: | directory, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_authnz_ldap |
| Совместимость: | Доступно в версии 2.3.0 и более поздних |
Объект LDAP-группы может содержать членов, которые являются пользователями и членами, которые являются группами (называемыми вложенными или подгруппами). Директива AuthLDAPSubGroupAttribute идентифицирует метки членов, которые могут быть подгруппами текущей группы (в отличие от пользовательских членов). Директива AuthLDAPSubGroupClass указывает значения LDAP objectClass, используемые для проверки того, что эти потенциальные подгруппы на самом деле являются объектами группы. Проверенные подгруппы затем могут быть проверены на наличие дополнительных членов или подгрупп. Несколько атрибутов могут использоваться, указывая эту директиву несколько раз. Если не указано, то mod_authnz_ldap использует значения groupOfNames и groupOfUniqueNames.
Директива AuthLDAPURL
| Описание: | 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Если требуется указать несколько URL-адресов LDAP, которые Apache должен проверять по очереди, синтаксис будет следующим:
AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/dc=..."
Примечание: Если вы указываете несколько серверов, вам необходимо заключить всю строку URL в кавычки; в противном случае вы получите ошибку: "AuthLDAPURL принимает один аргумент, URL для определения подключения LDAP..." Конечно, вы можете использовать параметры поиска на каждом из них.
- ldap
- Для обычного LDAP используйте строку
ldap. Для защищённого LDAP используйтеldapsвместо неё. Защищённый LDAP доступен только если Apache был скомпилирован с поддержкой SSL для библиотеки LDAP. - 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. Обратите внимание, что областьbaseтакже поддерживается RFC 2255, но не поддерживается данным модулем. Если область не указана или указана область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 по умолчанию, а затем обновлено до защищённого соединения на том же порту.
Примеры AuthLDAPURL URL приведены выше.
© 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