Протокол Kerberos
Kerberos — протокол аутентификации, при котором пользователь получает у контроллера домена (Центра распределения ключей, KDC) цифровой документ (билет) и предъявляет его нужной службе, чтобы получить к ней доступ.
Протокол Kerberos позволяет пользователям Active Directory входить в консоль Indeed PAM под доменной учетной записью: пользователю не нужно вводить пароль, для аутентификации используется выданный билет.
- Аутентификация Kerberos поддерживается только для одного каталога Active Directory. Если у вас подключены другие каталоги, отключите их в мастере конфигурации.
- При настроенной аутентификации Kerberos вход в PAM по логину и паролю доступен только для внутренних пользователей.
- Время на сервере управления, контроллере домена и компьютере пользователя должно быть синхронизировано. Если время расходится, контроллер домена может посчитать билеты недействительными. Подробнее — в документации Microsoft.
Настройка аутентификации
В зависимости от конфигурации вашей инсталляции PAM выберите сценарий настройки.
- Сервер управления на ОС Windows
- Сервер управления на ОС Linux
Если в вашей инсталляции сервер управления работает на ОС Windows, настройка включает следующие этапы:
- Проверка SPN для каждого адреса, по которому пользователи открывают консоль PAM.
- Настройка аутентификации в мастере.
- Настройка браузера для входа по протоколу Kerberos.
Сервер управления на ОС Windows введен в домен, поэтому создавать файл keytab не требуется.
Проверка SPN
Имя субъекта-службы (Service Principal Name, SPN) — уникальный идентификатор службы в сети. Протокол Kerberos использует SPN, чтобы привязать службу к учетной записи.
- Схема без балансировщика
- Схема с балансировщиком
Действия выполняются на контроллере домена или на доменной машине с установленными средствами удаленного администрирования серверов (RSAT) или модулем ActiveDirectory для PowerShell.
Для DNS-имени сервера управления SPN регистрируется автоматически для учетной записи компьютера, если выполняются следующие условия:
- Сервер управления введен в домен.
- В настройках проверки подлинности Windows (Windows Authentication) отключено использование учетных данных пула приложений (для параметра
useAppPoolCredentialsуказаноFalse).
Если консоль PAM открывается по виртуальному адресу балансировщика или алиасу, который не совпадает с DNS-именем сервера управления, зарегистрируйте SPN вручную.
Убедитесь, что SPN для каждого FQDN PAM зарегистрирован только для одной сервисной учетной записи:
Откройте PowerShell от имени администратора.
Выполните команду:
setspn -Q */<FQDN PAM>В выводе должна быть указана одна учетная запись, для которой зарегистрирован SPN. В данном случае это учетная запись компьютера сервера управления в формате
<домен>\<DNS-имя сервера управления>$.Если SPN не найден или зарегистрирован сразу для нескольких учетных записей, обратитесь к администратору домена.
Если пользователи открывают консоль PAM по общему (виртуальному) адресу балансировщика, SPN не регистрируется автоматически, так как виртуальное имя не совпадает с DNS-именем сервера управления.
Чтобы зарегистрировать SPN:
Назначьте сервисную учетную запись удостоверением пула приложений
Indeed.PAM.Idp.Как назначить учетную запись
ПримечаниеДействия выполняются на всех серверах управления.
- Запустите Диспетчер служб IIS (IIS Manager).
- В дереве подключений выберите Пулы приложений (Application Pools).
- Правой кнопкой мыши нажмите на пул
Indeed.PAM.Idpи выберите Дополнительные параметры (Advanced Settings). - В блоке Модель процесса (Process Model) напротив поля Удостоверение (Identity) нажмите
.
- Выберите Настраиваемая учетная запись (Custom account) и укажите нужную сервисную учетную запись. Имя пользователя укажите в формате
ДОМЕН\Имя учетной записи. - Нажмите ОК.
Разрешите IIS использовать удостоверение пула
Indeed.PAM.Idpдля проверки билетов.Как использовать
Indeed.PAM.Idpдля проверки билетовПримечаниеДействия выполняются на всех серверах управления.
В дереве подключений выберите Сайты (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) и нажмите Добавить.
Изменить порядок провайдеров можно с помощью Переместить выше (Move Up) и Переместить ниже (Move Down).
Перейдите в Пулы приложений (Application Pools), выберите
Indeed.PAM.Idpи на правой панели Действия (Actions) нажмите Перезапуск (Recycle).
Зарегистрируйте SPN для сервисной учетной записи, от имени которой работает пул приложений
Indeed.PAM.Idp.Как зарегистрировать SPN вручную
ПримечаниеДействия выполняются на контроллере домена или на доменной машине с установленными средствами удаленного администрирования серверов (RSAT) или модулем
ActiveDirectoryдля PowerShell.Чтобы зарегистрировать SPN:
Запустите PowerShell от имени администратора.
Выполните команду:
setspn -S HTTP/<FQDN PAM> <домен>\<учетная запись 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>
Если в вашей инсталляции сервер управления работает на ОС Linux, настройка включает следующие этапы:
Подготовка сервисной учетной записи, которая используется для проверки билетов.
Регистрация SPN для каждого адреса, по которому пользователи открывают консоль PAM.
Подготовка файла
keytab, который используется для проверки билетов.ПредупреждениеФайл
keytabсодержит ключи сервисной учетной записи. Храните файл как секрет — не передавайте его третьим лицам и не храните в общих файловых хранилищах. При компрометации смените пароль сервисной учетной записи и сгенерируйте новый файлkeytab.Настройка аутентификации в мастере.
Настройка браузера для входа по протоколу 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.
Чтобы зарегистрировать SPN:
Запустите PowerShell от имени администратора.
Выполните команду:
setspn -S HTTP/<FQDN PAM> <домен>\<учетная запись 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 и доступность контроллера домена. После проверки удалите полученный билет из кеша:
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-суффикс>— все адреса PAM в домене, например*.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.