Girar os keytabs do SQL Server em Linux

Aplica-se a: SQL Server no Linux

Com base nas melhores práticas de segurança da sua organização, pode ser necessário alterar a senha regularmente da conta do Active Directory do Windows fornecida como network.privilegedadaccount em mssql.conf, ou de qualquer outra conta que tenha os nomes de entidade de serviço (SPNs) do 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 adutil ferramenta é usada para atualizar o keytab. O adutil comando deve ser executado em um computador ingressado no domínio. Para obter mais informações sobre adutil e como baixar a ferramenta, consulte Introdução ao adutil utilitário de 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ê define network.privilegedadaccount como 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 na máquina unida ao domínio.

  2. Obtenha ou renove o TGT (bilhete de concessão de tíquetes) 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 atual de kvno do 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 adutil e integrá-lo a mssql-conf, o que significa que você pode fazer o rodízio de keytab usando mssql-conf.

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

    su mssql
    
  2. Obtenha ou renove o TGT (bilhete de concessão de tíquetes) 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 keytab do SQL Server e os detalhes do 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 atual + 1.

    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 assegurar-se de obter o kvno atual para o usuário primeiro, e então atualizar o novo kvno de forma adequada, que será o kvno atual + 1.

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

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

    Você notará 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 reiniciar o SQL Server durante esta etapa, você poderá ignorar isso. Lembre-se também de alterar a senha no Active Directory.

    bash-4.4$ kinit privilegeduser@CONTOSO.COM
    Password for privilegeduser@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. To restart, 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)
    

Gire o keytab manualmente com adutil

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

Atualizar o keytab usando adutil adiciona uma entrada ao keytab atual. Por exemplo, se o número de kvno do comando anterior for 2, use o número de kvno3 ao atualizar o keytab. A seguir estão os adutil comandos 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
Parâmetro Description
-k O caminho para a 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ê vai atualizar a senha.
--kvno O valor precisa ser o kvno atual + 1. 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. Certifique-se de escolher a correta para o seu ambiente.

Verifique as entradas do keytab

Após atualizar o keytab, agora você deverá ver entradas para os novos e os anteriores valores de kvno para a mesma conta sqluser@CONTOSO.COM e os 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 para a mesma nova senha que você forneceu ao atualizar o keytab. A autenticação do Active Directory deve continuar a funcionar e sem a necessidade de reiniciar o serviço SQL Server.