Настройка GSSAPI (Kerberos) аутентификации для PostgreSQL 18

Для настройки GSSAPI (Kerberos) аутентификации для PostgreSQL 18 требуется выполнить шаги:

Шаг 1. Ввести сервер PostgreSQL в домен Avanpost DS.

Для этого требуется выполнить действия по инструкции: "6.7.1. Введение в домен рабочих станций Unix".

Шаг 2. Создать SPN (Service Principal Name) в Avanpost DS для сервера PostgreSQL.

Для этого требуется:

2.1. В разделе "Компьютеры" веб-интерфейса Avanpost DS на вкладке "Атрибуты" карточки сервера PostgreSQL нажать в строке атрибута "serviceprincipalname" в списке.

2.2. В добавившейся строке для значения атрибута "serviceprincipalname" нажать .

2.3. Указать значение для атрибута по шаблону:

Шаблон значения
postgres/[FQDN]@[REALM]

Заменить [FQDN] на полное доменное имя сервера PostgreSQL.

Заменить [REALM] на домен Avanpost DS.

Пример значения
postgres/t-ds-gpads04.intr.avanpost.ru@INTR.AVANPOST.RU

2.4. Нажать .

Шаг 3. Поместить keytab-файл на сервер PostgreSQL.

Для этого требуется:

3.1. Нажать в строке сервера PostgreSQL в списке в разделе "Компьютеры" веб-интерфейса Avanpost DS. Keytab-файл будет загружен на локальное устройство.

3.2. Поместить keytab-файл на сервер PostgreSQL в директорию "/etc/krb5.keytab".

Шаг 4. Установить права доступа на keytab-файл.

Для этого требуется выполнить команды на сервере PostgreSQL:

chmod 640 /etc/krb5.keytab
chown postgres:postgres /etc/krb5.keytab

Шаг 5. Проверить наличие SPN для PostgreSQL в keytab-файле.

Для этого требуется выполнить команду:

klist -kt /etc/krb5.keytab
Пример вывода команды
#postgres/t-ds-gpads04.intr.avanpost.ru@INTR.AVANPOST.RU (aes256-cts-hmac-sha1-96)

Шаг 6. Настроить конфигурационный файл "postgresql.conf".

Для этого требуется:

6.1. Открыть файл "/var/lib/pgsql/18/data/postgresql.conf" для редактирования:

nano /var/lib/pgsql/18/data/postgresql.conf

6.2. Указать путь к keytab-файлу в качестве значения параметра "krb_server_keyfile" (без префикса "FILE:"):

krb_server_keyfile = '/etc/krb5.keytab'

Параметр "krb_srvname" не требуется, так как он удалён в PostgreSQL 18.

Шаг 7. Настроить конфигурационный файл "pg_ident.conf".

Для этого требуется:

7.1. Открыть файл "/var/lib/pgsql/18/data/pg_ident.conf" для редактирования:

nano /var/lib/pgsql/18/data/pg_ident.conf

7.2. Добавить правило сопоставления имени пользователя из Kerberos по шаблону:

Шаблон правила
# MAPNAME SYSTEM-USERNAME DATABASE-USERNAME
gssmap /^(.*)@[ДОМЕН 3 УР]\.[ДОМЕН 2 УР]\.[ДОМЕН 1 УР]$ \1
Пример правила
# MAPNAME SYSTEM-USERNAME DATABASE-USERNAME
gssmap /^(.*)@INTR\.AVANPOST\.RU$ \1

Шаг 8. Настроить конфигурационный файл "pg_hba.conf".

Для этого требуется:

8.1. Открыть файл "/var/lib/pgsql/18/data/pg_hba.conf" для редактирования:

nano /var/lib/pgsql/18/data/pg_hba.conf

8.2. Добавить правило для GSSAPI аутентификации по шаблону:

Шаблон правила
host all all [IP-адрес сети]/[Маска] gss include_realm=1
krb_realm=[REALM] map=gssmap

Заменить [IP-адрес сети] на IP-адрес сети, из которой будет разрешено подключение.

Заменить [Маска] на маску сети, из которой будет разрешено подключение.

Заменить [REALM] на домен Avanpost DS.

Пример правила
host all all 10.10.16.0/24 gss include_realm=1
krb_realm=INTR.AVANPOST.RU map=gssmap

Необходимо, чтобы значение параметра "map" соответствовало имени правила из конфигурационного файла "pg_ident.conf". (В примерах используется значение "map=gssmap".

Шаг 9. Перезапустить сервис PostgreSQL.

Для этого требуется выполнить команды:

sudo systemctl restart postgresql-18
sudo systemctl status postgresql-18

Шаг 10. Проверить настройку.

Для этого требуется:

10.1. Проверить аутентификацию:

su - testbd
# Пароль:
# Последний вход в систему: Ср апр 29 17:34:58 MSK 2026 на pts/2
psql -h t-ds-gpads04.intr.avanpost.ru -d postgres
# psql (18.1)
# Соединение зашифровано GSSAPI
# Введите "help", чтобы получить справку.
# postgres=>

10.2. Проверить роли пользователя в PostgreSQL:

psql -h t-ds-gpads04.intr.avanpost.ru -d postgres -c "\du+"
Пример вывода команды
Список ролей
Имя роли | Атрибуты | Член групп
-----------------------------------------
testbd | Создаёт БД | {}


Обсуждение