Поделиться через


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

Область применения: SQL Server — Linux

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

Средство adutil используется для обновления keytab. Команда 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.privilegedadaccount на sqluser. Учетная запись sqluser@CONTOSO.COM уже создана в Active Directory, а ключтаб также создан в расположении по умолчанию /var/opt/mssql/secrets/mssql.keytab. Теперь необходимо изменить пароль для sqluser@CONTOSO.COM. Ниже приведены шаги, которые необходимо выполнить.

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

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

    kinit privilegeduser@CONTOSO.COM
    
  3. После запуска kinit для получения или продления TGT запросите текущее число kvnonetwork.privilegedadaccount. В этом случае он выглядит так: sqluser@CONTOSO.COM.

    kvno sqluser@CONTOSO.COM
    

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

Повернуть keytab с помощью mssql-conf

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

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

    su mssql
    
  2. Получите или обновите билет TGT (билет Kerberos для выдачи билетов) с помощью команды kinit. Для выполнения команды kinit используйте привилегированную учетную запись. Учетная запись должна иметь разрешение на подключение к домену и иметь возможность создавать учетные записи и имена служб в домене. В этом случае мы используем учетную запись privilegeduser@CONTOSO.COM, которая имеет разрешения на создание учетных записей и SPN в нашем домене 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-conf setup-ad-keytab для указания конкретного kvno. Сначала необходимо убедиться, что вы получите текущий квно для пользователя, а затем обновите новый квно соответственно, который будет текущим квно + 1.

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

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

    Вы заметите, что ключевой табель (keytab) обновляется следующей версией квно как для записей пользователя, так и для записей SPN (служебного имени).

  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. 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)
    

Вручную поверните keytab с помощью 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 или учетной записи, которая обладает служебными именами SQL Server в Windows Active Directory. В предыдущем сценарии необходимо обновить пароль sqluser@CONTOSO.COM в Active Directory. Измените пароль на <newpassword> указанный на шаге 3 в предыдущем разделе. Проверка подлинности Active Directory должна продолжать работать и без необходимости перезапускать службу SQL Server.