Создаем keytab-файл для Kerberos аутентификации в Active Directory

Многие сервисы Linux (apache, nginx и др.) могут использовать keytab файлы для Kerberos аутентификации в Active Directory без ввода пароля. В keytab файле хранятся имена принципалов Kerberos и соответствующие им зашифрованные ключи (ключи получаются из паролей Kerberos). В этой статье мы покажем, как создать keytab файл для SPN связанной учетной записи Active Directory с помощью утилит ktpass .

Чаще всего для службы, которая требует использование keytab файла создается отдельная учетная запись пользователя ActiveDirectory (но можно использовать и объект компьютера), затем к ней привязывается имя сервиса ( ServicePrincipalName SPN ). SPN используется аутентификацией Kerberos для сопоставления экземпляра сервиса с учетной записью в AD (благодаря этому приложения могут аутентифицироваться в качестве сервиса даже не зная имени пользователя).

Сначала создайте сервисную учетную запись в AD и задайте ей известный пароль. Можно создать учетную запись из графической консоли ADUC или с помощью PowerShell командлета New-ADUser (из модуля PowerShell для Active Directory ):

New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName " [email protected] " -Path "OU=Services,OU=SPB,DC=test,DC=com" –AccountPassword (ConvertTo-SecureString “Bergam0ttapoK” -AsPlainText -force) -Enabled $true

Включите для сервисной учетной записи опции “User cannot change password” и “ Password never expires “ через графическую консоль или PowerShell :

Get-ADUser web |  Set-ADUser -PasswordNeverExpires:$True -CannotChangePassword:$true

Следующий шаг – привязка имени сервиса (SPN) к учетной записи пользователя. Этот шаг делать отдельно не обязательно, т.к. его автоматически выполняет утилита ktpass при создании keytab файла (я оставлю этот шаг здесь для общего понимания процесса).

Привяжите следующую SPN запись к учетной записи web:

setspn -A HTTP/ [email protected] web

Выведите список SPN записей, привязанных к пользователю:

setspn -L web

Чтобы создать keytab файл используется следующая команда:

ktpass -princ HTTP/ [email protected] -mapuser web -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass Bergam0ttapoK -target dc01.test.com -out c:psweb_host.keytab

Successfully mapped HTTP/www.test.com to web._x000D_Password successfully set!_x000D_Key created._x000D_Key created._x000D_Key created._x000D_Key created._x000D_Key created._x000D_Output keytab to c:psweb_host.keytab:_x000D_Keytab version: 0x502_x000D_keysize 53 HTTP/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x73f868856e046449)_x000D_keysize 53 HTTP/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x3 (DES-CBC-MD5) keylength 8 (0x73f868856e046449)_x000D_keysize 61 HTTP/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x17 (RC4-HMAC) keylength 16 (0x9365b81e20c6137186d956c06ade2e77)_x000D_keysize 77 HTTP/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x12 (AES256-SHA1) keylength 32 (0x16b6c95e8047e7e70b1dc3cd502353df_x000D_5eeab2c24d4097c41165b0ca65b9b31f)_x000D_keysize 61 HTTP/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x11 (AES128-SHA1) keylength 16 (0x72c8b1cde771e59b6f1bc6501d614e32)_x000D_

Данная команда создала keytab файл (c:psweb_host.keytab) для SPN записи сервиса HTTP/ [email protected] . При этом SPN запись привязывается к учетной записи web с указанным паролем.

Проверьте, что для SPN записи службы была создана успешно (если вы не создавали ее вручную):

setspn -Q */ [email protected]
Видно, что SPN запись найдена (Existing SPN found!). Она привязана к учетной записи web,

В Windows нет встроенных средств для просмотра содержимого keytab файла. Но если, у вас а компьютере установлена версия Java JRE , вы можете воспользоваться утилитой klist.exe , которая входит в комплект java.

cd "c:Program FilesJavajre1.8.0_181bin"
klist.exe -K -e -t -k c:PSweb_host.keytab

Key tab: c:PSweb_host.keytab, 5 entries found.

Посмотрим на содержимое key-tab файла. Здесь хранятся имена SPN, ключи, временные метки, алгоритм шифрование и версия ключа (KVNO — key version number).

При создании keytab файла утилита ktpass увеличивает значение атрибута msDS-KeyVersionNumber учетной записи (можно посмотреть в редакторе атрибутов AD ) и использует это значение в качестве номера KVNO в keytab таблице.

При смене пароля учетной записи значение этого атрибута увеличивается на единицу, при этом все keytab записи с предыдущим номером KVNO становятся невалидными (даже если старый и новый пароли совпадают). Если пароль пользователя в AD изменится , то keytab-файл придется сгенерировать заново.

В одном keytab файле могут хранится ключи нескольких SPN. Дополнительные имена SPN и ключи добавляются в keytab файл с помощью отдельных параметров утилиты ktpass ( -in , -setupn , -setpass ).

Дальнейшее использование полученного keytab файла зависит от конкретного сервиса, где он применяется. Например, здесь можно посмотреть особенности использования keytab-файла для прозрачной SSO аутентификации пользователей в системе мониторинга Zabbix . Также не забывайте о необходимости обеспечения безопасности keytab файлов (все, кто могут прочитать содержимое keytab смогут воспользоваться любыми ключами из него).

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 недели ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 недели ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 недели ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 недели ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 недели ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 недели ago