为什么有时需要注销并重新登录向用户添加组

use*_*912 6 security uac windows-server-2008-r2

在Windows系统(特别是我使用的Windows Server 2008R2)中,有时当我将本地用户添加到本地组时,用户需要注销并重新登录,然后才能将这个新组注册给他。

但有时,组注册会立即完成.. 无需用户注销并再次登录..

为什么会这样?

Rya*_*ies 11

您提到了本地用户和组,因此将 Active Directory 放在一边。

您应该始终需要重新进行身份验证,以便用户的安全令牌包含新的组成员身份。这通常意味着您需要重新登录。LSASS 仅在用户进行身份验证时才分发此令牌,这通常仅在登录时进行,但您可以执行类似操作C:\> runas /user:Yourself cmd.exe,这将提示您输入密码,然后您将再次进行身份验证,并且将获取新的组成员身份。(但我不能保证任何其他可能查询过您的组成员身份的正在运行的应用程序会在不重新启动这些应用程序等的情况下刷新它们的数据。)

(不提,klist.exe因为我们只讨论本地用户和组。)

这篇文章几乎是这方面的权威。

当用户通过身份验证时,本地安全机构 (LSA) 会为该用户创建一个访问令牌(在本例中为主要访问令牌)。访问令牌包含用户的安全标识符 (SID)、用户所属组的所有 SID 以及用户的权限。如果在颁发用户访问令牌后将用户添加到组,或修改分配给用户帐户的权限,则用户必须先注销然后重新登录,然后访问令牌才会更新。

每当线程或进程与安全对象交互或尝试执行需要特权的系统任务时,操作系统都会检查有效访问令牌以确定其授权级别。如果线程正在模拟,则有效令牌通常被视为线程上的令牌。如果与安全对象交互的线程不是模拟,则检查进程上的令牌以进行访问决策。

因此,有两种访问令牌,主要的和模拟的。每个进程都有一个主令牌,用于描述与该进程关联的用户帐户的安全上下文。主要访问令牌通常分配给进程以表示该进程的默认安全信息。另一方面,模拟访问令牌通常用于客户端/服务器场景。模拟令牌使线程能够在不同于拥有该线程的进程的安全上下文的安全上下文中执行。