Girar os keytabs do SQL Server em Linux

Aplica-se a: SQL Server – Linux

Com base nas melhores práticas de segurança da sua organização, talvez seja necessário girar a senha regularmente para a conta do Active Directory do Windows fornecida como network.privilegedadaccount no mssql.conf ou em qualquer outra conta que possua os SPN (nomes da entidade de serviço) para o serviço SQL Server. O método com suporte para alterar a senha da conta está documentado neste artigo. A alteração de senha entra em vigor sem a necessidade de reiniciar o serviço SQL Server no Linux.

A ferramenta adutil é usada para atualizar o keytab. O comando adutil deve ser executado em um computador ingressado no domínio. Para obter mais informações sobre o adutil e como baixar a ferramenta, confira Introdução ao adutil – Utilitário do Active Directory.

É essencial atualizar a nova senha no keytab com o próximo número kvno antes de atualizá-la no Active Directory. Usar o próximo número kvno impede que o serviço SQL Server precise ser reiniciado após a alteração de senha. Se você atualizar primeiro a senha no Active Directory e alterar o keytab, deverá reiniciar o serviço SQL Server para garantir que a autenticação do Active Directory funcione corretamente.

Cenário para girar o keytab

Vamos considerar um exemplo. A autenticação do Active Directory já está habilitada no SQL Server em Linux. No arquivo mssql.conf, você definiu o network.privilegedadaccount para sqluser. A conta sqluser@CONTOSO.COM já foi criada no Active Directory e o keytab também foi criado no local padrão /var/opt/mssql/secrets/mssql.keytab. Agora convém alterar a senha do sqluser@CONTOSO.COM. Aqui estão as etapas que você precisa seguir:

  1. Instale o adutil no computador ingressado no domínio.

  2. Obtenha ou renove o TGT (tíquete de concessão de tíquete) do Kerberos usando o comando kinit. Use uma conta com privilégios para o comando kinit. A conta precisa ter permissão para se conectar ao domínio e deve ser capaz de criar contas e SPNs no domínio. Neste caso, estamos usando a conta privilegeduser@CONTOSO.COM que tem permissões para criar contas e SPNs em nosso domínio chamado CONTOSO.COM.

    kinit privilegeduser@CONTOSO.COM
    
  3. Depois de executar kinit para obter/renovar o TGT, consulte o número kvno atual da network.privilegedadaccount. Nesse caso, use sqluser@CONTOSO.COM.

    kvno sqluser@CONTOSO.COM
    

Você pode optar por girar o keytab com mssql-conf ou girar o keytab manualmente usando adutil.

Girar o keytab com mssql-conf

Você pode instalar o adutil e integrá-lo ao mssql-conf, o que significa que você pode girar o keytab usando mssql-conf.

  1. Entre como o usuário raiz e alterne para o usuário mssql.

    su mssql
    
  2. Obtenha ou renove o TGT (tíquete de concessão de tíquete) do Kerberos usando o comando kinit. Use uma conta com privilégios para o comando kinit. A conta precisa ter permissão para se conectar ao domínio e deve ser capaz de criar contas e SPNs no domínio. Neste caso, estamos usando a conta privilegeduser@CONTOSO.COM que tem permissões para criar contas e SPNs em nosso domínio chamado CONTOSO.COM.

    kinit privilegeduser@CONTOSO.COM
    
  3. Execute o comando mssql-conf, fornecendo o SQL Server keytab e os detalhes de network.privilegedadaccount. Neste exemplo, privilegedadaccount é sqluser.

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

    Quando solicitado a fornecer uma senha, insira uma nova senha que você pretende usar. A opção --use-next-kvno aloca o kvno + 1 atual.

    Opcional: você também pode usar a opção --kvno com o comando mssql-conf setup-ad-keytab para fornecer um kvno específico. Você deve garantir que você obtenha o kvno atual para o usuário primeiro e atualize o novo kvno adequadamente, que seria o kvno + 1 atual.

  4. Você pode listar as chaves do keytab usando o comando:

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

    Você observará que o keytab é atualizado com o próximo kvno para as entradas de usuário e SPN.

  5. Agora você precisa mudar a senha para o usuário sqluser. Veja um exemplo.

    Importante

    Se for solicitado que você reinicie o SQL Server durante esta etapa, poderá ignorá-lo. Lembre-se também de alterar a senha no 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)
    

Girar o keytab manualmente com adutil

Se você quiser atualizar o keytab manualmente usando o adutil, consulte as etapas a seguir.

Atualizar o keytab usando o adutil adiciona uma entrada ao keytab atual. Por exemplo, se o número kvno do comando anterior for 2, use o kvno número 3 ao atualizar o keytab. A seguir estão os comandos do adutil que você precisa executar.

  • Altere o número da porta (-p), o nome do host (-H), o caminho para keytab (-k) e o número kvno para corresponder ao seu ambiente.
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: é o caminho para o keytab atual que está sendo usado pelo SQL Server e é definido usando a opção network.kerberoskeytabfile no arquivo mssql.conf.

-H: é o nome de domínio totalmente qualificado do host do SQL Server.

-p: é a porta que o serviço SQL Server está configurado para escutar no primeiro comando. No segundo comando, -p representa a network.privilegedadaccount para a qual você atualizará a senha.

kvno: o valor precisa ser o kvno + 1 atual. O valor kvno atual é obtido na etapa 3.

Depois de executar os comandos acima, você deverá fornecer sua escolha de tipo de criptografia para as entradas keytab. Garanta a escolha a correta para seu ambiente.

Verificar as entradas keytab

Depois de atualizar o keytab, agora você deverá ver as entradas no keytab para o kvno 3 (novo) e também o kvno 2 (antigo) para a mesma conta sqluser@CONTOSO.COM e SPNs. Você pode executar o seguinte comando klist para verificar as entradas no keytab:

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

Alterar a senha da conta no Active Directory

A última etapa é atualizar a senha da network.privilegedadaccount ou da conta que possui os SPNs do SQL Server no Windows Active Directory. No cenário anterior, teremos que atualizar a senha para o sqluser@CONTOSO.COM no Active Directory. Altere a senha do <newpassword> para aquela fornecida na etapa 3 na seção anterior. A autenticação do Active Directory deve continuar a funcionar e sem a necessidade de reiniciar o serviço SQL Server.