Board logo

标题: 打造安全的Windows安装盘 [打印本页]

作者: cqmis    时间: 2003-9-11 16:06     标题: 打造安全的Windows安装盘

每次安装好Windows之后还有很重要的一件事情要做,那就是加固处理——配置系统,增强其安全性、稳定性。加固Windows 2000/XP的关键步骤包括安装各种Service Pack、Hotfix,修改注册表,改变不安全的默认配置。遗憾的是,不是每一个人都注意到了 加固Windows的重要性,因此Internet上才会有数不清的计算机脆弱得不堪一击,甚至沦落为传播蠕虫病毒的温床。
  一种比较理想的解决办法是制作一个预装了各种Service Pack、Hotfix的Windows安装盘,然后用这种天生安全的安装盘安装Windows,安装好之后不必再另行安装Service Pack、Hotfix,从而实现Service Pack、Hotfix的一体化安装。遗憾的是,微软提供的这方面的工具很少,而且近期似乎不打算提供适当的工具来支持本文讨论的一体化安装。不过,只要借助于第三方工具,同时运用一些经验和技巧,我们还是可以手工制作出安全的Windows安装盘。
  但必须指出的是:本文不是为那些想要偷懒或胆小的用户写作的。特别地,为Windows安装盘加载Hotfix的过程极其繁琐,而且微软有可能在将来的某一天突然更改其补丁安装策略,使本文介绍的操作方式不再有效。不过,如果你需要安装大量的Windows系统,本文介绍的办法值得一试。
  一、准备安装文件
  安装Win 2K/XP的方式很多,如网络安装、无人值守安装、磁盘克隆等,但有一种方式微软至今尚未直接支持,那就是定制可启动的安装CD——它可以作为其他安装方式的基础,非常实用。第一步是创建一个Windows的发布目录,将它作为可启动安装CD的源目录,为保证文件的完整性,应当严格确保该目录的安全。
以Win 2K为例,首先将Win 2K安装CD的所有内容复制到硬盘上的发布目录。通常,安装CD上有许多文件根本不会用到,为了给其他工具、Service Pack、Hotfix留出空间,最好将这些不用的文件和目录删除。
  一般而言,删除下列文件和目录不会带来任何问题:\bootdisk,\setuptxt,\support,\valueadd,read1st.txt,以及readme.doc。如果Windows安装盘只用于全新安装,不用于升级,还可以安全地删除下列文件和目录:\i386\win9xmig,\i386\win9xupg,\i386\winntupg,autorun.inf,以及setup.exe。另外,常用的小软件也可以直接放入Windows安装盘,例如,我们可以为Windows安装盘创建一个存放常用软件的\software目录、一个存放更新文件的\updates目录。
  二、加载Service Pack
  将Service Pack直接集成到Windows安装文件的好处很多,例如,Service Pack将成为Windows安装文件密不可分的一部分,安装好Windows以后如果要添加或删除某些组件,系统将自动使用经过Service Pack更新后的文件,而不是原始安装盘上的文件。
  当然,这种安装方式也有其缺点,这就是Service Pack不可卸载——所以如果有必要,首先应当确认一下安装Service Pack之后应用软件仍能正常运行。
  首先从微软网站下载一份最新的Service Pack(例如,Service Pack 4,即SP4),执行w2ksp4.exe -s:<Windows发布目录>,命令执行完毕后,Windows发布目录中的安装文件已经被Service Pack更新了。
  三、加载Hotfix
  微软官方不支持将Hotfix加载到Windows安装文件,通常,当我们添加或重新安装了一个Windows组件(例如IIS),就必须重新安装所有的Hotfix,确保所有文件都是最新的。之所以如此,原因就在于添加组件时,安装程序会分析安装配置文件(.inf文件),据此确定从哪里获取当前安装的组件所需的文件。
  如果我们安装的是Service Pack,.inf文件会指向Service Pack提供的更新后的文件;但如果安装一个Hotfix,.inf文件不会被更新,因此,如果要将Hotfix加载到Windows安装文件,必须手工修改.inf文件。
