Обновление членства в группах AD без перезагрузки/перелогина

Все администраторы Windows знают, что после добавления компьютера или пользователя в группу безопасности Active Directory новые полномочия доступа к ресурсам домена или новые GPO применяются не сразу. Для обновления членства в группах и применения назначенных прав/политик, нужно перезагрузить компьютер (если в доменную группу добавлялась учетная запись компьютера) или перелогиниться в систему (для пользователя). Это связано с тем, что членство в группах AD обновляется при создании билета Kerberos, которое происходит при загрузке системы или при аутентификации пользователя во время входа в систему.

В некоторых случаях перезагрузка компьютера/сервера или logoff пользователя невозможно выполнить немедленно по производственным причинам. А воспользоваться полученным правами, доступом или применить новые политики нужно уже сейчас. В таких случаях вы можете обновить членство учетной записи в группах AD без перезагрузки компьютера или перелогина пользователя с помощью утилиты klist.exe.

Примечание. Описанная в данной статье методика будет работать только для сетевых сервисов, поддерживающих Kerberos аутентификацию. Службы, работающие только с NTLM аутентификацией, по-прежнему требуют выполнения logoff + logon пользователя или перезагрузки Windows.

Вы можете вывести список групп безопасности домена, в которых состоит текущий пользователь с помощью команды:

whoami /groups

или GPresult

gpresult /r

gpresult - The user is a part of the following security groups

Список групп, в которых состоит пользователь указан в разделе “The user is a part of the following security groups”.

Сбросить текущие тикеты Kerberos без перезагрузки может утилита klist.exe. Klist включена в ОС Windows, начиная с Windows 7. Для XP и Windows Server 2003 klist устанавливается в составе Windows Server 2003 Resource Kit Tools.

Сброс тикета Kerberos компьютера и обновление групп без перезагрузки

Чтобы сбросить весь кэш тикетов Kerberos компьютера (локальной системы) и обновить членство компьютера в группах AD, нужно в командной строке с правами администратора выполнить команду:

klist -li 0:0x3e7 purge

klist -lh 0 -li 0x3e7 purge - сбросить тикет Kerberos компьютера

Примечание0x3e7 —  специальный идентификатор, указывающий на сессию локального компьютера (Local System).

После выполнения команды и обновления политик к компьютеру (можно обновить политики командой gpupdate /force) будут применены все политики, назначенные группе AD через Security Filtering.

Если в вашем домене настроены политики ограничения доступа к LSA(например, политика Debug Program, ограничивающая получение SeDebugPrivilege ), или другие политики безопасности, то в некоторых случаях при запуске команды klist -li 0:0x3e7 purge вы получили ошибку вида (Error calling API LsaCallAuthenticationPackage):

Current LogonId is 0:0x5d2ed1
Targeted LogonId is 0:0x3e7
*** You must run this tool while being elevated, and you must have TCB or be a local admin.***
klist failed with 0xc0000001/-1073741823: {Operation Failed}
The requested operation was unsuccessful.

klist failed Error calling API LsaCallAuthenticationPackage

Если нужно запустить консольную сессию от имени NT-Authority\System. Проще всего это сделать с помощью утилиты psexec:

psexec -s -i -d cmd.exe – запуск cmd.exe от имени System

klist purge – сброс тикета компьютера

gpupdate /force – обновление GPO

Klist: сброс тикета Kerberos для текущего пользователя

Для обновления назначенных групп безопасности пользователя домена в его сессии используется другая команда. Например, доменная учетная запись пользователя была добавлена в группу Active Directory для доступа к файловому ресурсу. Пользователь не сможет получить доступ к данному сетевому каталогу без выполнения logoff+logon.

доступ к сетевому каталогу запрещен

Чтобы сбросить у пользователя кэш выданных ему тикетов Kerberos, воспользуйтесь командой:

klist purge

Current LogonId is 0:0x5d2e96
Deleting all tickets:
Ticket(s) purged!

Сброс тикета kerberos пользователя

Чтобы увидеть обновлённый список групп, нужно запустить новое окно командной строки с помощью runas (чтобы новый процесс был создан с новым токеном безопасности).

На RDS сервере, на котором работает множество пользователей вы можете сбросить Kerberos тикеты сразу для всех сессий пользователей с помощью следующего однострочного PowerShell скрипта:

Get-WmiObject Win32_LogonSession | Where-Object {$_.AuthenticationPackage -ne 'NTLM'} | ForEach-Object {klist.exe purge -li ([Convert]::ToString($_.LogonId, 16))}

Допустим, пользователь был добавлен в группу AD для получения доступа к сетевому каталогу. Попробуйте обратиться к нему по FQDN (!!! это важно) имени (к примеру, \\msk-fs1.winitpro.loc\distr). В этот момент для пользователя выдается новый тикет Kerberos. Вы можете проверить, что TGT тикет был обновлен:

klist tgt

(см. значение Cached TGT Start Time)

klist tgt: вывести все выданные тикеты kerberos пользователя

Сетевой каталог, к которому был предоставлен доступ через группу AD, должен открыться без перелогина пользователя.

Вы можете проверить, что пользователь, не выходя из системы получил новый TGT с обновленными группами безопасности с помощью команды whoami /all.

доступ к каталогу по FQDN имени

Еще раз напомним, что данная возможность обновления групп безопасности будет работать только для сервисов, поддерживающих Kerberos. Для сервисов с NTLM аутентификацией нужна перезагрузка или ре-логин для обновления токена.


Предыдущая статья Следующая статья


Комментариев: 8 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)