Rotar archivos keytab para SQL Server en Linux

Se aplica a:SQL Server: Linux

En función de los procedimientos recomendados de seguridad de su organización, es posible que deba rotar la contraseña con regularidad para la cuenta de Windows Active Directory proporcionada como network.privilegedadaccount en mssql.conf, o bien para cualquier otra cuenta que tenga los nombres de entidad de seguridad de servicio (SPN) para el servicio SQL Server. El método admitido para cambiar la contraseña de la cuenta se documenta en este artículo. El cambio de contraseña se aplica sin necesidad de reiniciar SQL Server en Linux.

La herramienta adutil se usa para actualizar el archivo keytab. El comando adutil debe ejecutarse desde una máquina unida a un dominio. Para obtener más información sobre adutil y cómo descargar la herramienta, vea Introducción a adutil: utilidad de Active Directory Utility.

Es fundamental actualizar la nueva contraseña en el archivo keytab con el siguiente número kvno antes de actualizarla en Active Directory. Al usar el siguiente número kvno, se impide que haya que reiniciar el servicio SQL Server después del cambio de contraseña. Si actualiza primero la contraseña en Active Directory y, a continuación, cambia el archivo keytab, debe reiniciar el servicio SQL Server para asegurarse de que la autenticación de AD funcione correctamente.

Escenario para rotar el archivo keytab

Veamos un ejemplo. La autenticación de Active Directory ya está habilitada para el servicio SQL Server en Linux. En el archivo mssql.conf, ha establecido network.privilegedadaccount en sqluser. La cuenta sqluser@CONTOSO.COM ya se ha creado en Active Directory y el archivo keytab también se ha creado en la ubicación predeterminada /var/opt/mssql/secrets/mssql.keytab. Ahora quiere cambiar la contraseña para sqluser@CONTOSO.COM. Estos son los pasos que debe seguir:

  1. Instale adutil en la máquina unida a un dominio.

  2. Obtenga o renueve el vale de concesión de vales (TGT) de Kerberos mediante el comando kinit. Use una cuenta con privilegios para el comando kinit. La cuenta debe tener permiso para conectarse al dominio y también debe ser capaz de crear cuentas y SPN en el dominio. En este caso, se usa la cuenta privilegeduser@CONTOSO.COM que tiene permisos para crear cuentas y SPN en nuestro dominio llamado CONTOSO.COM.

    kinit privilegeduser@CONTOSO.COM
    
  3. Una vez que haya ejecutado kinit para obtener o renovar el TGT, consulte el número kvno actual de network.privilegedadaccount. En este caso, es sqluser@CONTOSO.COM.

    kvno sqluser@CONTOSO.COM
    

Puede optar por rotar el archivo keytab con mssql-conf o rotar el archivo keytab manualmente mediante adutil.

Rotación de keytab con mssql-conf

Puede instalar adutil e integrarlo con mssql-conf, lo que significa que puede rotar el archivo keytab mediante mssql-conf.

  1. Inicie sesión como usuario raíz y cambie al usuario mssql.

    su mssql
    
  2. Obtenga o renueve el vale de concesión de vales (TGT) de Kerberos mediante el comando kinit. Use una cuenta con privilegios para el comando kinit. La cuenta debe tener permiso para conectarse al dominio y también debe ser capaz de crear cuentas y SPN en el dominio. En este caso, se usa la cuenta privilegeduser@CONTOSO.COM que tiene permisos para crear cuentas y SPN en nuestro dominio llamado CONTOSO.COM.

    kinit privilegeduser@CONTOSO.COM
    
  3. Ejecute el comando mssql-conf y proporcione los detalles del archivo keytab de SQL Server y network.privilegedadaccount. En este ejemplo, privilegedadaccount es sqluser.

    ./mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser --use-next-kvno'
    

    Cuando se le solicite una contraseña, escriba una nueva contraseña que quiera usar. La opción --use-next-kvno asigna el actual kvno + 1.

    Opcional: también puede usar la opción --kvno con el comando mssql-confsetup-ad-keytab para proporcionar un kvno específico. Debe asegurarse de obtener primero el kvno actual para el usuario y, a continuación, actualizar el nuevo kvno en consecuencia, que sería el actual kvno + 1.

  4. Puede enumerar las claves del archivo keytab mediante el comando:

    klist -kte /var/opt/mssql/secrets/mssql.keytab
    

    Observará que el archivo keytab se actualiza con el siguiente kvno para las entradas de usuario y SPN.

  5. Ahora puede cambiar la contraseña del usuario sqluser. Este es un ejemplo.

    Importante

    Si se le pide que reinicie SQL Server durante este paso, puede omitirlo. Recuerde también cambiar la contraseña en Active Directory.

    bash-4.4$ kinit privilegedaccount@CONTOSO.COM
    Password for privilegedaccount@CONTOSO.COM:
    
    bash-4.4$ ./mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser --use-next-kvno
    sqluser@contoso.com's password:
    Confirm sqluser@contoso.com's password:
    
    SQL Server needs to be restarted in order to adopt the new AD configuration, please run 'systemctl restart mssql-server.service'.
    
    bash-4.4$ klist -kte /var/opt/mssql/secrets/mssql.keytab
    Keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
    

Rotación manual del archivo keytab con adutil

Si desea actualizar el archivo keytab manualmente mediante adutil, consulte los pasos siguientes.

Al actualizar el archivo keytab mediante adutil, se agrega una entrada al archivo keytab actual. Por ejemplo, si el número kvno del comando anterior es 2, use el número kvno3 al actualizar el archivo keytab. A continuación verá los comandos adutil que debe ejecutar.

  • Cambie el número de puerto (-p), el nombre de host (-H), la ruta de acceso a keytab(-k) y el número kvno para que coincidan con su entorno.
adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H mssql.contoso.com --password '<newpassword>' -s MSSQLSvc --kvno 3
adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password '<newpassword>' --kvno 3

-k: es la ruta de acceso al archivo keytab actual que usa SQL Server y se establece mediante la opción network.kerberoskeytabfile en el archivo mssql.conf.

-H: es el nombre de dominio completo del host de SQL Server.

-p: es el puerto en el que el servicio SQL Server está configurado para escuchar en el primer comando. En el segundo comando, -p representa la cuenta network.privilegedadaccount para la que va a actualizar la contraseña.

kvno: el valor debe ser el número kvno actual + 1. El valor kvno actual se obtiene del paso 3.

Una vez ejecutados los comandos anteriores, debe proporcionar el tipo de cifrado que prefiera para las entradas de keytab. Asegúrese de elegir el adecuado para su entorno.

Comprobación de las entradas de keytab

Después de actualizar el archivo keytab, ahora debería ver las entradas de keytab para kvno 3 (nuevo) y también para kvno 2 (anterior) correspondientes a la misma cuenta sqluser@CONTOSO.COM y a los mismos SPN. Puede ejecutar el comando klist siguiente para comprobar las entradas de keytab:

klist -kte /var/opt/mssql/secrets/mssql.keytab

Cambio de la contraseña de la cuenta en Active Directory

El último paso es actualizar la contraseña de network.privilegedadaccount o la cuenta que posee los SPN de SQL Server en Windows Active Directory. En el escenario anterior, tenemos que actualizar la contraseña de sqluser@CONTOSO.COM en Active Directory. Cambie la contraseña de <newpassword> por la que proporcionó en el paso 3 de la sección anterior. La autenticación de Active Directory debería seguir funcionando sin necesidad de reiniciar el servicio SQL Server.