Аутентификация через единый вход (SSO). Настройка контроллера домена, экземпляра ПО и компьютера конечного пользователя
Внимание!
Представленные здесь инструкции зависят от конфигурации сторонних систем и окружения, в котором развёрнут экземпляр ПО Comindware Platform.
Описать все возможные случаи и сочетания конфигураций сторонних систем не представляется возможным, поэтому данные инструкции могут не подойти для вашего случая.
Для корректной настройки конфигурации контроллера домена, экземпляра ПО и компьютеров конечных пользователей следует обратиться за консультацией в службу поддержки Comindware по адресу:
Введение
Здесь представлены инструкции по настройке контроллера домена, экземпляра ПО Comindware Platform и компьютера конечного пользователя для аутентификации пользователей посредством технологии единого входа (SSO).
Инструкции приведены для контроллера домена под управлением ОС Windows Server 2016, экземпляра ПО под управлением ОС Linux и компьютера конечного пользователя под управлением ОС Windows 10.
Определения
- Контроллер домена — машина с развёрнутыми доменными службами Active Directory.
- Домен Active Directory — группа объектов в сети.
- Single Sign-on (SSO) — технология единого входа, позволяющая пользователям выполнять аутентификацию с использованием одного набора учётных данных в нескольких независимых системах.
Порядок настройки
-
Подготовьте параметры и инфраструктуру аутентификации:
- Ознакомьтесь с примерами значений параметров.
- Определите конфигурацию машины с экземпляром ПО Comindware Platform.
- Определите конфигурацию машины с контроллером домена.
- При необходимости настройте надёжные узлы на контроллере домена.
- Создайте и настройте сервисного пользователя домена и пользователей для проверки аутентификации.
-
Подготовьте SPN и keytab-файл аутентификации:
-
Настройте машину с экземпляром ПО Comindware Platform для использования SSO:
- Проверьте требования к машине.
- Настройте параметры сети.
- Проверьте настройку сети.
- Настройте синхронизацию времени между контроллером домена и экземпляром ПО;
- Настройте конфигурацию Kerberos
- Установите ПО Comindware Platform
- Включите SSO в экземпляре Comindware Platform ПО;
- Установите и настройте модуль NGINX SPNEGO
- Синхронизируйте аккаунты экземпляра ПО с сервером каталогов.
- Проверьте вывод трассировщика ошибок в Shell
- Запустите и инициализируйте экземпляр ПО
-
Настройте клиентские компьютеры для использования Kerberos-аутентификации при подключении к Comindware Platform:
Подготовка параметров и конфигурации машин
Примеры значений параметров
Здесь примеры значений параметров заключены в угловые скобки < >. При настройке конфигурации заменяйте их на фактические значения, как показано в следующей таблице:
| Пример параметра | Пример фактического значения |
|---|---|
<DCName> |
DC |
<DCName>.<domain.name> |
DC.example.com |
HTTP/<DCName>.<domain.name>@<DOMAIN.NAME> |
HTTP/DC.example.com@EXAMPLE.COM |
<linuxHost> |
server-host-name |
<domain.controller.ip.address> |
192.168.0.254 |
Примечание
Протокол аутентификации Kerberos учитывает регистр символов — там, где в инструкциях даны примеры параметров в верхнем регистре, следует подставлять фактические значения также в верхнем регистре.
Конфигурации машины <linuxHost> с экземпляром ПО Comindware Platform
В этой статье используются следующие параметры конфигурации машины с экземпляром ПО.
| Параметр | Значение |
|---|---|
| Операционная система | Linux |
| Имя хоста | <linuxHost> |
| IP-адрес хоста | <linux.host.ip.address> |
Конфигурация машины <DCName> с контроллером домена
В этой статье используются следующие параметры конфигурации машины с контроллером домена.
| Параметр | Значение |
|---|---|
| Операционная система | Windows Server 2016 |
| Имя хоста | <DCName> |
| FQDN контроллера домена | <DCName>.<domain.name> |
| Доменное имя | <domain.name> |
| IP-адрес контроллера домена | <domain.controller.ip.address> |
Настройка надёжных узлов на контроллере домена
При необходимости на контроллере домена добавьте хост <linuxHost> с экземпляром ПО в список надёжных узлов в рамках интранета, как указано ниже.
- В Панели управления выберите пункт «Сеть и интернет».
- Откройте пункт «Свойства: интернет» (Internet Properties).
- Выберите вкладку «Безопасность» (Security).
- Выберите зону «Надёжные узлы» (Trusted sites).
- Нажмите кнопку «Узлы» (Sites).
- В отобразившемся окне добавьте в список надёжных узлов
<linuxHost>.

