Аутентификация LDAP в ADB
В ADB, как и в Greengage DB, поддерживается аутентификация пользователей с использованием протокола Lightweight Directory Access Protocol (LDAP). При использовании LDAP-аутентификации проверка учетных записей пользователей и их паролей выполняется на выбранном LDAP-сервере. Порядок настройки LDAP-аутентификации в ADB с помощью ADCM описан ниже.
|
ПРИМЕЧАНИЕ
Возможность настройки параметров для LDAP-подключения через ADCM доступна в ADB 6 начиная с версии 6.25.1.49. В этой же версии реализована автоматическая синхронизация пользователей и групп ADB с LDAP — с помощью утилиты pg-ldap-sync, поставляемой в бандле ADB. В более ранних версиях ADB настройка LDAP-аутентификации была возможна, однако действия, описанные ниже в разделе Синхронизация ADB и LDAP (обновление файла pg_hba.conf и создание всех необходимых ролей в ADB), требовалось выполнять вручную.
|
Настройка LDAP-аутентификации
Для настройки LDAP-аутентификации в кластере ADB выполните следующие шаги:
-
Убедитесь, что LDAP-сервер настроен и доступен. ADB поддерживает две реализации протокола LDAP: Microsoft Active Directory (MS AD) и 389 Directory Server в составе FreeIPA.
-
Откройте конфигурационные параметры сервиса ADB в ADCM.
-
Переведите переключатель UI LDAP authentication в активное состояние.
-
Поле Описание По умолчанию Пример в MS AD Type
Тип LDAP-сервера. Возможные значения:
-
MSAD— Microsoft Active Directory -
FreeIPA— 389 Directory server в составе FreeIPA
MSAD
MSAD
URI
URI для подключения к LDAP-серверу в формате
<хост>:<порт>—
10.92.12.49:389
LDAP encryption
Метод шифрования для LDAP-соединений:
-
ldaps— использовать LDAP по SSL/TLS (LDAPS) -
starttls— использовать операцию StartTLS (Start Transport Layer Security) -
none— не использовать шифрование LDAP-соединений
none
—
Users baseDN
Ограничение на область поиска объектов в каталоге LDAP, применяемое в запросах на поиск пользователей
—
ou=People,dc=ad,dc=ranger-test
Groups baseDN
Ограничение на область поиска объектов в каталоге LDAP, применяемое в запросах на поиск групп пользователей
—
ou=Groups,dc=ad,dc=ranger-test
Users filter
LDAP-фильтр, используемый для поиска пользователей. Заполняется в соответствии с RFC 2254
(&(|(objectClass=person)(objectClass=inetOrgPerson))(cn=*))
(&(objectClass=person)(objectClass=organizationalPerson)(givenName=*)(sn=*)(sAMAccountName=*))
Groups filter
LDAP-фильтр, используемый для поиска групп пользователей. Заполняется в соответствии с RFC 2254
(&(|(objectClass=group)(objectClass=groupofnames)(objectClass=groupOfUniqueNames))(cn=*))
(cn=*)
SA Login
Имя пользователя, используемое в сервисных запросах к LDAP-серверу
—
cn=admin,dc=ad,dc=ranger-test
Password
Пароль пользователя, используемый в сервисных запросах к LDAP-серверу
—
Пароль пользователя
adminLowercase login
Необходимо ли преобразование имен пользователей в нижний регистр
false
false
Lowercase group
Необходимо ли преобразование имен групп в нижний регистр
false
false
Sync interval
cron-выражение, описывающее периодичность синхронизации пользователей и групп в ADB на основе данных LDAP-сервера. Для синхронизации используется утилита pg-ldap-sync, поставляемая в бандле ADB0 * * * *
0 * * * *
ПРИМЕЧАНИЕРазличные реализации LDAP используют разные имена для типов и идентификаторов объектов. Формат параметров для конкретной реализации LDAP рекомендуется уточнять у администратора LDAP-сервера.
-
-
Нажмите Save. Примените действие Reconfigure & Restart к сервису ADB.
Настройка LDAP-аутентификации для ADB в ADCM
Синхронизация ADB и LDAP
Если LDAP-аутентификация настроена успешно, в ADB автоматически выполняются следующие действия:
-
Обновление файла pg_hba.conf. В файл pg_hba.conf, расположенный в data-директории мастер-хоста (в приведенном примере /data1/master/gpseg-1/), добавляется новая запись об LDAP-аутентификации следующего вида:
# BEGIN LDAP host all +ldap_users 0.0.0.0/0 ldap ldapserver=<URI> ldapbasedn="<Users baseDN>" ldapbinddn="<SA Login>" ldapbindpasswd="<Password>" ldapsearchattribute="<attribute>" # END LDAP
где:
-
ldap_users— имя роли в ADB, в которую будут добавлены все полученные со стороны LDAP пользователи. -
<URI>,<Users baseDN>,<SA Login>,<Password>— значения одноименных параметров сервиса ADB. -
<attribute>— атрибут LDAP, значение которого будет использовано в качестве имени каждой роли в ADB при синхронизации пользователей. Принимает одно из следующих значений:-
sAMAccountName— для MS AD. -
uid— для FreeIPA.
-
-
-
Синхронизация пользователей и групп ADB с LDAP. В базу данных ADB добавляется информация о группах и пользователях, заведенных на LDAP-сервере (и удовлетворяющих критериям отбора, указанным на этапе конфигурации). Синхронизация выполняется путем вызова утилиты pg-ldap-sync. Чтобы убедиться в успешной синхронизации, можно выполнить запрос к системной таблице
pg_roles:SELECT rolname FROM pg_roles;Как показывает вывод команды, в ADB автоматически созданы следующие роли в результате синхронизации с LDAP:
-
ldap_users— роль, в которую добавляются все LDAP-пользователи (путем автоматического вызова командыCREATE ROLE … LOGIN IN ROLE ldap_users …). -
ldap_groups— роль, в которую добавляются все LDAP-группы (путем автоматического вызова командыCREATE ROLE … NOLOGIN IN ROLE ldap_groups …). -
ffedorov,ppetrov,ssemenov,zeptest— конкретные пользователи, полученные со стороны LDAP и добавленные в рольldap_users. -
ADCM,ADH,Adccadmins,Analysts,Managers— конкретные группы пользователей, полученные со стороны LDAP и добавленные в рольldap_groups. Членство пользователей в этих группах устанавливается путем автоматического вызова командыGRANT.
rolname ------------- gpadmin gpmon ldap_users ldap_groups ADCM ADH Adccadmins Analysts Managers ffedorov ppetrov ssemenov zeptest (13 rows)
-
Использование LDAP с SSL
Существует два способа установить защищенное соединение между ADB и серверами LDAP:
-
LDAPS (LDAP через SSL/TLS) — при таком способе перед передачей LDAP-трафика устанавливается защищенный TLS-туннель. Как правило, используется выделенный порт (636), к которому клиенты подключаются напрямую.
-
При использовании StartTLS соединение начинается как обычное незашифрованное LDAP-соединение, после чего клиент отправляет специальную операцию
StartTLSс запросом на включение TLS-шифрования. Как правило, используется стандартный порт LDAP — 389.
Чтобы использовать ADB с LDAP через SSL, требуется настроить сервер LDAP и выбрать один из этих двух методов в конфигурационном параметре LDAP encryption сервиса ADB.
В примерах ниже в качестве имени хоста LDAP-сервера используется val-pam.ru-central1.internal.
При выполнении команд замените его на адрес вашего LDAP-сервера.
Настройка сервера LDAP для работы с SSL
Следующие шаги показывают пример настройки SSL-шифрования для OpenLDAP на Ubuntu 22.04. Если на вашем LDAP-сервере SSL уже настроен, можно пропустить первый раздел — в таком случае убедитесь, что сертификат добавлен на мастер-хост ADB, а затем включите LDAPS или StartTLS в ADB.
-
Создайте директорию для сертификатов и перейдите в нее:
$ sudo mkdir -p /etc/ldap/ssl && cd /etc/ldap/ssl -
Создайте самоподписанный сертификат CA:
$ sudo openssl req -new -x509 -nodes -out ca.crt -keyout ca.key -days 3650 -subj "/CN=My Certificate Authority" -
Сгенерируйте закрытый ключ сервера и запрос на подпись сертификата (CSR). В поле
Common Name (CN)укажите адрес сервера LDAP, доступный с мастер-хоста ADB:$ sudo openssl req -new -nodes \ -out server.csr \ -keyout server.key \ -subj "/CN=val-pam.ru-central1.internal" \ -addext "subjectAltName = DNS:val-pam.ru-central1.internal" -
Подпишите CSR сервера с помощью CA для получения серверного сертификата:
$ sudo openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -
Установите права доступа для созданных файлов:
$ sudo chown -R openldap:openldap /etc/ldap/ssl/ $ sudo chmod 600 /etc/ldap/ssl/server.key $ sudo chmod 644 /etc/ldap/ssl/server.crt /etc/ldap/ssl/ca.crt -
Настройте демон slapd так, чтобы он использовал созданные сертификаты. Для этого создайте файл tls.ldif со следующим содержимым:
dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ldap/ssl/ca.crt - replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ldap/ssl/server.crt - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ldap/ssl/server.key -
Примените созданную конфигурацию:
$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldifВывод должен быть следующим:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"
-
Откройте файл /etc/default/slapd и добавьте опцию
ldaps:///в значение параметраSLAPD_SERVICES, чтобы получившаяся строка выглядела следующим образом:SLAPD_SERVICES="ldap:/// ldaps:/// ldapi:///"В результате этой настройки сервер LDAP будет доступен на портах 636 (LDAPS) и 389 (незашифрованный LDAP). Незашифрованный LDAP используется для StartTLS, который переключает соединение на TLS после установки соединения.
-
Перезапустите
slapd:$ sudo systemctl restart slapd -
Убедитесь, что сервер LDAPS принимает соединения на порту 636:
$ sudo lsof -i :636Вывод должен выглядеть подобным образом:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME slapd 114824 openldap 10u IPv4 184207 0t0 TCP *:ldaps (LISTEN) slapd 114824 openldap 11u IPv6 184208 0t0 TCP *:ldaps (LISTEN)
Добавление сертификатов на мастер-хост
Для проверки подлинности сервера LDAP со стороны ADB сертификат, подписанный центром сертификации (ЦС), должен присутствовать на мастер-хосте. Если это самоподписанный сертификат (как в примере выше), его необходимо также добавить в хранилище доверенных сертификатов операционной системы.
-
На мастер-хосте создайте директорию для сертификата:
$ sudo mkdir -p /etc/ldap/ssl -
Скопируйте сертификат с сервера LDAP в эту директорию на мастер-хосте:
$ scp user@val-pam.ru-central1.internal:/etc/ldap/ssl/ca.crt /tmp/ca.crt $ sudo cp /tmp/ca.crt /etc/ldap/ssl/ -
Измените права доступа к файлу следующим образом:
$ sudo chmod 644 /etc/ldap/ssl/ca.crt -
Установите сертификат в хранилище доверенных сертификатов:
$ sudo cp /etc/ldap/ssl/ca.crt /usr/local/share/ca-certificates $ sudo update-ca-certificates
Проверка защищенного соединения
Перед внесением изменений в ADB можно дополнительно убедиться, что между мастер-хостом ADB и настроенным сервером LDAP успешно устанавливаются зашифрованные LDAP-соединения.
Для проверки LDAPS выполните на мастер-хосте ADB следующую команду:
$ ldapsearch -H ldaps://val-pam.ru-central1.internal -D cn=admin,dc=ru-central1,dc=internal -W -b "dc=ru-central1,dc=internal" -s base
Для проверки StartTLS выполните на мастер-хосте ADB следующую команду:
$ ldapsearch -H ldap://val-pam.ru-central1.internal -ZZ -D cn=admin,dc=ru-central1,dc=internal -W -b "dc=ru-central1,dc=internal" -s base
В обоих случаях вывод должен содержать результат Success.
# extended LDIF # # LDAPv3 # base <dc=ru-central1,dc=internal> with scope baseObject # filter: (objectclass=*) # requesting: ALL # # ru-central1.internal dn: dc=ru-central1,dc=internal objectClass: top objectClass: dcObject objectClass: organization o: ru-central1.internal dc: ru-central1 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Включение LDAPS в ADB
-
Откройте конфигурационные параметры сервиса ADB в ADCM.
-
Переведите переключатель UI LDAP authentication в активное состояние и настройте следующие параметры LDAP:
-
URI — укажите адрес сервера LDAP в формате
<хост>:<порт>. Для LDAPS обычно используется порт 636. Например,val-pam.ru-central1.internal:636. -
LDAP encryption — выберите
ldaps.
-
-
Все остальные параметры LDAP можно настроить так же, как описано для LDAP по стандартному протоколу.
-
Нажмите Save и запустите действие Reconfigure & Restart сервиса ADB, чтобы применить изменения.
В результате успешного завершения действия Reconfigure & Restart в файл pg_hba.conf добавляется новое правило для членов группы ldap_users.
Это правило включает адрес сервера LDAP со схемой ldaps, что активирует LDAPS.
В результате секция конфигурации LDAP в файле pg_hba.conf должна выглядеть следующим образом:
# BEGIN LDAP host all +ldap_users 0.0.0.0/0 ldap ldapserver=ldaps://val-pam.ru-central1.internal:636 ldapbasedn="ou=People,dc=ru-central1,dc=internal" ldapbinddn="cn=admin,dc=ru-central1,dc=internal" ldapbindpasswd="12345" ldapsearchattribute="uid" # END LDAP
Теперь можно проверить аутентификацию LDAP — для пользователей из группы ldap_users ADB будет выполнять аутентификацию через LDAP-сервер с использованием LDAPS.
Включение StartTLS в ADB
-
Откройте конфигурационные параметры сервиса ADB в ADCM.
-
Переведите переключатель UI LDAP authentication в активное состояние и настройте параметры LDAP:
-
URI — укажите адрес сервера LDAP в формате
хост:порт. Для StartTLS обычно используется стандартный порт LDAP — 389. Например,val-pam.ru-central1.internal:389. -
LDAP encryption — выберите
starttls.
-
-
Все остальные параметры LDAP можно настроить так же, как описано для обычного LDAP.
-
Нажмите Save и запустите действие Reconfigure & Restart сервиса ADB, чтобы применить изменения.
В результате успешного завершения действия Reconfigure & Restart в файл pg_hba.conf добавляется новое правило для членов группы ldap_users.
Это правило включает опцию ldaptls=1, которая активирует TLS-шифрование через операцию StartTLS.
В результате секция конфигурации LDAP в файле pg_hba.conf должна выглядеть следующим образом:
# BEGIN LDAP host all +ldap_users 0.0.0.0/0 ldap ldapserver=val-pam.ru-central1.internal:389 ldaptls=1 ldapbasedn="ou=People,dc=ru-central1,dc=internal" ldapbinddn="cn=admin,dc=ru-central1,dc=internal" ldapbindpasswd="12345" ldapsearchattribute="uid" # END LDAP
Теперь можно проверить аутентификацию LDAP — для пользователей из группы ldap_users ADB будет выполнять аутентификацию через LDAP-сервер с использованием StartTLS.
Проверка LDAP-аутентификации
Для того чтобы проверить возможность подключения к ADB после настройки LDAP-аутентификации, можно воспользоваться клиентом psql, указав в качестве аргумента -U имя одного из пользователей, заведенных на стороне LDAP (в приведенном примере — ffedorov).
$ psql adb -h <Имя или IP-адрес мастер-хоста> -U "ffedorov"
Если настройка LDAP-аутентификации выполнена успешно, на экране появится приглашение для ввода пароля пользователя. После ввода корректного пароля (назначенного на стороне LDAP-сервера) пользователю открывается доступ к работе с БД.
Password for user ffedorov: psql (9.4.26) Type "help" for help. adb=>