Создание файла Keytab для аутентификации Kerberos в Active Directory
Многие службы Linux (apache, nginx и т. д.) могут использовать файлы keytab для аутентификации Kerberos в Active Directory без ввода пароля. В файле keytab хранятся имена участников Kerberos и соответствующие зашифрованные ключи (полученные из паролей Kerberos). В этой статье мы покажем, как создать файл keytab для SPN связанной учетной записи Active Directory с помощью инструмента ktpass.
Чаще всего для службы, требующей использования файла keytab, создается отдельная учетная запись пользователя Active Directory. Однако для этого вы также можете использовать компьютерный объект. Тогда имя службы привязывается к учетной записи (ServicePrincipalName - SPN). SPN используется аутентификацией Kerberos для сопоставления экземпляра службы с учетной записью AD (именно поэтому приложения могут аутентифицироваться как службы, даже если они не знают имени пользователя).
Сначала создайте служебную учетную запись в AD и задайте для нее известный пароль. Вы можете создать учетную запись из графической консоли ADUC (dsa.msc) или с помощью командлета New-ADUser в PowerShell (из модуля PowerShell Active Directory):
New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "web@test.com" -Path "OU=Services,OU=Munich,OU=DE,DC=test,DC=com" -AccountPassword (ConvertTo-SecureString “Sup6r!Pa$s” -AsPlainText -force) -Enabled $trueВключите параметры «Пользователь не может изменить пароль» и «Срок действия пароля не истекает» для учетной записи службы в графической консоли или в 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, связанных с пользователем AD:
setspn -L webДля создания файла keytab используется следующая команда:
ktpass -princ HTTP/www.test.com@TEST.COM -mapuser web -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass Sup6r!Pa$s -target mundc01.test.com -out c:\share\web.keytabSuccessfully mapped HTTP/www.test.com to web.
Password successfully set!
Key created.
Output keytab to c:\share\webt.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)Команда создала файл keytab (c:\share\webt.keytab) для записи SPN службы HTTP/www@test.com. Запись SPN привязана к веб-учетной записи с указанным паролем.
Убедитесь, что запись SPN для службы успешно создана (если вы не создавали ее вручную):
setspn -Q */www.test.com@test.comВы увидите, что запись SPN найдена (Существующий SPN найден!). Он привязан к веб-аккаунту.
В Windows нет встроенных инструментов для просмотра содержимого файла keytab. Но если на вашем компьютере установлена Java JRE, вы можете использовать klist.exe, входящий в дистрибутив Java.
cd "c:\Program Files\Java\jre1.8.0_181\bin"
klist.exe -K -e -t -k c:\PS\web_host.keytabKey tab: c:\PS\web_host.keytab, 5 entries found.Давайте посмотрим содержимое файла keytab. Здесь указываются SPN, ключи, временные метки, алгоритм шифрования и версия ключа (КВНО — номер версии ключа).
При создании файла таблицы ключей ktpass увеличивает значение атрибута msDS-KeyVersionNumber учетной записи пользователя (его можно увидеть в редакторе атрибутов AD) и использует это значение в качестве KVNO в таблице таблицы ключей.
При смене пароля учетной записи значение атрибута увеличивается на единицу, а все записи кейтаба с предыдущим КВНО становятся недействительными (даже если новый пароль полностью соответствует старому). Если пароль пользователя в AD изменится, вам придется заново создать файл keytab.
Файл keytab может хранить ключи разных SPN. Дополнительные имена участников-служб и ключи добавляются в файл keytab с помощью параметров ktpass (
-in,-
setupn,
-setpass).
Дальнейшее использование полученного файла keytab зависит от сервиса, к которому он применяется. Например, здесь вы можете узнать, как использовать файл keytab для прозрачной аутентификации пользователя SSO в Zabbix. Кроме того, не забывайте о безопасности файлов ключей (любой, кто сможет прочитать содержимое файла ключей, сможет использовать любые ключи из него).





