Аутентификация методом единого входа (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.

sso 1.rus

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

sso 2.rus

Регистрация сервисных учетных записей

Для регистрации сервисных учетных записей используйте консольную утилиту 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, отметив соответствующие опции в настройках сервисной учетной записи.

sso 3.rus

Аналогично регистрируются все остальные сервисные учетные записи:

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 откройте Свойства:Интернет, выберите Местная интрасеть в качестве зоны и нажмите на кнопку Сайты:

sso 4.rus

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

sso 5.rus

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

sso 6.rus

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