Kerberos/SSO при сервере на Linux
Документация
Главная

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_kdcFQDN контроллера домена (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.local
  • network.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:

  1. Сгенерируйте новый keytab командой ktpass.
  2. В Proceset выполните мутацию update_kerberos_auth_config, прикрепив новый файл как multipart-часть запроса:
mutation {
  app_config {
    active_directory {
      auth {
        kerberos {
          update_kerberos_auth_config(id: 1) { id }
        }
      }
    }
  }
}

Имя нового файла keytab должно отличаться от ранее загруженных в системе.

Следующие шаги

Была ли статья полезна?

Предыдущая
Создание keytab-файла
Следующая
Системные таблицы
430006, Саранск,
Северо-восточное шоссе, д. 3
ОКВЭД 62.01
ИНН 1328​909857
Код вида деятельности
в области ИТ 15.02 и 17.01
Языки программирования