首先创建一个临时目录,将最新Service Pack之后发布的所有Hotfix下载到该目录。接着,重命名所有Hotfix文件,使之符合8.3命名规范(这是安装程序的要求):打开一个命令窗口,转到存放Hotfix的临时目录,执行命令:ren *.* ???????.*。该命令运行完毕后,Hotfix文件的名字就变成了8.3格式,例如q318593_w2k_sp3_x86_en.exe将变成q318593.exe。
  接下来解压缩所有Hotfix。从命令窗口中,执行:for %i in (q*.exe) do start /wait %i /x。按下Enter键之后,命令行上出现类如“C:\> start /wait q318593.exe /x”的提示,同时弹出一个窗口,要求指定一个目录来存放解压缩得到的文件。根据hotfix的编号指定目录名称,例如“\q318593”,点击“确定”。对每一个hotfix重复执行同样的操作。
  现在要开始把hotfix的文件复制到发布目录了。不过,在命令行窗口中,首先转到发布目录的i386子目录,执行expand -r *.in_,把所有压缩的.inf文件解开,以便随后修改。接下来,从最早的hotfix开始,把每一个文件复制到发布目录下的i386目录,除hotfix.exe、hotfix.inf、spmsg.dll、spuninst.exe和svcpack1.dll之外的所有文件都要复制。不过,有时\symbols和\update这两个目录也可以忽略,只是必须注意下面将会论及的例外情况。
  复制好文件之后,删除\i386目录之内相应的压缩版本。例如,如果复制了kernel32.exe文件,则删除对应的压缩版本kernel32.ex_文件。删除压缩版的文件之后,安装程序就不得不使用非压缩版了。如果\i386目录下没有对应的压缩版文件,则需要设法找出原始文件的位置——这就是我们要解开.inf文件的原因。
  在命令窗口中使用Find命令,或者使用资源管理器的查找功能,搜索所有.inf文件查找刚才复制的文件的名字。例如,假设把一个admin.dll文件复制到了\i386目录,但\i386目录之内却找不到对应的压缩文件admin.dl_,那就搜索所有.inf文件查找“admin.dll”。找到的结果可能有一个以上,不过我们要找的文件应当包含一行类如“admin.dll=1,,20540”的内容。
  经检查,这行内容位于fp40ext.inf文件的[SourceDisksFiles]小节。第一个数字(这里是1)是磁盘的编号,由同一.inf文件的[SourceDisksNames]小节定义。磁盘ID通常指向Win 2K的安装CD、Service Pack安装目录,或者.cab压缩文件。打开fp40ext.inf文件,检查前面提到的包含admin.dll的行,可以发现磁盘ID指向了fp40ext.cab文件。不过,由于我们刚刚将新的admin.dll文件复制到了\i386目录,所以要修改这个位置。
首先,在[SourceDisksNames](注意,它可能叫做SourceDisksNames.x86)节创建一个新的位置,即加入下面这行内容:0=%SERVICEPACK_NAME%,"",0,%34000%。注意该.inf文件只包含一个磁盘ID,它指向fp40ext.cab文件。在某些.inf文件中,你可能会发现已经有了一行类似的内容,如果这行内容已经存在,那就不必再加,直接进入下一步。
  找到包含admin.dll的这行内容,把原来的“admin.dll=1,,20540”改成“admin.dll=0,,20540”。现在,当安装程序搜索admin.dll文件,它将寻找主发布目录(磁盘ID是0),而不是原来的.cab文件(磁盘ID是1)。对于每一个在\i386目录下没有相应压缩版的文件,按照上述步骤执行类似的修改——这个过程已经很复杂了,不过下面还有更麻烦的。
  某些与IIS、SMTP、NNTP服务相关的文件在.cab文件中有不同的名字,通常是在原文件名字的基础上稍作变化,例如,mailmsg.dll在ims.cab文件中变成了smtp_mailmsg.dll,在ins.cab文件中变成了nntp_mailmsg.dll。如果搜索.inf文件寻找引用了mailmsg.dll的地方,不会有任何结果,但可以找到引用了smtp_mailmsg.dll和nntp_mailmsg.dll的地方。虽然系统更改文件名字的方式不存在严格、明确的规则,不过也不是随心所欲,不存在文件名字和原始文件毫无关联的情况。
  遇到这类文件名字变异的情况时,首先在\i386目录下复制一份文件(例如mailmsg.dll),更改该文件的名字,使其与.inf文件中出现的名字相同。然后,在[SourceDisksFiles]节找到对该文件的引用,按照前面的说明把磁盘ID改成指向新的位置。
  有一类文件无法在\i386目录或任何.cab文件中找到,这就是编目文件(Catalog File)。编目文件的扩展名是.cat,用于管理驱动程序的签名信息,例如sp3.cat文件包含了经过WHQL测试的驱动程序文件的校验和。微软每次更新了一个驱动程序,都会发布一个新的编目文件。
  仔细观察一下就可以发现,每一个Hotfix要么包含一个新的sp3.cat文件(或者,对于SP4基础上的hotfix,则是sp4.cat),要么包含一个根据Hotfix的编号命名的编目文件。因此,复制sp3.cat(或sp4.cat)文件时,必须使用该文件的最新版本。由于编目文件的内容是不断累积的,所以最新、最大的文件就是我们要用的文件。把最新的编目文件复制到\i386目录下,然后记下文件的名字,稍后还要用到。
  接下来,在发布目录的根目录之下创建一个\$OEM$\$$\hotfixes目录,把Hotfix的安装程序复制到该目录。注意该目录和\i386位于同一个目录层次,而不象某些微软文档提到的那样属于\i386的子目录。当我们运行安装程序时,系统会把\hotfixes目录复制到\%systemroot%目录(例如,C:\winnt\hotfixes目录)。把所有Hotfix复制到该目录之后,从http://support.microsoft.com/default.aspx?scid=kb;en-us;q296861下载qchain.exe,并把它保存到同一目录。
  最后一步是修改svcpack.inf文件,在[ProductCatalogsToInstall]小节中,修改清单内容,加入以前复制到\i386目录的所有编目文件。
只要按照上面的步骤正确操作,现在发布目录下的Windows安装文件应该已经加载了最新的Service Pack和Hotfix了。如果用这些安装文件来添加或重新安装Windows组件,安装完成后不必另行安装Service Pack和Hotfix。
四、编写Winnt.sif
  在需要高度安全的场合,安装Win 2K/XP时最好先用最小安装方式安装,然后依次加入各种必要的组件和服务。例如,如果要配置一个Web服务器,首先用最小方式安装一个Windows,然后加入IIS Web服务,让IIS服务正常运行起来并采取必要的安全保障措施,在此基础上再添加其他需要的服务,如SMTP和DNS服务,每次添加一个。
  用全新安装方式安装Windows时,安装程序要用到一个特殊的文件,即winnt.sif文件。winnt.sif其实与unattend.txt文件一样,两者除了文件名字不同之外,另一个不同之处是winnt.sif存放在\i386目录下,而且它是自动起作用的,即使从CD-ROM启动并开始安装也一样。要精简Windows自动安装的可选组件,关键就是要修改winnt.sif的[Components]小节,在这里禁止安装所有多余的组件.
  前面我们只复制了hotfix的文件,但没有修改注册表,有些工具(例如Windows Update)可能报告Hotfix还没有安装。为避免这类问题,确保系统正确安装了Hotfix,除了直接复制Hotfix文件之外,还必须在安装期间运行Hotfix的安装过程,而运行Hotfix安装过程的最好办法就是利用winnt.sif文件的[GuiRunOnce]小节。
  由于我们把所有Hotfix复制到了\%systemroot%\hotfixes目录,因此现在要从该目录运行Hotfix的安装程序。
  注意[GuiRunOnce]小节的最后调用了qchain.exe,它保证了在安装多个Hotfix的时候,不管各个Hotfix是以什么次序安装,系统总是复制了正确的文件。
  现在,我们已经成功地把Service Pack和Hotfix加载到了Windows安装文件,接下来就可以利用发布目录中的安装文件安装Windows了。虽然这个过程看起来极其繁琐,不一定对谁都适用,但如果你经常需要安装/重装Windows,一份天生安全的安装CD是必不可少的。

作者: rsjd    时间: 2003-9-11 16:49     标题: 打造安全的Windows安装盘

不错啊,不过HOTFIX的安装不必这么麻烦,可以在CMDLINES.TXT文件中建批处理程序程序在安装WINDOWS时同步安装,这样方便很多,而且安装完后的WINDOWS也能象普通UPDATE一样可以看到补丁列表,也能卸载,这样的光盘我已经做了一个,在BT中发布。
我发布的这个只不过将批处理改成EXE文件,所以安装时看不到批处理的DOS窗口,看起来更正规。我发帖子这台电脑用这张光盘安装的,连WIN2000的驱动也集成进去了,可以说是最安全最方便的一张光盘,BT种子在附件中。
作者: 任我行    时间: 2003-9-13 02:47     标题: 打造安全的Windows安装盘

好!收入精华区,谢谢。




欢迎光临 EZB 论坛 (http://ultraiso.net/ezbbbs/) Powered by Discuz! 6.1.0