作者:Mark Russinovich 和 Bryce Cogswell
關(guān)于 SID,Microsoft 不支持使用 NewSID 準(zhǔn)備的映像,我們只支持使用 SysPrep 準(zhǔn)備的映像。Microsoft 尚未針對(duì)所有部署克隆選項(xiàng)測(cè)試 NewSID。
有關(guān) Microsoft 的官方策略的詳細(xì)信息,請(qǐng)參閱下面的知識(shí)庫文章:
許多組織使用磁盤映像克隆技術(shù)來大規(guī)模部署 Windows。此方法要求將完全安裝和配置的 Windows 計(jì)算機(jī)的磁盤復(fù)制到其他計(jì)算機(jī)的磁盤驅(qū)動(dòng)器。其他這些計(jì)算機(jī)似乎已經(jīng)有效地完成了相同的安裝過程,并且可以立即使用。
雖然此方法節(jié)省了數(shù)小時(shí)的工作量并且比其他部署方法有效,但是它存在一個(gè)嚴(yán)重問題,即每個(gè)克隆的系統(tǒng)都具有一個(gè)完全相同的計(jì)算機(jī)安全標(biāo)識(shí)符 (SID)。這一因素會(huì)損害工作組環(huán)境的安全性,并且在具有多個(gè)相同計(jì)算機(jī) SID 的網(wǎng)絡(luò)中,還可能損害可移動(dòng)媒體安全性。
來自 Windows 社區(qū)的要求已經(jīng)促使多家公司開發(fā)可以在克隆系統(tǒng)后更改計(jì)算機(jī)的 SID 的程序。但是,Symantec 的 SIDChanger 和 Symantec 的 Ghost Walker 僅作為每家公司的高端產(chǎn)品出售。而且,它們都從 DOS命令提示窗口中運(yùn)行(Altiris 的更改器類似于 NewSID)。
NewSID 是我們開發(fā)的可更改計(jì)算機(jī)的 SID 的程序。它是一個(gè)免費(fèi)的 Win32 程序,這意味著它可以容易地在以前克隆的系統(tǒng)上運(yùn)行。 NewSID 可在 Windows NT 4、Windows 2000、Windows XP 和 Windows .NET Server 上運(yùn)行。
使用該程序之前,請(qǐng)先完整閱讀此文章。
版本信息:
版本 4.0 引入了對(duì) Windows XP 和 .NET Server 的支持、向?qū)邮降慕缑妫梢酝ㄟ^該界面指定您要應(yīng)用的 SID)、注冊(cè)表壓縮以及用于重命名計(jì)算機(jī)的選項(xiàng)(該選項(xiàng)可用來更改 NetBIOS 名稱和 DNS 名稱)。
版 本 3.02 更正了以下程序缺陷:在將具有舊 SID 的項(xiàng)重命名為新 SID 時(shí),NewSid 無法正確復(fù)制具有無效值類型的默認(rèn)值。實(shí)際上,NT 某些時(shí)候在 SAM 中使用了這些無效值。此程序缺陷的癥狀是:當(dāng)授權(quán)用戶更新帳戶信息時(shí),錯(cuò)誤消息報(bào)告訪問權(quán)限被拒絕。
版本 3.01 為由 Microsoft Transaction Server 創(chuàng)建的無法訪問的注冊(cè)表項(xiàng)添加了解決方法。不使用該解決方法, NewSID 會(huì)過早退出。
版本 3.0 引入了 SID 同步功能,該功能指示 NewSID 從另一臺(tái)計(jì)算機(jī)獲取要應(yīng)用的 SID。
版本 2.0 具有自動(dòng)模式選項(xiàng),而且還使您可以更改計(jì)算機(jī)名稱。
版本 1.2 修復(fù)了在版本 1.1 中引入的未更新某些文件系統(tǒng)安全描述符的程序缺陷。
版本 1.1 更正了僅影響某些安裝的相對(duì)次要的程序缺陷。對(duì)它也進(jìn)行了更新,以便更改與文件和打印機(jī)共享的權(quán)限設(shè)置相關(guān)聯(lián)的 SID。
在企業(yè)環(huán)境中執(zhí)行大規(guī)模 Windows 部署(通常為數(shù)百臺(tái)計(jì)算機(jī))的最常見方法之一基于磁盤克隆技術(shù)。系統(tǒng)管理員可以在樣本計(jì)算機(jī)上安裝公司使用的基本操作系統(tǒng)和附加軟件。在配置該計(jì)算機(jī)以便在公司網(wǎng)絡(luò)中進(jìn)行操作后,可以使用自動(dòng)化磁盤或系統(tǒng)復(fù)制工具(如 Symantec 的Ghost、PowerQuest 的Image Drive 和 Altiris 的RapiDeploy)將樣本計(jì)算機(jī)的驅(qū)動(dòng)器復(fù)制到數(shù)十臺(tái)或數(shù)百臺(tái)計(jì)算機(jī)上。然后,對(duì)這些克隆計(jì)算機(jī)進(jìn)行最后的調(diào)整(如分配唯一名稱),然后由公司員工使用。
另一種比較流行的部署方法是使用 Microsoft sysdiff 實(shí)用工具(Windows 資源工具包的一部分)。此工具需要系統(tǒng)管理員在每臺(tái)計(jì)算機(jī)上執(zhí)行完全安裝(通常是無人參與的腳本安裝),然后 sysdiff 自動(dòng)應(yīng)用附加軟件安裝映像。
由于跳過安裝并且磁盤扇區(qū)復(fù)制比文件復(fù)制更有效等原因,基于克隆的部署與類似的 sysdiff 安裝相比可以節(jié)省數(shù)十小時(shí)的時(shí)間。另外,系統(tǒng)管理員不必了解如何使用無人參與的安裝或 sysdiff,也無需創(chuàng)建并調(diào)試安裝腳本。單這一項(xiàng)就可以節(jié)省數(shù)小時(shí)的工作。
克隆的問題在于它僅由 Microsoft 提供非常有限的支持。Microsoft 已經(jīng)聲明,只支持在到達(dá) Windows 安裝程序的 GUI部分之前獲得到克隆系統(tǒng)。在安裝到達(dá)此步驟時(shí),將為計(jì)算機(jī)分配名稱和唯一的計(jì)算機(jī)SID。如果系統(tǒng)是在完成此步驟之后克隆的,則克隆的所有計(jì)算機(jī)都將具有完全相同的計(jì)算機(jī)SID。請(qǐng)注意,只更改計(jì)算機(jī)名稱或?qū)⒂?jì)算機(jī)添加到不同的域不會(huì)更改計(jì)算機(jī) SID。如果計(jì)算機(jī)先前與某個(gè)域相關(guān)聯(lián),則更改名稱或域時(shí)只能更改域SID。
要了解克隆可能引起的問題,首先需要了解如何為計(jì)算機(jī)上的各個(gè)本地帳戶分配 SID。本地帳戶的 SID 由計(jì)算機(jī)的 SID和附加的 RID(相對(duì)標(biāo)識(shí)符)組成。RID 從某個(gè)固定值開始,并且每創(chuàng)建一個(gè)帳戶就會(huì)增加1。這意味著一臺(tái)計(jì)算機(jī)上的第二個(gè)帳戶會(huì)被分配與克隆計(jì)算機(jī)上的第二個(gè)帳戶相同的 RID。結(jié)果是這兩個(gè)帳戶具有相同的 SID。
重復(fù)的SID 在基于域的環(huán)境中不是問題,因?yàn)橛驇艟哂谢谟?SID 的 SID。但是,根據(jù) Microsoft 知識(shí)庫文章Q162001“不要硬盤復(fù)制安裝的 Windows NT 的各個(gè)版本”,在工作組環(huán)境中,安全是基于本地帳戶 SID的。因此,如果兩臺(tái)計(jì)算機(jī)的用戶具有相同的SID,則工作組將無法區(qū)分這些用戶。對(duì)于所有資源(包括文件和注冊(cè)表項(xiàng))而言,如果一個(gè)用戶對(duì)其具有訪問權(quán)限,則另一個(gè)用戶也對(duì)其具有訪問權(quán)限。
重復(fù) SID 可能引起問題的另一個(gè)場(chǎng)合是存在使用 NTFS格式化的可移動(dòng)媒體,并且將本地帳戶安全屬性應(yīng)用于文件和目錄。如果將這樣的媒體移動(dòng)到具有相同 SID 的另一臺(tái)計(jì)算機(jī),則當(dāng)本地帳戶的帳戶 ID恰巧與安全屬性中的帳戶 ID 匹配時(shí),這些帳戶將能夠訪問本來無法訪問的文件。如果計(jì)算機(jī)具有不同的 SID,則不可能發(fā)生這種情況。
Mark 撰寫的題為“NT Rollout Options”(NT 部署選項(xiàng))的文章已在《Windows NT 雜志》的 6 月刊中發(fā)表。這篇文章更加詳細(xì)地討論了重復(fù) SID 問題,而且表明了 Microsoft 對(duì)于克隆的官方立場(chǎng)。要查看您的網(wǎng)絡(luò)中是否有重復(fù) SID 問題,請(qǐng)使用 PsGetSid 來顯示計(jì)算機(jī) SID。
NewSID 是我們開發(fā)的可用來更改計(jì)算機(jī) SID 的程序。它首先為計(jì)算機(jī)生成一個(gè)隨機(jī)的 SID,然后更新它在注冊(cè)表和文件安全描述符中找到的現(xiàn)有計(jì)算機(jī) SID 的實(shí)例,并用新 SID 替換舊 SID。NewSID 要求使用管理權(quán)限運(yùn)行。它有兩個(gè)功能:更改 SID 和更改計(jì)算機(jī)名稱。
要使用 NewSID 的自動(dòng)運(yùn)行選項(xiàng),請(qǐng)?jiān)诿钚兄兄付ā?a”。您還可以通過在“/a”開關(guān)后面包含新名稱來指示它自動(dòng)更改計(jì)算機(jī)的名稱。例如:
newsid /a [newname]
將使 NewSID 無提示運(yùn)行,將計(jì)算機(jī)名稱更改為“newname”,并且在一切正常的情況下重新啟動(dòng)計(jì)算機(jī)。
注意:如果要運(yùn)行 NewSID 的系統(tǒng)正在運(yùn)行 IISAdmin,則必須在運(yùn)行 NewSID 之前停止 IISAdmin 服務(wù)。使用以下命令可停止 IISAdmin 服務(wù):net stop iisadmin /y
NewSID的 SID 同步功能使您可以指定從另一臺(tái)計(jì)算機(jī)獲取新 SID 而不是隨機(jī)生成 SID。使用此功能,可以將備份域控制器 (BDC)移動(dòng)到一個(gè)新域,因?yàn)楦鶕?jù) BDC 與其他域控制器 (DC) 具有相同的計(jì)算機(jī) SID,可以確定該 BDC與某個(gè)域的關(guān)系。只需選擇“SynchronizeSID”按鈕并輸入目標(biāo)計(jì)算機(jī)的名稱。您必須具有更改目標(biāo)計(jì)算機(jī)的注冊(cè)表項(xiàng)的安全設(shè)置的權(quán)限,這通常意味著您必須以域管理員身份登錄才能使用此功能。
請(qǐng)注意,當(dāng)您運(yùn)行 NewSID 時(shí),注冊(cè)表的大小將會(huì)增長(zhǎng),因此請(qǐng)確保注冊(cè)表最大大小能夠適應(yīng)這一增長(zhǎng)。我們已發(fā)現(xiàn)這一增長(zhǎng)對(duì)系統(tǒng)性能沒有明顯影響。注冊(cè)表增長(zhǎng)的原因是:當(dāng) NewSID 應(yīng)用臨時(shí)安全設(shè)置時(shí),注冊(cè)表變零碎了。刪除這些設(shè)置后,注冊(cè)表不受影響。
重要信息:請(qǐng)注意,雖然我們已經(jīng)對(duì) NewSID 進(jìn)行了全面測(cè)試,但是您必須自行承擔(dān)使用它所帶來的風(fēng)險(xiǎn)。像使用任何能夠更改文件和注冊(cè)表設(shè)置的軟件一樣,強(qiáng)烈建議您在運(yùn)行 NewSID 前,對(duì)計(jì)算機(jī)進(jìn)行完全備份。
將 BDC 從一個(gè)域移動(dòng)到另一個(gè)域時(shí),需要遵循以下步驟:
啟動(dòng)您要移動(dòng)的 BDC,然后登錄。使用 NewSID 將該 BDC 的 SID 與要將該 BDC 移動(dòng)到的域的 PDC 進(jìn)行同步。
重新啟動(dòng)更改了 SID 的系統(tǒng) (BDC)。因?yàn)楝F(xiàn)在與該 BDC 相關(guān)聯(lián)的域已經(jīng)具有一個(gè)活動(dòng)的 PDC,所以該 BDC 將作為其新域中的 BDC 啟動(dòng)。
該 BDC 將顯示為服務(wù)器管理器中的工作站,因此可以使用“添加到域”按鈕將該 BDC 添加到其新域中。添加時(shí)一定要指定“BDC”單選按鈕。
NewSID 首先讀取現(xiàn)有計(jì)算機(jī) SID。計(jì)算機(jī)的 SID 存儲(chǔ)在注冊(cè)表的 SECURITY\SAM\Domains\Account 下的 SECURITY 配置單元中。此項(xiàng)包含一個(gè)名為 F 的值和一個(gè)名為 V 的值。V 值是一個(gè)將計(jì)算機(jī) SID 嵌入到其數(shù)據(jù)末尾的二進(jìn)制值。NewSID 能夠確保此 SID 具有標(biāo)準(zhǔn)格式(三個(gè) 32 位子頒發(fā)機(jī)構(gòu)位段的前面帶有三個(gè) 32 位頒發(fā)機(jī)構(gòu)位段)。
接下來,NewSID 為計(jì)算機(jī)生成一個(gè)新的隨機(jī) SID。NewSID 的生成過程竭力創(chuàng)建了一個(gè)真正的 96 位隨機(jī)值,該值將替換組成計(jì)算機(jī) SID 的 3 個(gè)子頒發(fā)機(jī)構(gòu)值(共 96 位)。
計(jì)算機(jī) SID 的替換分為以下三個(gè)階段。在第一階段中,掃描 SECURITY 和 SAM 注冊(cè)表配置單元,以便在項(xiàng)名稱以及項(xiàng)值中查找舊的計(jì)算機(jī) SID。如果在值中找到 SID,則用新的計(jì)算機(jī) SID 替換它;如果在名稱中找到 SID,則會(huì)將相應(yīng)的項(xiàng)及其子項(xiàng)復(fù)制到與替換舊 SID 的新 SID 具有相同名稱的新子項(xiàng)。
最后兩個(gè)階段涉及到更新安全描述符。注冊(cè)表項(xiàng)和 NTFS文件具有與自身相關(guān)聯(lián)的安全性。安全描述符包含以下部分:一個(gè)標(biāo)識(shí)了哪個(gè)帳戶擁有資源,哪個(gè)組是主要組所有者的條目;一個(gè)可選列表(稱為自由訪問控制列表-DACL),其中的條目指定了用戶或組所允許的操作;以及另外一個(gè)可選列表,其中的條目指定了特定用戶或組所執(zhí)行的哪些操作將在系統(tǒng)事件日志(系統(tǒng)訪問控制列表 - SACL)中生成條目。用戶或組在這些安全描述符中通過其各自的 SID 進(jìn)行標(biāo)識(shí),而且如前所述,本地用戶帳戶(內(nèi)置帳戶,如Administrator、Guest 等除外)的 SID 由計(jì)算機(jī) SID 和 RID 組成。
安全描述符更新的第一部分發(fā)生在計(jì)算機(jī)中的所有 NTFS 系統(tǒng)文件上。將掃描每個(gè)安全描述符以查找計(jì)算機(jī) SID。當(dāng) NewSID 找到一個(gè) SID 時(shí),就會(huì)用新的計(jì)算機(jī) SID 替換它。
安全描述符更新的第二部分在注冊(cè)表上執(zhí)行。首先, NewSID 必須確保已經(jīng)掃描了所有配置單元,而不只是掃描了已加載的那些配置單元。當(dāng)用戶登錄時(shí),每個(gè)用戶帳戶都具有一個(gè)作為 HKEY_CURRENT_USER 加載的注冊(cè)表配置單元,而當(dāng)用戶未登錄時(shí),該注冊(cè)表配置單元將保留在磁盤的用戶配置文件目錄中。 NewSID 標(biāo)識(shí)所有用戶配置單元位置的方法是枚舉 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList 項(xiàng),該項(xiàng)指向存儲(chǔ)了這些配置單元的目錄。然后,它使用 RegLoadKey 將這些配置單元加載到注冊(cè)表中 HKEY_LOCAL_MACHINE 的下面,并且掃描整個(gè)注冊(cè)表,檢查每個(gè)安全描述符以查找舊的計(jì)算機(jī) SID。這些更新的執(zhí)行方式與文件更新相同,而且在更新完成時(shí), NewSID 將卸載它所加載的用戶配置單元。最后一步,NewSID 掃描 HKEY_USERS 項(xiàng),該項(xiàng)包含 .Default 配置單元以及當(dāng)前登錄用戶的配置單元。這一步是必要的,因?yàn)橐粋€(gè)配置單元不能加載兩次;所以,當(dāng) NewSID 正在加載其他用戶配置單元時(shí),不會(huì)將登錄用戶配置單元加載到 HKEY_LOCAL_MACHINE 中。
最后,NewSID 必須更新 ProfileList 子項(xiàng)以便引用新的帳戶 SID。為了使 Windows NT 帳戶能夠在更改 SID 以反映新的計(jì)算機(jī) SID 后正確地將配置文件與用戶帳戶相關(guān)聯(lián),需要執(zhí)行此步驟。
NewSID 通過給予自身以下權(quán)限,確保它能夠訪問和修改系統(tǒng)中的每個(gè)文件和注冊(cè)表項(xiàng):系統(tǒng)、備份、還原和取得所有權(quán)。
本文作者已提供了 NewSID 的完整源代碼,以便用于教學(xué)目的。禁止在商業(yè)產(chǎn)品和免費(fèi)的 SID 更改軟件產(chǎn)品中使用這些代碼,但允許在其他專用或商用程序中使用其技術(shù)。
聯(lián)系客服