После добавления учетной записи компьютера или пользователя в группу безопасности Active Directory, новые полномочия доступа к ресурсам или новые GPO применяются не сразу. Чтобы обновить членство в группах и применить назначенные права/политики, нужно перезагрузить компьютер или перелогиниться в систему (для пользователя). Это связано с тем, что членство в группах AD обновляется при создании билета Kerberos, которое происходит при загрузке системы или при аутентификации пользователя во время входа в систему.
Если вы не можете немедленно выполнить перезагрузку компьютера или logoff пользователя, можно обновить членство учетной записи в группах AD помощью утилиты
klist.exe
. Эта утилита позволяет сбросить билеты Kerberos.
Вы можете вывести список групп безопасности домена, в которых состоит текущий пользователь с помощью команды:
whoami /groups
или GPresult
gpresult /r /scope user
Список групп, в которых состоит пользователь указан в разделе “The user is a part of the following security groups”.
Обновить билет Kerberos и группы компьютера без перезагрузки
Список групп безопасности, в которых состоит данный компьютер можно вывести командой:
gpresult /r /scope computer
The computer is a part of the following security groups
Вы можете вывести список кэшированных билетов Kerberos, полученных компьютером, а также дату их получения и следующего обновления:
klist.exe -li 0x3e7
Теперь добавьте компьютер в новую группу безопасности AD (через оснастку ADUC или с помощью PowerShell команды:
Add-AdGroupMember -Identity corpAntivirusExclusionPC -Members wks-msit012$
)
Чтобы очистить кэш тикетов Kerberos компьютера и обновить членство компьютера в группах AD, выполните команду (для Windows 7 и Windows Server 2008R2)
klist -lh 0 -li 0x3e7 purge
Или для Windows 11/10/8 и Windows Server 2012+
Deleting all tickets: Ticket(s) purged!
Обновите настройки групповых политик командой gpupdate /force , после этого к компьютеру без перезагрузки будут применены все GPO, назначенные группе безопасности AD через Security Filtering.
Вы можете проверить время получения билетов Kerberos компьютера с помощью команды:
klist -li 0x3e7 tgt
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.
В этом случае нужно запустить командную строку от имени NT Authority\System и в уже в этой консоли сбросить кэш билетов Kerberos:
– для запуска cmd.exe от имени System используется утилита psexec.exe.
psexec -s -i -d cmd.exe
klist –li 0x3e7 purge
– сброс тикета компьютера
gpupdate /force
– обновление настроек GPO
Такой способ обновления членства в группах компьютера – единственный рабочий вариант обновления настроек GPO на клиентах, который подключаются к вашей сети через VPN, а пользователь входит под кэшированными учетными данными.
Klist: сброс тикета Kerberos для пользователя
Например, вы добавили пользователя в группу безопасности с правами доступа к сетевой папке. Пользователь не сможет отрыть данный сетевой каталог без выполнения logoff+logon.
Если нужно обновить список назначенных групп безопасности для пользователя, нужно сбросить его кэш билетов Kerberos. Откройте в сессии пользователю непривилегированную командную строку (не нужно запускать cmd в режиме Run as administrator). Выполните команду:
klist purge
Current LogonId is 0:0x5d2e96 Deleting all tickets: Ticket(s) purged!
Чтобы увидеть обновлённый список групп, нужно запустить новое окно командной строки с помощью runas (чтобы новый процесс был создан с новым токеном безопасности). Выведите список групп пользователя:
whoami /groups
Get-WmiObject Win32_LogonSession | Where-Object {$_.AuthenticationPackage -ne 'NTLM'} | ForEach-Object {klist.exe purge -li ([Convert]::ToString($_.LogonId, 16))}
Чтобы пользователь смог подключиться к сетевой папке, доступ к которой ему предоставлен новой группой безопасности, нужно перезапустить оболочку прводника Windows с новым токеном.
- Откройте командную строку;
- Завершите процесс File Explorer пользователя:
taskkill /f /im explorer.exe
- Запустите новый процесс explorer под вашей учетной записью. Можно использовать переменные окружения
%USERDOMAIN%\%USERNAME%
или указать домен и имя пользователя вручную. Например, winitpro\kbuldogov:runas /user:winitpro\kbuldogov explorer.exe
- Укажите пароль своей учетной записи;
- После этого оболочка проводника перезапустится с новым токеном и вы сможете получить доступ к сетевой папке с правами новой группы безопасности.
В предыдущем способе для обновления групп безопасности нужно явно указывать пароль пользователя. Если это невозможно, можно попробовать обходное решение.
Допустим, пользователь был добавлен в группу AD для получения доступа к сетевому каталогу. Попробуйте обратиться к нему по имени или FQDN (!!! это важно) (к примеру, \\msk-fs1.winitpro.loc\distr). Но не по IP адресу.
NAME
) и полного имени (
FQDN
) используются разные cifs тикеты. Если вы ранее использовали FQDN, то после сброса тикетов на клиенте командой
klist purge
, вы сможете получить доступ по NAME (при первом обращении будет выдан новый тикет с новыми группами). Старый тикет для FQDN при этом все еще находится в процесс explorer и не будет сброшен до его перезапуска (как описано выше).В этот момент для пользователя выдается новый тикет Kerberos. Вы можете проверить, что TGT тикет был обновлен:
klist tgt
(см. значение
Cached TGT Start Time
)
Сетевой каталог, к которому был предоставлен доступ через группу AD, должен открыться без перелогина пользователя.
Выполните команду
whoami /groups
чтобы убедиться, что пользователь получил новый TGT с обновленными группами безопасности не завершая сеанс .
Еще раз напомним, что данная возможность обновления групп безопасности будет работать только для сервисов, поддерживающих Kerberos. Для сервисов с NTLM аутентификацией нужна перезагрузка или ре-логин для обновления токена.