前文介绍了IIS 的安装和Web服务器的新型体系结构IIS 新特性的数量多得令人惊奇其中一些特性是如此引人注目以至于人们的大部分注意力都被它们吸引在这第二篇介 绍IIS 的文章中我们不仅将了解这些已成为明星的特性还将关注一下IIS 各种较少有人注意却同样重要的改进之处
一安全
微软一次又一次地做着同样一件事情——某个软件产品出了问题饱受人们诟病于是赶紧发布新的版本将问题解决例如发布Windows NT 之后因稳定性问题而饱受批评于是微软发布了Windows 新操作系统的稳定性颇受好评但Win K服务器默认安装的IIS 却成了巨大的安全隐患需要下大力气加以整治才能解决问题IIS 默认不安装如果按照缺省方式安装Web服务器只能提供静态内容服务因此从这个角度看即使以后IIS 应用引擎和组件突然出现了问题IIS 还是极大地降低了安全风险另外Windows Server 还有一个新的组策略禁止安装IIS有了该组策略我们就可以禁止Windows 在活动目录(AD)森林中禁止不准备作Web服务器用的机器上安装IIS 防止网络上出现根本无用的不安全的IIS 服务器不过目前这个组策略只对Windows 服务器有效不能防止Windows XP Pro和Win K的机器安装IIS
当然由于刚刚安装好的IIS 不支持动态内容所以出现了第二个人们经常会问的问题为什么我的服务器不能运行ASP?(前文提到第一个人们经常会问的问题是IIS 可以在Win K服务器上运行吗?答案是不)要想在IIS 上运行程序必须使用IIS 的一种新特性即Web服务扩展或Web Service Extension(这个名字似乎意味着它与XML Web服务有某种关系实际情况并非如此)
如果要为某个程序启用Web服务扩展首先打开IIS管理器(在控制面板→管理工具中以前叫做Internet服务管理器或ISM)如图一点击添加一个新的Web服务扩展启动向导创建一个新的规则为规则指定一个名字然后找到想要启用的执行文件另外\system\inetsrv下有一个iisextvbs脚本它也能够配置并管理运行带有IIS 的Windows Server 的Web服务扩展应用程序和单独的文件管理员可以使用此脚本来启用和列出应用程序添加和删除应用程序依赖性启用禁用和列出 Web 服务扩展添加删除启用禁用和列出单独文件
图在图一中注意所有未知ISAPI扩展和所有未知CGI扩展这两种Web服务扩展默认情况下这两种扩展是禁用的意味着除非明确地允许一个应用在IIS 上运行否则它就不能运行如果一个用户请求了某个没有启用的文件IIS 将向用户返回错误——文件或目录没有找到同时在WSVC日志中记录文件或目录无法找到锁定策略禁止该请求在IIS 中和其他子状态代码是WSVC日志文件的一项可选功能用来帮助排解故障疑难(IIS 和IIS 中也有子状态代码不过不会在日志文件中记录但可以将它们转到定制的错误页面便于根据子状态代码执行特殊的处理)IIS 的子状态代码很有用它们提供了描述问题的详细信息例如禁止访问Passport登录失败禁止访问无法在当前应用程序池中执行请求的URL文件或目录无法找到MIME映射策略禁止该请求服务器错误该文件的数据在配置数据库中配置不正确所有这些错误和其他错误都映射到定制的错误页面错误页面不会把子状态代码发送给用户攻击者无法获知具体的错误信息
另一个安全方面的改进之处是IIS 允许指派一个加密服务提供者(Cryptographic Service ProviderCSP)能够将基于硬件的安全套接字层(SSL)加速器集成到IIS 从而把加密任务从服务器的通用CPU转移到了专门为加密操作而优化的专用设备有利于提高性能和可靠性
二配置数据
在IIS 和IIS 中配置数据库采用二进制文件结构但IIS 放弃了这一做法IIS 的配置数据由两个XML文件构成一个是Metabasexml包含IIS 服务器的配置信息另一个是mbschemaxml包含配置数据的模式定义IIS管理器提供了一项新的功能允许保存配置数据副本只要右击Web网站然后选择所有任务→将配置保存到一个文件然后指定配置数据副本的文件名字和保存路径即可按照这种方式保存配置数据时IIS 利用系统的机器码(Machine Key)加密配置数据的某些部分因此配置数据的副本只对创建该副本的机器有用
不过在将配置保存到一个文件对话框中我们可以选中用密码对配置进行加密选项然后指定密码用密码来保护导出的配置文件如果提供了密码IIS 将用密码来替代机器码以后只要提供同一个密码就可以将配置数据导入到另一个服务器另外我们可以使用命令行脚本iisbackvbs(在systemroot\System中)创建和管理远程或本地计算机的IIS配置的备份副本管理员可以使用此脚本工具创建其IIS配置的备份副本从备份副本还原IIS配置以及列出和删除备份副本
有些时候我们只要保存某个应用程序池Web网站或虚拟目录的配置而不是保存全部的配置信息这时可以按照如下步骤操作右击要保持配置信息的对象选择菜单所有任务→将配置保存到一个文件如图二所示如果准备将配置数据导入到另一个服务器必须提供加密文件的密码
图如果右击一个应用程序池Web网站组或单个网站然后选择新建→应用程序池(来自文件)或者新建→网站→来自文件或者新建→虚拟目录(来自文件)就可以从保存的配置文件创建新的应用程序池Web网站或虚拟目录因此必要的时候我们可以只创建和配置一个对象利用将配置保存到一个文件功能导出对象的配置信息然后利用新建→虚拟目录(来自文件)等功能将配置信息导入到多个Web网站这就是说我们可以先精心配置一个模板然后用它来创建和配置新的网站当然出现问题时配置信息副本还可以用来恢复网站的设置
由于IIS 配置信息是可移植的它还有另外一个好处这就是方便了升级假设我们升级时不能直接在Win K/IIS 上安装Windows /IIS 必须换一台机器这时就要解决如何将IIS 不可移植的配置数据转移到新的IIS 服务器的问题利用IIS 配置数据的可移植性解决办法是首先安装好新的Windows 服务器为原来的Win K服务器做一个完整的备份然后在Win K服务器上安装第二个Windows 服务器将它升级导出第二个Windows 服务器的配置数据(用密码加密)然后将配置数据导入到新的Windows 服务器新安装的Windows 服务器必须作一些调整例如允许IUSR帐户等但至少现在不必重新执行全部配置操作了
IIS 的配置数据是标准的文本文件(XML文件)所以可以用记事本之类的文本编辑器打开和编辑如果修改了IIS 或IIS 的配置数据有时必须重新启动IIS如果系统上网站的数量很多可能需要不少时间例如ISP的服务器就属于这类情况为了解决这个问题IIS 支持一种运行时允许编辑功能运行时允许编辑功能按照如下方式启用在IIS管理器中右击服务器选择菜单属性然后选中允许直接编辑配置数据库选项如图三所示启用了这个功能之后如果我们用记事本打开配置数据文件插入一个虚拟目录的配置然后保存并关闭配置文件IIS 几乎立即就能根据配置文件的设置作相应的修改根本无需重新启动
图既然允许直接编辑配置文件因配置文件不合法造成的服务器应用程序故障也必然增多为此IIS 提供了配置文件历史版本目录即\system\inetsrv\history每次修改配置数据或重新启动IIS IIS 都会在该目录中保存一份原有的配置数据
三IIS管理器
每次产品重大升级人们都会试图从用户界面寻找令人激动的新功能IIS 的管理器确实有了变化不过改动之处出乎意料地少
其中一个改动之处虽小但很实用如果在IIS管理器中右击一个文件夹现在可以选择权限菜单打开文件夹的安全对话框在这个对话框中可以设置文件夹的NTFS授权不必再离开IIS管理器虽然这是一个小小的改动也许它今年会为全世界所有的IIS管理员总共节省数千小时的工作时间
右击一个Web网站选择属性转到目录安全性页点击安全通信下面的编辑按钮在这里可以找到另一个重要的改动之处——安全通信属性页允许配置SSL证书信任列表(CTL)客户证书在IIS 和IIS 中除非在Web网站上安装一个证书否则不能访问该属性页这一限制令人不快因为从技术上看配置CTL客户证书并不要求服务器上安装了证书换句话说在IIS 中我们安装证书的唯一用途可能就是因为用户界面需要它IIS 改正了这一多余的要求现在我们不必在Web服务器上安装证书也可以访问和使用该属性页了
四通配符应用程序
如果你熟悉IIS 和IIS 的ISAPI筛选器可能也熟悉它们的缺点ISAPI筛选器不仅编写困难而且由于它们在Inetinfo进程内运行如果编写时不小心留下了一点错误很容易导致灾难性的后果出错的代码可