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

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

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

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

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

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

whoami /groups

или GPresult

gpresult /r /scope user

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

Список групп, в которых состоит пользователь указан в разделе “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

gpresul: список групп в которых состоит компьютер

Вы можете вывести список кэшированных билетов Kerberos, полученных компьютером, а также дату их получения и следующего обновления:

klist.exe -li 0x3e7

klist-0x3e7 вывести список биетов kerberos компьютера

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

Теперь добавьте компьютер в новую группу безопасности 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+

klist –li 0x3e7 purge

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

Deleting all tickets:
Ticket(s) purged!

Обновите настройки групповых политик командой gpupdate /force , после этого к компьютеру без перезагрузки будут применены все GPO, назначенные группе безопасности AD через Security Filtering.

Вы можете проверить время получения билетов Kerberos компьютера с помощью команды:

klist -li 0x3e7 tgt

Если в вашем домене настроены политики ограничения доступа к 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 AuthoritySystem и в уже в этой консоли сбросить кэш билетов Kerberos:

psexec -s -i -d cmd.exe

– для запуска cmd.exe от имени System используется утилита psexec.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!

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

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

whoami /groups

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

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

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

  1. Откройте командную строку;
  2. Завершите процесс File Explorer пользователя:
    taskkill /f /im explorer.exe
  3. Запустите новый процесс explorer под вашей учетной записью. Можно использовать переменные окружения
    %USERDOMAIN%%USERNAME%
    или указать домен и имя пользователя вручную. Например, winitprokbuldogov:
    runas /user:winitprokbuldogov explorer.exe
  4. Укажите пароль своей учетной записи;taskkill перезапустить процесс explorer.exe
  5. После этого оболочка проводника перезапустится с новым токеном и вы сможете получить доступ к сетевой папке с правами новой группы безопасности.

В предыдущем способе для обновления групп безопасности нужно явно указывать пароль пользователя. Если это невозможно, можно попробовать обходное решение.

Допустим, пользователь был добавлен в группу AD для получения доступа к сетевому каталогу. Попробуйте обратиться к нему по имени или FQDN (!!! это важно) (к примеру, msk-fs1.winitpro.locdistr). Но не по IP адресу.

Для короткого имени ресурса (
NAME
) и полного имени (
FQDN
) используются разные cifs тикеты. Если вы ранее использовали FQDN, то после сброса тикетов на клиенте командой
klist purge
, вы сможете получить доступ по NAME (при первом обращении будет выдан новый тикет с новыми группами). Старый тикет для FQDN при этом все еще находится в процесс explorer и не будет сброшен до его перезапуска (как описано выше).

В этот момент для пользователя выдается новый тикет Kerberos. Вы можете проверить, что TGT тикет был обновлен:

klist tgt

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

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

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

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

 

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

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

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