SSO Intraservice5
systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo unlink /etc/resolv.conf
sudo nano /etc/resolv.conf
устанавливаем необходимые пакеты
apt updateapt -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-96aes128-cts-hmac-sha1-96arcfour-hmacПо этому создаю три записи для своего нового адреса с такими же ключами шифрованияВвожу командуktutil: add_entry -key -p HTTP/shikanov.intraservice.ru@INTRA.HOSTING -k 3 -e aes256-cts-hmac-sha1-96Ktutil попросит указать ключ шифрования
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/