Búsqueda de sitios web

Creación de un archivo Keytab para la autenticación Kerberos en Active Directory


Muchos servicios de Linux (apache, nginx, etc.) pueden usar archivos keytab para la autenticación Kerberos en Active Directory sin ingresar una contraseña. El archivo keytab conserva los nombres de los principales de Kerberos y las claves cifradas correspondientes (obtenidas de las contraseñas de Kerberos). En este artículo, mostraremos cómo crear un archivo keytab para el SPN de una cuenta de Active Directory vinculada utilizando la herramienta ktpass.

La mayoría de las veces, se crea una cuenta de usuario de Active Directory separada para un servicio que requiere el uso de un archivo keytab. Sin embargo, también puede usar un objeto de computadora para hacerlo. Luego, el nombre del servicio está vinculado a la cuenta (ServicePrincipalName — SPN). La autenticación Kerberos utiliza SPN para asignar una instancia de servicio a una cuenta de AD (es por eso que las aplicaciones pueden autenticarse como servicios incluso si no conocen un nombre de usuario).

Primero, cree una cuenta de servicio en AD y establezca una contraseña conocida para ella. Puede crear una cuenta desde la consola gráfica ADUC (dsa.msc) o usando el cmdlet New-ADUser en PowerShell (desde el módulo 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

Habilite las opciones "El usuario no puede cambiar la contraseña" y "La contraseña nunca caduca" para la cuenta de servicio en la consola gráfica o en PowerShell:

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

En el siguiente paso, vincule un nombre principal de servicio (SPN) a la cuenta de usuario. No necesita realizar este paso por separado, ya que ktpass lo hace automáticamente al crear un archivo keytab (lo haré para que comprenda mejor el proceso).

Vincule el siguiente registro SPN a la cuenta web:

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

Muestre la lista de registros de SPN asociados con el usuario de AD:

setspn -L web

Para crear un archivo keytab, se utiliza el siguiente comando:

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

Successfully 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)

El comando ha creado un archivo keytab (c:\share\webt.keytab) para el registro SPN del servicio HTTP/www@test.com. El registro SPN está vinculado a la cuenta web con la contraseña especificada.

Asegúrese de que el registro SPN para el servicio se haya creado correctamente (si no lo creó manualmente):

setspn -Q */www.test.com@test.com

Puede ver que se encontró el registro de SPN (¡Se encontró SPN existente!). Está vinculado a la cuenta web.

Windows no tiene herramientas integradas para ver el contenido del archivo keytab. Pero si Java JRE está instalado en su computadora, puede usar klist.exe incluido en el paquete de distribución de Java.

cd "c:\Program Files\Java\jre1.8.0_181\bin"
klist.exe -K -e -t -k c:\PS\web_host.keytab
Key tab: c:\PS\web_host.keytab, 5 entries found.

Veamos el contenido del archivo keytab. Aquí se especifican SPN, claves, marcas de tiempo, un algoritmo de cifrado y una versión de clave (KVNO, número de versión de clave).

Al crear un archivo de tabla de claves, ktpass incrementa el valor del atributo msDS-KeyVersionNumber de la cuenta de usuario (puede verlo en el Editor de atributos de AD) y usa el valor como un KVNO en la tabla de tabla de claves.

Si cambia la contraseña de la cuenta, el valor del atributo aumenta en uno y todas las entradas de la tabla de claves con el KVNO anterior se vuelven inválidas (incluso si una nueva contraseña coincide completamente con la anterior). Si cambia la contraseña de un usuario en AD, tendrá que volver a generar un archivo keytab.

Un archivo keytab puede contener claves de diferentes SPN. Se agregan SPN y claves adicionales al archivo de tabla de claves usando los parámetros ktpass (

-in

,-

setupn

,

-setpass

).

Un uso posterior del archivo keytab que tiene depende del servicio al que se aplica. Por ejemplo, aquí puede aprender cómo usar un archivo keytab para una autenticación de usuario de SSO transparente en Zabbix. Además, no se olvide de mantener seguros sus archivos keytab (cualquiera que pueda leer el contenido del archivo keytab podrá usar cualquier clave de él).

Artículos relacionados