前言
SID也就是安全標識符(Security Identifiers),是標識用戶、組和計算機賬戶的惟一的號碼。在第一次建立該賬戶時,將給網絡上的每個賬戶發佈一個惟一的 SID。Windows 2000 中的內部進程將引用賬戶的 SID 而不是賬戶的用戶或組名。若是建立賬戶,再刪除賬戶,而後使用相同的用戶名建立另外一個賬戶,則新賬戶將不具備受權給前一個賬戶的權力或權限,緣由是該賬戶具備不一樣的 SID 號。安全標識符也被稱爲安全 ID 或 SID。
SID的做用
用戶經過驗證後,登錄進程會給用戶一個訪問令牌,該令牌至關於用戶訪問系統資源的票證,當用戶試圖訪問系統資源時,將訪問令牌提供給 Windows NT,而後 Windows NT 檢查用戶試圖訪問對象上的訪問控制列表。若是用戶被容許訪問該對象,Windows NT將會分配給用戶適當的訪問權限。
訪問令牌是用戶在經過驗證的時候有登錄進程所提供的,因此改變用戶的權限須要註銷後從新登錄,從新獲取訪問令牌。
SID號碼的組成
若是存在兩個一樣SID的用戶,這兩個賬戶將被鑑別爲同一個賬戶,原理上若是賬戶無限制增長的時候,會產生一樣的SID,在一般的狀況下SID是惟一的,他由計算機名、當前時間、當前用戶態線程的CPU耗費時間的總和三個參數決定以保證它的惟一性。
一個完整的SID包括:
? 用戶和組的安全描述
? 48-bit的ID authority
? 修訂版本
? 可變的驗證值Variable sub-authority values
例:S-1-5-21-310440588-250036847-580389505-500
咱們來先分析這個重要的SID。第一項S表示該字符串是SID;第二項是SID的版本號,對於2000來講,這個就是1;而後是標誌符的頒發機構(identifier authority),對於2000內的賬戶,頒發機構就是NT,值是5。而後表示一系列的子頒發機構,前面幾項是標誌域的,最後一個標誌着域內的賬戶和組。
SID的得到
開始-運行-regedt32-HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases\Members,找到本地的域的代碼,展開後,獲得的就是本地賬號的全部SID列表。
其中不少值都是固定的,好比第一個000001F4(16進制),換算成十進制是500,說明是系統創建的內置管理員賬號administrator,000001F5換算成10進制是501,也就是GUEST賬號了,詳細的參照後面的列表。
這一項默認是system能夠徹底控制,這也就是爲何要得到這個須要一個System的Cmd的Shell的緣由了,固然若是權限足夠的話你能夠把你要添加的賬號添加進去。
或者使用Support Tools的Reg工具:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
還有一種方法能夠得到SID和用戶名稱的對應關係:
1. Regedt32:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion \ProfileList
2. 這個時候能夠在左側的窗口看到SID的值,能夠在右側的窗口中ProfileImagePath看到不一樣的SID關聯的用戶名,
好比%SystemDrive%\Documents and Settings\Administrator.momo這個對應的就是本地機器的管理員SID
%SystemDrive%\Documents and Settings\Administrator.domain這個就是對應域的管理員的賬戶
另外微軟的ResourceKit裏面也提供了工具getsid,sysinternals的工具包裏面也有Psgetsid,其實感受原理都是讀取註冊表的值罷了,就是省了一些事情。
SID重複問題的產生
安裝NT/2000系統的時候,產生了一個惟一的SID,可是當你使用相似Ghost的軟件克隆機器的時候,就會產生不一樣的機器使用一個SID的問題。產生了很嚴重的安全問題。
一樣,若是是重複的SID對於對等網來講也會產生不少安全方面的問題。在對等網中賬號的基礎是SID加上一個相關的標識符(RID),若是全部的工做站都擁有同樣的SID,每一個工做站上產生的第一個賬號都是同樣的,這樣就對用戶自己的文件夾和文件的安全產生了隱患。
這個時候某我的在本身的NTFS分區創建了共享,而且設置了本身能夠訪問,可是實際上另一臺機器的SID號碼和這個同樣的用戶此時也是能夠訪問這個共享的。
SID重複問題的解決
下面的幾個試驗帶有高危險性,慎用,我已經付出了慘痛的代價!
微軟在ResourceKit裏面提供了一個工具,叫作SYSPREP,這個能夠用在克隆一臺工做站之前產生一個新的SID號碼。 下圖是他的參數
這個工具在DC上是不能運行這個命令的,不然會提示
可是這個工具並非把全部的賬戶徹底的產生新的SID,而是針對兩個主要的賬戶Administrator和Guest,其餘的賬號仍然使用原有的SID。 下面作一個試驗,先得到目前賬號的SID: S-1-5-21-2000478354-688789844-839522115 而後運行Sysprep,出現提示窗口: 肯定之後須要重啓,而後安裝程序須要從新設置計算機名稱、管理員口令等,可是登錄的時候仍是須要輸入原賬號的口令。 進入2000之後,再次查詢SID,獲得: S-1-5-21-759461550-145307086-515799519,發現SID號已經獲得了改變,查詢註冊表,發現註冊表已經所有修改了,固然所有修改了?。 另外sysinternals公司也提供了相似的工具NTSID,這個到後來才發現是針對NT4的產品,界面以下: 他可不會提示什麼再DC上不能用,接受了就開始,結果致使個人一臺DC崩潰,重啓後提示「安全帳號管理器初始化失敗,提供給識別代號頒發機構的值爲無效值,錯誤狀態0XC0000084,請按肯定,重啓到目錄服務還原模式...」,即便切換到目錄服務還原模式也再也進不去了! 想一想本身膽子也夠大的啊,好在是一臺額外DC,可是本身用的機器,致使重裝系統半天,重裝軟件N天?,因此再次提醒你們,作以上試驗的時候必定要慎重,最好在一臺可有可無的機器上試驗,不然出現問題我不負責哦?。另外在Ghost的新版企業版本中的控制檯已經加入了修改SID的功能,本身尚未嘗試,有興趣的朋友能夠本身試驗一下,不過從原理上應該都是同樣的。 文章發表以前,又發現了微軟本身提供的一個工具「Riprep」,這個工具主要用作在遠程安裝的過程當中,想要同時安裝上應用程序。管理員安裝了一個標準的公司桌面操做系統,並配置好應用軟件和一些桌面設置以後,可使用Riprep從這個標準的公司桌面系統製做一個Image文件。這個Image文件既包括了客戶化的應用軟件,又把每一個桌面系統必須獨佔的安全ID、計算機帳號等刪除了。管理員能夠它放到遠程安裝服務器上,供客戶端遠程啓動進行安裝時選用。可是要注意的是這個工具只能在單硬盤、單分區並且是Professional的機器上面用。 下面是SID末尾RID值的列表,括號內爲16進制: Built-In Users DOMAINNAME\ADMINISTRATOR S-1-5-21-917267712-1342860078-1792151419-500 (=0x1F4) DOMAINNAME\GUEST S-1-5-21-917267712-1342860078-1792151419-501 (=0x1F5) Built-In Global Groups DOMAINNAME\DOMAIN ADMINS S-1-5-21-917267712-1342860078-1792151419-512 (=0x200) DOMAINNAME\DOMAIN USERS S-1-5-21-917267712-1342860078-1792151419-513 (=0x201) DOMAINNAME\DOMAIN GUESTS S-1-5-21-917267712-1342860078-1792151419-514 (=0x202) Built-In Local Groups BUILTIN\ADMINISTRATORS S-1-5-32-544 (=0x220) BUILTIN\USERS S-1-5-32-545 (=0x221) BUILTIN\GUESTS S-1-5-32-546 (=0x222) BUILTIN\ACCOUNT OPERATORS S-1-5-32-548 (=0x224) BUILTIN\SERVER OPERATORS S-1-5-32-549 (=0x225) BUILTIN\PRINT OPERATORS S-1-5-32-550 (=0x226) BUILTIN\BACKUP OPERATORS S-1-5-32-551 (=0x227) BUILTIN\REPLICATOR S-1-5-32-552 (=0x228) Special Groups \CREATOR OWNER S-1-3-0 \EVERYONE S-1-1-0 NT AUTHORITY\NETWORK S-1-5-2 NT AUTHORITY\INTERACTIVE S-1-5-4 NT AUTHORITY\SYSTEM S-1-5-18 NT AUTHORITY\authenticated users S-1-5-11 *.(over)