Аутентификация методом единого входа (SSO) через доменную пользовательскую учетную запись на Windows
Технология единого входа SSO (Single Sign-On) через доменную учетную запись Windows позволяет пользователям получать доступ к нескольким приложениям с одной парой учетных данных (логин и пароль). После первичной аутентификации повторный ввод данных не требуется.
Подготовка
Убедитесь, что все машины кластера (машина с PostgreSQL, домен контроллер с Active Directory):
-
Поддерживают Kerberos.
-
Видят друг друга по полным доменным именам (Fully Qualified Domain Name).
Необходимо включить указанные машины в домен или прописать их в файлах /etc/hosts и /etc/hostname.
Создание сервисных учетных записей
В Active Directory создайте сервисные учетные записи (SPN) для следующих служб:
-
postgres
- для машины с PostgreSQL; -
padbservice
- для машины с координатором кластера; -
palogarch
- для всех машин кластера, включая координатор; -
HTTP
- для машин с веб-сервисами (службаpaserver
c ключом конфигурацииweb=true
илиweb=only
); -
paserver
- для остальных вычислительных серверов кластера (можно также использовать HTTP).
Рекомендуется регистрировать сервисные учетные записи в формате service/FQDN@REALM, например, padbservice/PADBSERVICE_HOST.domain.ru@DOMAIN.RU.
Для каждой уникальной сервисной учетной записи в Active Directory необходимо создать отдельного сервисного пользователя. Например, их можно назвать: postgres_user, padbservice_user, palogarch_user1, palogarch_user2, … paserver_user1, paserver_user2.

Далее включите для пользователя опции: Запретить смену пароля пользователем и Срок действия пароля не ограничен.

Регистрация сервисных учетных записей
Для регистрации сервисных учетных записей используйте консольную утилиту ktpass
на домен контроллере, которую необходимо запустить от имени администратора. Например, для регистрации сервисной учетной записи для PostgreSQL и получения его keytab
файла необходимо выполнить команду:
ktpass -princ postgres/POSTGRES_HOST.domain.ru@DOMAIN.RU -mapuser postgres_user -pass postgres_user_pwd -mapop set -crypto All -ptype KRB5_NT_PRINCIPAL -out c:\postgres.keytab
Вместо -crypto All
можно использовать более защищенный алгоритм, например, AES256-SHA1
, отметив соответствующие опции в настройках сервисной учетной записи.

