Аутентификация LDAP#
Примечание
Эта страница переведена при помощи нейросети GigaChat.
Метод аутентификации LDAP схож с методом password, за исключением того, что для проверки пароля используется служба LDAP. Пользователь заранее должен быть зарегистрирован в базе данных, чтобы аутентификация через LDAP стала возможной.
Существует два режима работы LDAP-аутентификации:
Простой режим привязки: сервер проверяет связь с уникальным именем, сформированным как комбинация префикса (
prefix) и суффикса (suffix) с именем пользователя. Префикс часто содержит конструкциюcn=илиDOMAIN\*для среды Active Directory, а суффикс дополняет DNS-запись вне контекста AD.Режим поиска и привязки: сервер вначале устанавливает соединение с LDAP-каталогом, используя фиксированные имя пользователя (
ldapbinddn) и пароль (ldapbindpasswd), и ищет конкретного пользователя, осуществляющего попытку входа. Если данные пользователя и пароль не предоставлены, предпринимается попытка анонимного доступа к каталогу. Далее сервер осуществляет поиск нужного пользователя в поддеревеldapbasedn, проверяя точный атрибут, указанный вldapsearchattribute. После нахождения пользователя сервер разрывает первое соединение и снова подключается к каталогу от лица этого пользователя, проверяя введенный пароль клиента. Подобный подход распространен в других программах, таких как модуль Apachemod_authnz_ldapи библиотекаpam_ldap. Несмотря на повышенную гибкость расположения пользователей в каталоге, этот метод создает двойную нагрузку на сервер LDAP.
Общие параметры конфигурации, используемые двумя режимами:
ldapserverСписок имен или IP-адресов LDAP-серверов, разделенных пробелами, к которым необходимо подключаться. Допускается указание нескольких серверов.
ldapportПорт LDAP-сервера, к которому осуществляется подключение. Если не указан, используется порт по умолчанию, определенный в библиотеке LDAP.
ldapschemeЗадайте значение
ldaps, чтобы использовать протокол LDAPS. Это особый способ подключения к LDAP-серверу через SSL, поддерживаемый отдельными реализациями LDAP. Дополнительно рассмотрите опциюldaptlsкак альтернативный вариант.ldaptlsУстановите значение
1, чтобы шифровать соединение между PostgreSQL и LDAP-сервером с помощью TLS-шифрования, используя командуStartTLS, описанную в стандарте RFC 4513. Альтернативный вариант предлагает опцияldapscheme.
Важно отметить, что включение ldapscheme или ldaptls защищает только канал связи между PostgreSQL и LDAP-сервером. Само соединение между клиентом PostgreSQL и сервером PostgreSQL останется открытым, если дополнительно не включено SSL-шифрование.
Далее представлены параметры, доступные только в простом режиме привязки:
ldapprefixСтрока, добавляемая к имени пользователя при формировании Distinguished Name (DN) для выполнения простой привязки при проверке подлинности.
ldapsuffixСтрока, которую необходимо присоединять к имени пользователя при создании DN для осуществления простой привязки при аутентификации.
Следующие параметры применяются только в режиме поиска и привязки:
ldapbasednКорневой DN (Distinguished Name), откуда начинается поиск пользователя при проведении аутентификации способом «поиска и привязки».
ldapbinddnDN пользователя для привязки к каталогу с целью выполнения поиска при выполнении аутентификации search+bind.
ldapbindpasswdПароль пользователя для привязки к каталогу с целью выполнения поиска при выполнении аутентификации search+bind.
ldapsearchattributeАтрибут для сопоставления с именем пользователя в поиске при выполнении аутентификации search+bind. Если атрибут не указан, будет использоваться атрибут
uid.ldapsearchfilterФильтр поиска, который следует использовать при выполнении аутентификации search+bind. Вхождения
$usernameбудут заменены именем пользователя. Это позволяет использовать более гибкие фильтры поиска, чемldapsearchattribute.ldapurlURL-адрес LDAP в формате RFC 4516. Это альтернативный способ записи некоторых других параметров LDAP в более компактной и стандартной форме. Формат следующий:
ldap[s]://host[:port]/basedn[?[attribute][?[scope][?[filter]]]]scopeдолжен быть одним изbase,one,sub, обычно последний. (По умолчанию используетсяbase, что обычно не полезно в этом приложении.)attributeможет назначить один атрибут, в котором случае он используется в качестве значения дляldapsearchattribute. Еслиattributeпусто, тоfilterможно использовать в качестве значения дляldapsearchfilter.Схема URL
ldapsвыбирает метод LDAPS для установления соединений LDAP через SSL, эквивалентно использованиюldapscheme=ldaps. Чтобы использовать зашифрованные соединения LDAP с использованием операцииStartTLS, используйте обычную схему URLldapи укажите параметрldaptlsв дополнение кldapurl.Для анонимных привязок
ldapbinddnиldapbindpasswdдолжны быть указаны в виде отдельных опций.В настоящее время URL-адреса LDAP поддерживаются только с помощью OpenLDAP, а не в Windows.
Неправильно комбинировать параметры конфигурации для простого режима привязки с параметрами для режима поиска и привязки.
При использовании режима поиска и привязки возможен поиск по одному атрибуту, указанному через параметр ldapsearchattribute, либо по индивидуальному фильтру поиска, заданному через параметр ldapsearchfilter. Установка ldapsearchattribute=foo эквивалентна использованию ldapsearchfilter=(foo=$username). Если ничего не указано, по умолчанию выбирается ldapsearchattribute=uid.
Если сборка PostgreSQL производилась с библиотекой OpenLDAP, параметр ldapserver можно пропустить. Тогда PostgreSQL начнет искать список хостов и портов через DNS-записи SRV по стандарту RFC 2782. Используется запись вида _ldap._tcp.DOMAIN, где DOMAIN берется из значения ldapbasedn.
Ниже представлен пример конфигурации LDAP с простым режимом привязки:
host ... ldap ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"
При попытке подключиться к серверу базы данных от имени пользователя someuser, PostgreSQL обратится к LDAP-серверу, пытаясь подключиться с DN cn=someuser,dc=example,dc=net и паролем, указанным клиентом. Если подключение удастся, пользователю будет предоставлен доступ к базе данных.
Приведен пример конфигурации для режима поиска и привязки:
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchattribute=uid
При попытке подключиться к серверу базы данных от имени пользователя someuser, PostgreSQL попробует анонимно подключиться к LDAP-серверу (так как параметр ldapbinddn не задан), провести поиск записи по критерию (uid=someuser) в указанном базовом DN. Найдя подходящую запись, PostgreSQL далее попробует подключиться с использованием полученной информации и пароля, предоставленного клиентом. Если второй этап успешного подключения пройдет удачно, доступ к базе данных будет предоставлен.
Та же самая конфигурация поиска и привязки, записанная в формате URL:
host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"
Многие другие программы, поддерживающие аутентификацию через LDAP, применяют аналогичный формат URL, благодаря чему проще делиться конфигурациями.
Вот пример конфигурации поиска и привязки, где вместо ldapsearchattribute используется параметр ldapsearchfilter, позволяющий проводить аутентификацию по идентификатору пользователя или электронному адресу:
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchfilter="(|(uid=$username)(mail=$username))"
Вот пример конфигурации поиска и привязки, где имя узла (узлов) и порт (порты) LDAP-службы определяются автоматически через DNS SRV-запросы для домена example.net:
host ... ldap ldapbasedn="dc=example,dc=net"
Совет
Так как в LDAP-записях часто встречаются запятые и пробелы для разделения элементов DN, рекомендуется заключать значения параметров LDAP в двойные кавычки при конфигурировании, как продемонстрировано в примерах.