Сервисный пользователь домена
В домене должен существовать пользователь <authuser>, выступающий в роли сервисного аккаунта для модуля аутентификации NGINX, работающего на машине <linuxHost> с экземпляром ПО.
Если пользователя <authuser> в AD нет, необходимо создать его, указав параметры, приведённые в следующей таблице:
| Параметр | Значение |
|---|---|
name |
<authuser> |
userPrincipalName (User logon name) |
HTTP/<DCName>.<domain.name>@<DOMAIN.NAME> |
sAMAccountName (User logon name pre-Windows 2000) |
<DOMAIN>\<authuser> |
При создании пользователя <authuser> на вкладке «Учётная запись» (Account) необходимо установить флажки «Пользователь не может менять пароль» (User cannot change password) и «Срок действия пароля не истекает» (Password never expires), как показано на иллюстрации.

Пользователи для проверки аутентификации
Для проверки работоспособности процедуры аутентификации здесь используются пользователи user1 и user2, см. следующую таблицу:
| Параметр | Значение | Значение |
|---|---|---|
name |
user1 |
user2 |
sAmAccountName |
<domain>/user1 |
<domain>/user2 |
userPrincipalName |
user1@<DOMAIN.NAME> |
user2@<DOMAIN.NAME> |
Подготовка SPN и keytab-файл аутентификации
Создание keytab-файла аутентификации
-
На контроллере домена
<DCName>выведите список Service Principal Names (SPN), привязанных к пользователю<authuser>:setspn -L <authuser> -
Добавьте SPN
HTTP/<DCName>.<domain.name>к пользователю<authuser>:setspn -S HTTP/<DCName>.<domain.name> <authuser> -
Создайте keytab-файл аутентификации
<authuser>.keytab:Astra Linux, Debian, DEB-дистрибутивы
ktpass /out <authuser>.keytab /mapuser <authuser> /princ HTTP/<DCName>.<domain.name>@<DOMAIN.NAME> /pass <P@$$W0RD> /crypto RC4-HMAC-NT /ptype KRB5_NT_PRINCIPALПримечание
Вместо пароля
<P@$$W0RD>, подставьте пароль сервисного пользователя<authuser>. -
Утилита
ktpassсоздаст файл<authuser>.keytabв рабочей директории PowerShell на момент вызова командыktpass. - Настройте машину
<linuxHost>с экземпляром ПО. - Перенесите keytab-файл
<authuser>.keytabна машину<linuxHost>с экземпляром ПО.
Обновление keytab-файла аутентификации для аутентификации новых пользователей
Внимание!
Для обеспечения возможности аутентификации новых пользователей, добавленных при синхронизации с сервером каталогов необходимо заново создать keytab-файл на машине <linuxHost> с экземпляром ПО.
Эту операцию необходимо выполнять каждый раз после добавления новых пользователей с сервера каталогов на уже настроенной машине <linuxHost>.
Если не создать новый keytab-файл, пользователи, добавленные с сервера каталогов после создания имеющегося keytab-файла, не смогут войти в систему.
- Настройте машину
<linuxHost>с экземпляром ПО. -
На контроллере домена
<DCName>выведите список Service Principal Names (SPN), привязанных к пользователю<authuser>:setspn -L <authuser> -
Добавьте SPN
HTTP/<DCName>.<domain.name>к пользователю<authuser>:setspn -S HTTP/<DCName>.<domain.name> <authuser> -
Создайте keytab-файл аутентификации
<authuser>.keytab:РЕД ОС, RPM-дистрибутивы
ktpass /out <authuser>.keytab /mapuser <authuser> /princ HTTP/<DCName>.<domain.name>@<DOMAIN.NAME> /pass <P@$$W0RD> /crypto AES256-SHA1 /ptype KRB5_NT_PRINCIPALAstra Linux, Debian, DEB-дистрибутивы
ktpass /out <authuser>.keytab /mapuser <authuser> /princ HTTP/<DCName>.<domain.name>@<DOMAIN.NAME> /pass <P@$$W0RD> /crypto RC4-HMAC-NT /ptype KRB5_NT_PRINCIPALПримечание
Вместо пароля
<P@$$W0RD>, подставьте пароль сервисного пользователя<authuser>. -
Утилита
ktpassсоздаст файл<authuser>.keytabв рабочей директории PowerShell на момент вызова командыktpass. - Перейдите на уже настроенную машину
<linuxHost>с экземпляром ПО. -
Поместите keytab-файл
<authuser>.keytabв директорию/etc/nginx/saslи сделайте его доступным для чтения:cp /<path_to_keytab>/<authuser>.keytab /etc/nginx/saslchmod 664 /etc/nginx/sasl/<authuser>.keytabЗдесь
<path_to_keytab>— папка, в которой находится keytab-файл<authuser>.keytab, взятый с контроллера домена. -
Выпустите тикет для приложения
HTTP/<DCName>.<domain.name>:kinit -k -t /etc/nginx/sasl/<authuser>.keytab HTTP/<DCName>.<domain.name>
Настройка машины linuxHost с экземпляром ПО
Требования к машине
- FQDN
<DCName>.<domain.name>должно разрешаться. - Время между машинами
<DCName>и<linuxHost>должно быть синхронизировано. - Должен быть установлен пакет
libsasl2. - Должен быть установлен и сконфигурирован
Kerberos. - Должен быть установлен и настроен прокси-сервер NGINX с модулем аутентификации SPNEGO и зависимостями исполняемой среды для него.
Настройка параметров сети для разрешения DC FQDN
Изменение файла hosts
-
Откройте файл
/etc/hostsдля редактирования:vim /etc/hosts -
Добавьте в файл
hostsправила для разрешения машины<linuxHost>с экземпляром ПО:127.0.0.1 localhost localhost.localdomain127.0.1.1 <linuxHost>.<domain.name> <linuxHost><domain.controller.ip.address> <DCName>.<domain.name> <DCName>
Изменение файла resolv.conf
Если после настройки файла hosts, имя контроллера не разрешается, следует отредактировать файл resolv.conf.
-
Разрешите редактирование файла
resolv.conf:chattr -i /etc/resolv.conf -
Откройте файл разрешения DNS имен
resolv.confдля редактирования:vim /etc/resolv.conf -
Укажите машину
<DCName>в качестве сервера имёнnameserver:domain <domain.name>search <domain.name>nameserver <domain.controller.ip.address> -
Запретите редактирование файла
resolv.conf:chattr +i /etc/resolv.conf
Проверка корректности настроек сети
-
Убедитесь, что FQDN
<DCName>.<domain.name>разрешается:# DNS Lookup of DCnslookup <DCName>nslookup <DCName>.<domain.name>host <DCName>.<domain.name># Reverse DNS lookup of `nameserver`host <domain.controller.ip.address>
Синхронизация времени между машинами DCName и linuxHost
Синхронизацию времени следует настраивать в следующих случаях:
- машины
<DCName>и<linuxHost>находятся в разных часовых поясах; - машина
<linuxHost>не подключена к сервису синхронизации времени.
-
Установите пакет
ntp:apt-get install ntp -
Откройте файл конфигурации
ntp.confдля редактирования:vim /etc/ntp.conf -
Добавьте в файл конфигурации
ntp.confполеserver <DOMAIN.NAME> iburst burst prefer:driftfile /etc/ntp/driftserver <DOMAIN.NAME> iburst burst preferserver 127.127.1.0 iburstfudge 127.127.1.0 stratum 10restrict default noquery nomodifyrestrict 127.0.0.1 -
Примените настройки:
systemctl start ntp -
Удостоверьтесь, что служба
ntpработает:systemctl status ntp
Настройка конфигурации Kerberos
Установка вспомогательных пакетов
-
Установите модуль
libsasl2:apt install libsasl2-modules-gssapi-mit -
Убедитесь, что модуль установлен:
apt list libsasl* -
Убедитесь, что установлены пакеты
krb5-user,krb5-configи зависимости для них:which krb5-userwhich krb5-config -
Установите пакеты
kerberos-kdc:apt-get install krb5-kdc
Настройка аутентификации Kerberos
-
Откройте файл конфигурации Kerberos для редактирования:
vim /etc/krb5.conf -
Отредактируйте файл
krb5.confсогласно следующему примеру:Astra Linux, Альт Сервер, Debian, DEB-дистрибутивы
#astra/debian-winbind[libdefaults]default_realm = <DOMAIN.NAME>kdc_timesync = 1ccache_type = 4forwardable = trueproxiable = truefcc-mit-ticketflags = truedns_lookup_realm = falsedns_lookup_kdc = falsev4_instance_resolve = falsev4_name_convert = {host = {rcmd = hostftp = ftp}plain = {something = something-else}}[realms]<DOMAIN.NAME> = {kdc = <DCName>.<domain.name>admin_server = <DCName>.<domain.name>default_domain = <domain.name>}[domain_realm].<domain.name> = <DOMAIN.NAME><domain.name> = <DOMAIN.NAME>[login]krb4_convert = falsekrb4_get_tickets = falseАльт Сервер
includedir /etc/krb5.conf.d/[logging]# default = FILE:/var/log/krb5libs.log# kdc = FILE:/var/log/krb5kdc.log# admin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_kdc = truedns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsedefault_realm = <DOMAIN.NAME>default_ccache_name = KEYRING:persistent:%{uid}[realms]<DOMAIN.NAME> = {kdc = <DCName>.<domain.name>admin_server = <DCName>.<domain.name>default_domain = <domain.name>}[domain_realm]<.domain.name> = <DOMAIN.NAME> Comindware Platform<domain.name> = <DOMAIN.NAME>
Установка экземпляра ПО
- Установите вспомогательне ПО для Comindware Platform согласно инструкциям в параграфе «Порядок установки вспомогательного ПО».
-
Установите ПО Comindware Platform согласно инструкциям в параграфе «Порядок установки ПО Comindware Platform».
-
Создайте экземпляр ПО Comindware Platform, согласно инструкциям в параграфе «Создание экземпляра ПО Comindware Platform». Далее
<instanceName>— имя созданного экземпляра ПО.
Не запускайте и не инициализируйте экземпляр ПО
После создания экземпляра ПО Comindware Platform не запускайте и не инициализируйте его.
Вместо этого переходите к следующим этапам настройки SSO.
Включение SSO в экземпляре ПО
Для включения функционала SSO аутентификации в экземпляре ПО необходимо настроить его файл конфигурации.
-
Откройте для редактирования файл конфигурации экземпляра ПО (
<instanceName>— имя экземпляра ПО):vim /usr/share/comindware/configs/instance/<instanceName>.yml -
Добавьте в файл директиву
isLinuxSSOAuthorization: true

