Все администраторы Windows знают, что после добавления компьютера или пользователя в группу безопасности Active Directory новые полномочия доступа к ресурсам домена или новые GPO применяются не сразу. Для обновления членства в группах и применения назначенных прав/политик, нужно перезагрузить компьютер (если в доменную группу добавлялась учетная запись компьютера) или перелогиниться в систему (для пользователя). Это связано с тем, что членство в группах AD обновляется при создании билета Kerberos, которое происходит при загрузке системы или при аутентификации пользователя во время входа в систему.
В некоторых случаях перезагрузка компьютера/сервера или logoff пользователя невозможно выполнить немедленно по производственным причинам. А воспользоваться полученным правами, доступом или применить новые политики нужно уже сейчас. В таких случаях вы можете обновить членство учетной записи в группах AD без перезагрузки компьютера или перелогина пользователя с помощью утилиты klist.exe
.
Вы можете вывести список групп безопасности домена, в которых состоит текущий пользователь с помощью команды:
whoami /groups
или GPresult
gpresult /r
Список групп, в которых состоит пользователь указан в разделе “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
После выполнения команды и обновления политик к компьютеру (можно обновить настройки групповых политик командой gpupdate /force
) будут применены все политики, назначенные группе AD через Security Filtering.
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. Проще всего это сделать с помощью утилиты 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!
Чтобы увидеть обновлённый список групп, нужно запустить новое окно командной строки с помощью runas (чтобы новый процесс был создан с новым токеном безопасности).
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
)
Сетевой каталог, к которому был предоставлен доступ через группу AD, должен открыться без перелогина пользователя.
Вы можете проверить, что пользователь, не выходя из системы получил новый TGT с обновленными группами безопасности с помощью команды whoami /all
.
Еще раз напомним, что данная возможность обновления групп безопасности будет работать только для сервисов, поддерживающих Kerberos. Для сервисов с NTLM аутентификацией нужна перезагрузка или ре-логин для обновления токена.
Было бы здорово, если бы сюда добавили как сделать эти же операции через Powershell.
Прямо в PoSh сессии выполняйте приведенные выше команды
Я видимо неверно выразил вою мысль.
Существуют ли штатные командлеты для выполнения описанных в статье операций?
А с чем связано указание полного имени в адресе, почему нельзя использовать сокращенное имя без домена?
Аутентификация Kerberos требует использования FQDN имени хоста.
А в связи с чем необходимо указывать полное имя для доступа к сетевому каталогу?
Т.е. чтобы пользоваться командой
klist purge
надо изначально в корпоративной сети у пользователей делать ярлыки на сетевые ресурсы только с FQDN именами? В обслуживаемых вами сетях вы сами так делаете?Конечно нет, это в большей степени обходное решение, когда прямо сейчас логоф/перезагрузку делать нельзя, а доступом через группу AD воспользоваться уже нужно.
«klist» не является внутренней или внешней командой, исполняемой программой или пакетным файлом.