NewSID v4.10

由 Mark Russin进行标记

发布日期:2006 年 11 月 1 日

注意: NewSID 已停用,不再可供下载。 请参阅 Mark Russin一文的博客文章 :NewSID 停用和计算机 SID 重复数据消除

重要事项

对于 SID,Microsoft 不支持使用 NewSID 准备的映像,我们仅支持使用 SysPrep 准备的映像。 Microsoft 尚未测试所有部署克隆选项的 NewSID。

有关 Microsoft 官方策略详细信息,请参阅以下知识库文章:

简介

许多组织使用磁盘映像克隆来大规模推出Windows。 此方法涉及将完全安装和配置的磁盘Windows计算机复制到其他计算机的磁盘驱动器上。 这些其他计算机实际上似乎已经过相同的安装过程,并且立即可供使用。

虽然此方法可节省数小时的工作,并且比其他推出方法麻烦,但存在一个主要问题:每个克隆的系统具有相同的计算机安全标识符 (SID) 。 这一事实会损害工作组环境中的安全性,并且可移动媒体安全性也可能在具有多个相同计算机 SID 的网络中受到危害。

来自Windows的需求已引导多个公司开发程序,这些程序可以在克隆系统后更改计算机的 SID。 但是,Symantec 的 SID 更改器以及Symantec 的 GhostWalk 仅作为每个公司的高端产品的一部分销售。 此外,它们都从 DOS 命令提示符运行 (Altiris 的 changer 类似于 NewSID) 。

NewSID 是开发的程序,可更改计算机的 SID。 它是免费的,是一个 Win32 程序,这意味着它可以轻松地在以前克隆的系统上运行。

使用此程序之前,请阅读整篇文章。

版本信息:

  • 版本 4.0 引入了对 Windows XP 和 .NET Server(一种向导样式的接口)的支持,允许你指定要应用的 SID、注册表压缩以及重命名计算机 (这导致 NetBIOS 和 DNS 名称) 更改的选项。
  • 版本 3.02 更正了在将具有旧 SID 的键重命名为新 SID 时,NewSid 无法正确复制具有无效值类型的默认值的 bug。 NT 实际上在 SAM 中的某些时间使用了此类无效值。 此 bug 的症状是报告在授权用户更新帐户信息时拒绝访问的错误消息。
  • 版本 3.01 为 Microsoft 事务服务器创建的不可访问的注册表项添加了一种解决方式。 如果不使用新 服务,NewSID 会提前退出。
  • 版本 3.0 引入了 SID 同步功能,该功能指示 NewSID 获取从另一台计算机应用 SID。
  • 版本 2.0 具有自动模式选项,还允许更改计算机名称。
  • 版本 1.2 修复了 1.1 中引入的 中的 bug,其中某些文件系统安全描述符未更新。
  • 版本 1.1 更正了仅影响某些安装的相对较小的 bug。 它还已更新,以更改与文件和打印机共享的权限设置关联的 SID。

克隆和备用推出方法

在企业环境中执行大规模Windows推出 (之一) 数百台计算机基于磁盘克隆技术。 系统管理员在模板计算机上安装公司中使用的基本操作系统和附加软件。 将计算机配置为在公司网络中操作后,自动磁盘或系统重复工具 (例如Symantec、PowerQuest的映像驱动器和Altiris的 RapiDeploy) 用于将模板计算机的驱动器复制到数十或数百台计算机上。 然后,这些克隆会进行最终调整,例如分配唯一名称,然后由公司员工使用。

另一种常用推出方式是使用 Microsoft sysdiff实用工具 (资源工具包Windows部分) 。 此工具要求系统管理员在每个计算机上执行完整安装 (通常是脚本化无人参与的安装) ,然后 sysdiff 自动应用附加软件安装映像。

由于跳过安装,并且磁盘扇区复制比文件复制更高效,因此基于克隆的推出可以比类似的 sysdiff 安装节省数十个小时。 此外,系统管理员无需了解如何使用无人参与的安装或 sysdiff,也无需创建和调试安装脚本。 仅此一项可以节省数小时的工作。

