NewSID v4.10

作者:Mark Russinovich 和 Bryce Cogswell

發佈日期: 2006 年 11 月 1 日




重要:

說到 SID,Microsoft 不支援使用 NewSID 所準備的映像,我們只支援使用 SysPrep 所準備的映像。Microsoft 尚未測試所有部署複製選項的 NewSID。

如需更多有關 Micrrsoft 官方原則的資訊,請參閱以下知識庫的文章:

回到頁首 回到頁首


介紹

許多企業組織使用磁碟映像複製執行大量 Windows 還原。這個技術牽涉到把完整安裝和設定的 Windows 電腦的磁碟機複製到其他電腦的磁碟機上。這些其他電腦實際上都已經過相同的安裝程序,而且立刻能夠使用。

雖然這個方法省去了其他還原方式的作業時間與麻煩,但是還有一個主要的問題,就是每個複製的系統,都有相同的電腦安全識別碼 (SID)。這個問題會影響到各種工作群組環境中的安全性,而且卸除式媒體安全性在具有多重相同電腦 SID 的網路中也會受到影響。

Windows 社群的需求已經讓不少公司進行程式的開發,這些程式可以在系統完成複製後,變更電腦的 SID。 然而,Symantec 的 SID Changer 和 Symantec 的 Ghost Walker 都是以公司高階產品的姿態販售。更進一步來說,兩者皆從 DOS 命令提示 (Altiris 的變更器和 NewSID 類似) 執行。

NewSID 是我們開發出來的程式,用來變更電腦的 SID。它既是免費的程式,也是 Win32 程式,也就是說,它能輕易地在之前已經複製的系統上執行。NewSID 可以在 Windows NT 4、Win2000、WinXP 和 Windows .NET Server 中執行。

使用這個程式之前,請先讀完整篇文章。

版本資訊:

  • 4.0 版引入支援 WinXP 和 .NET Server 和精靈樣式介面的功能,而且還讓您能夠指定想套用的 SID、登錄壓縮,和重新命名電腦 (會造成 NetBIOS 和 DNS 名稱變更) 的選項。

  • 3.02 版修正的錯誤是,將舊 SID 機碼重新命名為新 SID 時,NewSid 無法以無效的數值類型正確地複製預設值。NT 實際上在 SAM 中多次使用這種無效的數值。這個錯誤的徵狀就是在帳戶資訊經由授權的使用者更新時,拒絕錯誤訊息報告存取。

  • 3.01 版新增了 Microsoft Transaction Server 所建立的可存取登錄機碼的解決方法。如果沒有這個解決方法,NewSID 就會突然結束。

  • 3.0 版引入 SID 同步功能,這種功能能夠導引 NewSID 從另一部電腦取得 SID 進行套用。

  • 2.0 版具有自動模式選項,同時也能變更電腦名稱。

  • 1.2 版修復了在 1.1 版中的錯誤,這個錯誤就是某個檔案系統安全性描述元都沒有更新。

  • 比較起來,1.1 版修正了僅影響某些安裝的次要錯誤。它同時也完成更新,並且變更與檔案的權限設定和印表機共用相關聯的 SID。

回到頁首 回到頁首

複製和其他還原方法

