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

Установите ldaps в качестве значения этого параметра, чтобы использовать LDAPS (LDAP через TLS/SSL), поддерживаемый некоторыми реализациями сервера LDAP. В качестве альтернативы можно рассмотреть параметр ldaptls

ldaptls

Установите 1 в качестве значения этого параметра, чтобы соединение между ADPG/PostgreSQL и сервером LDAP использовало шифрование TLS. Этот подход использует операцию StartTLS, описанную в стандарте RFC 4513

Настройки 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

Атрибут для сопоставления с именем пользователя во время аутентификации в режиме поиск + связывание. Если не указано, будет использоваться атрибут uid

ldapsearchfilter

Фильтр поиска. $username в фильтре будет заменен на имя пользователя. Эта опция реализует более гибкие фильтры поиска, чем ldapsearchattribute. Например, ldapsearchfilter="(|(uid=$username)(mail=$username))"

ldapurl

Определяет RFC 4516 LDAP URL: ldap[s]://host[:port]/basedn[?[attribute][?[scope][?[filter]]]].

scope используется для указания области поиска. Допустимые значения:

  • base — поиск базового объекта;

  • one — поиск на одном уровне;

  • sub — поиск в поддереве каталога.

Настройка сервера FreeIPA

В этом разделе содержатся инструкции по установке и конфигурированию сервера FreeIPA, который используется в примерах ниже.

Выполните следующие шаги для установки сервера FreeIPA на хост с операционной системой CentOS или RHEL.

  1. Установите сервер FreeIPA:

    $ sudo yum install ipa-server
  2. В приведенных ниже примерах конфигурации 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.

  3. Настройте сервер FreeIPA:

    $ sudo ipa-server-install \
       --unattended \
       --hostname=ipa.example.com \
       --domain=example.com \
       --realm=EXAMPLE.COM \
       --ds-password=pass2345 \
       --admin-password=pass1234
  4. Проверьте состояние служб, используя команду 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
  5. Авторизуйтесь как пользователь admin, который создается автоматически для выполнения административных действий. Для этого выполните команду kinit:

    $ kinit admin

    При появлении следующего приглашения введите пароль, указанный в параметре admin-password конфигурации сервера FreeIPA (в этом примере pass1234):

    Password for admin@EXAMPLE.COM:
  6. Используйте команду 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"
Конфигурация Active Directory, использованная в примере

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

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней