LDAP-аутентификация
Обзор аутентификации LDAP
Вы можете использовать аутентификацию LDAP для доступа к кластеру ADPG. Этот метод аутентификации работает аналогично аутентификации по паролю за исключением того, что он использует LDAP в качестве метода проверки. Для верификации пар имя пользователя/пароль ADPG подключается к серверу LDAP, например Active Directory или 389 Directory Server. Обратите внимание, что пользователь должен уже существовать в базе данных PostgreSQL, чтобы LDAP можно было использовать для аутентификации.
LDAP-аутентификация осуществляется в двух режимах:
В таблицах ниже перечислены параметры конфигурации, сгруппированные по режимам связывания. Все эти параметры должны быть указаны в поле auth-options
PG_HBA. См.: Настройка ADPG для использования LDAP.
Название параметра | Описание |
---|---|
ldapserver |
Имена или IP-адреса серверов LDAP для подключения. Можно указать несколько серверов, разделенных пробелами |
ldapport |
Номер порта на сервере LDAP для подключения. Если порт не указан, будет использоваться порт библиотеки LDAP по умолчанию (389) |
ldapscheme |
Установите |
ldaptls |
Установите |
Настройки ldapscheme
и ldaptls
шифруют только трафик между серверами ADPG/PostgreSQL и LDAP. Соединение между сервером ADPG/PostgreSQL и клиентом ADPG/PostgreSQL не шифруется.
Режим простого связывания
В режиме простого связывания сервер ADPG/PostgreSQL подключается с уникальным именем (Distinguished Name, DN), сформированным как prefix + user name + suffix
. Обычно префикс используется для указания cn=
или DOMAIN\
в среде Active Directory. Суффикс используется для указания оставшейся части DN.
Название параметра | Описание |
---|---|
ldapprefix |
Указывает строку, которая добавляется перед именем пользователя при формировании DN для аутентификации |
ldapsuffix |
Указывает строку, которая добавляется после имени пользователя при формировании DN для аутентификации |
Режим поиск + связывание
В этом режиме сервер ADPG/PostgreSQL подключается к каталогу LDAP с фиксированным именем пользователя и паролем, указанными с помощью параметров ldapbinddn
и ldapbindpasswd
, и выполняет поиск пользователя. Если имя пользователя для поиска и пароль не настроены, будет предпринята попытка анонимного подключения. Поиск выполняется в поддереве ldapbasedn
, проверяя точное совпадение имени пользователя и значений ldapsearchattribute
. Как только пользователь находится, сервер отключается и повторно подключается к LDAP-каталогу от имени этого пользователя с паролем, предоставленным клиентом, чтобы убедиться в правильности учетной записи.
Название параметра | Описание |
---|---|
ldapbasedn |
Корневой каталог DN для начала поиска пользователя |
ldapbinddn |
DN пользователя для выполнения поиска в каталоге |
ldapbindpasswd |
Пароль пользователя для выполнения поиска в каталоге |
ldapsearchattribute |
Атрибут для сопоставления с именем пользователя во время аутентификации в режиме поиск + связывание. Если не указано, будет использоваться атрибут |
ldapsearchfilter |
Фильтр поиска. |
ldapurl |
Определяет RFC 4516 LDAP URL:
|
Настройка сервера FreeIPA
В этом разделе содержатся инструкции по установке и конфигурированию сервера FreeIPA, который используется в примерах ниже.
Выполните следующие шаги для установки сервера FreeIPA на хост с операционной системой CentOS или RHEL.
-
Установите сервер FreeIPA:
$ sudo yum install ipa-server
-
В приведенных ниже примерах конфигурации LDAP-аутентификации используются имена хостов. Если в вашей сети нет службы DNS для разрешения имен хостов, вы можете выполнить следующую команду, чтобы добавить имена хостов и их IP-адреса в файл hosts:
$ sudo tee -a /etc/hosts > /dev/null <<EOT > 10.92.42.229 adpg.example.com adpg-host > 10.92.43.11 ipa.example.com ipa-host > EOT
Где:
-
10.92.42.229
— IP-адрес хоста с ADPG; -
10.92.43.11
— IP-адрес хоста с сервером FreeIPA.
-
-
Настройте сервер FreeIPA:
$ sudo ipa-server-install \ --unattended \ --hostname=ipa.example.com \ --domain=example.com \ --realm=EXAMPLE.COM \ --ds-password=pass2345 \ --admin-password=pass1234
-
Проверьте состояние служб, используя команду
ipactl status
:$ sudo ipactl status
Вывод должен показать, что службы
Directory
,krb5kdc
иkadmin
запущены:Directory Service: RUNNING krb5kdc Service: RUNNING kadmin Service: RUNNING httpd Service: RUNNING ipa-custodia Service: RUNNING ntpd Service: RUNNING pki-tomcatd Service: RUNNING ipa-otpd Service: RUNNING ipa: INFO: The ipactl command was successful
-
Авторизуйтесь как пользователь
admin
, который создается автоматически для выполнения административных действий. Для этого выполните командуkinit
:$ kinit admin
При появлении следующего приглашения введите пароль, указанный в параметре
admin-password
конфигурации сервера FreeIPA (в этом примереpass1234
):Password for admin@EXAMPLE.COM:
-
Используйте команду ipa
user add
для создания пользователя FreeIPA:$ ipa user-add john \ --first=John \ --last=Smith \ --password
Введите пароль нового пользователя дважды:
Password: Enter Password again to verify:
Результат:
----------------- Added user "john" ----------------- User login: john First name: John Last name: Smith Full name: John Smith Display name: John Smith Initials: JS Home directory: /home/john GECOS: John Smith Login shell: /bin/sh Principal name: john@EXAMPLE.COM Principal alias: john@EXAMPLE.COM User password expiration: 20250317133100Z Email address: john@example.com UID: 1414400003 GID: 1414400003 Password: True Member of groups: ipausers Kerberos keys available: True
Настройка ADPG для использования LDAP
Если в вашей сети нет службы DNS для разрешения имен хостов, выполните следующую команду на хосте ADPG/PostgreSQL, чтобы добавить имена хостов и их IP-адреса в файл hosts:
$ sudo tee -a /etc/hosts > /dev/null <<EOT
> 10.92.42.229 adpg.example.com adpg-host
> 10.92.43.11 ipa.example.com ipa-host
> EOT
Где:
-
10.92.42.229
— IP-адрес хоста с ADPG; -
10.92.43.11
— IP-адрес хоста с сервером FreeIPA.
Как упоминалось выше, пользователь должен уже существовать в базе данных, прежде чем LDAP может быть использован для аутентификации.
Создайте роль для пользователей LDAP, чтобы задействовать ее в записи формата pg_hba.conf:
CREATE ROLE ldap_users LOGIN;
Создайте роль для конкретного пользователя в группе ldap_users
. Обратите внимание, что имя пользователя ADPG должно совпадать с именем пользователя LDAP:
CREATE ROLE john IN GROUP ldap_users;
Для настройки параметров подключения откройте страницу Clusters, выберите кластер ADPG и перейдите на вкладку Services. Выберите сервис ADPG и кликните поле PG_HBA на вкладке Primary configuration в дереве Configuration. Добавьте новую запись в формате pg_hba.config в это поле. Следующая запись использует режим простого связывания:
host all +ldap_users 0.0.0.0/0 ldap ldapserver=ipa.example.com ldapprefix="uid=" ldapsuffix=",cn=users,cn=accounts,dc=example,dc=com"
Проверьте соединение с помощью утилиты psql
:
$ psql postgres -U john -h 10.92.42.229
При появлении следующего приглашения введите пароль, указанный ранее для LDAP-пользователя john
:
Password for user john:
Примеры
Поскольку LDAP часто использует запятые и пробелы для разделения различных частей DN, при настройке параметров LDAP может возникнуть необходимость указывать значения параметров в двойных кавычках, как показано в примерах ниже.
FreeIPA server
Конфигурация ниже использует режим поиск + связывание. Поскольку ldapbinddn
не указан, ADPG пытается анонимно привязаться к серверу LDAP и выполнить поиск пользователя в указанном базовом DN (параметр ldapbasedn
):
host all +ldap_users 0.0.0.0/0 ldap ldapserver=ipa.example.com ldapbasedn="cn=users,cn=accounts,dc=example,dc=com"
Пример той же конфигурации для режима поиск + связывание, но записанной в виде URL (параметр ldapurl
):
host all +ldap_users 0.0.0.0/0 ldap ldapurl="ldap://ipa.example.com/cn=users,cn=accounts,dc=example,dc=com?uid?sub"
Методы, использующие анонимное связывание, не являются безопасными. Предпочтительнее указывать параметры ldapbinddn
и ldapbindpasswd
для выполнения поиска от имени авторизованного пользователя:
host all +ldap_users 0.0.0.0/0 ldap ldapserver=ipa.example.com ldapbasedn="cn=users,cn=accounts,dc=example,dc=com" ldapbinddn="uid=admin,cn=users,cn=accounts,dc=example,dc=com" ldapbindpasswd="pass1234"
MS Active Directory
Следующая конфигурация включает аутентификацию LDAP в режиме поиск + связывание для MS Active Directory:
host all +ldap_users 0.0.0.0/0 ldap ldapserver=ad01.example.io ldapbasedn="OU=Peoples,DC=ad,DC=ranger-test" ldapbinddn="cn=admin,dc=ad,dc=ranger-test" ldapbindpasswd="bind_pass123" ldapsearchattribute="sAMAccountName"
url |
ldap://ad01.example.io:389 |
binddn |
cn=admin,dc=ad,dc=ranger-test |
bind password |
bind_pass123 |
user nameattribute |
sAMAccountName |
searchBase |
ou=Peoples,dc=ad,dc=ranger-test |
group searchbase |
ou=Groups,dc=ad,dc=ranger-test |
user searchBase |
ou=Peoples,dc=ad,dc=ranger-test |