Kerberos/SSO при сервере на Linux
На этой странице описана настройка единого входа (SSO) через Kerberos/SPNEGO при сервере приложения Proceset на Linux.
Перед настройкой убедитесь, что выполнены все предусловия: Предусловия для Active Directory при сервере на Linux.
Создание keytab-файла описано на странице Пример создания keytab-файла для Kerberos-аутентификации в Active Directory.
Настройка выполняется на трех сторонах: на стороне Active Directory (учетная запись, SPN, keytab), на стороне Linux (DNS, NTP, сетевая доступность — описано в предусловиях), в Proceset (загрузка keytab и создание конфигурации через GraphQL — нужна привилегия «Аутентификация» с операциями C (создание) и W (изменение)).
Подготовка в AD
Создание учетной записи для SPN
Создайте отдельную учетную запись для Kerberos-сервиса (рекомендуется не переиспользовать учетную запись синхронизации):
New-ADUser -Name "svc-proceset-http" `
-UserPrincipalName "svc-proceset-http@corp.local" `
-SamAccountName "svc-proceset-http" `
-AccountPassword (ConvertTo-SecureString "<strong-password>" -AsPlainText -Force) `
-Enabled $true `
-PasswordNeverExpires $true
Учетной записи не нужны права администратора домена.
Регистрация SPN
Зарегистрируйте Service Principal Name. В качестве FQDN используйте то DNS-имя, по которому пользователи открывают Proceset в браузере:
setspn -S HTTP/proceset.corp.local svc-proceset-http
Проверьте уникальность SPN в лесу:
setspn -X
setspn -L svc-proceset-http
Если фронтенд доступен под несколькими именами, зарегистрируйте SPN для каждого из них.
Генерация keytab
Сгенерируйте keytab-файл командой ktpass:
ktpass -princ HTTP/proceset.corp.local@CORP.LOCAL ^
-mapuser CORP\svc-proceset-http ^
-pass <strong-password> ^
-ptype KRB5_NT_PRINCIPAL ^
-crypto AES256-SHA1 ^
-out C:\temp\proceset-http.keytab
Параметры:
| Параметр | Значение |
|---|---|
-princ | Должен совпадать с SPN в формате HTTP/<fqdn>@<REALM> |
-mapuser | Учетная запись, которой принадлежит SPN |
-pass | Пароль учетной записи |
-crypto | Рекомендуется AES256-SHA1 |
-out | Путь к создаваемому keytab-файлу |
Файл keytab понадобится при настройке в Proceset — храните и передавайте его по защищенному каналу.
Генерируйте keytab только с шифрованием AES256-SHA1. Использование устаревших алгоритмов RC4 или DES может привести к ошибке аутентификации в средах, где эти алгоритмы запрещены политикой домена.
Настройка в Proceset
Создайте конфигурацию Kerberos-аутентификации через мутацию create_kerberos_auth_config_with_core_auth. Эта мутация одновременно создает запись аутентификации типа Kerberos и привязывает к ней параметры KDC:
mutation {
app_config {
active_directory {
auth {
kerberos {
create_kerberos_auth_config_with_core_auth(
authentication_name: "Corp Kerberos",
host_kdc: "dc1.corp.local",
auth_field_type: UPN
) {
id
}
}
}
}
}
}
Параметры мутации:
| Параметр | Описание |
|---|---|
authentication_name | Произвольное имя для отображения в интерфейсе |
host_kdc | FQDN контроллера домена (KDC). Порт по умолчанию 88 |
auth_field_type | Поле для сопоставления пользователя: UPN, EMAIL или ADDITIONAL_FIELD |
additional_field_id | Идентификатор дополнительного поля — только при auth_field_type: ADDITIONAL_FIELD |
Keytab-файл передается не через параметры мутации — прикрепите его к тому же HTTP-запросу как multipart-часть. Запрос отправляется как multipart/form-data: первая часть — GraphQL-payload в поле query, вторая часть — бинарный файл keytab.
Пример запроса через curl:
QUERY='{"query":"mutation { app_config { active_directory { auth { kerberos { create_kerberos_auth_config_with_core_auth(authentication_name: \"Corp Kerberos\", host_kdc: \"dc1.corp.local\", auth_field_type: UPN) { id } } } } } }"}'
curl -X POST https://proceset.corp.local/graphql \
-H "Cookie: session=<admin-session>" \
-F "operations=$QUERY" \
-F "file=@/path/to/proceset-http.keytab"
Realm извлекается автоматически из первого principal в keytab — задавать его отдельно не нужно.
Настройка браузеров
Настройка выполняется на рабочих станциях пользователей — на клиентской стороне, независимо от операционной системы сервера. SPNEGO не работает по умолчанию для произвольных URL — требуется явно разрешить сайт в настройках браузера или через групповую политику.
Chrome, Chromium, Edge
Через групповую политику задайте параметр AuthServerAllowlist:
AuthServerAllowlist = *.corp.local
Для быстрой проверки можно запустить браузер с флагом:
google-chrome --auth-server-allowlist="*.corp.local"
На Linux Chrome берет билеты из кеша Kerberos пользовательской сессии. Если пользователь не выполнял kinit, SPNEGO работать не будет.
Firefox
В about:config задайте параметры:
network.negotiate-auth.trusted-uris=corp.localnetwork.negotiate-auth.delegation-uris=corp.local(опционально)
Через корпоративный policies.json:
{
"policies": {
"Authentication": {
"SPNEGO": ["corp.local"]
}
}
}
Edge на Windows
Edge наследует зоны безопасности Internet Explorer. Добавьте сайт в Local Intranet Zone через Свойства браузера → Безопасность → Местная интрасеть → Сайты. В доменной среде это обычно настраивается групповой политикой.
Обновление keytab при смене пароля
При смене пароля сервисной учетной записи в AD старый keytab перестает работать. Чтобы обновить keytab:
- Сгенерируйте новый keytab командой
ktpass. - В Proceset выполните мутацию
update_kerberos_auth_config, прикрепив новый файл как multipart-часть запроса:
mutation {
app_config {
active_directory {
auth {
kerberos {
update_kerberos_auth_config(id: 1) { id }
}
}
}
}
}
Имя нового файла keytab должно отличаться от ранее загруженных в системе.
Следующие шаги
- Подробнее о создании keytab: Пример создания keytab-файла для Kerberos-аутентификации в Active Directory
- Настройка аутентификации в интерфейсе: Добавление аутентификации
Была ли статья полезна?