轮换 Linux 上的 SQL Server 的密钥表

适用于:Linux 上的 SQL Server

根据组织的最佳安全做法,可能需要定期轮换作为 network.privilegedadaccount 中的 mssql.conf 提供的 Windows Active Directory 帐户的密码,或者轮换拥有 SQL Server 服务的服务主体名称 (SPN) 的任何其他帐户的密码。 本文介绍用于更改帐户密码的受支持的方法。 密码更改生效,无需重启 Linux 上的 SQL Server 服务。

该工具 adutil 用于更新 keytab。 adutil命令必须从已加入域的计算机上运行。 有关如何下载该工具的详细信息adutil,请参阅adutil简介 - Active Directory实用工具

在 Active Directory 中更新新密码之前,请务必使用下一个 kvno 数值更新密钥表中的新密码。 使用下一个 kvno 数值,可以避免在修改密码后需要重新启动 SQL Server 服务。 如果先更新 Active Directory 中的密码,然后更改密钥表,则必须重启 SQL Server 服务,以确保 Active Directory 身份验证正常工作。

轮换密钥表的场景

我们分析一个示例。 Linux 上的 SQL Server 已启用 Active Directory 身份验证。 在 mssql.conf 文件中,将 network.privilegedadaccount 设置为 sqluser[email protected] 帐户已在 Active Directory 中创建,并且密钥表也已在默认位置 /var/opt/mssql/secrets/mssql.keytab 创建。 现在,你想要更改 [email protected] 的密码。 下面是需要执行的步骤:

  1. 在加入域的计算机上安装adutil 工具

  2. 使用 kinit 命令获取或续订 Kerberos TGT(票证授予票证)。 使用特权帐户执行 kinit 命令。 此帐户需要具有连接到域的权限,并且应该能够在域中创建帐户和 SPN。 在这种情况下,我们使用一个帐户 [email protected],它具有在我们称为 CONTOSO.COM 的域中创建帐户和 SPN 的权限。

    kinit [email protected]
    
  3. 运行 kinit 获取/续订 TGT 后,查询 network.privilegedadaccount 的当前 kvno 数值。 在本例中,该值为 [email protected]

    kvno [email protected]
    

您可以选择使用 mssql-conf 轮换 keytab,或者手动轮换 keytab,方法是使用adutil

使用 mssql-conf 轮换密钥表

你可以安装 adutil 并将其与 mssql-conf 集成,这意味着你可以使用 mssql-conf 轮换“keytab”。

  1. 以根用户身份登录并切换到 mssql 用户。

    su mssql
    
  2. 使用 kinit 命令获取或续订 Kerberos TGT(票证授予票证)。 使用特权帐户执行 kinit 命令。 此帐户需要具有连接到域的权限,并且应该能够在域中创建帐户和 SPN。 在这种情况下,我们使用一个帐户 [email protected],它具有在我们称为 CONTOSO.COM 的域中创建帐户和 SPN 的权限。

    kinit [email protected]
    
  3. 运行 mssql-conf 命令,提供 SQL Server keytab 和 network.privilegedadaccount 详细信息。 在本示例中,privilegedadaccountsqluser

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

    当系统提示输入密码时,请输入要使用的新密码。 --use-next-kvno 选项用于将当前的 kvno 增加 1。

    可选:您也可以在mssql-conf setup-ad-keytab命令中使用--kvno选项,以指定特定的kvno。 必须确保先获取用户的当前 kvno,然后相应地更新新的 kvno,即当前的 kvno + 1

  4. 可以使用命令来列出 keytab 的密钥:

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

    你会注意到,密钥表中更新了用户和 SPN 条目的下一个 kvno

  5. 现在可以更改 sqluser 用户的密码。 下面是一个示例。

    Important

    如果在此步骤中系统提示重启 SQL Server,可以忽略提示。 还要记得在 Active Directory 中更改密码

    bash-4.4$ kinit [email protected]
    Password for [email protected]:
    
    bash-4.4$ ./mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser --use-next-kvno
    [email protected]'s password:
    Confirm [email protected]'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 [email protected] (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:[email protected] (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/[email protected] (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1:[email protected] (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/[email protected] (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 [email protected] (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1.contoso.com:[email protected] (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/[email protected] (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/sql1:[email protected] (aes256-cts-hmac-sha1-96)
       5 12/30/2021 20:06:34 MSSQLSvc/[email protected] (aes256-cts-hmac-sha1-96)
    

使用 adutil 手动轮换密钥表

若要使用 adutil 手动更新 keytab,请参阅以下步骤。

使用 adutil 更新 keytab 会向当前 keytab 中添加一条条目。 例如,如果上一条命令中的 kvno 编号为 2,则在更新 keytab 时请使用 kvno 编号 3。 以下是您需要运行的 adutil 命令。

  • 更改端口号 (-p)、主机名 (-H)、密钥表路径 (-k) 和 kvno 数值,与环境相匹配。
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
参数 Description
-k SQL Server 当前使用的 keytab 路径,该路径通过 mssql.conf 文件中的 network.kerberoskeytabfile 选项设置。
-H SQL Server 主机的完全限定域名。
-p 第一个命令中配置的 SQL Server 服务监听端口。 在第二个命令中,-p 表示要更新其密码的 network.privilegedadaccount
kvno 值必须是目前的 kvno + 1。 可从步骤 3 获取当前 kvno 值。

运行上述命令后,必须为密钥表条目提供你选择的加密类型。 确保为环境选择正确的选项。

检查密钥表条目

更新密钥表后,现在应该会看到 kvno 3(新)密钥表中的条目,以及同一帐户 [email protected] 和 SNS 的 kvno 2(旧)。 可以运行下面的 klist 命令来检查密钥表中的条目:

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

更改 Active Directory 中的帐户密码

最后一步是更新 network.privilegedadaccount 或 Windows Active Directory 中 SQL Server SPN 的所属帐户的密码。 在上述场景中,必须更新 Active Directory 中 [email protected] 的密码。 将密码更改为在上一部分的步骤 3 中提供的 <newpassword>。 Active Directory 身份验证应继续工作,且无需重启 SQL Server 服务。