Поворот ключевых элементов для SQL Server на Linux

Применимо к:SQL Server — Linux

На основе рекомендаций по безопасности организации может потребоваться регулярно менять пароль для учетной записи Windows Active Directory, предоставленной как network.privilegedadaccount в mssql.conf, или любой другой учетной записи, которая владеет именами субъектов-служб (SPN) для службы SQL Server. Поддерживаемый способ изменения пароля к учетной записи описан в этой статье. Изменение пароля вступает в силу без необходимости перезапускать службу SQL Server на Linux.

Средство adutil используется для обновления ключа. Команда adutil должна выполняться с компьютера, присоединенного к домену. Дополнительные сведения о adutil и о том, как скачать средство, см. в разделе "Введение в adutil — служебная программа Active Directory".

Важно обновить новый пароль в keytab следующим номером kvno , прежде чем обновлять его в Active Directory. Использование следующего номера kvno позволяет избежать перезапуска службы SQL Server после изменения пароля. Если сначала обновить пароль в Active Directory, а затем изменить ключ, необходимо перезапустить службу SQL Server, чтобы убедиться, что проверка подлинности Active Directory работает правильно.

Сценарий смены keytab

Рассмотрим пример. Проверка подлинности Active Directory уже включена для SQL Server на Linux. В файле mssql.conf вы установили для network.privilegedadaccoun значение sqluser. Учетная запись sqluser@CONTOSO.COM уже создана в Active Directory, а ключи также были созданы в расположении /var/opt/mssql/secrets/mssql.keytabпо умолчанию. Теперь необходимо изменить пароль для sqluser@CONTOSO.COM. Ниже приведены шаги, которые необходимо выполнить.

  1. Установите adutil на компьютер, присоединенный к домену.

  2. Получите или продлите билет предоставления билета (TGT) Kerberos с помощью команды kinit. Для выполнения команды kinit используйте привилегированную учетную запись. Учетная запись должна иметь разрешение на подключение к домену, а также возможность создавать учетные записи и имена субъектов-служб в домене. В этом случае мы используем учетную запись privilegeduser@CONTOSO.COM , которая имеет разрешения на создание учетных записей и имен субъектов-служб в нашем домене с именем CONTOSO.COM.

    kinit privilegeduser@CONTOSO.COM
    
  3. Когда вы выполните kinit, чтобы получить или обновить TGT, запросите текущий номер kvno учетной записи network.privilegedadaccount. В этом случае он выглядит так: sqluser@CONTOSO.COM.

    kvno sqluser@CONTOSO.COM
    

Вы можете повернуть ключ с помощью mssql-conf или повернуть ключ вручную с помощью adutil.

Смена ключа с помощью mssql-conf

Вы можете установить adutil и интегрировать его с mssql-conf, что означает, что вы можете повернуть keytab с помощью mssql-conf.

  1. Войдите в качестве корневого пользователя и переключитесь на mssql пользователя.

    su mssql
    
  2. Получите или продлите билет предоставления билета (TGT) Kerberos с помощью команды kinit. Для выполнения команды kinit используйте привилегированную учетную запись. Учетная запись должна иметь разрешение на подключение к домену, а также возможность создавать учетные записи и имена субъектов-служб в домене. В этом случае мы используем учетную запись privilegeduser@CONTOSO.COM , которая имеет разрешения на создание учетных записей и имен субъектов-служб в нашем домене с именем CONTOSO.COM.

    kinit privilegeduser@CONTOSO.COM
    
  3. Выполните команду mssql-conf, указав ключ SQL Server и сведения о network.privilegedadaccount. В этом примере privilegedadaccount используется sqluser.

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

    При появлении запроса на ввод пароля введите новый пароль, который вы планируете использовать. Параметр --use-next-kvno выделяет текущий квно + 1.

    Необязательно. Вы также можете использовать --kvno параметр с командой mssql-confsetup-ad-keytab для предоставления определенного квно. Сначала необходимо убедиться, что вы получите текущий квно для пользователя, а затем обновите новый квно соответственно, который будет текущим квно + 1.

  4. Вы можете перечислить ключи keytab с помощью команды:

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

    Вы заметите, что ключ обновляется следующим квно для записей пользователя и участника-службы.

  5. Теперь вы можете изменить пароль для sqluser пользователя. Приведем пример.

    Важно!

    Если вам будет предложено перезапустить SQL Server на этом шаге, его можно игнорировать. Не забудьте также изменить пароль в 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)
    

Смена ключа вручную с помощью adutil

Если вы хотите вручную обновить keytab с помощью adutil, выполните следующие действия.

Обновление keytab с помощью adutil добавляет запись в текущую keytab. Например, если номер kvno, полученный после выполнения предыдущей команды, — 2, при обновлении keytab используйте номер kvno3. Ниже приведены команды adutil , которые необходимо выполнить.

  • Измените номер порта (-p), имя узла (-H), путь к keytab (-k) и номер квно, чтобы соответствовать вашей среде.
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 — путь к текущему файлу keytab, который используется SQL Server и задается с помощью параметра network.kerberoskeytabfile в файле mssql.conf.

-H — полное доменное имя узла SQL Server.

-p — порт, на ожидание передачи данных через который настроена служба SQL Server с помощью первой команды. Во второй команде -p представляет network.privilegedadaccount , для которой вы собираетесь обновить пароль.

kvno — значение должно быть текущим номером kvno + 1. Текущее значение kvno можно получить, выполнив действия из шага 3.

После выполнения приведенных выше команд необходимо указать тип шифрования для записей keytab. Убедитесь, что выбрали подходящий тип для своей среды.

Просмотр записей keytab

После обновления файла keytab в нем должны отобразиться записи для kvno 3 (новый) и kvno 2 (старый) для тех же учетной записи sqluser@CONTOSO.COM и имен SPN. Чтобы проверка записи в keytab, выполните следующую klist команду:

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

Изменение пароля учетной записи в Active Directory

Последний шаг — обновление пароля к network.privilegedadaccount или учетной записи, которой принадлежат имена SPN SQL Server в Windows Active Directory. В предыдущем сценарии необходимо обновить пароль sqluser@CONTOSO.COM в Active Directory. Измените пароль на <newpassword> указанный на шаге 3 в предыдущем разделе. Проверка подлинности Active Directory должна продолжать работать и без необходимости перезапускать службу SQL Server.