Аутентификация через единый вход (SSO). Настройка контроллера домена, экземпляра ПО и компьютера конечного пользователя
Внимание!
Представленные в данной статье инструкции зависят от конфигурации сторонних систем и окружения, в котором развёрнут экземпляр ПО Comindware Business Application Platform.
Описать все возможные случаи и сочетания конфигураций сторонних систем не представляется возможным, поэтому данные инструкции могут не подойти для вашего случая.
Для корректной настройки конфигурации контроллера домена, экземпляра ПО и компьютеров конечных пользователей следует обратиться за консультацией в службу поддержки Comindware по адресу:
Введение
Здесь представлены инструкции по настройке контроллера домена, экземпляра ПО Comindware Business Application Platform (далее «экземпляр ПО») и компьютера конечного пользователя для аутентификации пользователей посредством технологии единого входа (SSO). Инструкции приведены для контроллера домена под управлением ОС Windows Server 2016, экземпляра ПО под управлением ОС Linux и компьютера конечного пользователя под управлением ОС Windows 10.
Определения
- Контроллер домена — машина с развёрнутыми доменными службами Active Directory.
- Домен Active Directory — группа объектов в сети.
- Single Sign-on (SSO) — технология единого входа, позволяющая пользователям выполнять аутентификацию с использованием одного набора учётных данных в нескольких независимых системах.
Примеры значений параметров
Здесь примеры значений параметров заключены в угловые скобки < >. При настройке конфигурации заменяйте их на фактические значения, как показано в следующей таблице:
| Пример параметра | Пример фактического значения |
|---|---|
<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 Business Application 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> |
Создание 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
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:Для Rocky Linux
ktpass /out <authuser>.keytab /mapuser <authuser> /princ HTTP/<DCName>.<domain.name>@<DOMAIN.NAME> /pass <P@$$W0RD> /crypto AES256-SHA1 /ptype KRB5_NT_PRINCIPALДля Astra Linux и Ubuntu
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> -
Выдайте права на файл
krb5cc_<id>(в примере —krb5cc_991илиkrb5cc_33, где991и33—idпользователяnginxиwww-dataсоответственно):Rocky Linux
chown -R nginx:nginx /etc/nginx/sasl/krb5cc_991Astra Linux и Ubuntu
chown -R www-data:www-data /etc/nginx/sasl/krb5cc_33
Настройка машины 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 -
Установите пакеты
samba-dcиkerberos-kdc:apt-get install task-samba-dc krb5-kdc -
Убедитесь, что модули установлены:
apt list task-samba-dc krb5-kdc
Настройка аутентификации Kerberos
-
Откройте файл конфигурации Kerberos для редактирования:
vim /etc/krb5.conf -
Отредактируйте файл
krb5.confсогласно следующему примеру:Astra Linux, Debian
#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 Business Application Platform<domain.name> = <DOMAIN.NAME>
Для ОС «Альт»: настройка pam_winbind.conf
-
Откройте для редактирования файл конфигурации
pam_winbind.conf:vim /etc/security/pam_winbind.conf -
Отредактировать файл конфигурации
pam_winbind.confсогласно следующему примеру:[global]debug = nodebug_state = notry_first_pass = yescached_login = yeskrb5_auth = yeskrb_ccache_type = FILEsilent = yesmkhomedir = yes
Установка экземпляра ПО
-
Скачайте и распакуйте дистрибутив ПО Comindware Business Application Platform в директорию
/home/<username>и перейдите в директорию с распакованным ПО (X.X.XXXX.X— номер версии ПО,<osname>— название операционной системы):tar -xvzf X.X.XXXX.X.<osname>.tar.gz -C /home/<username>cd /home/<username>/CMW_<osname>/ -
Установите ПО Comindware Business Application Platform без создания экземпляра ПО и с ключом
-d=clear— без демонстрационной базы данных:sh install.sh -p -d=clear -
Создайте экземпляр ПО, указав вместо
<instanceName>требуемое имя экземпляра (X.X.XXXX.X— номер версии ПО):cd scripts/instance/sh create.sh -n=<instanceName> -p=80 -v=X.X.XXXX.X
Настройка экземпляра ПО
Для включения функционала SSO аутентификации в экземпляре ПО необходимо настроить его файл конфигурации.
-
Откройте для редактирования файл конфигурации экземпляра ПО (
instanceName— имя экземпляра ПО):vim /usr/share/comindware/configs/instance/instanceName.yml -
Добавьте в файл директиву
isLinuxSSOAuthorization: true

Установка и настройка модуля NGINX SPNEGO
-
Установите модуль NGINX-SPNEGO:
apt-get install nginx-spnego -
Добавить модуль SPNEGO к рабочей конфигурации NGINX:
ln -s /etc/nginx/modules-available.d/http_auth_spnego.conf /etc/nginx/modules-enabled/ -
Поместить 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>согласно следующему примеру:server {listen 8999 http2;root /var/www/cmwdata;location /async {grpc_pass grpc_cmwdata;}}server {listen 80 default;root /var/www/cmwdata;client_header_timeout 3h;client_body_timeout 3h;grpc_read_timeout 3h;grpc_send_timeout 3h;client_max_body_size 300m;fastcgi_read_timeout 10000;location /async {grpc_pass grpc_cmwdata;}location / {# SPNEGO Configurationadd_header Set-Cookie "cmw_user=$remote_user";auth_gss on;auth_gss_realm <DOMAIN.NAME>;auth_gss_keytab /etc/nginx/<authuser>.keytab;auth_gss_service_name HTTP/<authuser>.<domain.name>;auth_gss_allow_basic_fallback on;proxy_read_timeout 10000;proxy_connect_timeout 10000;proxy_send_timeout 10000;root /var/www/cmwdata/;fastcgi_pass unix:/var/www/cmwdata/App_Data/cmwdata.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>
Связанные статьи
Аутентификация через Active Directory. Настройка контроллера домена и экземпляра ПО
Аутентификация через OpenID Connect. Настройка подключения и служб
Эта статья была полезна 1 чел.