在公司環境中執行大量 Windows 還原 (通常是上百部電腦) 的其中一項最常用的方法,就是根據磁碟複製的技術。系統管理員在公司的範本電腦上,安裝了基礎作業系統和使用的附加元件軟體。完成公司網路中作業的電腦之設定後,自動的磁碟或系統複製工具 (像是 Symantec'sGhostPowerQuest'sImage DriveAltiris'RapiDeploy),會用來把範本電腦的磁碟機複製到數十或數百台電腦上。接著這些複製會接收最後變更,像是特殊名稱的指派,然後讓公司員工使用。

另一個常用的還原是使用 Microsoft sysdiff 公用程式 (其為 Windows Resource Kit 的一部份)。這個工具需要系統管理員在每部電腦上執行完整的安裝 (通常是執行指令的自動安裝),然後 sysdiff 會自動化附加元件軟體安裝映像的應用程式。

由於安裝已略過,加上複製磁區比複製檔案更有效率,因此和 sysdiff 安裝相比,以複製為基礎的還原能夠節省更多時間。此外,系統管理員不需學習如何使用自動安裝或 sysdiff,或是建立和偵錯安裝指令碼。光是這樣就能節省許多工作時間。

回到頁首 回到頁首


SID 複製問題

這個有關複製的問題,就是它只受到 Microsoft 支援,這一點令人感到受到很大的限制。Microsoft 對此已經提出,如果是已經達到在 Windows 安裝程式的圖形使用者為介面,才會支援複製的系統。當安裝符合這個情況時,電腦才會分派一個名稱和唯一電腦 SID。如果系統在這個步驟後才複製,複製的電腦將會都具有相同的電腦 SID。請注意,如果只有變更電腦名稱或新增電腦至不同網域的話,是無法變更電腦 SID。在電腦之前已經與網域相關聯的情況下,變更名稱或網域只會造成網域 SID 的變更。

為了暸解複製會造成問題,首先必須先清楚知道電腦上的每個本機帳戶都已受到指派 SID。本機帳戶的 SID 包括電腦的 SID 和附加的 RID (相關的識別字元)。RID 以固定值為首,而且每增加一個帳戶就會增加一個數值。也就是說,例如一部電腦上的第二個帳戶,將會接收和複製的第二個帳戶相同的 RID。結果就會變成兩個帳戶都擁有相同的 SID。

複製 SID 在網域為基礎的環境中並不構成問題,因為網域帳戶擁有的 SID 是根據網域 SID 而來。不過,依照 Microsoft 知識庫文章 Q162001 〈請勿對已安裝的 Windows 版本進行磁碟複製〉 的內容,在工作群組環境中的安全性則是根據本機帳戶 SID。因此,如果兩部電腦的使用者擁有相同的 SID,則工作群組將無法分辨這些使用者。所有的資源,包括檔案和登錄機碼,能夠存取的使用者,其他使用者也可以存取。

另一個複製 SID 的執行個體會造成的問題,就是格式為 NTFS 的卸除式媒體,和本機帳戶安全性屬性都是套用至檔案和目錄中。如果這種媒體移動至擁有相同 SID 的不同電腦上,則本來無法存取檔案的本機帳戶就可能會變成能夠存取,只要他們的帳戶 ID 剛好符合安全性屬性中的 ID。不過在擁有不同 SID 的電腦上則不可能發生這種情況。

Mark 在已經出版的 Windows NT Magazine 6 月號中,已經撰寫了一篇 NT Rollout Options 的文章。文章中進一步討論了有關複製 SID 的問題,並描述了 Microsoft 針對「複製」所持的官方立場。如需檢視網路上是否有複製 SID 的問題,請使用 PsGetSid 顯示機器 SID。

回到頁首 回到頁首


NewSID

NewSID 是我們所開發的程式,用來變更電腦的 SID。一開始它會為電腦產生隨機的 SID,接著在登錄和檔案安全描述元中,找到的既有電腦 SID 的執行個體加以更新,以新的 SID 加以取而代之。NewSID 需要系統管理權限才能執行。它具備兩種功能:變更 SID 和變更電腦名稱。

如需使用 NewSID 的自動執行選項,請指定命令列上的 "/a"。您也可以把它導引至自動變更電腦的名稱,只要將新的名稱加到 "/a" 切換後即可。例如:

newsid /a [newname]

在不需提示的情況下就會執行 NewSID,將電腦名稱變更為 "newname",而且如果一切都順利的情況下,重新開機。

注意: 如果您想要在正在執行 IISAdmin 的系統上執行 NewSID 的話,則在執行 NewSID 之前,就必須先停止 IISAdmin 服務。使用這個命令來停止 IISAdmin 服務:net stop iisadmin /y

NewSID 的 SID 同步化功讓您指定應該從不同電腦取得的新的 SID,而非隨機產生。這個功能可以讓 BDC 能夠移動至新的網域,因為 BDC 和網域之間的關係是受到擁有和其他 DC 相同的電腦 SID 所辨識。只要選擇 [同步化 SID] 按鈕,然後輸入目標電腦的名稱即可。您必須擁有權限去變更目標電腦登錄機碼的安全性設定,也就是說,您必須以網域系統管理員的身份登入才能使用此項功能。

請注意,當您執行 NewSID 時,登錄的大小會成長,所以請確定登錄的最大值可以容納成長。我們已經發現這種成長對系統效能沒有任何明顯的影響。登錄成長的原因,在於當安全性設定被 NewSID 套用時,它會變成分散的狀態。當設定遭到移除時,登錄並沒有因此壓縮。

請注意,雖然我們已經完成 NewSID 的完整測試,但是您還是必須自行承擔個人使用的風險。由於任何軟體都會變更檔案和登錄設定,因此強烈建議在執行 NewSID 之前,請先完整備份電腦的所有資料。

回到頁首 回到頁首


Moving a BDC

將 BDC 從某個網域移至另一個時,以下是幾個應該遵守的步驟:

  1. 開啟要移動和登入的 BDC。使用 NewSID 同步化 BDC 的 SID,連同網域的 PDC 一起至欲移動的 BDC。

  2. 針對所變更的 SID (BDC),請重新啟動系統。由於網域 BDC 現在和已經擁有作用中的 PDC 關聯,它當做新的網域中的 BDC 開機。

  3. BDC 會以工作站型態出現在 Server Manager 中,所以使用 [加入網域] 按鈕將 BDC 加入至其新的網域。加入時請確認指定 BDC 廣播按鈕。

回到頁首 回到頁首


如何運作

NewSID 藉著讀取既有的電腦 SID 啟動。電腦的 SID 就儲存在 SECURITY\SAM\Domains\Account 下的登錄 SECURITY Hive 裡。這個機碼具備以 F 和 V 命名的兩個值。V 值是一個二進位值,其中內嵌電腦 SID。NewSID 確認這固 SID 為標準格式 (3 32 位元授權欄位必須在 3 32 位元局部授權之前)。

接著,NewSID 會為電腦隨機產生一組新的 SID。NewSID 的產生為建立真正隨機96 位元值帶來很大的不便,它取代了組成電腦 SID 的 3 局部授權值的 96 位元。

取代電腦 SID 的三個階段如下。首先,SECURITY 和 SAM 登錄 Hives會因為是舊電腦 SID 的機碼值而接受掃描,機碼名稱亦然。當發現 SID 是一個數值時,它會被新電腦 SID 所取代,而當 SID 是一個名稱時,機碼和子機碼就會被複製成新的子機碼,這個子機碼會擁有同樣的名稱,除了新 SID 取代了舊 SID 以外。

最後兩個階段牽涉到更新安全性描述元。登入機碼和 NTFS 檔案皆具有與它們的安全性關聯。安全性描述元包含了可以識別擁有資源的帳戶的項目、主要群組擁有者的群組的項目,還有指定使用者或群組 (也就是 DACL) 所允許的動作的項目選用清單、指定特定使用者或群組所執行的動作 (將可以產生系統事件記錄 (即 SACL) 的項目選用清單)。使用者或群組供這些安全性描述元和其 SID 識別,而且如之前所述,本機使用者帳戶 (除了內建帳戶,像是系統管理員、訪客等等) 的 SID 都是由電腦 SID 加上 RID 所組成。

安全性描述元更新的第一階段會發生在電腦上的所有 NTFS 檔案系統檔案上。每個安全性描述元都會因為電腦 SID 的發生而受到掃描。當 NewSID 找到之後,它會用新的電腦 SID 將之取代。

安全性描述元更新的第二階段是在登錄上執行。首先,NewSID 必須確定它掃描所有的 Hive,不是只有載入的那些而已。每個使用者帳戶在登入時擁有載入為 HKEY_CURRENT_USER 的登錄 Hive,可是當它們並沒有登入時,卻是維持在使用者設定檔目錄的磁碟上。NewSID 藉由列舉 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList 機碼的方式,來識別所有使用者 Hive 的位置,而這個機碼指向他們所儲存的目錄。接著它使用 HKEY_LOCAL_MACHINE 下的 RegLoadKey 將它們載入至登錄中,然後掃描整個登錄,檢查每個尋找舊電腦 SID 的安全性描述元。 執行的更新就和執行檔案一般,當它完成時,NewSID 會卸載所載入的使用者 Hive。到了最後一個步驟,NewSID 掃描 HKEY_USERS 機碼,其中包含了目前載入使用者的 Hive 和 .Default Hive。這是一個必要的步驟,因為 Hive 無法載入兩次,所以登入使用者 Hive 在 NewSID 正在載入其他使用者 Hive時,就不會被載入至 HKEY_LOCAL_MACHINE

最後,NewSID 必須更新 ProfileList 子機碼以參照新的帳戶 SID。在帳戶 SID 變更為反映新的電腦 SID 之後,使 Windows NT 能夠正確地將設定檔和使用者帳號互相關聯,這個步驟是必須的。

NewSID 利用提供自己下列權限的方式,來確保它可以存取和調整系統中每個檔案和登錄機碼:系統、備份、還原和取得擁有權。

回到頁首 回到頁首


使用資源

完整的 NewSID 原始程式碼已經供做教育之用。您也許無法使用在商業或免費 SID 變更產品中的這個程式碼,但可以使用在其他程式中的技術,做為私人或商業用途。


回到頁首 回到頁首