20.10. Аутентификация LDAP#
20.10. Аутентификация LDAP #
Этот метод аутентификации работает аналогично методу password
, за исключением того, что он использует LDAP в качестве метода проверки пароля. LDAP используется только для проверки соответствия имени пользователя и пароля. Поэтому пользователь должен уже существовать в базе данных, прежде чем LDAP может быть использован для аутентификации.
Аутентификация LDAP может работать в двух режимах. В первом режиме, который мы назовем простым режимом привязки, сервер будет привязываться к уникальному имени, сконструированному как prefix
username
suffix
. Обычно параметр prefix
используется для указания cn=
или DOMAIN
\
в среде Active Directory. suffix
используется для указания оставшейся части DN в среде, не являющейся Active Directory.
Во втором режиме, который мы назовем режимом поиска+привязки, сервер сначала привязывается к каталогу LDAP с помощью фиксированного имени пользователя и пароля, указанных с помощью ldapbinddn
и ldapbindpasswd
, и выполняет поиск пользователя, пытающегося войти в базу данных. Если не настроены имя пользователя и пароль, будет выполнена анонимная привязка к каталогу. Поиск будет выполняться в поддереве, указанном в ldapbasedn
, и будет пытаться выполнить точное совпадение атрибута, указанного в ldapsearchattribute
. После того, как пользователь будет найден в этом поиске, сервер отключается и повторно привязывается к каталогу от имени этого пользователя, используя пароль, указанный клиентом, чтобы проверить правильность входа. Этот режим аналогичен используемым в других программных средствах аутентификации LDAP, таких как Apache mod_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
Строка, которую нужно добавить перед именем пользователя при формировании DN для привязки, при использовании простой привязки аутентификации.
ldapsuffix
Строка, которую нужно добавить к имени пользователя при формировании DN для привязки, при выполнении простой привязки аутентификации.
Следующие параметры используются только в режиме поиска+привязка:
ldapbasedn
Корневой DN для начала поиска пользователя при аутентификации с использованием поиска+привязки.
ldapbinddn
DN пользователя, к которому будет выполнено привязывание к каталогу для выполнения поиска при аутентификации с использованием поиска и привязывания.
ldapbindpasswd
Пароль для пользователя, который будет привязан к каталогу для выполнения поиска при аутентификации с использованием поиска и привязки.
ldapsearchattribute
Атрибут для сопоставления с именем пользователя при выполнении поиска с аутентификацией search+bind. Если атрибут не указан, будет использоваться атрибут
uid
.ldapsearchfilter
Фильтр поиска, используемый при аутентификации с помощью поиска и привязки. Вхождения
$username
будут заменены на имя пользователя. Это позволяет использовать более гибкие фильтры поиска, чемldapsearchattribute
.ldapurl
RFC 4516 LDAP URL. Это альтернативный способ записи некоторых других параметров 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
.LDAP URL в настоящее время поддерживаются только с OpenLDAP, а не в Windows.
Это ошибка смешивать параметры конфигурации для простого привязывания с параметрами для поиска+привязывания.
При использовании режима поиска+привязка, поиск может быть выполнен с использованием одного атрибута, указанного с помощью ldapsearchattribute
, или с использованием пользовательского фильтра поиска, указанного с помощью ldapsearchfilter
. Указание ldapsearchattribute=foo
эквивалентно указанию ldapsearchfilter="(foo=$username)"
. Если ни одна из опций не указана, используется значение по умолчанию ldapsearchattribute=uid
.
Если Tantor SE был скомпилирован с
OpenLDAP в качестве клиентской библиотеки LDAP, настройка
ldapserver
может быть опущена. В этом случае список имен хостов и портов ищется через
RFC 2782 DNS SRV записи.
Ищется имя _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 попытается выполнить анонимную привязку (поскольку ldapbinddn
не указан) к серверу LDAP, выполнить поиск (uid=someuser)
в указанной базовой DN. Если запись найдена, затем будет попытка привязки с использованием найденной информации и пароля, предоставленного клиентом. Если второе соединение успешно, доступ к базе данных будет предоставлен.
Вот та же конфигурация поиска+привязки, записанная в виде URL:
host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"
Некоторое другое программное обеспечение, которое поддерживает аутентификацию через LDAP, использует тот же формат URL, поэтому будет легче обмениваться конфигурацией.
Вот пример конфигурации поиска+привязки, который использует ldapsearchfilter
вместо ldapsearchattribute
для возможности аутентификации по идентификатору пользователя или адресу электронной почты:
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchfilter="(|(uid=$username)(mail=$username))"
Вот пример конфигурации поиска+привязки, который использует обнаружение DNS SRV для поиска имени хоста(-ов) и порта(-ов) для службы LDAP для доменного имени example.net
:
host ... ldap ldapbasedn="dc=example,dc=net"
Подсказка
Поскольку LDAP часто использует запятые и пробелы для разделения различных частей DN, часто необходимо использовать значения параметров в двойных кавычках при настройке параметров LDAP, как показано в примерах.