共用方式為


NewSID v4.10

作者:Mark Russinovich

發佈日期:2006 年 11 月 1 日

注意:NewSID 已淘汰,無法再下載。 請參閱 Mark Russinovich 的部落格文章:NewSID 淘汰和機器 SID 複製迷思

重要

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

如需 Microsoft 官方原則的詳細資訊,請參閱下列知識庫文章:

簡介

許多組織都會使用磁碟映像複製來執行 Windows 的大量推出。 這項技術牽涉到將完整安裝和設定的 Windows 電腦之中的磁碟複製到其他電腦的磁碟機上。 這些其他電腦實際上似乎已經通過相同的安裝程序,並立即可供使用。

雖然此方法可節省工作時間,並省卻其他推出方法的麻煩,但每個複製的系統都有相同的電腦安全性性識別碼 (SID) 的主要問題。 這個事實會危害工作組環境中的安全性,而且卸載式媒體安全性也可以在具有多個相同電腦 SID 的網路中遭到入侵。

Windows 社群的需求導致數家公司開發可在系統複製後變更電腦 SID 的程式。 不過,Symantec 的 SID Changer 和 Symantec 的Ghost Walker 只作為每家公司高端產品的一部分出售。 此外,它們都會從 DOS 命令提示字元執行 (Altiris 的變更器類似於 NewSID)。

NewSID 是我們開發的程式,會變更電腦的 SID。 它是免費的程式,而且是 Win32 程式,這表示它可以輕鬆地在先前複製的系統上執行。

請先閱讀整篇文章,再使用此程式。

版本資訊:

  • 4.0 版引進了對 Windows XP 和 .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 的 GhostPowerQuest 的 Image DriveAltiris 的 RapiDeploy) 可用來將範本電腦的磁碟機複製到數十部或數百部電腦。 然後,這些複製品會進行最終調整,例如指派唯一名稱,然後由公司員工使用。

另一種熱門的推出方式是使用 Microsoft sysdiff 公用程式 (Windows Resource Kit 的一部分)。 此工具要求系統管理員在每個電腦上執行完整安裝 (通常是指令碼自動安裝),然後 sysdiff 會自動套用附加元件軟體安裝映像。

因為會略過安裝,而且因為磁碟磁區複製比檔案複製更有效率,因此複製型推出可以在可比較的 sysdiff 安裝期間節省數十個小時。 此外,系統管理員不需要瞭解如何使用自動安裝或 sysdiff,也不需要建立和偵錯安裝指令碼。 只要這麼做就可以節省數小時的工作時間。

SID 複製問題

複製的問題在於,只有 Microsoft 在非常有限的意義上才支援它。 Microsoft 表示,只有在完成 Windows 安裝程式 GUI 部分之前,才支援複製系統。 安裝到達此點時,電腦會獲指派名稱和唯一的電腦 SID。 如果在此步驟之後複製系統,則複製的電腦將會有相同的電腦 SID。 請注意,只要變更電腦名稱或將電腦新增至不同的網域,就不會變更電腦 SID。 如果電腦先前與網域相關聯,則變更名稱或網域只會變更網域 SID。

若要瞭解複製可能會導致的問題,必須先瞭解電腦上的個別本機帳戶如何獲得指派的 SID。 本機帳戶的 SID 包含電腦的 SID 和附加的 RID (相對識別碼)。 RID 會從固定值開始,而且會針對每個建立的帳戶增加一個。 這表示一部電腦上的第二個帳戶,例如,會提供與複製品上第二個帳戶相同的 RID。 結果是這兩個帳戶具有相同的 SID。

重複的 SID 不是網域型環境中的問題,因為網域帳戶是以網域 SID 為基礎。 但是,根據 Microsoft 知識庫文章 Q162001「不要對於安裝的 Windows NT 版本進行磁碟複製」,工作組環境安全性是以本機帳戶 SID 為基礎。 因此,如果兩部電腦有使用相同 SID 的使用者,工作組將無法區分使用者。 一個使用者有權存取而另一個資使用者也有權存取的所有資源,包括檔案和登錄機碼。

另一個重複 SID 可能會造成問題的情況是,使用 NTFS 格式化卸除式媒體,而本機帳戶安全性屬性會套用至檔案和目錄。 如果這類媒體移至具有相同 SID 的不同電腦,則如果帳戶識別碼符合安全性屬性中的檔案,則無法存取檔案的本機帳戶。 如果電腦有不同的 SID,就不可能這樣做。

Mark 撰寫的文章標題為「NT 推出選項」,發表在6月的《Windows NT 雜誌》上。 其中更詳細地討論重複的 SID 問題,並提供 Microsoft 對於複製的官方立場。 若要查看網路上是否有重複的 SID 問題,請使用 PsGetSid 顯示電腦 SID。

NewSID

NewSID 是我們為了變更電腦 SID 而開發的程式。 它會先為電腦產生隨機的 SID,然後繼續更新在登錄中找到的現有電腦 SID 例項,並在檔案安全性描述元中以新的 SID 取代出現的項目。 NewSID 需有系統管理權限才能執行。 它有兩個功能:變更 SID,以及變更電腦名稱。

若要使用 NewSID 的自動執行選項,請在命令列上指定「/a」。 您也可以將新名稱包含在「/a」參數之後,以指示它自動變更電腦的名稱。 例如:

newsid /a [newname]

如果一切都沒問題,就會執行 NewSID 而不提示、將電腦名稱變更為「newname」,並重新啟動電腦。

