本文介绍 VPN 用户在组成员身份更改后可能会遇到资源访问或配置问题的情况。
适用于: 所有受支持的 Windows 客户端版本
现象
为了应对新冠肺炎疫情,越来越多的用户现在从家工作、学习和社交。 他们使用 VPN 连接连接到工作区。 这些 VPN 用户报告在安全组中添加或删除这些用户时,这些更改可能不会按预期生效。 报告症状如下:
- 对网络资源访问的更改不会生效。
- 面向特定安全组的组策略对象(GPO)无法正确应用。
- 文件夹重定向策略未正确应用。
- 面向特定安全组的 Applocker 规则不起作用。
- 创建映射驱动器(包括用户主文件夹或 GPP 驱动器映射)的登录脚本不起作用。
- 该
whoami /groups命令(在命令提示符下运行)报告用户本地安全上下文的组成员身份的过时列表。 - 该
gpresult /r命令(在命令提示符处运行)报告组成员身份的过时列表。
如果用户在客户端仍连接到 VPN 时锁定并解锁 Windows,则其中一些症状会自行解决。 例如,某些资源访问更改生效。 随后,如果用户注销 Windows,然后重新登录(关闭使用网络资源的所有会话),则会出现更多症状。 但是,登录脚本可能无法正常工作,并且 gpresult /r 该命令可能仍无法反映组成员身份更改。 用户无法使用命令在客户端上启动新的 Windows 会话来解决此问题 runas 。 此命令只使用相同的凭据信息来启动新会话。
本文的范围包括已在域中实现身份验证机制保障(AMA)的环境,以及用户必须使用智能卡访问网络资源进行身份验证的环境。 有关详细信息,请参阅 Windows 中交互式登录方案中 AMA 用法的说明。
原因
在办公环境中,用户通常在工作日结束时注销 Windows。 当用户第二天登录时,客户端已连接到网络,并且可以直接访问域控制器。 在这些情况下,对组成员身份的更改会很快生效。 用户第二天具有正确的访问级别(下次用户登录时)。 同样,对组策略的更改似乎在一两天内生效(用户登录一两次后,具体取决于计划应用的策略)。
在家庭环境中,用户可能会在工作日结束时与 VPN 断开连接并锁定 Windows。 他们可能不会注销。当用户第二天早上解锁 Windows(或登录)时,客户端不会连接到 VPN(并且无法访问域控制器),直到用户解锁 Windows 或登录。 客户端使用缓存凭据(而不是通过联系域控制器获取新凭据)登录到 Windows。 Windows 为基于缓存信息的用户生成安全上下文。 Windows 还基于本地组策略缓存异步应用组策略。 这种缓存信息的用法可能会导致以下行为:
- 用户可能有权访问他们不应拥有的资源,并且可能无权访问他们应拥有的资源。
- 组策略设置可能无法按预期应用,或者组策略设置可能已过期。
发生此行为的原因是 Windows 使用缓存信息来提高用户登录时的性能。 Windows 还使用缓存信息在未连接到网络的已加入域的客户端上登录用户。 如果客户端专门使用 VPN 连接到网络,并且客户端在用户登录之前无法建立 VPN 连接,则会发生意外后果。
重要
此行为仅在交互式登录方案中相关。 对网络资源的访问按预期工作,因为网络登录不使用缓存的信息。 相反,组信息来自域控制器查询。
对用户安全上下文和访问控制的影响
如果用户登录时客户端无法连接到域控制器,Windows 会将用户安全上下文基于缓存的信息。 Windows 创建用户安全上下文后,它不会在下次用户登录之前更新上下文。
例如,假设用户在用户处于脱机状态时被分配到 Active Directory 中的组。 用户登录到 Windows,然后连接到 VPN。 如果用户打开命令提示符窗口,然后运行 whoami /groups 该命令,则组列表不包括新组。 用户锁定并解锁桌面,同时仍连接到 VPN。 该 whoami /groups 命令仍生成相同的结果。 最后,用户注销 Windows。 用户再次登录后,该 whoami /groups 命令将生成正确的结果。
缓存信息对用户对资源的访问的影响取决于以下因素:
- 资源是位于客户端上还是网络上 网络上的资源需要额外的身份验证步骤(网络登录而不是交互式登录)。 此步骤意味着资源用于确定访问权限的组信息始终来自域控制器,而不是客户端缓存。
- 资源是否使用 Kerberos 票证或其他技术(例如 NTLM 访问令牌)对用户进行身份验证和授权
- 有关缓存信息如何影响用户访问受 NTLM 保护的资源的详细信息,请参阅 依赖于 NTLM 身份验证的资源。
- 有关缓存信息如何影响用户访问 Kerberos 保护的资源的详细信息,请参阅 依赖于 Kerberos 票证的资源。
- 用户是恢复现有资源会话还是启动新资源会话
- 用户是否在连接到 VPN 时锁定和解锁客户端 如果用户在连接到 VPN 时锁定客户端,然后解锁客户端,客户端将更新其用户组缓存。 但是,此更改不会影响用户锁定客户端时运行的现有用户安全上下文或任何会话。
- 用户是否在连接到 VPN 时注销客户端,然后再次登录 注销和登录的影响因用户是否已在连接到 VPN 时先锁定和解锁客户端而异。 锁定客户端,然后解锁它可更新客户端在下一次登录时使用的用户信息的缓存。
依赖于 NTLM 身份验证的资源
此类别的资源包括:
-
客户端上的用户会话
-
依赖于 NTLM 身份验证的客户端上的任何资源会话
-
依赖于 NTLM 身份验证的网络上的任何资源会话
重要
当用户访问需要 NTLM 身份验证的网络上的资源时,客户端会从用户安全上下文中显示缓存的凭据。 但是,资源服务器会查询域控制器以获取最新的用户信息。
这些资源会话(包括客户端上的用户会话)不会过期。 他们继续运行,直到用户结束会话,例如当用户注销 Windows 时。 锁定并解锁客户端不会结束现有会话。
依赖于 Kerberos 票证的资源
当用户连接到 VPN,然后尝试访问依赖于 Kerberos 票证的网络资源时,Kerberos 密钥分发中心 (KDC) 会从 Active Directory 获取用户的信息。 KDC 使用 Active Directory 中的信息对用户进行身份验证并创建票证授予票证(TGT)。 在创建 TGT 时,TGT 中的组成员身份信息是最新的。
然后,Windows 使用 TGT 获取所请求资源的会话票证。 会话票证反过来又使用 TGT 中的组信息。
客户端会缓存 TGT,并在用户每次启动新的资源会话(无论是本地还是网络上)时继续使用它。 客户端还会缓存会话票证,以便它可以继续连接到资源(例如资源会话过期时)。 会话票证过期时,客户端会重新提交新的会话票证的 TGT。
重要
如果用户的组成员身份在用户启动资源会话后发生更改,则以下因素控制更改是否实际影响用户的资源访问:
- **组成员身份的更改不会影响现有会话。**现有会话会一直持续到用户注销或其他结束会话,或者直到会话过期为止。 会话过期时,会发生以下情况之一:
- 客户端重新提交会话票证或提交新的会话票证。 此操作会续订会话。
- 客户端不会尝试再次连接。 会话不会续订。
- 组成员身份的更改不会影响当前 TGT,也不会影响使用该 TGT 创建的任何会话票证。 票证授予服务(TGS)使用 TGT 中的组信息来创建会话票证,而不是查询 Active Directory 本身。 在用户锁定客户端或注销或 TGT 过期(通常为 10 小时)之前,不会续订 TGT。 TGT 可以续订 10 天。
可以使用 klist 命令 手动清除客户端的票证缓存。
注意
票证缓存存储计算机上的所有用户会话的票证。 可以使用 klist 命令行选项将命令定向到特定用户或票证。
对启动和登录过程的影响
组策略服务经过优化,以加快组策略的应用速度,并减少对客户端性能的不利影响。 有关详细信息,请参阅 了解快速登录优化和快速启动对组策略的影响。 本文深入介绍了组策略如何与启动和登录过程交互。 组策略服务可以在前台(启动时或登录时)或在后台(在用户会话期间)运行。 该服务通过以下方式处理组策略:
- 异步处理 是指不依赖于其他进程结果的进程。
- 同步处理 是指依赖于彼此结果的进程。 因此,同步处理必须等待前一处理过程完成后,下一处理过程才能启动。
下表汇总了触发前台处理或后台处理的事件,以及处理是同步还是异步处理。
| 触发器 | 同步或异步 | 前景或背景 |
|---|---|---|
| 计算机启动或关闭 | 同步或异步 | 前景 |
| 用户登录或注销 | 同步或异步 | 前景 |
| 已计划(在用户会话期间) | 异步 | 背景 |
用户操作 (gpupdate /force) |
异步 | 背景 |
为了应用配置更改,某些客户端扩展(CSE)需要同步处理(在用户登录或计算机启动时)。 在这种情况下,CSE 确定在后台处理期间需要更改。 下次用户登录或计算机启动时,CSE 会在同步处理阶段完成更改。
其中一些 CSE 具有额外的复杂性:在同步处理运行时,它们必须连接到域控制器或其他网络服务器。 文件夹重定向和脚本 CSE 是此类别中的两个 CSE。
此设计在办公室环境中有效工作。 但是,在家庭工作环境中,用户可能无法在连接到域时注销和重新登录。 在客户端联系域控制器或任何其他服务器之前,同步处理必须完成。 因此,无法正确应用或更新某些策略。
例如,文件夹重定向中的更改需要以下所有内容:
- 前台同步处理(在用户登录期间)。
- 连接到域控制器。 在处理运行时,连接必须可用。
- 连接到承载重定向目标文件夹的文件服务器。 在处理运行时,连接必须可用。
事实上,此更改可能涉及两个登录。在第一次登录期间,客户端上的文件夹重定向 CSE 检测到更改需要并请求前台同步处理运行。 在下一次登录期间,CSE 将实施策略更改。
组策略报告的影响
组策略服务在客户端、Windows Management Instrumentation(WMI)和注册表中维护组成员身份信息。 WMI 存储用于策略结果集报表(由运行 gpresult /r生成)。 它不用于就哪些 GPO 应用做出决策。
注意
可以通过启用 关闭策略记录 策略的结果集来关闭策略报告函数。
在以下情况下,组策略服务不会更新 WMI 中的组信息:
- 组策略在后台运行。 例如,在计算机启动或用户登录或用户运行
gpupdate /force命令刷新组策略后定期刷新期间。 - 组策略从组策略缓存运行。 例如,当用户在客户端无权访问域控制器时登录时。
此行为意味着仅 VPN 客户端上的组列表可能始终过时,因为组策略服务无法在用户登录期间连接到网络。 当组策略运行且不更新 WMI 中的组信息时,组策略服务可能会记录类似于以下内容的事件:
GPSVC(231c.2d14) 11:56:10:651 CSessionLogger::Log: 还原旧的安全 grps
可以确定仅在正在检查的帐户的组策略服务日志中出现以下行时,WMI 和输出 gpresult /r 才会更新:
GPSVC(231c.2d14) 11:56:10:651 CSessionLogger::Log: 记录新的安全 grps
解决方法
若要解决本文介绍的问题,请使用 VPN 解决方案,该解决方案可以在用户登录之前与客户端建立 VPN 连接。
解决方法
如果在用户登录之前无法使用建立客户端连接的 VPN,这些解决方法可以缓解本文介绍的问题。
用户安全上下文和访问控制的解决方法
将用户添加到组或从组中删除用户后,请向用户提供以下步骤。 此过程提供唯一受支持的解决方法,用于刷新用户登录前未连接到 VPN 的客户端上的用户安全上下文。
重要
在用户启动此过程之前,允许成员资格更改在域控制器之间复制足够的时间。
- 登录到客户端计算机,然后像往常一样连接到 VPN。
- 确保客户端计算机已连接到 VPN 时,请锁定 Windows。
- 解锁客户端计算机,然后注销 Windows。
- 再次登录到 Windows。
组成员身份信息(和资源访问)现已更新。
可以通过打开命令提示符窗口,然后运行 whoami /all来验证组成员身份信息。
注意
可以使用以下 Windows PowerShell 脚本自动执行此过程的锁定和解锁步骤。 在此过程中,用户必须登录到 Windows,然后在脚本运行后必须注销 Windows。
$fullname = $env:userdnsdomain + "\" + "$env:username"
$MyCred = Get-Credential -Username $fullname -Message "Update Logon Credentials"
Start-Process C:\Windows\System32\cmd.exe -ArgumentList ("/C", "exit 0") -Credential $MyCred -WindowStyle Hidden -PassThru -Wait
登录过程(包括组策略)的解决方法
你可以通过手动进行配置更改、进行脚本更改来缓解某些问题,以便脚本可以在用户登录后运行,或者让用户连接到 VPN,然后注销 Windows 来缓解一些问题。 可能需要合并这些方法。 特别是对于组策略,关键是了解组策略何时以及如何运行。
注意
映射的驱动器连接和登录脚本与文件夹重定向没有相同的前台同步处理要求,但它们确实需要域控制器和资源服务器连接。
有关组策略 CSE 的处理要求的详细列表,请参阅 了解快速登录优化和快速启动组策略的影响。