且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

浅析:AD组添加成员后为何客户端要注销?

更新时间:2021-11-14 09:31:04

这是在我以及我同事身边常常发生的例子。

例子
1. 
ABC项目组在广州某Windows Server 文件服务器上有一个共享项目文件夹ABC,除了管理员外,只允许ABC项目组的成员访问,在AD中体现为只允许GZ_ABC组有该文件夹访问权限。

浅析:AD组添加成员后为何客户端要注销?


2. 项目中来了一个新员工a1,走完了项目文件夹申请的审批流程后会要求IT team开启其访问ABC文件夹的权限。
 
3. IT team将a1的域帐号加到GZ_ABC组中,回复邮件给a1说注销重登系统就拥有访问权限。 

4. 两三个小时后,a1 打电话给IT team报告仍然不能访问(Tommy啊,我等了大半个上午啦,你不是说给了我权限吗,怎么我还访问不了啊)。IT team告诉a1需要按邮件步骤注销重登客户端。 

5. 注销重新再登录后,a1成功访问到文件夹。 

这是一个常常发生在身边又很疑惑的例子,为什么用户需要注销而不能等上两三个小时刷新呢?而假如在共享文件夹直接添加a1的域帐号,a1为什么又无需注销呢?以下的浅谈希望对你的疑惑有所帮助。 

原因

其实啊,简单点说,当用户登录后,他会收到一个PAC(权限属性证书),这个PAC则包含用户的所有SIDs,包括他所在群组的SID。当他要访问某个网络资源的时候,会导致用户的这些SIDs与目标资源上的ACL进行对比而决定他是否有资格访问。为什么用户需要注销重登系统是因为包含的SID的PAC只在这种情况下刷新。


详解

想了解更多?下面是一个比较详细的说明。

登录流程

在Windows操作系统中,用户登录机制是客户端计算机和整个网络不可缺少的组成部分。用户只需使用自己的域凭据接受一次身份验证,即可登录到网络系统。这种单一登录机制允许登录到工作站的用户访问已被授予相关权限的任何本地或远程资源。登录过程如图2.1所示。

图 2.1.用于登录桌面系统的Windows集成化身份验证流程 
 

浅析:AD组添加成员后为何客户端要注销?

作为登录过程的一部分,用户将同时按下CTRL+ALT+DEL组合键以激活图形化识别与验证动态链接库(GINA)。这个操作将启动安全验证程序(SAS),并向用户弹出Windows登录对话框(第1步)。接着,用户将自己的凭据输入登录对话框。

然后,本地安全机构(LSA)会向运行Active Directory的域控制器发出申领授权票证的票证(TGT)请求(即TGT-REQ,第2步)。在域控制器LSA服务中运行的Kerberos v5协议密钥分发中心(KDC)将调用域控制器上的服务帐户管理器(SAM),从而对用户名和密码加以验证(第3步)。如果凭据正确无误且不存在阻止用户登录的其它策略要素(如时间或工作站限制),域控制器上的LSA就会将Kerberos v5身份验证协议票证(第4步)或NT LAN Manager(NTLM)授权数据(未予列示)传回给客户端上的LSA。

注释:虽然Windows客户端和服务器中的身份验证数据包(即身份验证服务提供程序)还使用着其它身份验证协议,但本文主要介绍Kerberos v5身份验证协议,只会在必要时提及NTLM。

创建授权上下文环境

Kerberos票证内容包含权限属性证书(PAC),该证书收录了用户及其所在群组的安全标识符(SID)信息。图2.2展示了这种票证结构。

工作站可从Kerberos票证(图2.1中的第5步)或NTLM授权数据中生成一个访问令牌。(虽然这种访问令牌有时被称作安全上下文,但在讨论与网络身份验证相对应的本地授权机制时,访问令牌的称谓更加贴切。)

Windows访问令牌包含:
• 用户的主SID。
• 来自用户帐户、域或林的全局组和通用组SID。
• 来自工作站所在域的域本地SID(如果它们区别于用户所在域)。
• 明确授予用户或源自组成员资格的权限。

客户端计算机上的登录程序会启动一个命令解释程序实例(通常为Explorer.exe文件),并将用户访问令牌附着于命令解释程序(图2.1中的第6步)。

浅析:AD组添加成员后为何客户端要注销?

图 2.2.Kerberos票证包含PAC, 而PAC则包含用户及其所在群组的SID


访问本地资源

在工作站上通过命令解释程序启动的所有应用都将从命令解释程序进程中继承访问令牌。因此,用户一旦完成登录,任何本地资源访问尝试(例如,从命令解释程序或由它启动的进程中打开文件或打印文档)都会导致工作站将用户访问令牌同基于被访问对象的安全访问控制列表(ACL)进行对比。

访问远程资源

用户针对远程资源执行某项操作的尝试(例如,打开基于网络文件共享存储的文件或将文档打印至网络打印机)都会导致客户端和服务器执行身份验证程序。在缺省状态下,身份验证程序将使用曾被用来登录工作站的凭据。Kerberos和NTLM身份验证协议提供程序与工作站上LSA之间的集成可为Windows用户带来SSO体验。图2.3描述了上述流程。

浅析:AD组添加成员后为何客户端要注销?

图 2.3.远程资源登录身份验证流程


这个例子假设通过Kerberos协议实现工作站登录--Microsoft Windows? 2000和Windows Server 2003操作系统中的缺省身份验证机制。如果通过NTLM协议实现初次登录,登录程序可能有所区别。

用户试图访问在运行Windows Server 2003的远程计算机上存储的文件(第1步)。服务器要求执行身份验证,并向用户提出“质询”(第2步)。接着,基于客户端的LSA为申请必要的身份验证凭据而激活Kerberos验证数据包(第3步)。Kerberos验证数据包将通过从客户端票证缓存中检索先前已核发的有效票证(第4步)或向服务器申请新票证(TKT,未予列示)来满足上述请求。最后,客户端会向服务器发送票证,以回答服务器提出的质询。

一旦票证通过验证(第6步),Kerberos身份验证服务提供程序就会生成前述访问令牌(第7步)。而服务器则通过这个令牌模拟(第8步)客户端用户。身份模拟允许服务器依靠操作系统将从访问令牌中捕捉的用户资格与目标资源上的ACL进行对比,从而强制实现正确的授权(第9步)。接着,操作系统将视具体情况决定允许(如图2.3所示)或拒绝操作请求。


想深入了解?可以参考 
http://msdn.microsoft.com/en-us/library/cc237917(v=prot.10).aspx

http://www.microsoft.com/china/technet/security/topics/identitymanagement/idmanage/P3Intran_1.mspx?mfr=true


 




本文转自 VirtualTom 51CTO博客,原文链接:http://blog.51cto.com/virtualtom/809947,如需转载请自行联系原作者