Установка и настройка модуля NGINX SPNEGO
Перед установкой ознакомьтесь с документацией модуля NGINX SPNEGO (раздел Installation).
-
Все последующие команды следует выполнять от имени суперпользователя
root. Для этого введите команду:sudo -sили
su - -
Установите модуль NGINX-SPNEGO:
-
Astra Linux (версии 1.8.3 и выше)
Установите модуль
ngx_http_auth_spnego_module.soиз пакетаnginx-spnego-module_1.26.3-1_amd64.deb, который поставляется в составе инсталлятора Comindware Platform для Astra Linux 1.8.3 и выше. -
Astra Linux (версии ниже 1.8.3), Debian, DEB-дистрибутивы
apt-get updateapt-get install -y build-essential git wgetcd /usr/srcwget http://nginx.org/download/nginx-<nginx.version>.tar.gztar -xvzf nginx-<nginx.version>.tar.gzcd nginx-<nginx.version>git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git./configure --add-module=./spnego-http-auth-nginx-modulemakemake install -
РЕД ОС, RPM-дистрибутивы
yum groupinstall -y "Development Tools"yum install -y git wgetcd /usr/srcwget http://nginx.org/download/nginx-<nginx.version>.tar.gztar -xvzf nginx-<nginx.version>.tar.gzcd nginx-<nginx.version>git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git./configure --add-module=./spnego-http-auth-nginx-modulemakemake install -
Альт Сервер
apt-get updateapt-get install -y gcc make git wgetcd /usr/srcwget http://nginx.org/download/nginx-<nginx.version>.tar.gztar -xvzf nginx-<nginx.version>.tar.gzcd nginx-<nginx.version>git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git./configure --add-module=./spnego-http-auth-nginx-modulemakemake install
-
-
Добавьте модуль SPNEGO к рабочей конфигурации NGINX:
Любые ОС (кроме Astra Linux 1.8.3):
ln -s /etc/nginx/modules-available.d/http_auth_spnego.conf /etc/nginx/modules-enabled/Astra Linux 1.8.3 и выше:
Добавьте первой строкой в основной файл конфигурации NGINX (
/etc/nginx/nginx.conf) директиву загрузки модуля SPNEGO:load_module modules/ngx_http_auth_spnego_module.so; -
Поместите keytab-файл
<authuser>.keytabв директорию конфигурации NGINX и сделать его доступным для чтения:cp /<path_to_keytab>/<authuser>.keytab /etc/nginxchmod 664 /etc/nginx/<authuser>.keytabЗдесь
<path_to_keytab>— папка, в которой находится keytab-файл<authuser>.keytab, взятый с контроллера домена. -
Откройте для редактирования описание веб-приложения NGINX для экземпляра ПО
<instanceName>:vim /etc/nginx/sites-available.d/comindware<instanceName> -
Отредактируйте файл
comindware<instanceName>согласно следующему примеру (раскомментируйте все директивыauth_gss):Для Astra Linux 1.8.3 и выше
Перед включением директивы
auth_gss on;в конфигурации экземпляра ПО убедитесь, что модульngx_http_auth_spnego_module.soустановлен и загружен, как указано на шагах 1–2.Пример файла comindware<instanceName>...location / {# Authentication Configuration# Раскомментируйте директивы auth_gssauth_gss on;auth_gss_realm <DOMAIN.DNS>;auth_gss_keytab /etc/nginx/<authuser>.keytab;auth_gss_service_name HTTP/<authuser>.<domain.dns>;auth_gss_allow_basic_fallback on;proxy_set_header X-Request-ID $request_id;proxy_read_timeout 10000;proxy_connect_timeout 10000;proxy_send_timeout 10000;root /var/www/<instancename>/;fastcgi_pass unix:/var/www/<instancename>/App_Data/<instancename>.socket;include /etc/nginx/fastcgi.conf;} -
Проверьте синтаксис веб-приложения NGINX для экземпляра ПО
<instanceName>:nginx -t -
Примените настройки и перезапустите NGINX:
nginx -s reload -
Проверьте статус сервиса NGINX:
systemctl status nginx -
Проверьте статус сервиса экземпляра ПО
<instanceName>:systemctl status comindware<instanceName>
Синхронизация аккаунтов экземпляра ПО с сервером каталогов
- Войдите в экземпляр ПО с помощью браузера.
- Откройте свойства подключения к серверу каталогов, которое будет использоваться для синхронизации аккаунтов.
- На вкладке «Основные» установите флажок «Использовать по умолчанию».
- На вкладке «Сопоставление атрибутов» нажмите кнопку «Восстановить».
- Сохраните свойства подключения.
-
Перезапустите экземпляр ПО:
systemctl restart comindware<instance_name>
Проверка работы функционала Kerberos на машине linuxHost
-
Создайте тикет для приложения
HTTP/<DCName>.<domain.name>:kinit -k -t /etc/nginx/<authuser>.keytab HTTP/<DCName>.<domain.name> -
Выведите список тикетов:
klist
Проверка вывода трассировщика ошибок в Shell
-
Выполните команду:
KRB5_TRACE=/dev/stdout kinit -k -t /etc/nginx/<authuser>.keytab HTTP/<DCName>.<domain.name>
Запуск и инициализация экземпляра ПО
После настройки SSO необходимо запустить и инициализировать экземпляр ПО Comindware Platform:
- Запустите экземпляр ПО согласно инструкциям в параграфе «Запуск экземпляра ПО».
- Запустите экземпляр ПО согласно инструкциям в параграфе «Инициализация Comindware Platform».
Настройка клиента
По умолчанию SSO-авторизация работает в браузерах Edge и Google Chrome, но необходимо в параметрах безопасности браузера добавить сайт в зону местной интрасети и включить режим «Автоматический вход в сеть только в зоне интрасети». Сведения о настройке других браузеров см. в соответствующей документации.

Эта статья была полезна 2 чел.