Настройка предварительной аутентификации Kerberos
Эллес поддерживает предварительную аутентификацию Kerberos для различных типов учетных записей и предоставляет необходимые инструменты администрирования.
Общие сведения
Предварительная аутентификация используется в протоколе Kerberos для повышения безопасности.
Без предварительной аутентификации клиент посылает в KDC (Key Distribution Center) запрос к сервису аутентификации (AS-REQ, Authentication Service Request) и после проверки имени учетной записи получает в ответе KDC (AS-REP, Authentication Service Response) билет TGT (Ticket-Granting Ticket), зашифрованный ключом KDC, и сессионный ключ, зашифрованный ключом на основе пароля учетной записи или открытого ключа клиента (в случае использования смарт-карты).
Таким образом, клиент имеет возможность расшифровать этот сессионный ключ, так как ему доступен пароль учетной записи или закрытый ключ для нее (в случае использования смарт-карты).
Если сессионный ключ зашифрован ключом на основе пароля учетной записи, то появляется возможность запрашивать билеты TGT для разных пользователей, получать их и пытаться взломать зашифрованный сессионный ключ методом подбора пароля. При недостаточно сложном пароле такая атака может стать успешной.
Предварительная аутентификация добавляет дополнительный шаг в процесс получения билета TGT: перед выдачей билета KDC запрашивает проверку того, что клиент действительно обладает паролем учетной записи.
Существует несколько типов предварительной аутентификации. Например, тип PA-ENC-TIMESTAMP предусматривает шифрование клиентом временной метки ключом на основе пароля пользователя. KDC, проверяя эту метку, убеждается в том, что клиенту доступен пароль пользователя (так как он использовал его для шифрования) и временная метка актуальна.
Контроллеры домена Эллес поддерживают те же типы предварительной аутентификации, что и контроллеры домена Microsoft Active Directory Domain Services (AD DS), для следующих учетных записей:
-
пользователи;
-
компьютеры;
-
служебные учетные записи (MSA, GMSA).
Управление предварительной аутентификацией на контроллере домена Эллес осуществляется на двух уровнях:
-
на уровне конфигурации KDC;
-
на уровне атрибутов учетных записей.
Отключение предварительной аутентификации в конфигурации KDC
В конфигурации KDC на контроллере домена Эллес предварительная аутентификация включена по умолчанию, что позволяет гибко настраивать ее на уровне атрибутов отдельной учетной записи.
Чтобы отключить предварительную аутентификацию глобально на уровне конфигурации KDC, необходимо в разделе kdc в файле /etc/krb5.conf на контроллере домена Эллес задать следующий параметр:
[kdc] ... require-preauth = no ...
Для восстановления режима работы KDC по умолчанию необходимо удалить параметр из конфигурации.
| KDC загружает конфигурацию в начале своей работы. Для применения изменений требуется перезапуск. |
Отключение предварительной аутентификации для учетной записи
Предварительная аутентификация включена по умолчанию для всех типов учетных записей, которые ее поддерживают.
| Отключение предварительной аутентификации для учетных записей в целях тестирования производительности или иных целях приводит к снижению уровня безопасности для них. Поэтому рекомендуется отключать предварительную аутентификацию только на определенное время при возникновении такой необходимости. |
Чтобы отключить предварительную аутентификацию, например, для учетной записи пользователя User1:
-
Выполните вход на сервер контроллера домена Эллес с учетной записью с административными правами в домене.
-
Получите уникальное имя (distinguished name, DN) учетной записи любым доступным способом. Например:
DN=$(samba-tool user show User1 --attributes=dn | awk '$2 != "" {print $2}') -
Установите флаг
ADS_UF_DONT_REQUIRE_PREAUTHатрибутаuserAccountControl, указывающий на то, что для учетной записи не требуется предварительная аутентификация, используя полученное значение DN:samba-tool uac modify $DN DoesNotRequirePreAuth True
-
Убедитесь, что значение флага изменено:
samba-tool uac show $DN | grep -ie 'preauth' DoesNotRequirePreAuth: True
См. описание синтаксиса и параметров вызова подкоманд samba-tool uac в разделе
«Администрирование атрибута управления учетной записью (userAccountControl)»).
|
Включение предварительной аутентификации для учетной записи
Чтобы включить предварительную аутентификацию, например, для учетной записи пользователя User1:
-
Выполните вход на сервер контроллера домена Эллес с учетной записью с административными правами в домене.
-
Получите уникальное имя (distinguished name, DN) учетной записи любым доступным способом. Например:
DN=$(samba-tool user show User1 --attributes=dn | awk '$2 != "" {print $2}') -
Снимите флаг
ADS_UF_DONT_REQUIRE_PREAUTHатрибутаuserAccountControl, указывающий на то, что для учетной записи не требуется предварительная аутентификация, используя полученное значение DN:samba-tool uac modify $DN DoesNotRequirePreAuth False
-
Убедитесь, что значение флага изменено:
samba-tool uac show $DN | grep -ie 'preauth' DoesNotRequirePreAuth: False
См. описание синтаксиса и параметров вызова подкоманд samba-tool uac в разделе
«Администрирование атрибута управления учетной записью (userAccountControl)»).
|
Логирование действий по управлению предварительной аутентификацией для учетной записи
Чтобы включить логирование действий по изменению состояния флага ADS_UF_DONT_REQUIRE_PREAUTH атрибута userAccountControl, установите уровень логирования 2 или выше для класса отладки auth_audit или auth_json_audit.
| См. подробнее в разделе «Аудит Эллес». |
Например, для логирования в файл:
-
Выполните вход на сервер контроллера домена Эллес с учетной записью с локальными административными правами.
-
Добавьте значение уровня логирования 2 или выше и путь к лог-файлу в конфигурационный файл smb.conf (полный путь после установки пакета inno-samba — /app/inno-samba/etc/smb.conf):
[global] ... log level = 1 auth_json_audit:2@/tmp/auth_audit.log ...
Настройка поддержки расширения PKINIT Freshness
Технология PKINIT (Public Key Cryptography for Initial Authentication in Kerberos) позволяет использовать ключи и сертификаты, выпущенные доверенным удостоверяющим центром, для идентификации клиента и сервера Kerberos (Key Distribution Center, KDC) на этапе предварительной аутентификации.
Расширение Freshness представляет собой доработку PKINIT, которая может быть использована для подтверждения того, что клиент, запрашивающий билет Kerberos, имеет доступ к закрытому ключу в данный момент, а не только имел его когда-либо в прошлом или будет иметь будущем. Для этого на этапе предварительной аутентификации KDC выдает токен, подтверждающий актуальность запроса (freshness token; см. подробнее в RFC 8070).
Без дополнительной настройки сервер KDC в составе контроллера домена Эллес работает в режиме поддержки расширения PKINIT Freshness (режим Supported).
В этом режиме KDC генерирует подтверждающий актуальность запроса токен (freshness token), но не требует его наличия в ответе от клиента:
-
если клиент поддерживает расширение PKINIT Freshness, он вернет токен в ответном запросе, и KDC проверит его корректность;
-
если клиент не поддерживает расширение PKINIT Freshness и не вернет токен, сервер KDC обработает запрос штатно, без ошибки.
Способы настройки
При работе с Эллес для управления поддержкой расширения PKINIT Freshness могут использоваться:
-
файл конфигурации Kerberos (krb5.conf);
-
файл конфигурации контроллера домена Эллес (smb.conf);
-
объект групповой политики (GPO).
Конфигурация Kerberos (krb5.conf)
Для управления режимом поддержки расширения PKINIT Freshness в конфигурации Kerberos (/etc/krb5.conf) служит параметр pkinit_require_freshness в разделе kdc /etc/krb5.conf.
При использовании версии Эллес 1.18.0 или более ранней версии ожидаемое наименование параметра отличается от приведенного в примере: require-pkinit-freshness.
|
Параметр pkinit_require_freshness может принимать следующие значения:
-
true— использование расширения PKINIT Freshness является обязательным условием получения билета Kerberos при взаимодействии с клиентами (эквивалентно значению2параметраkdc:pkinit_freshnessв конфигурации контроллера домена Эллес в файле smb.conf); -
false(по умолчанию) — расширение PKINIT Freshness поддерживается, но его использование не является обязательным для получения билета Kerberos при взаимодействии с клиентами (эквивалентно значению1параметраkdc:pkinit_freshnessв конфигурации контроллера домена Эллес в файле smb.conf).
Пример задания значения для параметра:
[kdc] ... pkinit_require_freshness = true ...
| См. подробнее в документации MIT Kerberos. |
Конфигурация контроллера домена Эллес (smb.conf)
Для управления режимом поддержки расширения PKINIT Freshness в конфигурации контроллера домена Эллес (/app/inno-samba/etc/smb.conf) служит параметр kdc:pkinit_freshness в разделе global.
Параметр kdc:pkinit_freshness может принимать следующие значения:
-
-1(по умолчанию) — параметр не установлен (режимNot Configured);В этом случае используется значение параметра
pkinit_require_freshness, указанное в системной конфигурации Kerberos (/etc/krb5.conf). -
0— расширение PKINIT Freshness отключено (режимDisabled);KDC не формирует и не отправляет клиенту freshness token и не ожидает его в последующем PKINIT-запросе.
-
1— расширение PKINIT Freshness включено, но его использование не является обязательным (режимSupported);KDC генерирует и отправляет клиенту freshness token:
-
если клиент поддерживает расширение PKINIT Freshness, он вернет токен в ответном запросе, и KDC проверит его корректность;
-
если клиент не поддерживает расширение PKINIT Freshness и не вернет токен, сервер KDC обработает запрос штатно, без ошибки.
-
-
2— расширение PKINIT Freshness включено и его использование является обязательным (режимRequired).KDC отправляет клиенту freshness token и требует его возврата:
-
если клиент поддерживает расширение PKINIT Freshness, он вернет токен в ответном запросе, и KDC проверит его корректность;
-
если клиент не поддерживает расширение PKINIT Freshness или не включит токен в ответный запрос, KDC отклонит запрос и вернет ошибку.
-
Пример задания значения для параметра:
[global]
...
kdc:pkinit_freshness = 1
...
Чтобы вернуть поведение по умолчанию, удалите параметр из файла smb.conf.
Групповая политика
Для управления режимом поддержки расширения PKINIT Freshness с помощью групповой политики служит атрибут PKInitFreshness (соответствует ключу реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\KDC\Parameters\PKINITFreshness).
Атрибут может быть установлен в объекте групповой политики с помощью утилиты samba-tool:
-
синтаксис вызова:
samba-tool gpo manage security set <gpo> PKInitFreshness <value>
-
обязательные параметры:
-
GUID объекта групповой политики;
-
значение атрибута;
-
-
пример включения расширения в режиме поддержки (
Supported) путем задания атрибута в объекте, соответствующем доменной групповой политике по умолчанию:samba-tool gpo manage security set {31B2F340-016D-11D2-945F-00C04FB984F9} PKInitFreshness 1
Чтобы вернуться к режиму работы по умолчанию, удалите настройку, передав пустое значение.
Например:
samba-tool gpo manage security set {31B2F340-016D-11D2-945F-00C04FB984F9} PKInitFreshness
| См. подробнее в разделе «Управление групповыми политиками и параметрами безопасности». |
Приоритет применения настроек
Источники настроек для управления работой расширения PKINIT Freshness (GPO, smb.conf, krb5.conf) применяются с разным приоритетом и могут переопределять друг друга.
Значение, полученное из групповой политики (GPO), имеет самый высокий приоритет. При обновлении политик (например, после вызова утилиты samba-gpupdate) оно автоматически записывается в локальный параметр kdc:pkinit_freshness в smb.conf и используется контроллером домена независимо от значений, указанных в krb5.conf.
Однако если администратор вручную изменит этот параметр в smb.conf после применения групповой политики, то локальная настройка станет приоритетной для данного контроллера домена до того момента, когда будет внесено очередное изменение в GPO и оно будет применено на контроллере домена утилитой samba-gpupdate.
Это связано с тем, что samba-gpupdate применяет только изменения политик.
Например:
-
Администратор создает в домене объект групповой политики (GPO) и задает в нем для настройки
PKInitFreshnessзначение1. -
В результате работы
samba-gpupdateна контроллере домена значение параметраkdc:pkinit_freshnessв локальной конфигурации синхронизуется с GPO и принимает значение1. -
Администратор вручную изменяет значение
kdc:pkinit_freshnessна2в локальной конфигурации контроллера домена в smb.conf. Оно переопределяет значение из GPO. Последующие вызовыsamba-gpupdateна контроллере домена не приводят к изменениюkdc:pkinit_freshness— продолжает действовать заданное вручную значение. -
Администратор изменяет значение
PKInitFreshnessв GPO на0. -
В результате очередного вызова
samba-gpupdateна контроллере домена параметрkdc:pkinit_freshnessв локальной конфигурации синхронизуется с GPO и принимает значение0.
Если групповая политика отсутствует, используется значение, заданное в smb.conf. Настройки в krb5.conf имеют наименьший приоритет и применяются только тогда, когда параметр отсутствует и в групповых политиках, и в smb.conf.
Таким образом, итоговое значение определяется следующим образом:
-
настройка в GPO переопределяет локальную конфигурацию в smb.conf;
-
при изменении настройки в smb.conf вручную применяется она до момента следующего изменения в GPO;
-
krb5.conf действует только при отсутствии всех остальных источников настройки.
Последовательность настройки
Общая последовательность настройки работы с расширением PKINIT Freshness при использовании для аутентификации сертификатов и смарт-карт:
-
Настроить использование PKINIT в конфигурации Kerberos в файле /etc/krb5.conf на контроллере домена Эллес.
-
Настроить использование PKINIT в конфигурации Kerberos в файле /etc/krb5.conf на клиентском компьютере под управлением ОС Linux.
-
На контроллере домена Эллес включить политику PKINIT Freshness (например, в режиме поддержки) с помощью объекта групповой политики:
samba-tool gpo manage security set <gpo> PKInitFreshness 1
-
На контроллере домена Эллес проверить, что групповая политика установлена и содержится в общем списке:
samba-tool gpo show <gpo> ... Policies : [ ... { "keyname": "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\KDC\\Parameters", "valuename": "PKINITFreshness", "class": "MACHINE", "type": "REG_DWORD", "data": 1 } ... ] -
Дождаться синхронизации изменений в SYSVOL и обновить политики, вызвав утилиту
samba-gpupdate. -
На клиентском компьютере получить билет Kerberos с использованием сертификата пользователя или авторизоваться от имени учетной записью с использованием сертификатов, установленных на смарт-карте.
| См. полное описание последовательности шагов по настройке аутентификации по смарт-картам в разделе «Настройка аутентификации с использованием смарт-карт»). |
Проверка настройки
Для проверки того, что расширение PKINIT Freshness включено и клиенты больше не могут пройти аутентификацию без токена, подтверждающего актуальность запроса, может использоваться стандартная команда (применимо для клиента из MIT Kerberos) для получения билета Kerberos с дополнительными опциями:
kinit <username> -X disable_freshness
Если поддержка включена, будет получено сообщение об ошибке:
kinit: Preauthentication failed while getting initial credentials