19.9. Аутентификация LDAP#
19.9. Аутентификация 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 для начала поиска пользователя при аутентификации с использованием поиска+привязки.
ldapbinddnDN пользователя, к которому будет выполнено привязывание к каталогу для выполнения поиска при аутентификации с использованием поиска и привязывания.
ldapbindpasswdПароль для пользователя, который будет привязан к каталогу для выполнения поиска при аутентификации с использованием поиска и привязки.
ldapsearchattributeАтрибут для сопоставления с именем пользователя при выполнении поиска с аутентификацией search+bind. Если атрибут не указан, будет использоваться атрибут
uid.ldapsearchfilterФильтр поиска, используемый при аутентификации с помощью поиска и привязки. Вхождения
$usernameбудут заменены на имя пользователя. Это позволяет использовать более гибкие фильтры поиска, чемldapsearchattribute.ldapurlRFC 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.В настоящее время URL-адреса LDAP поддерживаются только с OpenLDAP.
Это ошибка смешивать параметры конфигурации для простого привязывания с параметрами для поиска+привязывания.
При использовании режима поиска+привязка, поиск может быть выполнен с использованием одного атрибута, указанного с помощью ldapsearchattribute, или с использованием пользовательского фильтра поиска, указанного с помощью ldapsearchfilter. Указание ldapsearchattribute=foo эквивалентно указанию ldapsearchfilter="(foo=$username)". Если ни одна из опций не указана, используется значение по умолчанию ldapsearchattribute=uid.
Если Tantor SE-1C был скомпилирован с
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, как показано в примерах.
19.9.1. Пример настройки аутентификации с применением LDAP #
Примеры конфигурационных записей, приведённые ниже, совместимы с серверами Microsoft Active Directory, а также LDAP FreeIPA и ALD Pro.
Примечание
Запись о методе аутентификации LDAP должна быть первой по списку в файле конфигурации pg_hba.conf на сервере Tantor SE-1C.
Пример конфигурации LDAP с использованием метода поиска и привязки:
host all all 0.0.0.0/0 ldap ldapserver="ad.example.ru"
ldapbasedn="cn=Users,dc=ad,dc=example,dc=ru"
ldapport=389
ldapbinddn="CN=Service Man,CN=Users,DC=ad,DC=example,DC=ru"
ldapbindpasswd="serviceman_password"
ldapsearchfilter="(&(objectClass=user)(cn=tantor*))"
При подключении пользователя к базе данных Tantor SE-1Cпроисходит соединение с LDAP-сервером под сервисным аккаунтом serviceman и осуществляется поиск учетной записи подключающегося пользователя в указанном ldapbasedn. Если запись существует, проверяется ее актуальность и, в случае успеха, пользователю разрешается доступ к базе данных.
Возможны варианты подключения с применением своих параметров идентификации пользователей (атрибут ldapsearchfilter).