Протокол Kerberos
Kerberos — протокол аутентификации, который использует зашифрованные билеты для проверки подлинности пользователей и служб. Пользователь получает билет у контроллера домена (Центра распределения ключей, KDC) и предъявляет его нужной службе, чтобы получить к ней доступ.
Протокол Kerberos позволяет пользователям Active Directory входить в консоль Indeed PAM под доменной учетной записью: пользователю не нужно вводить пароль, для аутентификации используется выданный билет.
- Аутентификация Kerberos поддерживается только для одного домена Active Directory.
- Время на сервере управления, контроллере домена и компьютере пользователя должно быть синхронизировано. Если время расходится, контроллер домена может посчитать билеты недействительными. Подробнее — в документации Microsoft.
Настройка аутентификации
Выберите сценарий настройки в зависимости от конфигурации вашей инсталляции PAM.
- Сервер управления на ОС Windows
- Сервер управления на ОС Linux
Настройка включает следующие этапы:
- Проверка SPN для каждого адреса, по которому пользователи открывают консоль PAM.
- Настройка аутентификации в мастере конфигурации.
- Настройка браузера для входа в PAM по протоколу Kerberos.
Проверка и регистрация SPN
Имя субъекта-службы (Service Principal Name, SPN) — уникальный идентификатор службы в сети. Протокол Kerberos использует SPN, чтобы привязать службу к учетной записи.
- Схема без балансировщика
- Схема с балансировщиком
Для DNS-имени сервера управления SPN регистрируется автоматически для учетной записи компьютера, если выполняются следующие условия:
- Сервер управления присоединен к домену.
- В Диспетчере служб IIS (IIS Manager) в настройках проверки подлинности Windows (Windows Authentication) отключено использование учетных данных пула приложений (для параметра
useAppPoolCredentialsуказаноFalse).
Если консоль PAM открывается по виртуальному адресу балансировщика или алиасу, который не совпадает с DNS-именем сервера управления, зарегистрируйте SPN вручную.
Действия выполняются на контроллере домена или на доменной машине с установленными средствами удаленного администрирования серверов (RSAT) или модулем ActiveDirectory для PowerShell.
Проверьте, что SPN для каждого FQDN PAM зарегистрирован только для одной сервисной учетной записи:
Запустите PowerShell от имени администратора.
Выполните команду:
setspn -Q */<FQDN PAM>В выводе должна быть указана одна учетная запись, для которой зарегистрирован SPN, — учетная запись компьютера сервера управления в формате
<домен>\<DNS-имя сервера управления>$.Если SPN не найден или зарегистрирован сразу для нескольких учетных записей, обратитесь к администратору домена.
Если пользователи открывают консоль PAM по общему (виртуальному) адресу балансировщика, SPN не регистрируется автоматически, так как виртуальное имя не совпадает с DNS-именем сервера управления.
Чтобы зарегистрировать SPN:
Настройте пул приложений
Indeed.PAM.Idpдля работы от имени сервисной учетной записи.Как настроить пул приложений
Indeed.PAM.IdpПримечаниеДействия выполняются на всех серверах управления.
- Запустите Диспетчер служб IIS (IIS Manager).
- В дереве подключений выберите Пулы приложений (Application Pools).
- Правой кнопкой мыши нажмите на пул
Indeed.PAM.Idpи выберите Дополнительные параметры (Advanced Settings). - В блоке Модель процесса (Process Model) нажмите на поле Удостоверение (Identity), затем — на
.
- Выберите Особая учетная запись (Custom account) и укажите нужную сервисную учетную запись. Имя пользователя укажите в формате
ДОМЕН\Имя учетной записи. - Нажмите ОК.
Включите проверку Kerberos-билетов от имени учетной записи пула
Indeed.PAM.Idp.Как включить проверку Kerberos-билетов
ПримечаниеДействия выполняются на всех серверах управления.
В дереве подключений выберите Сайты (Sites) → Default Web Site → idp.
В группе Управление (Management) перейдите в раздел Редактор конфигурации (Configuration Editor).
Для параметра Раздел (Section) выберите
system.webServer→security→authentication→windowsAuthentication.Для параметра
useAppPoolCredentialsустановите значениеTrue.В разделе Действия (Actions) нажмите Применить (Apply).
В группе IIS перейдите в раздел Проверка подлинности (Authentication).
Выберите Проверка подлинности Windows (Windows Authentication) и на правой панели нажмите Провайдеры (Providers).
Убедитесь, что провайдеры аутентификации располагаются в следующем порядке:
Negotiate
NTLMЕсли один из провайдеров не указан, выберите нужный провайдер из списка Доступные провайдеры (Available Providers) и нажмите Добавить (Add).
Изменить порядок провайдеров можно с помощью Переместить выше (Move Up) и Переместить ниже (Move Down).
Перейдите в Пулы приложений (Application Pools), выберите
Indeed.PAM.Idpи на правой панели Действия (Actions) нажмите Перезапуск (Recycle).
Зарегистрируйте SPN для сервисной учетной записи, от имени которой работает пул приложений
Indeed.PAM.Idp.Как зарегистрировать SPN
ПримечаниеДействия выполняются на контроллере домена или на доменной машине с установленными средствами удаленного администрирования серверов (RSAT) или модулем
ActiveDirectoryдля PowerShell.Запустите PowerShell от имени администратора.
Выполните команду:
setspn -S HTTP/<FQDN PAM> <домен>\<учетная запись AD>setspn -S HTTP/<FQDN балансировщика> <домен>\<учетная запись AD>Пример командыsetspn -S HTTP/pam.company.local PAM\pam-ad-userПримечаниеЗначение SPN должно быть уникальным в домене. Не регистрируйте тот же SPN для другой учетной записи.
Что делать, если SPN уже зарегистрирован
Если при регистрации SPN в выводе отображается ошибка
Duplicate SPN found, это значит, что указанный SPN уже зарегистрирован для другой учетной записи.Чтобы решить конфликт:
Выполните команду:
setspn -Q HTTP/<FQDN PAM>В выводе будет указана учетная запись, для которой сейчас зарегистрирован SPN.
Удалите SPN с этой учетной записи:
ПредупреждениеСогласуйте удаление SPN с администратором домена. Найденный SPN может использоваться другим сервисом.
setspn -D HTTP/<FQDN PAM> <домен>\<текущая учетная запись AD>Зарегистрируйте SPN для новой учетной записи:
setspn -S HTTP/<FQDN PAM> <домен>\<новая учетная запись AD>Убедитесь, что конфликта больше нет и SPN зарегистрирован для нужной учетной записи:
setspn -Q HTTP/<FQDN PAM>В выводе будет указана переназначенная учетная запись.
Проверьте список зарегистрированных SPN для учетной записи:
setspn -L <домен>\<учетная запись AD>
Сервер управления должен иметь доступ к контроллерам домена по порту 88 (TCP и UDP).
Настройка включает следующие этапы:
Подготовка сервисной учетной записи, которая используется для проверки билетов.
Регистрация SPN для каждого адреса, по которому пользователи открывают консоль PAM.
Подготовка файла
keytab, который используется для проверки билетов.ПредупреждениеФайл
keytabсодержит ключи сервисной учетной записи. Храните файл в защищенном месте и не передавайте его третьим лицам. При компрометации смените пароль сервисной учетной записи и сгенерируйте новый файлkeytab.Настройка аутентификации в мастере конфигурации.
Настройка браузера для входа в PAM по протоколу Kerberos.
Подготовка сервисной учетной записи Active Directory
Сервер управления на ОС Linux не присоединен к домену, поэтому у PAM нет собственной доменной учетной записи для проверки Kerberos-билетов. В этом случае используется отдельная сервисная учетная запись Active Directory. К ней привязывается файл keytab, с помощью которого PAM проверяет билеты пользователей при входе в консоль.
Действия выполняются на контроллере домена или на доменной машине с установленными средствами удаленного администрирования серверов (RSAT) или модулем ActiveDirectory для PowerShell.
- Active Directory
- PowerShell
- Откройте Active Directory — пользователи и компьютеры (Active Directory Users and Computers).
- Перейдите в нужное подразделение и создайте отдельную сервисную учетную запись, которая будет использоваться для проверки Kerberos-билетов.
- Правой кнопкой мыши нажмите на созданную учетную запись и выберите Свойства (Properties).
- В открывшемся окне перейдите на вкладку Учетная запись (Account).
- В списке Параметры учетной записи (Account options) выполните следующие действия:
- Включите опцию Для этой учетной записи требуется шифрование Kerberos AES 256 бит (This account supports Kerberos AES 256 bit encryption).
- Отключите опцию Использовать только типы шифрования Kerberos DES для этой учетной записи (Use only Kerberos DES encryption types for this account).
- Нажмите ОК.
Запустите PowerShell от имени администратора.
Создайте отдельную сервисную учетную запись, которая будет использоваться для проверки Kerberos-билетов:
New-ADUser -Name "<учетная запись AD>" -SamAccountName "<учетная запись AD>" `
-UserPrincipalName "<учетная запись AD>@<домен>" `
-AccountPassword (Read-Host -AsSecureString "Password") `
-PasswordNeverExpires $true -Enabled $trueПример командыNew-ADUser -Name "pam-ad-user" -SamAccountName "pam-ad-user" `
-UserPrincipalName "pam-ad-user@company.local" `
-AccountPassword (Read-Host -AsSecureString "Password") `
-PasswordNeverExpires $true -Enabled $trueЗадайте для сервисной учетной записи тип шифрования Kerberos AES-256:
Set-ADUser <учетная запись AD> -KerberosEncryptionType AES256
Регистрация SPN
Имя субъекта-службы (Service Principal Name, SPN) — уникальный идентификатор службы в сети. Протокол Kerberos использует SPN, чтобы привязать службу к учетной записи.
- Схема без балансировщика
- Схема с балансировщиком
Определите один основной FQDN, по которому пользователи будут открывать консоль PAM в браузере. Зарегистрируйте для этого адреса SPN в формате HTTP/<FQDN PAM> и свяжите его с сервисной учетной записью Active Directory.
Если пользователи открывают консоль PAM по общему (виртуальному) адресу балансировщика, зарегистрируйте SPN для этого адреса и свяжите его с общей сервисной учетной записью Active Directory.
Действия выполняются на контроллере домена или на доменной машине с установленными средствами удаленного администрирования серверов (RSAT) или модулем ActiveDirectory для PowerShell.
Запустите PowerShell от имени администратора.
Выполните команду:
setspn -S HTTP/<FQDN PAM> <домен>\<учетная запись AD>setspn -S HTTP/<FQDN балансировщика> <домен>\<учетная запись AD>Пример командыsetspn -S HTTP/pam.company.local PAM\pam-ad-userПримечаниеЗначение SPN должно быть уникальным в домене. Не регистрируйте тот же SPN для другой учетной записи.
Что делать, если SPN уже зарегистрирован
Если при регистрации SPN в выводе отображается ошибка
Duplicate SPN found, это значит, что указанный SPN уже зарегистрирован для другой учетной записи.Чтобы решить конфликт:
Выполните команду:
setspn -Q HTTP/<FQDN PAM>В выводе будет указана учетная запись, для которой сейчас зарегистрирован SPN.
Удалите SPN с этой учетной записи:
ПредупреждениеСогласуйте удаление SPN с администратором домена. Найденный SPN может использоваться другим сервисом.
setspn -D HTTP/<FQDN PAM> <домен>\<текущая учетная запись AD>Зарегистрируйте SPN для новой учетной записи:
setspn -S HTTP/<FQDN PAM> <домен>\<новая учетная запись AD>Убедитесь, что конфликта больше нет и SPN зарегистрирован для нужной учетной записи:
setspn -Q HTTP/<FQDN PAM>В выводе будет указана переназначенная учетная запись.
Проверьте список зарегистрированных SPN для учетной записи:
setspn -L <домен>\<учетная запись AD>
Подготовка файла keytab
Все серверы управления используют один и тот же файл keytab. Если вы изменили пароль сервисной учетной записи или FQDN PAM, сгенерируйте новый файл keytab.
Файл keytab хранит имя субъекта-службы (SPN) и ключи, сформированные из пароля сервисной учетной записи. С помощью этих ключей сервер управления проверяет Kerberos-билеты, которые предъявляет браузер.
Генерация keytab
Действия выполняются на контроллере домена или на доменной машине с установленными средствами удаленного администрирования серверов (RSAT) или модулем ActiveDirectory для PowerShell.
- Схема без балансировщика
- Схема с балансировщиком
Чтобы сгенерировать файл keytab, запустите PowerShell от имени администратора и выполните команду:
ktpass -princ HTTP/<FQDN PAM>@<REALM> `
-mapuser <домен\учетная запись AD> `
-crypto AES256-SHA1 `
-ptype KRB5_NT_PRINCIPAL `
-pass * `
-out <путь, куда сохранить keytab>
Если пользователи открывают консоль PAM по общему (виртуальному) адресу балансировщика, сгенерируйте файл keytab для общего адреса балансировщика.
Чтобы сгенерировать файл keytab, запустите PowerShell от имени администратора и выполните команду:
ktpass -princ HTTP/<FQDN балансировщика>@<REALM> `
-mapuser <домен\учетная запись AD> `
-crypto AES256-SHA1 `
-ptype KRB5_NT_PRINCIPAL `
-pass * `
-out <путь, куда сохранить keytab>
Сохраните полученный файл keytab на доверенном хосте с ограниченным доступом.
Пример и параметры команды
ktpass -princ HTTP/pam.company.local@COMPANY.LOCAL `
-mapuser PAM\pam-ad-user `
-crypto AES256-SHA1 `
-ptype KRB5_NT_PRINCIPAL `
-pass * `
-out http.keytab
| Параметр | Описание |
|---|---|
-princ | Полное имя субъекта Kerberos (principal), для которого формируется ключ. Укажите значение в формате HTTP/<FQDN PAM>@<REALM>REALM — область аутентификации в инфраструктуре Kerberos. Как правило, значение REALM совпадает с именем вашего домена Active Directory. |
-mapuser | Учетная запись Active Directory, из пароля которой формируется ключ в файле keytab. Пример: PAM\pam-ad-user. |
-crypto | Тип шифрования ключа. Укажите AES256-SHA1. |
-ptype | Тип субъекта Kerberos (principalType). Укажите KRB5_NT_PRINCIPAL — этот тип используется для идентификации пользователей и сервисных учетных записей. |
-pass | Пароль учетной записи Active Directory. Для интерактивного запроса пароля укажите *. Не рекомендуется вводить пароль в явном виде. |
-out | Путь или имя файла для сохранения keytab. Можно указать:
|
Не запускайте ktpass повторно без необходимости. Используйте только тот файл keytab, который вы сгенерировали при последнем запуске команды.
При повторной генерации обновите файл keytab в PAM через мастер конфигурации.
Проверка файла keytab
Проверка файла выполняется на доверенном хосте на ОС Linux с ограниченным доступом и установленными утилитами Kerberos.
Чтобы проверить сгенерированный файл keytab:
Загрузите копию файла
keytabна доверенный хост.В каталоге, где находится копия
keytab, создайте файлkrb5.confсо структурой:[libdefaults]
default_realm = <REALM>
dns_lookup_realm = false
dns_lookup_kdc = true
rdns = false
[domain_realm]
.<DNS-домен> = <REALM>
<DNS-домен> = <REALM>Пример и параметры файла
Пример файла[libdefaults]
default_realm = COMPANY.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true
rdns = false
[domain_realm]
.company.local = COMPANY.LOCAL
company.local = COMPANY.LOCALПараметр Описание default_realmИмя домена Active Directory. Имя домена должно совпадать со значением REALM, указанным вprincipalв файлеkeytab.dns_lookup_realmОпределить домен через DNS-запрос. Укажите false.dns_lookup_kdcОпределить адрес контроллера домена через DNS-запрос. Укажите true.rdnsИспользовать обратное DNS-разрешение (PTR-запись). Укажите false.[domain_realm]Правила сопоставления DNS-имен с доменом Kerberos: .<DNS-домен> = <REALM>— сопоставляет любой поддомен с областьюREALM.<DNS-домен> = <REALM>— сопоставляет имя корневого домена с областьюREALM.
В каталоге, где находятся файлы
keytabиkrb5.conf, выполните команду для получения билета:KRB5_CONFIG=./krb5.conf \
KRB5CCNAME=FILE:./<файл с билетом>.ccache \
kinit -V -kt <файл keytab> \
HTTP/<FQDN PAM>@<REALM>Для параметра
KRB5CCNAMEукажите имя файла, в который будет записан полученный билет.Убедитесь, что билет получен:
KRB5CCNAME=FILE:./<файл с билетом>.ccache klistЕсли в выводе отображается билет, файл
keytabсодержит актуальные ключи — ключи соответствуют текущему паролю сервисной учетной записи и номеру версии ключа (KVNO) в Active Directory.Если команда завершилась с ошибкой
Ошибка Возможная причина и решение Preauthentication failedФайл keytabне соответствует текущему паролю или номеру версии ключа (KVNO) на контроллере домена. Сгенерируйте файлkeytabзаново.Keytab contains no suitable keysВ файле keytabнет подходящего ключа: отсутствует ключ с типом шифрования, который поддерживает контроллер домена, либо ключ для указанногоprincipal. Проверьте содержимое файла с помощью команды .klist -kte <файл keytab>Server not found in Kerberos databaseКонтроллер домена не может найти запрашиваемый SPN. Убедитесь, что значения REALMиprincipalуказаны верно, а SPN зарегистрирован.Client not found in Kerberos databaseКонтроллер домена не может найти сервисную учетную запись. Убедитесь, что значение principalуказано верно.Cannot find KDC for realmХост, на котором выполняется проверка, не может найти контроллер домена для указанной области. Проверьте настройки DNS и доступность контроллера домена по порту 88 (TCP и UDP). После проверки удалите полученный билет из кеша:
KRB5CCNAME=FILE:./<файл с билетом>.ccache kdestroyУдалите на доверенном хосте файл
krb5.confи копиюkeytab.
Настройка аутентификации в мастере
Аутентификация по протоколу Kerberos включается в мастере конфигурации.
Откройте мастер конфигурации Indeed PAM.
Как открыть мастер
Перейдите в каталог с дистрибутивом PAM и выполните команду для запуска мастера:
sudo bash run-wizard.shПерейдите по URL-адресу, указанному в консоли после выполнения скрипта.
В поле Код доступа введите
Пример кода:AuthenticationCode, указанный в консоли после выполнения скрипта.vVHyTVRyKX5pxUKM6e1ZgCWEnOdXFdOy.Ограничение времениКод доступа действует два часа.
Нажмите Войти.
Выберите сценарий, например Изменение конфигурации PAM, и следуйте указаниям мастера.
На шаге Аутентификация выберите механизм аутентификации Kerberos.
Загрузите файл
keytab, сгенерированный с типом шифрования AES-256.Продолжите изменение конфигурации, следуя указаниям мастера.
После завершения работы в мастере аутентификация по протоколу Kerberos будет доступна на странице входа в консоль PAM.
Настройка браузера
Для входа в консоль PAM по протоколу Kerberos браузер должен передавать доменные учетные данные на адрес, по которому открывается консоль PAM. Для этого добавьте адрес PAM в список адресов, разрешенных для встроенной проверки подлинности Windows. Список задается политикой браузера AuthServerAllowlist.
Настройте политику AuthServerAllowlist и распространите ее на компьютеры пользователей через объект групповой политики Active Directory.
Действия выполняются на доменной машине с установленными средствами управления групповыми политиками (Group Policy Management Tools) или модулем GroupPolicy для PowerShell.
Запустите PowerShell от имени администратора.
Создайте объект групповой политики:
New-GPO -Name "<имя объекта политики>"Задайте политику
AuthServerAllowlistдля используемого браузера.- Google Chrome
- Microsoft Edge
- Яндекс Браузер
Set-GPRegistryValue -Name "<имя объекта политики>" `
-Key "HKLM\Software\Policies\Google\Chrome" `
-ValueName AuthServerAllowlist -Type String -Value "<адреса PAM>"Set-GPRegistryValue -Name "<имя объекта политики>" `
-Key "HKLM\Software\Policies\Microsoft\Edge" `
-ValueName AuthServerAllowlist -Type String -Value "<адреса PAM>"Set-GPRegistryValue -Name "<имя объекта политики>" `
-Key "HKLM\Software\Policies\Yandex\Browser" `
-ValueName AuthServerAllowlist -Type String -Value "<адреса PAM>"Для параметра
-Valueукажите адреса, по которым пользователи открывают консоль PAM. Поддерживаемые форматы:<FQDN PAM>— конкретные адреса PAM, напримерpam.company.local*.<DNS-суффикс>— все адреса в домене, например*.company.local*.<DNS-суффикс>, <FQDN PAM>— комбинированный список адресов, например*.company.local, pam.company.localРекомендуется указывать конкретные FQDN PAM. Используйте маску
*.<DNS-суффикс>только при необходимости — она применит политику для всех серверов указанного DNS-домена.
Свяжите объект групповой политики с доменом или подразделением, содержащим компьютеры пользователей:
New-GPLink -Name "<имя объекта политики>" -Target "<DN домена или подразделения>"Для параметра
-Targetукажите имя домена или подразделения в формате Distinguished Name (DN), напримерDC=company,DC=localилиOU=Workstations,DC=company,DC=local.
Политика применится при следующем обновлении групповых политик на компьютере пользователя. Если требуется применить политику сразу, на нужном компьютере остановите все процессы браузера и выполните gpupdate /force
Как проверить, применилась ли политика
Проверка применения политики выполняется на компьютере пользователя.
- Google Chrome
- Microsoft Edge
- Яндекс Браузер
- Откройте браузер Google Chrome и в адресной строке введите
chrome://policy. Откроется страница с политиками браузера. - Убедитесь, что в разделе Chrome Policies отображается политика AuthServerAllowlist.
- Откройте браузер Microsoft Edge и в адресной строке введите
edge://policy. Откроется страница с политиками браузера. - Убедитесь, что в разделе Microsoft Edge Policies отображается политика AuthServerAllowlist.
- Откройте Яндекс Браузер и в адресной строке введите
browser://policy. Откроется страница с политиками браузера. - Убедитесь, что в разделе Yandex Browser Policies отображается политика AuthServerAllowlist.
(Опционально) Запустите PowerShell от имени администратора и очистите кеш билетов:
klist purge(Опционально) Запросите билет для нужного FQDN PAM:
klist get HTTP/<FQDN PAM>
klistВ выводе появятся следующие билеты Kerberos:
- Ticket-Granting Ticket (TGT) — используется для получения сервисных билетов.
- Сервисный билет — используется для аутентификации в консоли PAM.
Вход в PAM
Пользователи из каталога Active Directory могут входить только по протоколу Kerberos.
- Откройте консоль пользователя или администратора.
- Нажмите Войти с доменной учетной записью.
- Если настроена двухфакторная аутентификация, подтвердите вход в консоль PAM.
При неудачной попытке входа свяжитесь с администратором PAM.