1. 程式人生 > >Windows中的SID詳解

Windows中的SID詳解

SID詳解
前言 
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)


如何修改映象作業系統的SID
SID也就是安全識別符號(Security Identifiers),是標識使用者、組和計算機帳戶的唯一的號碼。在第一次建立該帳戶時,將給網路上的每一個帳戶釋出一個唯一的 SID。Windows 2000 中的內部程序將引用帳戶的 SID 而不是帳戶的使用者或組名。如果建立帳戶,再刪除帳戶,然後使用相同的使用者名稱建立另一個帳戶,則新帳戶將不具有授權給前一個帳戶的權力或許可權,原因是該帳戶具有不同的 SID 號。安全識別符號也被稱為安全 ID 或 SID。如果我們要想檢視我們的SID有很多方法可以看見比如通過登錄檔就可以找到,另外我們也可以通過CMD中的命令來檢視SID,用命令“whoami /user”來檢視使用者的SID的

SID我們也看見了,那到底該如何來修改作業系統SID呢?其實很簡單,這裡依windows server 2003作業系統為例,在windows server 2003作業系統的安裝盤中有一個SUPPORT資料夾開啟該資料夾找到TOOLS子資料夾,然後找到DEPLOY.CAB檔案包進行解壓, 解壓完成之後,直接點選sysprep.exe檔案會出現圖二視窗,點選“工廠”按鈕,計算機會自動關閉,然後開啟計算機,再檢視SID就可以看見SID已經被修改了。

出處:http://lotus-3hao.blog.sohu.com/51996952.html

=================================================================

使用用Ghost製作的win2k3和winxp檔案具有相同的SID的解決辦法

特別宣告:這篇文件是從我的朋友發給我的郵件中整理的。我覺得非常好就把它共享出來,讓大家分享。非常感謝他為我們作的貢獻。

問題描述:
在Windows內部,每個賬號具有一個惟一的Security ID,可以在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion \ProfileList看到。SID是用來識別賬戶的惟一標誌,而不是通常以為的機器名\使用者名稱。而現有的Ghost檔案是把整個安裝好的系統分割槽直接備份下來,這樣,當把這個Ghost檔案恢復到別的機器上時,別的機器也具有了同樣的SID(欲知SID更多詳情,請參見http://www.winmag.com.cn/html/2005/03/20050324170613-1.shtml)。
帶來的問題:
1.潛在的安全問題。如果某臺機器設定了一個共享目錄,限制為只有本機Administrator才能完全訪問,但實際上來自別的機器的Administrator也有可能訪問。
2.在域中,涉及組策略等操作的話,也是以SID為機器或使用者的惟一標誌。如果LAN中存在重複的SID,組策略將不能正常工作。

解決方案:
使用Windows XP和2003安裝光碟中提供的附加工具Sysprep,它是專為在多臺計算機上部署Windows而設計的工具,可以擦除並重新生成SID。Sysprep工具在安裝光碟的support\tools\deploy.cab中,解壓將得到10個檔案。你可以使用任意語言的deploy.cab。

額外發現:
經過一天的研究,Sysprep除了重新生成SID之外,還可以為我們做這樣兩件非常好的事:
1.將Windows啟用期限展期。
我們的測試環境中所使用的Windows XP和2003都是未啟用的。受到啟用期限的限制,我們不能使用真實時間,而是要根據Ghost檔案的日期相應調整機器日期。比如Ghost檔案日期不幸為2001年1月1日,測試機的日期就必須使用2001年1月的某天。這樣的機器一旦加入其它時間的域中,將被同步時間而導致Windows過期。而經過Sysprep,Windows重啟時將重新執行所有系統設定。重啟之後Windows XP就可以重新恢復30天的啟用日期,2003類推。想無限Sysprep嗎?忘掉這個念頭吧,早就試過了,Sysprep的展期功能只允許使用三次-_-b..正確的解決方法見後。
2.重新掃描硬體並安裝驅動。
我們之前的Ghost檔案中是已經安裝有驅動程式的,所以這些Ghost檔案只能對應於特定機型。如果將Dell 170L的Ghost恢復到了Dell 3000上,有時會出現驅動不能正常工作,但是又無法安裝新驅動的情況(雖然他們都是Intel 865G晶片組,板載顯示卡網絡卡都一樣……奇怪中)。
同樣經過Sysprep,可以擦除HAL(硬體抽象層)資訊,Windows重啟時將重新掃描硬體。如果系統已經安裝某些驅動檔案,這些驅動會被自動識別。即使不能自動識別,也不會影響安裝新的驅動。惟一的問題是暫時無法將若干種顯示卡、網絡卡、晶片組的驅動整合到一起,如果可以做到,今後我們使用Ghost備份就再也不用區分機型了,僅僅需要區分語言。但是實際上的Windows部署從來都是不帶驅動的,驅動需要自行安裝:(

Sysprep簡解:
WinXP\pro\support\tools\delpoy.cab解壓到本地資料夾中,將得到10個檔案。其中的Sysprep.exe就是我們主要需要的。
下圖是執行介面:


說明:
第一個按鈕Reseal就是我們所需要的“重新封裝”,意即Windows將像重新安裝一樣去進行配置。
在點選Reseal之前,下方的Flags區域是可選項。Minisetup是我們惟一需要的,“最小化安裝”,意即Windows僅保留檔案,而不使用任何驅動和設定。如果不選此項,Reseal之後不會重新掃描硬體,而是僅僅重新生成SID。
其它選項,PnP指在重啟後掃描非即插即用裝置,這年頭……似乎不用了吧;NoSIDGen指不生成SID,這是為了便於OEM商在單臺計算機上恢復出廠設定用的,不需要重新生成SID;Pre-actived指不使用“展期”功能。

Reseal重啟之後會和使用光碟第一次安裝一樣,要求我們輸入各種使用者、網路、區域等資訊。
系統當前時間等。

出處:http://www.cnblogs.com/dwfbenben/archive/2006/02/28/339407.html