Github

LDAP-аутентификация

Андрей Аксенов

Доступ к кластеру Greengage DB можно контролировать с помощью LDAP-аутентификации. Вы можете использовать службу каталогов вашей организации, такую как Active Directory или 389 Directory Server, для аутентификации пользователей Greengage DB.

Эта статья описывает, как интегрировать ваш кластер Greengage DB со службой каталогов FreeIPA. Служба каталогов FreeIPA использует LDAP-сервер 389 DS.

Предварительные требования

Для демонстрации интеграции кластера Greengage DB с сервером FreeIPA используются следующие хосты и параметры домена IPA:

  • Мастер-хост: имя — mdw.example.com, FQDN — mdw.example.com.

  • Хост FreeIPA: имя — ipa.example.com, FQDN — ipa.example.com, операционная система — RHEL или CentOS.

  • Область (realm): EXAMPLE.COM.

Используйте имена хостов, полные доменные имена (FQDN) и имя области, соответствующие вашему окружению.

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

Войдите на хост FreeIPA под пользователем с правами суперпользователя:

$ ssh sampleuser@ipa.example.com

В этом примере имя пользователя — sampleuser.

Установка библиотек FreeIPA

Для установки библиотек FreeIPA выполните следующую команду:

$ sudo yum install ipa-server

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

Выполните команду ниже, чтобы запустить настройку сервера FreeIPA в неинтерактивном режиме:

$ sudo ipa-server-install \
  --unattended \
  --hostname=ipa.example.com \
  --domain=example.com \
  --realm=EXAMPLE.COM \
  --ds-password=87654321 \
  --admin-password=12345678
ВАЖНО

Не рекомендуется указывать пароли в открытом виде при настройке сервера FreeIPA в неинтерактивном режиме. В качестве более безопасной альтернативы вы можете загружать пароли из переменных окружения.

Когда настройка сервера FreeIPA завершена, проверьте состояние сервисов с помощью команды ipactl status:

$ sudo ipactl status

В частности, вывод должен показывать, что сервисы Directory, krb5kdc и kadmin запущены:

Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING

Создание пользователя FreeIPA

Аутентификация в качестве администратора

Для выполнения административных действий автоматически создается пользователь admin. Выполните команду kinit, чтобы аутентифицироваться под пользователем admin:

$ kinit admin

Когда будет показано данное приглашение, введите пароль, заданный в параметре admin-password во время настройки сервера FreeIPA:

Password for admin@EXAMPLE.COM:

Создание обычного пользователя

Создайте обычного пользователя FreeIPA с помощью команды ipa user-add:

$ ipa user-add alice \
  --first=Alice \
  --last=Johnson \
  --password

Введите пароль и нажмите Enter, когда будут показаны эти приглашения:

Password:
Enter Password again to verify:

Результат должен выглядеть следующим образом:

------------------
Added user "alice"
------------------
  User login: alice
  First name: Alice
  Last name: Johnson
  Full name: Alice Johnson
  Display name: Alice Johnson
  Initials: AJ
  Home directory: /home/alice
  GECOS: Alice Johnson
  Login shell: /bin/sh
  Principal name: alice@EXAMPLE.COM
  Principal alias: alice@EXAMPLE.COM
  User password expiration: 20250109101949Z
  Email address: alice@example.com
  UID: 1389000001
  GID: 1389000001
  Password: True
  Member of groups: ipausers
  Kerberos keys available: True

Настройка мастера Greengage DB

Для настройки мастер-хоста Greengage DB войдите на него как gpadmin:

$ ssh gpadmin@mdw.example.com

Создание ролей Greengage DB

Создайте роль ldap_users в Greengage DB:

$ createuser ldap_users --no-login

Создайте пользователя alice и добавьте его в группу ldap_users:

$ createuser alice --role=ldap_users

Обратите внимание, что имя пользователя Greengage DB совпадает с именем пользователя FreeIPA.

ПРИМЕЧАНИЕ

Вы можете использовать утилиту pg-ldap-sync для автоматической синхронизации пользователей и групп LDAP с Greengage DB.

Настройка LDAP-аутентификации

  1. Откройте файл pg_hba.conf для редактирования:

    $ vi $MASTER_DATA_DIRECTORY/pg_hba.conf
  2. Добавьте в файл следующую строку:

    # connection-type  database  user         address  auth-method  auth-options
    host               postgres  +ldap_users  samenet  ldap         ldapserver=ipa.example.com ldapprefix="uid=" ldapsuffix=",cn=users,cn=accounts,dc=example,dc=com"

    Эта конфигурация позволяет пользователям из группы ldap_users получить доступ к базе данных postgres с использованием LDAP-аутентификации (auth-method установлен в ldap). Параметры LDAP-аутентификации указываются в поле auth-options:

    • ldapserver — имя LDAP-сервера для подключения.

    • ldapprefix — строка, добавляемая перед именем пользователя при формировании DN для связывания.

    • ldapsuffix — строка, добавляемая после имени пользователя при формировании DN для связывания.

    Вы можете найти все параметры LDAP-аутентификации в соответствующем разделе документации PostgreSQL: LDAP Authentication.

  3. Перезагрузите конфигурацию с помощью gpstop, чтобы применить изменения:

    $ gpstop -u

Подключение к базе данных

В этом разделе описывается подключение к базе данных, защищенной аутентификацией LDAP, с использованием psql. Выполните описанные ниже шаги на мастер-хосте.

  1. Подключитесь к базе данных postgres, созданной по умолчанию, под ролью alice с помощью psql:

    $ psql postgres -U alice -h mdw.example.com
  2. Введите пароль пользователя FreeIPA alice и нажмите Enter:

    Password for user alice:

    Результат должен выглядеть следующим образом:

    psql (9.4.26)
    Type "help" for help.
    
    postgres=>
  3. Проверьте имя текущего пользователя:

    SELECT current_user;

    Команда должна вернуть следующее:

     current_user
    ---------------
     alice

Примеры

Ниже приведены дополнительные примеры настройки LDAP-аутентификации в файле pg_hba.conf:

  • ldapbasedn задает корневую папку DN для начала поиска пользователя при аутентификации:

    # connection-type  database  user         address  auth-method  auth-options
    host               postgres  +ldap_users  samenet  ldap         ldapserver=ipa.example.com ldapbasedn="cn=users,cn=accounts,dc=example,dc=com"
  • ldapbinddn и ldapbindpasswd задают имя и пароль пользователя, используемого для связи с LDAP-каталогом:

    # connection-type  database  user         address  auth-method  auth-options
    host               postgres  +ldap_users  samenet  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="12345678"
  • ldaptls включает TLS-шифрование для соединения мастера Greengage DB с LDAP-сервером:

    # connection-type  database  user         address  auth-method  auth-options
    host               postgres  +ldap_users  samenet  ldap         ldaptls=1 ldapserver=ipa.example.com ldapbasedn="cn=users,cn=accounts,dc=example,dc=com"
  • ldapurl устанавливает все опции LDAP-аутентификации, используя URL:

    # connection-type  database  user         address  auth-method  auth-options
    host               postgres  +ldap_users  samenet  ldap         ldapurl="ldap://ipa.example.com/cn=users,cn=accounts,dc=example,dc=com?uid?sub"