注意:如果您想要執行 NewSID 的系統正在執行 IISAdmin,您必須先停止 IISAdmin 服務,再執行 NewSID。 使用此命令來停止 IISAdmin 服務:net stop iisadmin /y

NewSID 的 SID 同步功能可讓您指定應該從不同的電腦取得新的 SID,而不是隨機產生新 SID。 這項功能可讓您將備份網域控制站 (BDC) 移至新的網域,因為 BDC 與網域的關聯性是由它與其他網域控制站相同的電腦 SID 所識別。 只要選擇 [同步 SID] 按鈕,然後輸入目的電腦的名稱。 您必須具有權限,才能變更目的電腦登錄機碼的安全性設定,這通常表示您必須以網域系統管理員身分登入,才能使用此功能。

請注意,您執行 NewSID 時,登錄的大小將會增大,因此請確定登錄大小上限可以因應增大。 我們發現如此的增大對系統效能沒有任何可察覺的影響。 登錄增大的原因是當 NewSID 套用暫存安全性設定時,它會變得分散。 移除設定時,不會壓縮登錄。

重要事項:請注意,雖然我們已徹底測試 NewSID,但您必須自行使用它。 如同任何變更檔案和登錄設定的軟體,強烈建議您在執行 NewSID 之前完全備份您的電腦。

移動 BDC

以下是您想要將 BDC 從一個網域移至另一個網域時,應該遵循的步驟:

  1. 啟動您想要移動並登入的 BDC。 使用 NewSID 將 BDC 的 SID 與您想要移動 BDC 的網域所用的 PDC 同步。
  2. 重新啟動您變更 SID 的系統 (BDC)。 由於 BDC 現在與 的網域已有作用中的 PDC 相關聯,因此它會在新的網域中以 BDC 的形式開機。
  3. BDC 會顯示為伺服器管理員中的工作站,因此請使用 [新增至網域] 按鈕,將 BDC 新增至其新網域。 請務必在新增時指定 BDC 選項按鈕。

運作方式

NewSID 會開始讀取現有的電腦 SID。 電腦的 SID 會儲存在 SECURITY\SAM\Domains\Account 底下的登錄 SECURITY SECURITY Hive。 此機碼具有名為 F 的值,以及名為 V 的值。V 值是二進位值,其電腦 SID 內嵌在其資料結尾。 NewSID 可確保此 SID 是標準格式 (3 個 32 位子授權之前有三個 32 位元授權欄位)。

接著,NewSID 會為電腦產生新的隨機 SID。 NewSID 的產生盡可能建立真正隨機的 96 位值,以取代組成電腦 SID 的 3 個子授權值之中的 96 位元。

電腦 SID 取代的三個階段如下。 在第一個階段中,SECURITYSAM 登錄 Hive 會掃描機碼值中是否有舊電腦 SID,以及機碼的名稱。 在值中找到 SID 時,它會以新的電腦 SID 取代,並在名稱中找到 SID 時,機碼及其子機碼會複製到名稱相同的新子機碼,但新的 SID 會取代舊的 SID。

最後兩個階段涉及更新安全性描述元。 登錄機碼和 NTFS 檔案具有與其相關聯的安全性。 安全性描述項包含一個項目,可識別哪個帳戶擁有資源、哪個群組是主要群組擁有者、指定使用者或群組所允許動作的選擇性項目清單 (稱為「判別存取控制清單 - DACL」),以及選擇性項目清單,指定特定使用者或群組所執行的哪些動作會在系統事件記錄檔中產生項目 (系統存取控制清單 - SACL)。 使用者或群組會以 SID 識別在這些安全性描述元中,如我先前所述,本機使用者帳戶 (例如系統管理員、客體等內建帳戶以外的帳戶) 具有由電腦 SID 加上 RID 所組成的 SID。

安全性描述元更新的第一個部分會在電腦上的所有 NTFS 檔案系統檔案上發生。 其中會掃描每個安全性描述元,以尋找電腦 SID 的出現次數。 NewSID 找到一個時,它會將它取代為新的電腦 SID。

安全性描述元更新的第二個部分是在登錄上執行。 首先,NewSID 必須確定它會掃描所有 Hive,而不只是已載入的 Hive。 每個使用者帳戶都有登錄 Hive,會在使用者登入時載入為 HKEY_CURRENT_USER,但在使用者未登入時,會保留在使用者設定檔目錄中的磁碟上。 NewSID 藉由列舉 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList 機碼來識別所有使用者 Hive 位置的位置,該機碼指向其儲存所在的目錄。 然後,它會使用 HKEY_LOCAL_MACHINE 下的 RegLoadKey 將它們載入登錄,並掃描整個登錄,檢查每個安全性描述元以搜尋舊電腦 SID。 更新的執行方式與檔案相同,而且完成 NewSID 時會卸載載入的使用者 Hive。 在最後一個步驟 中,NewSID 會掃描 HKEY_USERS 金鑰,其中包含目前登入使用者的 Hive 以及預設 Hive。 這是必要的做法,因為 Hive 無法載入兩次,因此 NewSID 載入其他使用者 Hive 時,登入的使用者 Hive 將不會載入 HKEY_LOCAL_MACHINE

最後,NewSID 必須更新 ProfileList 子機碼,以參考新的帳戶 SID。 在帳戶 SID 變更之後,必須讓 Windows NT 正確地將設定檔與使用者帳戶產生關聯,以反映新的電腦 SID。

NewSID 藉由提供下列權限,確保它可以存取和修改系統中的每個檔案和登錄機碼:系統、備份、還原和取得擁有權。