На днях столкнулся с довольно интересной проблемой у некоторых пользователей, заключающейся в невозможности аутентифицироваться на ряде доменных сервисов из-за превышения максимального размера билета (токена) Kerberos . В этой статье мы покажем, как определить размер билета Kerberos для конкретного пользователя и увеличить буфер для хранения токена с помощью параметра MaxTokenSize .
В нашем кейсе проблема проявлялась следующим образом. Некоторые пользователи не могли получить доступ к ряду развернутых служб.
6
Microsoft-Windows-Security-Kerberos
The kerberos SSPI package generated an output token of size 22041 bytes, which was too large to fit in the token buffer of size 12000 bytes, provided by process id 4._x000D_The output SSPI token being too large is probably the result of the user user@domain being a member of a large number of groups._x000D_It is recommended to minimize the number of groups a user belongs to. If the problem can not be corrected by reduction of the group memberships of this user, please contact your system administrator to increase the maximum token size, which in term is configured machine-wide via the following registry value: HKLMSYSTEMCurrentControlSetControlLsaKerberosParametersMaxTokenSize.
Неизвестная ошибка, связанная с базой данных._x000D_SQL State: HY000, SQL Error Code:0_x000D_Cannot generate SSPI context. Обратитесь к администратору системы.
Bad Request – Request header too long_x000D_HTTP Error 400. The size of the request headers is too long.
40960
LSA (LsaSrv)
The Security System detected an authentication error for the server XXXXXX. The failure code from authentication protocol Kerberos was “{Buffer Too Small}_x000D_The buffer is too small to contain the entry. No information has been written to the buffer.(0xc0000023).
При анализе проблемы вы заметили, что все проблемные пользователи состояли в большом количестве групп безопасности Active Directory (более 200 с учетом вложенных групп). Вместе с ошибками SSPI token too large
это однозначно говорит о превышении максимальной длины билета Kerberos, используемого для аутентификации пользователей.
Размер билета Kerberos зависит от следующих факторов:
Kerberos использует буфер для хранения авторизационной информации и передает его размер приложениям, использующих Kerberos. Размер буфера определяется системным параметром MaxTokenSize . Размер буфера имеет значение, т.к. некоторые протоколы, такие как RPC и HTTP, используют его при выделении блока памяти для аутентификации. Если авторизационные данные пользователя, пытающегося аутентифицироваться, превышают размер MaxTokenSize, попытка аутентификация считается неудачной. Этим можно объяснить ошибки аутентификации при доступе к IIS, в то время как файловый доступ к сетевым ресурсам сохраняется.
По-умолчанию, размер токена Kerberos (MaxTokenSize):
Таким образом, если пользователь состоит в большом количестве группах, которые не помещаются в размер буфера токена MaxTokenSize, то при доступе к некоторых ресурсам происходит сбой проверки подлинности.
В Active Directory есть жесткий лимит на количество групп, в которых может состоять пользователь. Лимит составляет 1015 групп (включая вложенные группы). При превышении количества групп пот входе пользователя в систему появляется ошибка:
The system cannot log you on due to the following error: During a logon attempt, the user’s security context accumulated too many security IDs. Please try again or consult your system administrator.
Если вы добавите пользователя более чем в 1015 групп, то он не сможет войти в Windows с ошибкой:
During a logon attempt, the user’s security context accumulated too many security IDs.
В журнале событий при этом появится запись:
Source: LSA (LsaSrv)
EventID: 6035
During a logon attempt, the user’s security context accumulated too many security IDs. This is a very unusual situation. Remove the user from some global or local groups to reduce the number of security IDs to incorporate into the security context.
Вы можете узнать в скольких группах состоит пользователь с помощью командлета Get-ADUser из модуля AD PowerShell .
$user=Get-ADUser username
$token=(Get-ADUser $user -Properties tokengroups).tokengroups
$token.count
В Windows нет удобных встроенных средств, позволяющих узнать размер токена Kerberos для конкретного пользователя. Для получения текущего размер билета Kerberos можно воспользоваться Powershell скриптом CheckMaxTokenSize. ps1 (изначально скрипт был написан Tim Springston и выложен на в Script Gallery на технет). Но сейчас скрипт там не доступен, поэтому я скопировал его в свой GitHub репозитарий ( https://github.com/winadm/posh/blob/master/ActiveDirectory/CheckMaxTokenSize.ps1 ).
Скрипт позволяет получить текущий размер токена указанного пользователя, количество групп безопасности, в которых он включен, количество SID , хранящихся в SIDHistory пользователя, а также доверена ли учетная запись для делегирования или нет.
Скачайте скрипт и сохраните его в файл CheckMaxTokenSize.ps1. Разрешите запуск неподписанных скриптов политике выполнения PowerShell для текущей сессии:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Перейдите в каталог со скриптом:
Cd c:ps
Чтобы узнать размер токена пользователя user_name:
.CheckMaxTokenSize.ps1 -Principals 'user_name' -OSEmulation $true -Details $true
Скрипт просит указать для какого окружения следует вычислить размер билета пользователя. Есть три варианта в зависимости от используемых версий Windows.
1 — В Windows 7 / Windows Server 2008 R2 и более ранних (размер токена 12К)
4 — В Windows 8 / Windows Server 2012 и последующих ОС (размер токена 48K)
6 – Windows 10/Windows Server 2016 и выше
Если у вас в сети остались снятые с поддержки Windows Server 2008 R2 и Windows 7 , нужно выбрать опцию 1
и нажать Enter
. Через некоторое время (3-4 минуты) скрипт вернет следующую информацию:
Token Details for user user_name_x000D_**********************************_x000D_User's domain is CORP._x000D_Total estimated token size is 22648._x000D_For access to DCs and delegatable resources the total estimated token delegation size is 45296._x000D_Effective MaxTokenSize value is: 12000_x000D_Problem detected. The token was too large for consistent authorization. Alter the maximum size per KB http://support.microsoft.com/kb/327825 and consider reducing direct and transitive group memberships._x000D_*Token Details for user_name*_x000D_There are 957 groups in the token._x000D_There are SIDs in the users SIDHistory._x000D_There are 248 SIDs in the users groups SIDHistory attributes._x000D_There are 248 total SIDHistories for user and groups user is a member of._x000D_1188 are domain global scope security groups._x000D_37 are domain local security groups._x000D_68 are universal security groups inside of the users domain._x000D_0 are universal security groups outside of the users domain._x000D_Group Details included in output file at C:WindowstempTokenSizeDetails.txt_x000D_SIDHistory details included in output file at C:WindowstempTokenSizeDetails.txt
В данном случае мы определили, что пользователь user_name состоит в 957 доменных группах безопасности, а размер его билета Kerberos — 22648 , что почти в 2 раза больше, чем стандартный размер Kerberos Token Size в Windows 7 и Windows Server 2008 R.
Таким образом, чтобы решить проблему с аутентификацией, нужно либо уменьшить размер токена пользователя, либо увеличить размер буфера на всех системах, на которых наблюдается проблема с авторизацией Kerberos.
Вы можете уменьшить размер билета Kerberos пользователя за счет:
Вы можете увеличить максимальный размер буфера для токена Kerberos с помощью параметра реестра MaxTokenSize .
Microsoft не рекомендует устанавливать размер MaxTokenSize более 64Кб. Рекомендуется сначала увеличить лимит до 48Кб (лимит для Windows 8 / Windows Server 2012) и проверить работу сервисов. Чтобы увеличить размер буфера:
Get-ItemProperty -Path HKLM:SYSTEMCurrentControlSetControlLsaKerberosParameters|select maxtokensize
Эту операцию нужно выполнить на всех серверных системах, на которых наблюдается проблемы аутентификации.
Также вы можете задать максимальный MaxTokenSize с помощью параметра групповой политики Set maximum Kerberos SSPI context token buffer size . Находится она в разделе GPO Computer Configuration -> Policies -> Administrative Templates -> System -> Kerberos.
С помощью политики Warning for large Kerberos tickets вы можете настроить вывод в системный лог предупреждений о превышении размера билета.
После применения новых параметров групповых политик , если Windows обнаруживает превышение порогового размера билета Kerberos, в журнале будут записываться события Event 31 :
A ticket to the service ldap/DC Name/DomainName» is issued for account AccountName@DomainName». The size of the encrypted part of this ticket is 17421 bytes, which is close or greater than the configured ticket size threshold (12000 bytes). This ticket or any additional tickets issued from this ticket might result in authentication failures if the client or server application allocates SSPI token buffers bounded by a value that is close to the threshold value._x000D__x000D_The size of ticket is largely determined by the size of authorization data it carries. The size of authorization data is determined by the groups the account is member of, the claims data the account is setup for, and the resource groups resolved in the resource domain.
Еще одна проблема, связанная с превышением размера токена Kerberos, возникает на веб сайтах Internet Information Services (IIS) с Kerberos аутентификацией. При использовании Kerberos аутентификации в IIS , информация о членстве в группах безопасности пользователя хранится в заголовке WWW-Authenticate
. Если пользователь состоит в большом количестве групп, размер такого заголовка может быть превышен и аутентфикация пользователя не произойдет.
Для решения этой проблемы нужно увеличить лимиты в следующих параметров реестра в ветке HKEY_LOCAL_MACHINESystemCurrentControlSetServicesHTTPParameters
Не рекомендуется сразу устанавливать максимальные значения для этих параметров реестра. При больших размерах заголовков производительности и безопасность веб сервера IIS сильно снижается.
Рекомендуется начать со значения 32 Кб ( 32000 ) для каждого из этих параметров. После внесения изменений нужно перезагрузить сервер IIS.
Если проблема не исчезнет, пробуйте понемногу повышать размер лимитов вплоть до 48000 байт.
3/4*64 Кб
). Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…
Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…
Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…
The AC power adapter wattage and type cannot be determined — причины и решение При…
Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…
Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…