IntraVision

SSO Intraservice5

Определяем домен который будет доаблен сервер IS в нашем случае intra.hosting 
Уточняем имя сервера: test-intra-01 

Задаем имя сервера IS
hostnamectl set-hostname test-intra-01.intra.hosting


systemctl disable systemd-resolved 
sudo systemctl stop systemd-resolved
sudo unlink /etc/resolv.conf
sudo nano /etc/resolv.conf
Вводим в файле домен (который используется в AD) и локальные IP DNS серверов (которые "знают" о зоне нашей сети)
например:
search intra.hosting
nameserver 10.1.1.123
nameserver 10.1.1.124
устанавливаем необходимые пакеты 
apt update
apt -y install realmd libnss-sss libpam-sss sssd sssd-tools adcli samba-common-bin oddjob oddjob-mkhomedir packagekit

запускаем обнаружение домена:
realm discover intra.hosting
Подключаем сервер к домену:
realm join -U Administrator intra.hosting
Результат: Сервер должен появиться в Active Directry and Computers в разделе Computers (AD WIN OS)

Включаем возможность автоматического создания домашних папок пользоватея:

sudo bash -c "cat > /usr/share/pam-configs/mkhomedir" <<EOF 
Name: activate mkhomedir
Default: yes Priority: 900
Session-
Type: Additional
Session:
required pam_mkhomedir.so umask=
0022 skel=/etc/skel
EOF

Запускаем:

sudo pam-auth-update

 
 

активируем mkhomedir

Затем перезагружаем sssd и проверяем что оно работает:

sudo systemctl restart sssd 
systemctl status sssd
в Active Directry and Computers в разделе Computers открываем свойства компьютера
 
 
ищем вкладку Attribute Editor в ней находим запись servicePrincipalName и открываем её
_________________________________________________________
если вкладки Attribute Editor нет тогда ставим тут галку
 
 
__________________________________________________________
В открывшемся доп окне указываем url адреса по которым должна работать SSO (добавление SPN записей в AD)
Пример:
 
 
На Web сервере linux добавляем информацию в keytab-файл


Войдём в режим работы с утилитой ktutil:
(если пакет не установлен то: 

sudo apt update

sudo apt install krb5-user

)

ktutil
ktutil:  read_kt /etc/krb5.keytab
ktutil: list -k -e
Сервер покажет нам те SPN записи что уже есть
 
 
Добавляем записи с новым адресом
Пример:
У меня на три ключа шифрования для каждого адреса:
aes256-cts-hmac-sha1-96
aes128-cts-hmac-sha1-96
arcfour-hmac

По этому создаю три записи для своего нового адреса с такими же ключами шифрования
Ввожу команду
ktutil: add_entry -key -p HTTP/shikanov.intraservice.ru@INTRA.HOSTING -k 3 -e aes256-cts-hmac-sha1-96
Ktutil попросит указать ключ шифрования
Key for HTTP/shikanov.intraservice.ru@INTRA.HOSTING (hex):
Указываю тот что соответствует этому шифрованию из из списка SPN выше(Без 0Х)
 
 

Перезаписываем keytab файл  
ktutil: write_kt /etc/krb5.keytab
Проверяем что всё ок
ktutil: list -k -e
Выходим
ktutil: exit

указываем URL адреса по которых должны работать SSO в конфиге сайта

nano /var/www/intraservice/appsettings.json

 
 
"enabled": "true",
"application": "/winauth", --если оставить один слеш то SSO будет срабатывать при открытии сайта из списка них, Если как в примере дописать winauth, то SSO будет работать при дописывании /winauth в конце адреса, без него будет работать анонимная авторизация
"addresses": [ "http://localhost", "http://shikanov.intraservice.ru", "http://test-intra-01" ] --указываем url по которым будет работать SSO

После сохраняем конфиг и перезапускаем службу
systemctl restart intraservice-web

для работы sso на компьютерах пользователей необходимо
1) чтобы в аккаунте импорта пользователей был указан домен, такой же как и тот который мы добавляли в keytab файл
 
 
2)на компьютерах пользователей адрес для SSO должен быть добавлен в местную интрасеть
(это не обязательно делать вручную, можно политиками распространить через AD на компьютеры пользователей)
 
 
3) пользователь должен быть авторизован в Windows под доменной учётной записью, которая просматривается интрасервисом через аккаунт синхронизации с AD

На этом всё.



устранение ошибок SSO
сайт падает в 500 ошибку

В nano /var/log/syslog видим такую ошибку


Connection id "0HMTA3PLPRATQ", Request id "0HMTA3PLPRATQ:00000002": An unhandled exception was thrown by the application.
Interop+NetSecurityNative+GssApiException: GSSAPI operation failed with error - Unspecified GSS failure.  Minor code may provide more information (Clock skew too great).

Решение
Синхронизировать время линукс сервера с доменом
Пример: https://serveradmin.ru/ustanovka-nastrojka-i-sinhronizacziya-vremeni-v-debian/ 

sysadmin
linux