Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

GSSAPI-аутентификация с использованием FreeIPA

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

Доступ к кластеру Greengage DB можно контролировать с помощью GSSAPI-аутентификации. В частности, вы можете настроить сервер FreeIPA для управления идентификацией пользователей. Поскольку FreeIPA использует MIT Kerberos для аутентификации, вы можете интегрировать ваш кластер Greengage DB с сервером FreeIPA и задать сопоставление между пользователями FreeIPA и ролями Greengage DB. Это позволит использовать GSSAPI-аутентификацию для соответствующих пользователей.

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

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

  • Координатор-хост: имя — cdw.example.com, FQDN — cdw.example.com.

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

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

  • Сервисный принципал: postgres/cdw.example.com@EXAMPLE.COM.

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

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

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

$ ssh sampleuser@ipa.example.com

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

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

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

$ sudo dnf install freeipa-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

Выполните описанные ниже шаги на хосте FreeIPA:

  • Создайте сервис, необходимый для использования аутентификации Kerberos в СУБД Greengage.

  • Создайте обычного пользователя FreeIPA. Этот пользователь будет сопоставлен с соответствующей ролью Greengage DB.

ПРИМЕЧАНИЕ

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

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

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

$ kinit admin

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

Password for admin@EXAMPLE.COM:

Создание сервиса postgres

Сервис postgres необходим для реализации протокола аутентификации Kerberos в Greengage DB.

Сначала добавьте координатор-хост Greengage DB в домен IPA с помощью команды ipa host-add:

$ ipa host-add cdw.example.com

Затем создайте сервис, который соответствует процессу postgres на координатор-хосте:

$ ipa service-add postgres/cdw.example.com@EXAMPLE.COM

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

--------------------------------------------------------------------------------------
Added service "postgres/cdw.example.com@EXAMPLE.COM"
--------------------------------------------------------------------------------------
  Principal name: postgres/cdw.example.com@EXAMPLE.COM
  Principal alias: postgres/cdw.example.com@EXAMPLE.COM
  Managed by: cdw.example.com

Добавление ключа сервиса в keytab-файл

После создания сервиса postgres необходимо добавить его ключ в keytab-файл. Для этого используйте команду ipa-getkeytab:

$ ipa-getkeytab \
  --principal=postgres/cdw.example.com@EXAMPLE.COM \
  --keytab=ggdb-freeipa.keytab

Эта команда создает файл ggdb-freeipa.keytab.

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

Создайте обычного пользователя 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: 20260421133245Z
  Email address: alice@example.com
  UID: 600800009
  GID: 600800009
  Password: True
  Member of groups: ipausers
  Kerberos keys available: True

Вы можете видеть, что принципал пользователя — alice@EXAMPLE.COM. Имя принципала используется далее для сопоставления пользователя FreeIPA и роли Greengage DB.

Настройка координатора Greengage DB

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

$ ssh gpadmin@cdw.example.com

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

Установите клиентские библиотеки FreeIPA на координатор-хост Greengage DB:

$ sudo apt install freeipa-client
$ sudo dnf install ipa-client

Настройка клиента FreeIPA

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

$ sudo ipa-client-install \
  --unattended \
  --server=ipa.example.com \
  --domain=example.com \
  --realm=EXAMPLE.COM \
  --principal admin \
  --password=12345678

Обратите внимание, что параметр password использует пароль пользователя admin, заданный во время настройки сервера FreeIPA.

Копирование keytab-файла

  1. Скопируйте keytab-файл (ggdb-freeipa.keytab), созданный на хосте FreeIPA, в каталог /home/gpadmin/ на координатор-хосте Greengage DB:

    $ scp ggdb-freeipa.keytab cdw.example.com:/home/gpadmin/
  2. Настройте владельца и права доступа для скопированного keytab-файла:

    $ sudo chown gpadmin:gpadmin ggdb-freeipa.keytab
    $ sudo chmod 400 ggdb-freeipa.keytab

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

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

$ createuser alice

В следующем разделе для этой роли будет настроено сопоставление с принципалом alice@EXAMPLE.COM.

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

  1. Задайте путь к keytab-файлу, используя параметр конфигурации сервера krb_server_keyfile:

    $ gpconfig -c krb_server_keyfile -v '/home/gpadmin/ggdb-freeipa.keytab'

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

    20260420:08:00:37:007230 gpconfig:cdw:gpadmin-[INFO]:-completed successfully with parameters '-c krb_server_keyfile -v /home/gpadmin/ggdb-freeipa.keytab'
  2. Откройте файл pg_hba.conf для редактирования:

    $ vi $COORDINATOR_DATA_DIRECTORY/pg_hba.conf

    Добавьте в этот файл следующую строку:

    # connection-type  database  user   address  auth-method  auth-options
    hostgssenc         postgres  alice  samenet  gss          krb_realm=EXAMPLE.COM map=user_map

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

    • krb_realm — устанавливает имя области Kerberos в EXAMPLE.COM.

    • map — указывает, что user_map используется для сопоставления принципалов Kerberos и ролей СУБД. Фактическое сопоставление определяется в файле pg_ident.conf.

  3. Откройте файл pg_ident.conf:

    $ vi $COORDINATOR_DATA_DIRECTORY/pg_ident.conf

    Задайте сопоставление принципала alice@EXAMPLE.COM и роли alice, как показано ниже:

    # MAPNAME  SYSTEM-USERNAME    PG-USERNAME
    user_map   alice@EXAMPLE.COM  alice
  4. Перезагрузите конфигурацию с помощью gpstop, чтобы применить изменения:

    $ gpstop -u

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

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

  1. Перед подключением к базе данных создайте тикет на предоставление тикетов (Ticket-Granting Ticket, TGT) для пользователя alice, используя команду kinit:

    $ kinit alice
  2. Введите пароль пользователя, заданный в разделе Создание обычного пользователя, и измените его, как предлагается в приглашении:

    Password for alice@EXAMPLE.COM:
    Password expired.  You must change it now.
    Enter new password:
    Enter it again:
  3. Убедитесь в успешном создании тикета, запустив команду klist:

    $ klist

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

    Ticket cache: KEYRING:persistent:999:999
    Default principal: alice@EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    04/20/26 08:09:06  04/21/26 07:53:00  krbtgt/EXAMPLE.COM@EXAMPLE.COM
  4. Подключитесь к базе данных postgres, созданной по умолчанию, под ролью alice с помощью psql:

    $ psql postgres -U alice -h cdw.example.com

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

    psql (12.22)
    GSSAPI-encrypted connection
    Type "help" for help.
    
    postgres=>
  5. Проверьте имя текущего пользователя:

    SELECT current_user;

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

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