SID 重复问题

克隆的问题在于,它仅在非常有限的意义上受 Microsoft 支持。 Microsoft 已指出,只有在达到安装程序的 GUI 部分之前,Windows系统才支持克隆系统。 当安装达到此点时,会为计算机分配名称和唯一的计算机 SID。 如果在此步骤后克隆系统,则克隆的计算机将具有相同的计算机 SID。 请注意,仅更改计算机名称或将计算机添加到其他域不会更改计算机 SID。 如果计算机以前与域关联,则更改名称或域只会更改域 SID。

若要了解克隆可能导致的问题,首先必须了解如何为计算机上各个本地帐户分配 SID。 本地帐户的 SID 由计算机的 SID 和追加的 RID (相对标识符) 。 RID 从固定值开始,并针对创建的每个帐户增加 1。 这意味着,例如,将为一台计算机的第二个帐户提供与克隆上的第二个帐户相同的 RID。 结果是两个帐户具有相同的 SID。

在基于域的环境中,重复 SID 不是问题,因为域帐户具有基于域 SID 的 SID。 但是,根据 Microsoft 知识库文章 Q162001"不要磁盘重复安装的 Windows NT",工作组环境安全性基于本地帐户 SID。 因此,如果两台计算机的用户具有相同的 SID,则工作组将无法区分用户。 一个用户有权访问的所有资源(包括文件和注册表项)也将访问。

重复的 SID 可能导致问题的另一个实例是存在使用 NTFS 格式化的可移动媒体,并且本地帐户安全属性应用于文件和目录。 如果将此类媒体移动到具有相同 SID 的不同计算机,那么,如果本地帐户的帐户 ID 与安全属性中的帐户ID 匹配,则可能无法访问这些文件。 如果计算机具有不同的 SID,则不能这样做。

Mark 撰写的文章名为"NT 推出选项",该文章在Windows NT 杂志的 6 月版中发布。 它更详细地讨论了重复 SID 问题,并介绍了 Microsoft 对克隆的官方意见。 若要查看网络上是否出现重复的 SID 问题,请使用 PsGetSid 显示计算机 SID。

NewSID

NewSID 是一种我们开发的更改计算机 SID 的程序。 它首先为计算机生成随机 SID,然后继续更新它在注册表和文件安全描述符中找到的现有计算机 SID 的实例,将匹配项替换为新的 SID。 NewSID 需要管理权限来运行。 它具有两个功能:更改 SID 和更改计算机名称。

若要使用 NewSID 的 自动运行选项,请指定命令行上的"/a"。 还可以指示它在"/a"开关后包含新名称,以自动更改计算机的名称。 例如:

newsid /a [newname]

如果一切正常,则让 NewSID 在不提示的情况下运行,将计算机名称更改为"newname",并重新启动计算机。

注意: 如果要运行 NewSID 的系统正在运行 IISAdmin,则必须在运行 NewSID之前停止 IISAdmin 服务。 使用此命令停止 IISAdmin 服务:net stop iisadmin /y

NewSID的 SID 同步功能,允许指定应从另一台计算机获取新 SID,而不是随机生成一个 SID。 此功能使得将备份域控制器 (BDC) 移动到新域成为可能,因为 BDC 与域的关系由它与其他域控制器 (DC) 的计算机 SID 相同来标识。 只需选择"同步 SID"按钮并输入目标计算机的名称即可。 您必须有权更改目标计算机的注册表项的安全设置,这通常意味着你必须以域管理员身份登录才能使用此功能。

请注意,运行 NewSID 时,注册表的大小会增大,因此请确保注册表大小上限能够适应增长。 我们发现,这种增长对系统性能没有明显的影响。 注册表增长的原因是,当 NewSID应用临时安全设置时,注册表会变得碎片化。 删除设置后,不会压缩注册表。

重要: 请注意,虽然我们全面测试了 NewSID,但必须自行承担使用风险。 与更改文件和注册表设置的任何软件一样,强烈建议在运行 NewSID之前完全备份计算机。

