Windows NT家族的操作系统——Windows XP、Windows 2000、NT 4.0和NT 3.x一直以缺乏安全性饱受争议。但实际上,这些操作系统(包括Novell Netware和各种UNIX变种)都具有相当好的安全性,它们都装备了数以千计的“锁”——这是一些操作系统用来确保安全性的部件,能够让我们作出只允许用户A可以在对象B上实施动作C之类的规定。
NT和Netware之间的区别在于,虽然两种操作系统都提供了这类锁,但一个新装的Netware系统中这些锁默认是锁上的,管理员根据需要有选择地打开某些锁;而在一个新装的N T操作系统中,大部分的锁默认处于打开状态,管理员的任务是关闭某些可能引起安全隐患的锁。(Windows Server 2003的情况有所不同,它的设计改用了Netware策略。相比之下,Win 2K默认锁上的选项要多于NT 4.0,而新装的XP又比Win 2K Pro有更多的安全限制。)
对于NT系列平台的管理员来说,这些锁带来的是一个两难的局面:从理论上看,它们确实提供了保障服务器和工作站安全的机制;但实际操作起来却要耗费大量的时间。XP是一个优秀的操作系统,但如果要我们检查每一台机器,依次调整数十种授权和权限选项来保证系统的安全,很多人会把XP或其他NT系列的操作系统看成代价昂贵和浪费时间的代名词。我们需要一种快速配置安全选项的办法,它能够根据要求自动批量设定所有与安全有关的配置。
这种办法确实存在,它就是安全模板。安全模板是一种ASCII文本文件,它定义了本地权限、安全配置、本地组成员、服务、文件和目录授权、注册表授权等方面的信息。创建好安全模板之后,我们只要一个命令就可以将它定义的信息应用/部署到系统,所有它定义的安全配置都立即生效——原本需要数小时修补注册表、倒腾管理控制台“计算机管理”单元以及其他管理工具才能完成的工作,现在只需数秒就可以搞定。
安全模板并非Windows Server 2003或XP独创的功能,第一次提出这个概念的是NT 4.0 SP 4。安全模板是每一个管理员都必须了解的重要工具。安全模板不会让你修改不能通过其他方式修改的安全选项,它只是提供了一种快速批量修改安全选项的办法。凡是可以利用安全模板设置的安全选项,同样可以使用Windows的GUI工具手工修改,但后者耗费的时间肯定多得多。
一、安全模板可以批量修改的五类和安全有关的设置
1.管理组
模板能够调整本地的组成员。如果你的用户使用的是NT系列的桌面系统,或许你也在为这样的问题烦恼:授予用户哪些控制桌面系统的权限才合适?有的公司让每一位用户都拥有本地管理员权限,有些则授予Power Users权限,还有的只授予Users权限。
如果限制了用户对自己桌面系统的管理权限,可以肯定的是,某些时候你不得不放宽限制,至少是临时性地放宽。例如,假设设置一个工作站时只允许本地的Administrator帐户成为本地Administrators组的成员,后来有一个维护人员为了方便“临时”地将普通用户帐户提升为Administrators组的成员,本来他打算稍后恢复原来的设置,但后来却忘记了。如果我们定义了一个“只有Administrator才能加入本地Administrators组”的安全模板,只要重新应用一下这个模板就可以防止其他用户进入Administrators组。
当然,模板不是随时监视安全设置选项确实已被采纳的守护神,确保安全设置策略已被执行的最好办法是定期重新应用整个模板,或者创建一个组策略来应用模板(组策略大约每隔90分钟重新应用自己的设置信息)。凡是安全模板能够做到的事情,组策略同样都能够做到,但如果使用组策略的话就要有一个Active Directory(AD)域,而模板却没有这方面的要求。
2.调整NTFS权限
安全模板能够调整NTFS权限。例如,假设我们想要授予C:Stuff目录System/完全控制和Aministrators/完全控制的NTFS权限,但禁止任何其他用户访问,模板可以方便地设定这些授权和限制。
另外,由于模板可以应用到多台机器(倘若使用组策略的话),我们可以将同样的NTFS授权应用到整个域。如果你和大多数NT管理员一样,那么也一定对NT默认的目录权限(Everyone/完全控制)大为不满,并决定加强ACL设置。但是,这个过程很容易出错,以至于把ACL调整到没有一个人能够正常使用机器的地步。因此最好先做一些试验,找出适当的平衡点,然后将平衡点的权限配置用模板表达出来,再将模板应用到所有的系统。
3.启用和禁用服务
模板可以启用或关闭服务,控制谁有权启动或关闭服务。你想要关闭大部分机器的IIS服务,只留下个别服务器运行IIS吗?这可不是一件轻松的工作,因为默认情况下,Win 2K和NT 4.0会把IIS安装到所有服务器上(可喜的是,Windows Server 2003改正了这一做法。)除了IIS,你可能还希望禁止许多其他不必要的服务,可能还想对Server、Computer Browser、Index、Wireless Zero Configuration之类的服务痛下杀手,但是,到每一台机器上逐个禁用这些服务实在太麻烦了,好在模板能够帮助我们迅速完成这些工作。
安全模板允许我们停止(针对服务运行的状态)以及禁用(针对服务的启动方式)服务。当你开始了解模板时,会惊奇地发现模板允许我们控制哪些人有权开启和关闭服务——了解Windows服务的ACL的人可能不是很多,但模板却提供了调整这些ACL的途径。例如,如果你想让Mary有权开启和关闭Server服务,却又不想让Mary成为管理员,现在可以通过模板来设置。
4.调整注册表授权
安全模板允许我们调整注册表的授权。注册表包含了大量只能读取、不能修改的信息。例如,假设有一个NT 4.0的工作站安装了AutoCAD,现在把它升级到了Win 2K,但却发现用户需要本地管理员权限才能运行AutoCAD。注册表中究竟发生了什么事情才导致如此怪异的现象?
注重细节的应用程序会在两个注册键下面保存其配置信息:HKEY_LOCAL_MACHINESOFTWARE和HKEY_CURRENT_USERSoftware。具有管理员权限的用户负责初始的安装以及大部分的配置,这些配置信息保存在HKEY_LOCAL_MACHINESOFTWARE注册键下。但是,每一个用户又必须根据自己的需要和爱好调整应用程序,应用程序需要一个适当的位置来保存这部分配置信息。如果应用程序把所有的配置信息都保存在HKEY_LOCAL_MACHINESOFTWARE,普通用户每次要修改配置时都要找管理员才行。
正是考虑到该问题,注重细节的应用程序会把非关键性的配置选项(用户个人的配置选项)保存在HKEY_CURRENT_USERSoftware注册键下,所以我们应该让用户拥有对该注册键的写入权限。也就是说,如果用户没有管理员权限,那么他至少要有HKEY_LOCAL_MACHINESOFTWARE注册键的读取权限、HKEY_CURRENT_USERSoftware注册键的读取和写入权限。
遗憾的是,许多软件厂商还没有重视HKEY_LOCAL_MACHINESOFTWARE、HKEY_CURRENT_USERSoftware这两个注册键的区别,而是把所有配置信息都保存到了HKEY_LOCAL_MACHINESOFTWARE注册键下。在NT 4.0下,这种处置办法不会引起问题,因为NT 4.0默认允许所有用户写入HKEY_LOCAL_MACHINE,由于NT 4.0控制HKEY_LOCAL_MACHINE的ACL非常宽松,所以即使普通用户也不会遇到问题。但在Win 2K中,注册表ACL的默认配置已经变化,非管理员的用户只有读取HKEY_LOCAL_MACHINE的权限,所以用户必须以本地管理员身份登录才能正常运行AutoCAD。
如何解决这类问题呢?获取一份应用软件的新版本,或者将XP、Win2K的注册表ACL放宽到NT 4.0的程序。如果采用后面的解决办法,我们既可以用注册表编辑器(对于XP或Windows Server 2003,使用Regedit,对于Win2K,使用Regedt32)手工执行修改,也可以用模板来调整注册表的授权。
其实,我们根本不必自己创建修改注册表授权的模板,微软已经提供了一个:winntsecurity emplatescompatws.inf。微软提供的另一个模板winntsecurity emplatesasicws.inf能够把注册表授权恢复到Win 2K的默认状态。
5.控制本地安全策略设置
安全模板能够控制本地安全策略设置。每一台机器都有许多本地安全策略设置,例如是否显示出最后登录系统的用户名称、多长时间修改本地帐户的密码,等等。在NT 4.0中,这些设置通过用户管理器的本地版本(lusrmgr.exe)修改;在Win 2K中,修改工具是本地安全策略管理单元secpol.msc。
手工修改这类设置的步骤是:从控制面板的管理工具中启动“本地安全策略”,或者点击“开始”→“运行”,输入secpol.msc,点击“确定”启动本地安全策略管理器。本地安全策略管理器可以用来关闭或启动系统审核功能、调整密码管理策略、授予或者收回用户操作XP和Win2K的许多权限、控制IP安全(IPSec)。实际上,“本地安全策略”管理器可能是Windows默认提供的唯一控制IPSec的工具。
以上就是安全模板能够调整的五个方面,所有这些安全选项的调整都只要一个安全模板文件就可以完成。
二、如何创建安全模板
下面我们从实践应用的角度介绍模板的应用,示范如何为工作站或成员服务器创建一个模板,这个模板主要包括三方面的功能:首先,该安全模板能够控制组的成员,即限制本地的Administrators组只能由本地Administrator帐户和域的Domain Admins组加入;第二,该模板将设置F:adminstuff目录的NTFS权限,只允许本地的Administrators组访问;最后,该模板将禁止Indexing服务。
1.设置工具
我们知道,安全模板其实就是文本文件,因此从理论上讲,我们可以用记事本来创建安全模板。不过事实上,用记事本创建安全模板的工作量相当大,如果改用微软管理控制台的安全模板管理单元就要方便多了。Windows XP和2K都带有该工具。
首先打开一个空的MMC控制台。点击“开始”→“运行”,输入“mmc /a”,按Enter键打开一个空白的MMC控制台。
在该控制台中,点击“文件”(对于Win2K,点击“控制台”)→“添加/删除管理单元”,打开“添加/删除管理单元”对话框,点击“添加”打开“添加独立管理单元”对话框,在管理单元清单中选择“安全模板”,依次点击“添加”、“关闭”、“确定”。接下来就可以开始设置安全模板了。
在控制台根节点下面有一个安全模板的图标——一台加上了锁的计算机,如图一。扩展该标记,子节点显示出了当前系统安全模板的路径。一般情况下,安全模板位于%systemroot%目录的security emplates文件夹。扩展该路径节点,可以看到一组预制的安全模板;依赖于操作系统的版本和已安装的Service Pack数量,预制安全模板的数量也可能不同。
例如,XP系统中有一个名为Setup Security的模板,该模板将注册表和NTFS授权、用户权限、系统服务的状态恢复到安装时的默认设置。如果你在不断试验安全选项的过程中搞乱了各种设置,Setup Security模板可以将所有选项快速恢复到默认状态(当然,如果你想保留某些更改后的安全设置,部署Setup Security模板后这些设置就丢失了)。Win2K系统也有与Setup Security同样的模板,针对工作站、成员服务器、域控制器,模板也有三个版本,分别是: basicws.inf、basicsv.inf和basicdc.inf。
其他预制模板将系统的安全调整到不同的级别。Securedc.inf(适用于域控制器)和securews.inf(适用于成员服务器和工作站)提供较低层次的安全,hisecdc.inf和hisecws.inf模板则提升系统的安全级别——必须指出的是,虽然“提升安全级别”听起来很不错,但在部署hisecdc.inf和hisecws.inf模板之前务必三思而后行,其中一些配置会给XP与Win 2K系统的使用带来麻烦,特别是在Win 2K和XP系统与NT 4.0、Win 9x系统通信方面。
如果部署了高安全级别的模板后发现这些模板并不适用,你可以重新部署basic*.inf或Setup Security模板将系统恢复到默认设置。预制的安全模板中还有一个compatws.inf模板,它的作用是将系统的NTFS和ACL设置成安全层次较低的NT 4.0设置;在Win XP和2K上,某些早期的应用程序需要部署compatws.inf模板之后才能顺利运行。
点击任意一个安全模板,右边的窗格显示出可以利用该安全模板控制的安全选项类别:
⑴ 帐户策略:控制密码策略、锁定策略、Kerberos策略。
⑵ 本地策略:控制审核策略、用户权利指派、安全选项。
⑶ 事件日志:控制事件日志设置和NT的事件查看器的行为。
⑷ 受限制的组:控制哪些用户能够或者不能够进入各种本地组。
⑸ 系统服务:启动、关闭各种系统服务,控制哪些用户有权修改系统服务的启动方式。
⑹ 注册表:控制修改或查看各个注册键的权限,启用注册键的修改审核功能。
⑺ 文件系统:控制文件夹、文件的NTFS授权。
2.创建模板
基本知识已经了解得差不多了,下面就让我们从头开始构建一个模板。右击模板的路径(图一是d:windowssecurity emplates,你的Windows可能有所不同),然后选择菜单“新加模板”,输入模板的名称,假设是Simple。新的模板将在左边窗格中作为一个节点列出,位于预制的模板之下。下面,作为一个试验,让我们限制Administrators组、设置F:adminstuff的ACL、关闭Indexing服务。所有这些设置都可以在Simple节点下完成。
首先,我们要设置一下Administrator组,只允许本地的Administrator帐户和域的Domain Admins组加入Administrators组。扩展左边窗格中的Simple节点,选中“受限制的组”。如果操作系统是XP,右边窗格会显示出“此视图中没有可显示的项目”;如果是Win 2K,右边窗格保持空白。现在右击“受限制的组”节点,选择菜单“添加组”,在新出现的对话框中,点击“浏览”并找到本地工作站或成员服务器的Administrators组。注意,这里我们要加入的是本地的Administrators组,而不是加入域的组;如果你用域的帐户登录工作站,“浏览”对话框将假定你想要从域加入组(而不是假定你要从工作站或成员服务器的本地SAM加入组)。返回“添加成员”对话框后,点击“确定”。如果你使用的是XP,可以看到一个“Administrators属性”对话框;如果是Win 2K,必须右击右边窗格中的Administrators然后选择“安全”才能打开类似的对话框,但Win 2K对话框的标题是“为Administrators配置成员”。
在这个对话框中,如图二,窗口上方有一个“这个组的成员”清单,窗口的下方有一个“这个组隶属于”清单。点击上面清单旁边的“添加”按钮打开“添加成员”对话框。
如果是Win 2K,点击“浏览”按钮并选择域的Domain Admins组;如果是XP,点击“浏览”按钮打开的是一个“选择用户”对话框,如图三,但Domain Admins不会出现在列表中,你必须首先点击“对象类型”,选择“组”,点击“确定”返回“选择用户”对话框,选择(或者输入)Domain Admins。按照同样的步骤加入Administrator帐户。
接下来我们设置模板的第二部分,使得任何拥有F:adminstuff文件夹的系统把该文件夹设置成只允许本地管理员访问。在左边窗格中,右击“文件系统”,选择“添加文件”,在“添加文件或文件夹”对话框中找到或者输入f:adminstuff目录。
点击“确定”,出现一个标准的NTFS权限设置对话框。现在删除所有默认提供的授权规则,加入对本地Administrators组的“完全控制”授权。注意NTFS安全设置对话框里还可以调整高级NTFS选项,例如设置审核功能、所有者权限等。点击“确定”,系统会询问是否把权限设置传播给所有子文件夹和文件,根据需要选择一个选项,点击“确定”。
自CodeRed和Nimda肆虐以来,Indexing服务就引起了人们担忧,在不必使用该服务的系统上,最好的选择就是将它关闭。在控制台左边的窗格中,点击“系统服务”,在右边窗格中右击Indexing服务,选择“属性”(对于XP)或者“安全”(对于Win 2K)。在“Indexing Service属性”对话框中,如图四,选中“在模板中定义这个策略设置”,这时系统显示出“安全设置 Indexing Service”对话框,现在我们不需要设置该对话框的选项,因此点击“取消”返回图四的对话框。在图四对话框中选择“已停用”,然后点击“确定”。
右击控制台左边窗格中的Simple模板,选择“保存”。现在winntsecurity emplates或windowssecurity emplates目录下有了一个Simple.inf文件。
激活安全模板的命令是Secedit,命令语法为:secedit /configure /cfg 安全模板有点象程序的源代码:人可以阅读,但计算机不能直接识别,就象程序的源代码必须编译成二进制执行文件一样,安全模板也必须转换成二进制格式的安全数据库。Secedit既能够编译模板文件,也能够部署二进制的安全数据库,但我们必须为安全数据库指定路径和文件名称,例如C:securitysimple.db。
最后,Secedit还要报告处理经过和结果,我们要指定一个日志文件的名称,例如C:securitysimple.log。/overwrite选项告诉Secedit覆盖任何同名文件。因此,本例中完整的Secedit命令应该是:secedit /configure /cfg D:windowssecurity emplates simple.inf /db C:securitysimple.db /overwrite /log C:securitysimple.log。这个命令有点长,但显然要比到每一台机器上手工修改各个安全选项方便多了。你不妨试着编辑和部署几个模板,相信这个强大的工具一定会让你爱不释手。