Багато сервісів 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
Наступний крок – прив’язка імені сервісу (SPN) до облікового запису користувача. Цей крок робити окремо не обов’язково, тому що його автоматично виконує утиліта ktpass при створенні keytab файлу (я залишу цей крок тут для загального розуміння процесу).
Прив’яжіть наступну SPN запис до облікового запису web:
setspn -A HTTP/www.test.com@test.com web
Виведіть список SPN записів, прив’язаних до користувача:
setspn -L web
Щоб створити 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
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,
У 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 (-в, -setupn, -прохід).
Подальше використання отриманого keytab файлу залежить від конкретного сервісу, де він застосовується. Наприклад, тут можна подивитися особливості використання keytab-файлу для прозорої SSO аутентифікації користувачів в системі моніторингу Zabbix. Також не забувайте про необхідність забезпечення безпеки keytab файлів (всі, хто можуть прочитати вміст keytab зможуть скористатися будь-якими ключами з нього).