Share via


Effectuer la rotation des keytabs pour SQL Server sur Linux

S’applique à :SQL Server - Linux

En fonction des bonnes pratiques de sécurité de votre organisation, vous devrez peut-être régulièrement effectuer la rotation du mot de passe pour le compte Windows Active Directory fourni comme network.privilegedadaccount dans mssql.conf, ou pour tout autre compte possédant des noms de principal de service (SPN) pour le service SQL Server. La méthode prise en charge pour modifier le mot de passe du compte est documentée dans cet article. La modification du mot de passe prend effet sans qu’il soit nécessaire de redémarrer le service SQL Server sur Linux.

L’outil adutil est utilisé pour mettre à jour le keytab. La commande adutil doit être exécutée à partir d’une machine jointe à un domaine. Pour plus d’informations sur adutil et la façon de télécharger l’outil, consultez Présentation de l’utilitaire adutil pour Active Directory.

Il est essentiel de mettre à jour le nouveau mot de passe dans le keytab avec le numéro kvno suivant avant de le mettre à jour dans Active Directory. L’utilisation du numéro kvno suivant permet d’éviter d’avoir à redémarrer le service SQL Server après la modification du mot de passe. Si vous mettez d’abord à jour le mot de passe dans Active Directory, puis que vous modifiez le fichier keytab, vous devrez redémarrer le service SQL Server pour garantir le bon fonctionnement de l’authentification Active Directory.

Scénario de rotation du keytab

Prenons un exemple. L’authentification Active Directory est déjà activée pour SQL Server sur Linux. Dans le fichier mssql.conf, vous avez défini network.privilegedadaccount sur sqluser. Le compte sqluser@CONTOSO.COM est déjà créé dans Active Directory. Le fichier keytab a également été créé à l’emplacement par défaut, /var/opt/mssql/secrets/mssql.keytab. Vous souhaitez désormais modifier le mot de passe pour sqluser@CONTOSO.COM. Procédez comme suit :

  1. Installez adutil sur la machine jointe au domaine.

  2. Obtenez ou renouvelez le ticket Kerberos TGT (Ticket-Granting Ticket) à l’aide de la commande kinit . Utilisez un compte privilégié pour la commande kinit. Le compte doit avoir l’autorisation de se connecter au domaine et doit également être en mesure de créer des comptes et des noms de principaux de service dans le domaine. Dans ce cas, nous utilisons le compte privilegeduser@CONTOSO.COM qui dispose des autorisations pour créer des comptes et des noms de principal de service dans notre domaine appelé CONTOSO.COM.

    kinit privilegeduser@CONTOSO.COM
    
  3. Une fois que vous avez exécuté kinit pour obtenir/renouveler le ticket TGT, interrogez le numéro kvno actuel de network.privilegedadaccount. Dans ce cas, il s’agit de sqluser@CONTOSO.COM.

    kvno sqluser@CONTOSO.COM
    

Vous pouvez choisir de renouveler le fichier keytab avec mssql-conf ou de renouveler manuellement le fichier keytab à l’aide de la commande adutil.

Renouvellement du fichier keytab avec mssql-conf

Vous pouvez installer adutil et l’intégrer à mssql-conf, et ainsi renouveler le fichier keytab à l’aide de mssql-conf.

  1. Connectez-vous en tant qu’utilisateur racine et basculez vers l’utilisateur mssql.

    su mssql
    
  2. Obtenez ou renouvelez le ticket Kerberos TGT (Ticket-Granting Ticket) à l’aide de la commande kinit . Utilisez un compte privilégié pour la commande kinit. Le compte doit avoir l’autorisation de se connecter au domaine et doit également être en mesure de créer des comptes et des noms de principaux de service dans le domaine. Dans ce cas, nous utilisons le compte privilegeduser@CONTOSO.COM qui dispose des autorisations pour créer des comptes et des noms de principal de service dans notre domaine appelé CONTOSO.COM.

    kinit privilegeduser@CONTOSO.COM
    
  3. Exécutez la commande mssql-conf, en fournissant le fichier keytab SQL Server et les informations relatives à network.privilegedadaccount. Dans cet exemple, privilegedadaccount est sqluser.

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

    À l’invite, entrez le nouveau mot de passe que vous souhaitez utiliser. L’option --use-next-kvno permet d’allouer le numéro de version de la clé actuel + 1.

    Facultatif : vous pouvez également utiliser l’option --kvno avec la commande mssql-confsetup-ad-keytab pour fournir un numéro de version de la clé spécifique. Vous devez veiller à obtenir d’abord le numéro de version de la clé actuel pour l’utilisateur, puis mettre à jour en conséquence le nouveau numéro de version de la clé, à savoir le numéro de version de la clé actuel + 1.

  4. Pour afficher la liste des clés du fichier keytab, utilisez la commande suivante :

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

    Comme vous pouvez le constater, le fichier keytab est mis à jour avec le numéro de version de la clé suivant pour les entrées utilisateur et SPN.

  5. Vous pouvez maintenant modifier le mot de passe de l’utilisateur sqluser. Voici un exemple.

    Important

    S’il vous est demandé de redémarrer SQL Server au cours de cette étape, vous pouvez ignorer l’invite. N’oubliez pas de modifier également le mot de passe dans 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)
    

Renouvellement manuel du fichier keytab avec adutil

Si vous souhaitez mettre à jour le fichier keytab manuellement à l’aide de la commande adutil, consultez les étapes suivantes.

Le fait de mettre à jour le fichier keytab à l’aide de la commande adutil ajoute une entrée dans le fichier keytab actuel. Par exemple, si le numéro kvno de la commande précédente est 2, utilisez le numéro kvno3 lors de la mise à jour du keytab. Voici les commandes adutil à exécuter.

  • Modifiez le numéro de port (-p), le nom d’hôte (-H), le chemin du fichier keytab (-k) et le numéro de version de la clé en fonction de votre environnement.
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 : chemin d’accès au keytab actuel utilisé par SQL Server et défini à l’aide de l’option network.kerberoskeytabfile dans le fichier mssql.conf.

-H : est le nom de domaine complet de l’hôte SQL Server.

-p : est le port que le service SQL Server doit écouter selon la configuration dans la première commande. Dans la deuxième commande, -p représente le compte network.privilegedadaccount dont vous allez mettre à jour le mot de passe.

kvno : la valeur doit être la valeur kvno actuelle + 1. La valeur kvno actuelle est obtenue à l’étape 3.

Une fois que vous avez exécuté les commandes précédentes, vous devez indiquer le type de chiffrement que vous souhaitez pour les entrées keytab. Assurez-vous de choisir celui qui convient à votre environnement.

Vérifier les entrées keytab

Après la mise à jour du keytab, vous devez maintenant voir les entrées dans le keytab pour kvno 3 (nouveau) et également kvno 2 (l’ancien) pour le même compte sqluser@CONTOSO.COM et les mêmes noms de principal du service. Vous pouvez exécuter la commande klist suivante pour vérifier les entrées dans le fichier keytab :

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

Changer le mot de passe du compte dans Active Directory

La dernière étape consiste à mettre à jour le mot de passe de network.privilegedadaccount ou le compte qui possède les noms SPN de SQL Server dans Windows Active Directory. Dans le scénario précédent, le mot de passe de sqluser@CONTOSO.COM doit être mis à jour dans Active Directory. Remplacez le mot de passe par le mot de passe <newpassword> que vous avez donné à la 3e étape de la section précédente. L’authentification Active Directory doit continuer à fonctionner, sans qu’il soit nécessaire de redémarrer le service SQL Server.