淺析:AD組新增成員後為何客戶端要登出?
這是在我以及我同事身邊常常發生的例子。
例子
1. ABC專案組在廣州某Windows Server 檔案伺服器上有一個共享專案資料夾ABC,除了管理員外,只允許ABC專案組的成員訪問,在AD中體現為只允許GZ_ABC組有該資料夾訪問許可權。
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整合化身份驗證流程
作為登入過程的一部分,使用者將同時按下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步)。
圖 2.2.Kerberos票證包含PAC, 而PAC則包含使用者及其所在群組的SID
訪問本地資源
在工作站上通過命令解釋程式啟動的所有應用都將從命令解釋程式程式中繼承訪問令牌。因此,使用者一旦完成登入,任何本地資源訪問嘗試(例如,從命令解釋程式或由它啟動的程式中開啟檔案或列印文件)都會導致工作站將使用者訪問令牌同基於被訪問物件的安全訪問控制列表(ACL)進行對比。
訪問遠端資源
使用者針對遠端資源執行某項操作的嘗試(例如,開啟基於網路檔案共享儲存的檔案或將文件列印至網路印表機)都會導致客戶端和伺服器執行身份驗證程式。在預設狀態下,身份驗證程式將使用曾被用來登入工作站的憑據。Kerberos和NTLM身份驗證協議提供程式與工作站上LSA之間的整合可為Windows使用者帶來SSO體驗。圖2.3描述了上述流程。
圖 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,如需轉載請自行聯絡原作者
相關文章
- 給客戶端新增cookie客戶端Cookie
- 對比分析--淺析SSR(服務端渲染)和SPA(客戶端渲染)服務端客戶端
- Splunk新增LINUX客戶端新增監控Linux客戶端
- Laravel後臺作為客戶端,socket.io作為服務端,App或其他作為另一個客戶端Laravel客戶端服務端APP
- 為oracle客戶端瘦身:Oracle客戶端
- Scrcpy投屏原理淺析-嘗試用Flutter重寫它的客戶端Flutter客戶端
- 為oracle新增重做日誌組及重做日誌成員Oracle
- Winform客戶端引用WCF客戶端後,部分類無法正常使用ORM客戶端
- GRpc新增客戶端的五種方式RPC客戶端
- VOC(客戶之聲)讓每個客戶都成為VIP
- win10登出管理員賬戶的步驟_w10怎麼登出管理員Win10
- 專案在實施 客戶為何抱怨(轉)
- C#實現組播源及客戶端C#客戶端
- 7.4 為投注合約建立客戶端客戶端
- 寫給後端的Hadoop初級入門教程:Hadoop組成部分。後端Hadoop
- [提問交流]用onethink做服務,給ajax客戶端呼叫的時候,為何客戶端只第一次獲得到值,之後都是空值,這是為什麼?客戶端
- 《客戶端儲存技術》讀後感客戶端
- 實現客戶端加密,後臺解密薦客戶端加密解密
- win7環境下非管理員使用者組無法使用oracle客戶端Win7Oracle客戶端
- 仿易訊客戶端loading效果客戶端
- MongoDB視覺化客戶端工具MonjaDBMongoDB視覺化客戶端
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- 新增日誌檔案組與日誌檔案成員
- 客戶端,服務端客戶端服務端
- 服務端,客戶端服務端客戶端
- Beego當客戶端cookie為空時報錯Go客戶端Cookie
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 服務端渲染vs客戶端渲染到前後端同構服務端客戶端後端
- 一款獨立遊戲為何成為橫板動作遊戲的經典之作?《茶杯頭 》的BOSS 戰淺析遊戲
- Linux 組排程淺析Linux
- 「iOS」行車服務app 「客戶端、後端思路+程式碼」iOSAPP客戶端後端
- pycurl實現hadoop的客戶端功能薦Hadoop客戶端
- 物理DataGuard客戶端無縫切換--客戶端TAF 配置客戶端
- [Redis 客戶端整合] Java 中常用Redis客戶端比較Redis客戶端Java
- 如果呼叫遠端遠端url介面為https,且存在客戶端證書驗證,如何在客戶端處理HTTP客戶端
- 客戶端加解密客戶端解密