Аутентификация с помощью LDAP¶
В данном разделе приведены сведения об аутентификации в Picodata с помощью протокола LDAP, в том числе с поддержкой TLS.
Picodata Enterprise
Данная функция доступна только в коммерческой версии Picodata.
Общие сведения¶
Lightweight Directory Access Protocol (далее LDAP) — это легковесный протокол для доступа к службе каталогов X.500, которая часто используется организациями для контроля доступа к ресурсам и управления доменными учетными записями. Существует множество серверов, которые поддерживают данный протокол: OpenLDAP, GLAuth и прочие.
Механизм аутентификации пользователей¶
Типичный сеанс связи с сервером LDAP выглядит примерно так: клиент подключается к серверу, отправляет запрос, дожидается ответа сервера и закрывает соединение. На основании ответа сервера клиент может принять решение об аутентификации пользователя, инициировавшего подключение.
В качестве запроса в Picodata используется BIND, позволяющий
произвести аутентификацию пользователя с использованием заранее
известного Distinguished Name (DN) и факторов аутентификации (например,
пароля).
Для использования протокола LDAP в Picodata следует задать для
учетной записи пользователя тип аутентификации ldap. Примеры см.
ниже.
Особенности работы LDAP¶
- Коммуникация с сервером LDAP происходит один раз при установке новой пользовательской сессии. Если аутентификация пройдена успешно, сессия будет установлена, и до самого её конца повторная аутентификация производиться не будет.
- Метод отвечает только за аутентификацию. Для синхронизации групп, прав и владения объектами с удаленным сервером LDAP следует использовать плагин Argus.
- Метод требует дополнительной настройки кластера через файл конфигурации Picodata.
- Метод невозможно использовать в случае отказа удаленного сервера LDAP.
- Метод не кеширует результаты аутентификации.
Поддержка защищённого режима¶
Зашифрованная коммуникация по протоколу LDAP возможна в двух вариантах:
- LDAP over TLS (
implicit): подключение выполняется к отдельному порту (636), и полностью инкапсулируется внутри TLS/SSL. В этом случае никакой незашифрованный LDAP-трафик по каналу не проходит. - LDAP + StartTLS (
start_tls): изначальное подключение выполняется к обычному порту (389) и начинается в незашифрованном виде. Потом клиент посылает серверу команду StartTLS и подключение начинает использовать шифрование.
Оба варианта обеспечивают конфиденциальность и безопасность
данных при доступе к службам каталогов. Если сервер слушает отдельный порт
для LDAPS (обычно 636), необходимо использовать метод implicit; если шифрование
настроено поверх стандартного LDAP-порта (389) — start_tls.
Для включения любого из этих режимов необходимо выставить параметр
instance.ldap.tls.enabled в значение true.
За выбор метода использования TLS отвечает параметр
instance.ldap.tls.method:
implicit использует LDAP over TLS (LDAPS), а start_tls —
LDAP + StartTLS.
После выполнения настроек зашифрованное подключение будет работать автоматически если на стороне LDAP-сервера используется сертификат, подписанный корневым сертификатом (CA), которому доверяет клиент.
В случае если такой корневой сертификат не находится в системном хранилище
доверенных сертификатов, возможно использование опции instance.ldap.tls.ca_file
для указания альтернативных доверенных корневых сертификатов.
Настройка¶
Для использования LDAP-аутентификации под определенным пользователем в Picodata требуется:
- наличие в сети запущенного сервера LDAP, на котором заведен этот пользователь
- установленные настройки узлов Picodata
- наличие пользователя с таким же именем и типом
аутентификации
ldapв Picodata
Настройка инстанса для аутентификации LDAP¶
Для корректной работы метода нужно установить следующие параметры Picodata на каждом инстансе, который должен принимать LDAP-аутентификацию:
instance.ldap.enabled— признак поддержки LDAP-аутентификации на инстансе. Необходимое значение —true.instance.ldap.connect— строка<host>:<port>, указывающая на удаленный сервер LDAP.instance.ldap.dn_format— формат-строка DN для запросаBIND.instance.ldap.tls.enabled— включение/выключение TLS.instance.ldap.tls.method— метод TLS-подключения.instance.ldap.tls.ca_file— путь к файлу с альтернативными доверенными корневыми сертификатами (опционально).
Пример конфигурационного файла инстанса i1, подключающегося к 127.0.0.1:1389
с использованием LDAP over TLS:
i1.yml
cluster:
name: my_cluster
tier:
default:
instance:
instance_dir: './i1'
name: 'i1'
tier: 'default'
peer: [ 127.0.0.1:3301 ]
iproto:
listen: '0.0.0.0:3301'
advertise: '127.0.0.1:3301'
http:
listen: '0.0.0.0:8081'
pgproto:
listen: '0.0.0.0:4327'
advertise: '127.0.0.1:4327'
ldap:
enabled: true
connect: '127.0.0.1:1636'
dn_format: 'cn=$USER,ou=users,dc=example,dc=org'
tls:
enabled: true
method: 'implicit'
# если необходимо использовать Root CA не из системного хранилища
# ca_file: '/etc/picodata/ldap-ca.pem'
Здесь 1636 используется как нестандартный порт, типичный для тестовых LDAP-серверов (например, GLAuth).
В продуктовой среде обычно используется стандартный порт 636 для LDAPS либо 389 для LDAP/StartTLS.
Для того чтобы такая конфигурация работала, имя сервера, указанное в
instance.ldap.connect, должно совпадать с именем, указанным в сертификате LDAP-сервера (SAN или CN),
а также этот сертификат должен быть доверенным.
В текущей реализации Picodata строка форматирования DN общая для всех
пользователей. Кроме того, нет возможности установить персональный DN
для конкретного пользователя. В строке dn_format доступна только
подстановка имени пользователя через $USER.
Запуск кластера, состоящего из одного инстанса i1, с авторизацией в LDAP:
picodata run --config i1.yml
Настройка пользователей LDAP в Picodata¶
Как и другие методы аутентификации, ldap можно указать при создании
нового пользователя через параметр USING:
CREATE USER "username" USING ldap;
Помимо этого, можно сменить метод аутентификации уже существующего пользователя:
ALTER USER "username" USING ldap;
Обратите внимание, что при использовании метода LDAP не требуется указывать пароль пользователя. Это связано с тем, что Picodata не хранит пароли: при каждой попытке аутентификации клиент будет отправлять пароль отдельно; в свою очередь, Picodata будет использовать полученный пароль при взаимодействии с сервером LDAP. Также рекомендуется включить TLS для передачи пароля по сети в зашифрованном виде.
См. также:
Устранение неполадок¶
После запуска инстанса и настройки пользователя попробуйте подключиться
под созданным пользователем через psql; в случае ошибки проверьте журналы инстанса.
В отличие от других методов аутентификации, LDAP требует дополнительной
настройки, без которой аутентификация с использованием этого метода
будет невозможна. Также важно понимать, что любые проблемы с удаленным
сервером LDAP немедленно отразятся на возможности аутентифицировать
пользователей. Для решения этой проблемы администраторам предлагается
временно изменить метод аутентификации (например, на 'md5') для
затронутых пользователей при помощи функции смены пароля:
ALTER USER "username" WITH PASSWORD 'new_password' USING md5;
LDAP BIND-запросы регистрируются в журнале на уровне verbose.
Ошибки взаимодействия регистрируются на уровне warn, а также сообщаются
клиенту, подключающемуся по PostgreSQL-протоколу.