19.10. Аутентификация LDAP#
19.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 BE был скомпилирован с
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, как показано в примерах.