Аутентификация 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), откуда начинается поиск пользователя при проведении аутентификации способом "поиска и привязки".
ldapbinddn
: DN пользователя для привязки к каталогу с целью выполнения поиска при выполнении аутентификации search+bind.
ldapbindpasswd
: Пароль пользователя для привязки к каталогу с целью выполнения поиска при выполнении аутентификации search+bind.
ldapsearchattribute
: Атрибут для сопоставления с именем пользователя в поиске при выполнении аутентификации search+bind. Если атрибут не указан, будет использоваться атрибут uid.
ldapsearchfilter
: Фильтр поиска, который следует использовать при выполнении аутентификации search+bind. Вхождения $username будут заменены именем пользователя. Это позволяет использовать более гибкие фильтры поиска, чем ldapsearchattribute.
ldapurl
: URL-адрес 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, используйте обычную схему URL ldap и укажите параметр 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 в двойные кавычки при конфигурировании, как продемонстрировано в примерах.