Аналогично регистрируются все остальные сервисные учетные записи:
ktpass -princ padbservice/PADBSERVICE_HOST.domain.ru@DOMAIN.RU -mapuser padbservice_user -pass padbservice_user_pwd -mapop set -crypto All -ptype KRB5_NT_PRINCIPAL -out c:\padbservice.keytab ktpass -princ palogarch/PADBSERVICE_HOST.domain.ru@DOMAIN.RU -mapuser palogarch_user0 -pass palogarch_user0_pwd -mapop set -crypto All -ptype KRB5_NT_PRINCIPAL -out c:\palogarch0.keytab ktpass -princ palogarch/PASERVER1_HOST.domain.ru@DOMAIN.RU -mapuser palogarch_user1 -pass palogarch_user1_pwd -mapop set -crypto All -ptype KRB5_NT_PRINCIPAL -out c:\palogarch1.keytab ktpass -princ HTTP/PASERVER1_HOST.domain.ru@DOMAIN.RU -mapuser paserver_user1 -pass paserver_user1_pwd -mapop set -crypto All -ptype KRB5_NT_PRINCIPAL -out c:\paserver1.keytab ktpass -princ paserver/PASERVER2_HOST.domain.ru@DOMAIN.RU -mapuser paserver_user2 -pass paserver_user2_pwd -mapop set -crypto All -ptype KRB5_NT_PRINCIPAL -out c:\paserver2.keytab ...
Настройка PostgreSQL
Разместите файл postgres.keytab
на машине с PostgreSQL, например, в домашней директории. Затем добавьте следующую строку в файл конфигурации postgresql.conf
:
krb_server_keyfile = '/home/postgres/postgres.keytab' Настраиваем маппинг принципалов на пользователей постгреса в pg_ident.conf... # MAPNAME SYSTEM-USERNAME PG-USERNAME pagmap padbservice/PADBSERVICE_HOST.domain.ru@DOMAIN.RU padbservice_user pagmap palogarch/PADBSERVICE_HOST.domain.ru@DOMAIN.RU palogarch_user pagmap palogarch/PASERVER1_HOST.domain.ru@DOMAIN.RU palogarch_user ...
В примере выше созданы два пользователя PostgreSQL: один для padbservice
, который должен иметь полный доступ к базе данных, и второй для работы с таблицей логов. Второму пользователю при необходимости можно ограничить права для большей безопасности. Более того, для хранения логов можно использовать отдельную базу данных или даже отдельный сервер PostgreSQL. Возможно ограничиться одним пользователем в PostgreSQL, например, pagrid_user
.
Далее настройте аутентификацию в файле pg_hba.conf
:
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host pagrid_db padbservice_user 192.168.1.1/32 gss include_realm=1 map=pagmap host pagrid_db palogarch_user 192.168.1.0/24 gss include_realm=1 map=pagmap
В примере выше для palogarch
разрешены подключения со всей подсети 192.168.1.0/24. При необходимости можно указать конкретные IP-адреса машин кластера.
Настройка PolyAnalyst Grid
Для настройки Kerberos используются четыре параметра в конфигурационных файлах:
-
service_name - имя сервиса. Применяется к конфигурационным файлам
padbservice.cfg
,paserver.cfg
иpalogarch.cfg
. Значения по умолчанию:padbservice
,paserver
иpalogarch
. Для веб-сервисов указываетсяservice_name=HTTP
. -
keytab_path - путь к файлу сервиса
keytab
. Применяется к конфигурационным файламpadbservice.cfg
,paserver.cfg
иpalogarch.cfg
. Значения по умолчанию также соответствуют процессам:padbservice.keytab
,paserver.keytab
иpalogarch.keytab
. Укажите либо имя файла в директорииdata
, либо абсолютный путь к нему. -
krb5conf_path - путь к файлу
krb5.conf
с настройками Kerberos. Применяется к конфигурационным файламpadbservice.cfg
,paserver.cfg
иpalogarch.cfg
. По умолчанию используется системный файл, который обычно находится по этому пути:/etc/krb5.conf
. Укажите либо имя файла в директорииdata
, либо абсолютный путь к нему. -
realm - Kerberos-реалм. Применяется только к конфигурационным файлам
padbservice.cfg
иpalogarch.cfg
. Определяется автоматически из файла`krb5.conf`и указывается в верхнем регистре.
Минимальный конфигурационный файл padbservice.cfg
:
host=POSTGRES_HOST.domain.ru port=5432 dbname=pagrid_db user=padbservice_user rpc_port=7072 logarch=true
Минимальный конфигурационный файл palogarch.cfg
:
host=POSTGRES_HOST.domain.ru port=5432 dbname=pagrid_db user=palogarch_user
Минимальный конфигурационный файл paserver.cfg
(для веб-сервиса или только веб-сервиса (web=only
)):
dbservice_host=PADBSERVICE_HOST.domain.ru dbservice_port=7072 rpc_port=7071 web=true service_name=HTTP
Минимальный конфигурационный файл paserver.cfg
(вычислительный):
dbservice_host=PADBSERVICE_HOST.domain.ru dbservice_port=7072 rpc_port=7071
Минимальный конфигурационный файл webengine.cfg
(для веб-сервиса):
https_port=7070 ldap_host=ldap://AD_hostname.domain.ru ldap_domain=domain.ru ldap_preset_name=AD ldap_naming_context=CN=Users,DC=domain,DC=ru ldap_allowed_entry=CN=PAGridUsers,CN=Users,DC=domain,DC=ru ldap_admin_entry=CN=Администраторы домена,CN=Users,DC=domain,DC=ru ldap_service_login=HTTP/PASERVER1_HOST.domain.ru@DOMAIN.RU
Настройка krb5.conf
Пример конфигурационного файла krb5.conf
:
[libdefaults] default_realm = DOMAIN.RU udp_preference_limit = 1 dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false [realms] DOMAIN.RU = { kdc = AD_hostname primary_kdc = AD_hostname admin_server = AD_hostname } [domain_realm] .domain.ru = DOMAIN.RU domain.ru = DOMAIN.RU
Чтобы не менять системный файл, можно создать этот файл в папке data .
|
Настройка доменного SSO
Для использования доменной аутентификации через браузер используется метод SPNEGO, который передает только прокси-тикет, а не TGT. Это значит, что аутентификация в Active Directory (AD) возможна только через настройку «ограниченного делегирования» (constraint delegation). Более простой способ - использовать сервисную учетную запись для обхода LDAP директории. На машинах с веб-сервисом уже есть HTTP/принципал и соответствующий keytab
. Для активации сервисной учетной записи необходимо добавить параметр (со своим hostname у каждого) в конфигурационный файл webengine.cfg:
ldap_service_login=HTTP/PASERVER1_HOST.domain.ru@DOMAIN.RU
Используйте в браузере URL с указанием полного доменного имени, например: https://paserver1_host.domain.ru:7070.
В браузере следует разрешить сайту отправку SPNEGO токена аутентификации. Для этого добавьте его в Местную интрасеть. Для Windows откройте Свойства:Интернет, выберите Местная интрасеть в качестве зоны и нажмите на кнопку Сайты:

В появившемся окне Местная интрасеть нажмите на кнопку Дополнительно:

В следующем окне введите необходимый сайт и нажмите кнопку Добавить:

Вышеуказанную настройку можно применить централизованно, на всех клиентских компьютерах, через групповые политики.