移动 BDC

下面是将 BDC 从一个域移到另一个域时应遵循的步骤:

  1. 启动要移动的 BDC 并登录。 使用 NewSID 将 BDC 的 SID 与要移动 BDC 的域的 PDC 同步。
  2. 重新启动更改了 BDC (SID 的) 。 由于 BDC 关联的域现已具有活动的 PDC,因此它将在其新域中作为 BDC 启动。
  3. BDC 将显示为 服务器管理器 中的工作站,因此请使用"添加到域"按钮将 BDC 添加到其新域。 添加时,请务必指定 BDC 单选按钮。

工作方式

NewSID 首先读取现有计算机 SID。 计算机的 SID 存储在 注册表的SECURITY\SAM\Domains\Account下。 此密钥具有一个名为 "F" 的值和一个名为 "V" 的值。V 值是在其数据末尾嵌入了计算机 SID 的二进制值。 NewSID 确保此 SID 采用标准格式, (3 32 位 subauthorities,前面加上 3 32 位颁发机构字段) 。

接下来, NewSID 为计算机生成新的随机 SID。 使用NewSID来创建真正的随机96位值,这将替换构成计算机 SID 的3个 subauthority 值的96位值。

计算机 SID 替换步骤分为三个阶段: 在第一个阶段中,会扫描 安全SAM 注册表配置单元中是否存在旧计算机 SID 在键值中的出现情况以及密钥的名称。 如果在值中找到 SID,则会将其替换为新的计算机 SID,并在名称中找到 SID 后,会将该密钥及其子项复制到同名的新子项,除非替换旧的新 SID。

最后两个阶段涉及更新安全描述符。 注册表项和 NTFS 文件具有相关联的安全性。 安全描述符由标识哪个帐户拥有资源的条目组成。哪个组是主要组所有者,是指定用户或组所允许的操作 (称为自由访问控制列表 DACL) 的项的可选列表,以及指定特定用户或组执行的操作将在系统事件日志中生成条目的条目列表, (系统访问控制列表-SACL) 。 在这些安全描述符中,用户或组与其 Sid 一起标识,如我之前所述,本地用户帐户 (除了内置帐户(如管理员、来宾等) )都由计算机 SID 和 RID 组成。

安全描述符更新的第一部分发生在计算机上的所有 NTFS 文件系统文件上。 将扫描每个安全描述符中是否有计算机 SID。 当 NewSID 发现一个时,它会将其替换为新的计算机 SID。

在注册表中执行安全描述符更新的第二部分。 首先, NewSID 必须确保它会扫描所有配置单元,而不仅仅是加载的配置单元。 每个用户帐户都有一个在用户登录时作为 HKEY_CURRENT_USER 加载的注册表配置单元,但在用户的配置文件目录中时保留在磁盘上。 NewSID 通过枚举 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList 项(指向存储它们的目录)来标识所有用户 hive 位置的位置。 然后,它使用 RegLoadKey 在 " HKEY_LOCAL_MACHINE " 下将其加载到注册表中,并扫描整个注册表,检查旧计算机 SID 的搜索中的每个安全说明符。 对文件执行与文件相同的更新,并在其完成的 NewSID 中卸载其加载的用户配置单元。 作为最后一步, NewSID 将扫描 HKEY_USERS 项,其中包含当前已登录用户的 hive,以及。默认配置单元。 这是必需的,因为配置单元不能加载两次,因此当NewSID加载其他用户配置单元时,登录用户配置单元不会加载到HKEY_LOCAL_MACHINE中。

最后, NewSID 必须更新 ProfileList 子项才能引用新的帐户 sid。 在帐户 sid 发生更改后,必须使用此步骤 Windows NT 正确地将配置文件与用户帐户相关联,以反映新的计算机 SID。

NewSID 通过提供以下权限来确保它可以访问和修改系统中的每个文件和注册表项:系统、备份、还原和获取所有权。