База знаний Business Studio
Переход на сайт нейросети Perplexity AI для поиска информации о Business Studio. Подробнее о возможности см. по ссылке

Содержание справки

Доменная аутентификация PostgreSQL на операционной системе Linux

Вопрос:

Можно ли настроить доменный доступ к базе данных PostgreSQL на операционной системе Linux?

Ответ:

Да, такая возможность предусмотрена. Варианты решения:

  • Протокол LDAP
  • Протокол Kerberos
  • PAM-аутентификация

Внимание! Выполнение описанных ниже рекомендаций требует полномочий и квалификации системного администратора.

Внимание! Каждый из описанных ниже вариантов решения предусматривает внесение изменений в файл конфигурации pg_hba.conf, который находится в каталоге данных PostgreSQL (например, /etc/postgresql/<версия>/main/pg_hba.conf). Необходимо учитывать логику порядка строк в данном файле: PostgreSQL считывает этот файл строго сверху вниз до первого совпадения. При нахождении правила, соответствующего параметрам подключения (база данных, пользователь, IP-адрес), применяется указанный в нем метод аутентификации. В частности, доменная аутентификация не должна использоваться для системных пользователей и ролей, таких как postgres и be64_approle.

Протокол LDAP

1. Для интеграции с LDAP могут потребоваться дополнительные пакеты. Установить их командой:

sudo apt-get install libpam-ldap ldap-utils

2. Настройка LDAP-аутентификации:
2.1. Добавить в файл pg_hba.conf строку вида:

host    all    all    0.0.0.0/0    ldap ldapserver=<server> ldapprefix="<prefix>" ldapsuffix="<suffix>"

где <server> — адрес вашего LDAP-сервера,
<prefix> и <suffix> — параметры для формирования отличительного имени (Distinguished Name) пользователя.

Внимание! В данном примере для всех пользователей (all) при подключении к любой базе (all) будет использоваться ldap. В соответствии с логикой, описанной в начале статьи, такая строка должна располагаться в нижней части блока правил подключения, после всех пользователей и/или сервисных ролей, которые не должны аутентифицироваться через LDAP.

Пример:

host    all    all    0.0.0.0/0    ldap ldapserver=ldap.example.com ldapprefix="cn=" ldapsuffix=",dc=example,dc=com"

2.2. Перезапустить PostgreSQL командой:

sudo systemctl restart postgresql

Протокол Kerberos

1. Для интеграции с Kerberos могут потребоваться дополнительные пакеты. Установить их командой:

sudo apt-get install krb5-user libpam-krb5

2. Настройка Kerberos-аутентификации:
Отредактировать файл конфигурации сервера (/etc/krb5.conf), указав параметры вашего домена:

[libdefaults]
default_realm = <имя_домена>
dns_lookup_kdc = true

где <имя_домена> - имя домена, например, “EXAMPLE.COM”

Внимание! Далее в примерах используется “EXAMPLE.COM”. Его нужно заменить на имя вашего домена.

[realms]
EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}


[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM

2.2. Получить билет Kerberos:

kinit <username>@EXAMPLE.COM

где <username> - имя пользователя, зарегистрированного в домене

2.3. Проверить, что билет получен:

klist

3. Настройка pg_hba.conf:
Добавить строку для Kerberos-аутентификации в pg_hba.conf:

host    all    all    0.0.0.0/0    gss include_realm=0 krb_realm=EXAMPLE.COM

Внимание! В данном примере для всех пользователей (all) при подключении к любой базе (all) будет использоваться Kerberos. В соответствии с логикой, описанной в начале статьи, такая строка должна располагаться в нижней части блока правил подключения, после всех пользователей и/или сервисных ролей, которые не должны аутентифицироваться через Kerberos.

4. Создание пользователя в PostgreSQL
Создать пользователя PostgreSQL, который соответствует имени пользователя в Kerberos:

CREATE USER "<username>@EXAMPLE.COM";

Перезапустить PostgreSQL:

sudo systemctl restart postgresql

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

PAM должен быть настроен для работы с вашим доменом (LDAP или Kerberos).

1. Настройка PAM
Отредактировать файл /etc/pam.d/postgresql:

auth    required    pam_ldap.so
account required    pam_ldap.so

2. Настройка pg_hba.conf
Добавить строку для PAM-аутентификации:

host    all    all     0.0.0.0/0    pam

Внимание! В данном примере для всех пользователей (all) при подключении к любой базе (all) будет использоваться PAM. В соответствии с логикой, описанной в начале статьи, такая строка должна располагаться в нижней части блока правил подключения, после всех пользователей и/или сервисных ролей, которые не должны аутентифицироваться через PAM.

3. Перезапустить PostgreSQL:

sudo systemctl restart postgresql