Доменная аутентификация 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