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

Найчастіше для служби, яка вимагає використання keytab файлу створюється окремий обліковий запис користувача ActiveDirectory (але можна використовувати і об’єкт комп’ютера), потім до неї прив’язується ім’я сервісу (ServicePrincipalNameСПН). SPN використовується аутентификацией Kerberos для зіставлення примірника сервісу з обліковим записом в AD (завдяки цьому додатки можуть аутентифицироваться в якості сервісу навіть не знаючи імені користувача).

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

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

Увімкніть для сервісної облікового запису опції “User can not change password” і “Password never expires” через графічну консоль або PowerShell:

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

атрибути користувача ad

Наступний крок – прив’язка імені сервісу (SPN) до облікового запису користувача. Цей крок робити окремо не обов’язково, тому що його автоматично виконує утиліта ktpass при створенні keytab файлу (я залишу цей крок тут для загального розуміння процесу).

Прив’яжіть наступну SPN запис до облікового запису web:

setspn -A HTTP/www.test.com@test.com web

Виведіть список SPN записів, прив’язаних до користувача:

setspn -L web

setspn - вручну прив'язати SPN запис до користувача

Щоб створити keytab файл використовується наступна команда:

ktpass -princ HTTP/www.test.com@TEST.COM -mapuser web -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass Bergam0ttapoK -target dc01.test.com -out c:psweb_host.keytab

ktpass створити keytab файл

Successfully mapped HTTP/www.test.com to web.
Password successfully set!
Key created.
Key created.
Key created.
Key created.
Key created.
Output keytab to c:psweb_host.keytab:
Keytab version: 0x502
keysize 53 HTTP/www.test.com@test.com ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x73f868856e046449)
keysize 53 HTTP/www.test.com@test.com ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x3 (DES-CBC-MD5) keylength 8 (0x73f868856e046449)
keysize 61 HTTP/www.test.com@test.com ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x17 (RC4-HMAC) keylength 16 (0x9365b81e20c6137186d956c06ade2e77)
keysize 77 HTTP/www.test.com@test.com ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x12 (AES256-SHA1) keylength 32 (0x16b6c95e8047e7e70b1dc3cd502353df
5eeab2c24d4097c41165b0ca65b9b31f)
keysize 61 HTTP/www.test.com@test.com ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x11 (AES128-SHA1) keylength 16 (0x72c8b1cde771e59b6f1bc6501d614e32)

Дана команда створила keytab файл (c: ps web_host.keytab) для SPN записи сервісу HTTP/www@test.com. При цьому SPN запис прив’язується до облікового запису web із зазначеним паролем.

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

setspn -Q */www.test.com@test.com
Видно, що SPN запис знайдений (Existing SPN found!). Вона прив’язана до облікового запису web,

setspn -Q Існуючий SPN знайдений

У 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.

klist.exe висновок вмісту keytab файлу spn записи в windows

Подивимося на вміст key-tab файлу. Тут зберігаються імена SPN, ключі, тимчасові мітки, алгоритм шифрування і версія ключа (KVNO – key version number).

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

атрибут msDS-KeyVersionNumbe

При зміні пароля облікового запису значення цього атрибута збільшується на одиницю, при цьому всі keytab записи з попереднім номером KVNO стають невалидность (навіть якщо старий і новий паролі збігаються). Якщо пароль користувача в AD зміниться, то keytab-файл доведеться згенерувати заново.

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *