GSSAPI-аутентификация с использованием FreeIPA
Доступ к кластеру Greengage DB можно контролировать с помощью GSSAPI-аутентификации. В частности, вы можете настроить сервер FreeIPA для управления идентификацией пользователей. Поскольку FreeIPA использует MIT Kerberos для аутентификации, вы можете интегрировать ваш кластер Greengage DB с сервером FreeIPA и задать сопоставление между пользователями FreeIPA и ролями Greengage DB. Это позволит использовать GSSAPI-аутентификацию для соответствующих пользователей.
Предварительные требования
Для демонстрации интеграции кластера Greengage DB с сервером FreeIPA используются следующие хосты и параметры домена IPA:
-
Мастер-хост: имя —
mdw.example.com
, FQDN —mdw.example.com
. -
Хост FreeIPA: имя —
ipa.example.com
, FQDN —ipa.example.com
, операционная система — RHEL или CentOS. -
Область (realm):
EXAMPLE.COM
. -
Сервисный принципал:
postgres/mdw.example.com@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
Выполните описанные ниже шаги на хосте 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 mdw.example.com
Затем создайте сервис, который соответствует процессу postgres
на мастер-хосте:
$ ipa service-add postgres/mdw.example.com@EXAMPLE.COM
Результат должен выглядеть следующим образом:
-------------------------------------------------------------------------------------- Added service "postgres/mdw.example.com@EXAMPLE.COM" -------------------------------------------------------------------------------------- Principal name: postgres/mdw.example.com@EXAMPLE.COM Principal alias: postgres/mdw.example.com@EXAMPLE.COM Managed by: mdw.example.com
Добавление ключа сервиса в keytab-файл
После создания сервиса postgres
необходимо добавить его ключ в keytab-файл.
Для этого используйте команду ipa-getkeytab
:
$ ipa-getkeytab \
--principal=postgres/mdw.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: 20250109101949Z Email address: alice@example.com UID: 1389000001 GID: 1389000001 Password: True Member of groups: ipausers Kerberos keys available: True
Вы можете видеть, что принципал пользователя — alice@EXAMPLE.COM
.
Имя принципала используется далее для сопоставления пользователя FreeIPA и роли Greengage DB.
Настройка мастера Greengage DB
Для настройки мастер-хоста Greengage DB войдите на него как gpadmin
:
$ ssh gpadmin@mdw.example.com
Установка клиентских библиотек FreeIPA
Установите клиентские библиотеки FreeIPA на мастер-хост Greengage DB:
$ sudo apt install freeipa-client
$ sudo yum 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-файла
-
Скопируйте keytab-файл (ggdb-freeipa.keytab), созданный на хосте Kerberos, в каталог /home/gpadmin/ на мастер-хосте Greengage DB.
-
Настройте владельца и права доступа для скопированного 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-аутентификации
-
Задайте путь к keytab-файлу, используя параметр конфигурации сервера
krb_server_keyfile
:$ gpconfig -c krb_server_keyfile -v '/home/gpadmin/ggdb-freeipa.keytab'
Результат должен выглядеть следующим образом:
20250109:11:30:05:004599 gpconfig:mdw:gpadmin-[INFO]:-completed successfully with parameters '-c krb_server_keyfile -v /home/gpadmin/ggdb-freeipa.keytab'
-
Откройте файл pg_hba.conf для редактирования:
$ vi $MASTER_DATA_DIRECTORY/pg_hba.conf
Добавьте в этот файл следующую строку:
# connection-type database user address auth-method auth-options host all alice samenet gss include_realm=1 krb_realm=EXAMPLE.COM map=user_map
Эта конфигурация позволяет пользователю
alice
получить доступ к любой базе данных с использованием GSSAPI-аутентификации (auth-method установлен вgss
). Параметры GSSAPI-аутентификации указываются в полеauth-options
:-
include_realm
—1
означает, что имя области включено в принципалы пользователей. -
krb_realm
— устанавливает имя области Kerberos вEXAMPLE.COM
. -
map
— указывает, чтоuser_map
используется для сопоставления принципалов Kerberos и ролей СУБД. Фактическое сопоставление определяется в файле pg_ident.conf.
-
-
Откройте файл pg_ident.conf:
$ vi $MASTER_DATA_DIRECTORY/pg_ident.conf
Задайте сопоставление принципала
alice@EXAMPLE.COM
и ролиalice
, как показано ниже:# MAPNAME SYSTEM-USERNAME PG-USERNAME user_map alice@EXAMPLE.COM alice
-
Перезагрузите конфигурацию с помощью
gpstop
, чтобы применить изменения:$ gpstop -u
Подключение к базе данных
В этом разделе описывается подключение к базе данных, защищенной аутентификацией GSSAPI, с использованием psql. Выполните описанные ниже шаги на мастер-хосте.
-
Перед подключением к базе данных создайте тикет на предоставление тикетов (Ticket-Granting Ticket, TGT) для пользователя
alice
, используя командуkinit
:$ kinit alice
-
Введите пароль пользователя, заданный в разделе Создание обычного пользователя, и измените его, как предлагается в приглашении:
Password for alice@EXAMPLE.COM: Password expired. You must change it now. Enter new password: Enter it again:
-
Убедитесь в успешном создании тикета, запустив команду
klist
:$ klist
Результат должен выглядеть следующим образом:
Ticket cache: KEYRING:persistent:997:997 Default principal: alice@EXAMPLE.COM Valid starting Expires Service principal 01/09/2025 12:05:07 01/10/2025 12:05:07 krbtgt/EXAMPLE.COM@EXAMPLE.COM
-
Подключитесь к базе данных
postgres
, созданной по умолчанию, под рольюalice
с помощьюpsql
:$ psql postgres -U alice -h mdw.example.com
Результат должен выглядеть следующим образом:
psql (9.4.26) Type "help" for help. postgres=>
-
Проверьте имя текущего пользователя:
SELECT current_user;
Команда должна вернуть следующее:
current_user --------------- alice