IIS常见问题及解答以及故障分析

80酷酷网    80kuku.com

  

解决以下常见问题:
1. 我怎样对IIS设置进行备份? 
2. 什么工具能帮助我施加一个负载并进行应用程序的强度测试?
3. 当Localstart.asp返回了一个“正在创建中”响应时,发生了什么事情?
4. 能在Microsoft Windows XP Home Edition中安装IIS或PWS吗?
5. ISAPI筛选器能在一个单独的进程空间中运行吗?
6. 我在哪能获得这样的示例代码--它显示了如何在使用WebDAV的ASP中编辑文档?
7. 当我试图用ASP去访问一个数据库时,我得到了一个“拒绝访问”的回应,这是什么原因?
8. 如何在没有恢复原始设置的情况下运行IIS锁定工具? 
9. 在我的intranet环境中,如何处理“server-side include”语法,而不必重新命名所有的文件?
10. 当我从一个客户工作站进行访问时,怎样做才能在IIS 4.0(Windows NT 4.0 Service Pack 6a)中访问IISADMIN虚拟目录而不会导致服务器重新启动呢?
11. 在Windows 2000 Professional中,我怎样做才能让域用户来管理虚拟目录,以便域用户能够创建和管理他们自己的虚拟目录?
12. 在Windows 2000 Server上,当一个站点需要SSL时,我怎样才能在相同的站点上使用主机头?
13. 如何在Microsoft Windows XP Home Edition中安装IIS 5.0?

问:  我怎样对IIS设置进行备份? 
 
答:   有多种方法可以用来完成此项工作。在Internet信息服务管理器控制台(IIS插件)中所设置的属性和值都被储存在Metabase.bin文件 中,缺省情况下,这个文件位于“C:winntsystem32inetsrv”目录中。在IIS 5.0中,你可以从内置的IIS插件中来备份元数据。如果需要进行此工作,请选择桌面上的计算机图标然后单击右健。然后再选择 “备份/恢复配置”。然后你就可以选择备份现有元数据设置或者恢复以前的版本。与此相同的选项在MetaEdit 2.2中也可找到。
当你以 这种方式保存了元数据时,你的备份将以.md0文件的格式储存在C:winntsystem32instrvmetaback文件夹中。当你执行备份时, 文件将使用你所指定的名称,如Pre-Lockdown.md0。如果你使用相同的文件名创建了多个备份,他们将使用数字逐渐递增的扩展名,如 Backup.md0,Backup.md1等等。
在你的元数据严重损坏的情况下,你将不能启动IIS。此时,你也不能从IIS插件或 metaedit中执行恢复操作。如果真的发生了类似情况,你就可以通过从备份文件夹中选用最合适的.md0(.md1等等)元数据备份文件来替换 Metabase.bin。如果你的备份文件没有错误,IIS将会立刻启动。
制作元数据的备份还有其它两个意义。你可以使用xcopy,scopy或其它复制程序来简单地复制Metabase.bin文件。你应该先停止Internet服务,以保证你的元数据是最新的并且不在使用状态中。
最 后,我们还提供了两个脚本--metaback.vbs和metarest.vbs--它们位于 Inetpub/IISSamples/sdk/admin(如果你在IIS 5.0上安装了IIS SDK)文件夹中或在IIS Resource Kit/Utility/ADSI Admin Scripts文件夹(如果你安装了IIS 4.0 Resource Kit)中。这些.vbs脚本使用了一个ADSI命令,它是专门为创建元数据备份而提供的。  
问:什么工具能帮助我施加一个负载并进行应用程序的强度测试?
 
答:   有许多工具可以用来实现这个目的。而且有一些功能完备并且十分有用的你将会发现有相当多的可利用的商业工具可供您利用被完全装备了,并且这些工具是有 很用的。Microsoft提供了Web Application Stress Tool,在大多数情况下,对于装载在Web服务器上施加负载来说,并检查它在一定压力下是否能够正常工作这一目的当进行应用程序强度测试时,查看它们的 执行情况,这个工具是足够用的。预先执行测试是一个好主意,因为在应用程序的设计过程中,问题并不会显现出来,除非在这个服务器上施加一定负载被加载了- -而且在一个产品成品服务器上你肯定不希望发现任何问题。
Web Application Stress Tool有几个有用的特性,它可以将您包括当你在通过Web站点中进行的指向并和点击操作记录为一个可重新回放的脚本路线时记录重放脚本的能力。然后当你 远程监视服务器上的性能监视计数器时,就能同步地在一个或多个客户端上重新播放这个脚本。另外,你还能指定详细资料,如用于测试验证身份验证吞吐量所使用 的用户账号,以及显示请求和测试计划日程之间的延迟。
当你在你安装了Web Application Stress Tool的时时候,它还在计算机上安装了一个服务,叫名为做“WebTool”的服务。如果你确信当不再需要这个工具时,您可以卸载Web Application Stress Tool。
问:  当Localstart.asp返回了一个“正在创建中”响应时,发生了什么事情?
 
答:   这个“正在创建中”页面应该出现在从一个远程的IP地址对默认的Web站点进行访问的时候。如果你从一个内部的IP地址访问,IIS在线文档就会被显 示。如果你在Internet Explorer中访问http://localhost,并且未安装Default.htm或Default.asp,则Web站点将会运行 IISStart.asp。IISStart.asp将检查下面两个条件:
你是否已经敲入输入了“localhost”。
客户端的IP地址是否与服务器端IP地址相匹配。
在任一种情况下,你都将会被重定向到Localstart.asp,然后打开所需要的页面。
确定这些文件在你的系统上是存在的,并且在“文档”选项卡标签中调用的是IISStart.asp。为了确定这些,你可以尝试写一段简短的.asp网页,来显示服务器变量的值,如下:
Your local IP address is 207.46.249.190
The client IP address is 210.82.106.28
如 果IP地址没有被识别,则可能是因为Localstart.asp页未被调用。当然,你总是可以通过直接使用http: //localhost/localstart.asp来调用它。如果没有配置默认文档,在直接调用Localstart.asp时就可能出现问题。脚本 将返回下述消息:
目前当前,你没有为用户设置一个默认文档。当前所有试图连接到这个站点的用户都将收到一个“正在创建中”的页面。

问:能在Microsoft Windows XP Home Edition中安装IIS或PWS吗?
 
答:   Windows XP Home Edition不支持任何版本的IIS,没有任何可靠的方法能使其运行IIS。Windows XP Home Edition并未设计成一个Web应用程序的开发平台。在升级到Windows XP Professional后,你就可以在系统上安装IIS 5.1,以便利用ASP.Net进行开发工作。在Windows XP Professional上的IIS 5.1是一个全功能的Web服务器端,但是它只能建立10个并发连接,这是因为它只是一个工作站操作系统而不是服务器平台。Windows XP Home Edition还有一些与Windows XP Professional相同的其它限制,因为它也是一个工作站操作系统而不是服务器操作系统。大体上,你会发现,在Windows 2000 Professional和Windows 2000 Server或Advanced Server上的IIS 5.0中,这些差别是相类似的。无论怎样,对于使用.NET Framework来开发基于Web 的应用程序来说,Windows XP Professional才是一个优秀的环境。   
问:ISAPI筛选器能在一个单独的进程空间中运行吗?
 
答:  为 与Web服务器协同工作所开发的应用程序都有着特殊的要求。例如,你不能从一个URL中调用一个Notepad.exe实例并且希望在客户端的系统上看到 一个记事本窗口。为了从IIS中与请求进行交互(并不是CGI),程序必须使用ISAPI编写。ISAPI是Internet服务器应用程序接口 (Internet Server Application Programming Interface)的缩写。有两种可执行的ISAPI:扩展和筛选器。
可以从一个URL中直接调用ISAPI扩展,如http: //localhost/myisapi.dll。假设你已经在目录上配置了IIS,允许脚本和可执行程序,并且用户有执行NTFS的许可权限,则dll 将会运行。IIS允许你指定应用程序是在进程内(作为Inetinfo部分)运行还是在进程外(作为IIS 4.0上的MTX部分,或者作为IIS 5.x部分的dllhost)运行。当一个应用程序在进程外运行时,Inetinfo就从问题中被隔离出来。如果应用程序出现故障,Web服务器也会出现 故障。
ISAPI筛选器又是另一个内容。ISAPI筛选器能改变进入或离开IIS的数据流。因此,ISAPI筛选器有着非常强大的功能,能用来实现客户日志、验证或更改数据流。对IIS 5.0来说,在ISAPI筛选器中实现的特性包括数据压缩、摘要验证和URLScan。
因 为筛选器在IIS中扮演了一个如此重要的角色,所以它们总是作为Inetinfo部分运行在过程内。因此,正确的ISAPI筛选器结构对服务器的正常运行 是必备的。你可能希望与Microsoft 产品支持服务一起工作来确定问题,因为处理这种例外可能是一个较大的挑战。
基于这个考虑,有两个 新技术可以使生活更加轻松,IIS 6.0就是其中的一个。由于它是一个新的体系结构,所有的ISAPI筛选器都在进程外运行。这将使Web 服务器从一个捉摸不定ISAPI筛选器中隔离开来,但这实际上并没有真正解决问题。为了解决这个问题,你可以考试使用.NET语言在ISAPI方面做一些 工作。通使用C++设计ISAPI筛选器相比,使用.NET实现相同的功能要大为简单。   
问:我在哪能获得这样的示例代码--它显示了如何在使用WebDAV的ASP中编辑文档?
 
答:   从IIS上的脚本中使用WebDAV的最好方法就是使用ASP.Net的WebClient类。如果你正在使用Windows XP或Windows Server 2003,WebDAV功能就是这个操作系统的一部分。这就允许你在一个Web服务器上使用HTTP引用一个文件,就像使用一个UNC路径名称一样。例 如,你可以用NET USE * http://servername/directory来映射一个驱动器,然后通过使用驱动器符号来访问这个位置。另一方面,你还可以创建一个COM对 象,它是一个WebDAV的客户端。你可以使用这个对象向IIS 5.x或IIS 6.0传递WebDAV动词。
另外,如果你以WebDAV 为关键词搜索MSDN,你将会找到一些例子,它们教你如何使用XML来为Exchange和其它Microsoft服务器构造WebDAV的查询。在 Microsoft Exchange 2000 Server SDK中有一个WebDAV的示例应用程序。   
问:当我试图用ASP去访问一个数据库时,我得到了一个“拒绝访问”的回应,这是什么原因?
 
答:   有一个名为“Filemon”的优秀免费工具,你可以从Sysinternals.com上获得它。你可以使用Filemon来快速诊断出绝大多数的 权限问题,因为它能实时显示服务器上的全部文件权限、调用的过程名称及访问的结果。因此,无论隐藏多么深的嵌套包含或多么模糊的临时索引,任何“拒绝访 问”的消息都能被轻松识别。
当一个在先前的操作系统上能够正常工作的应用程序在升级后出现问题时,它就无能为力了。但是,这种类型的问题还是 有启发意义的。IIS 4.0和IIS 5.0之间的一个差异就与COM和COM+之间的一个差异有关系。在IIS 5.0中,当一个COM+对象代表用户访问文件时,它的默认行为就是使用用户的安全上下文环境来完成这些工作。这在IIS 4.0中并不算什么事情。因此,当从IIS 4.0向IIS 5.0迁移包含COM的应用程序时,你可能需要向文件提供用户权限,而在IIS 4.0中并不需要。虽然跟以前相比这有些不方便,但是它在提高应用程序安全性设计方面的确是一个进步。即使是不能使用定制的COM对象去访问数据库, COM在本地的IIS组件中还是得到了广泛的应用。
这里有一个能够帮助您理解这种需求的例子,比如,你需要为正在创建数据库的用户授予请求使用Access临时文件夹的权限。更多的信息请查阅Microsoft Knowledge Base中的Q210457和Q271071。   
问:如何在没有恢复原始设置的情况下运行IIS锁定工具? 
 
答:   IIS锁定工具非常有效。这个工具允许你轻松、显著地增加服务器的安全性。一旦运行了这个工具,它就将其活动的历史记录储存到一个文件中,这个文件的 位置是%systemdrive%%systemdir%system32inetsrv。你将在下面的文件中找到这个信息:
Oblt-rep.log
Oblt-once.md0
Oblt-mb.md0
Oblt-undone.log也可能是最新的。
如果你删除了这些文件,向导就会启动,就好像IIS Lockdown tool并未被运行一样。重复这个过程并没有什么风险。在你这么做之前,一定要制作一个Metabase.bin的副本。
因为当它第一次运行的时候,这个过程将会让你运行锁定工具,就好像它从未被运行过,但并不会“解开”或反转锁定工具进行了一些设置,所以这个过程应该可以正常工作。

问:在我的intranet环境中,如何处理“server-side include”语法,而不必重新命名所有的文件?
 
答:   IIS 4.0和IIS 5.0提供了这样一个选项,它不需要你更改所有文件的扩展名。ASP处理器也能处理服务器端的include语法,因此没有必要使用.stm或者是. asp扩展名。那么,这对你又有什么帮助呢?通过在应用程序配置中创建一个条目,你可以将.htm 文件映射为由asp.dll处理,这样,哪些带有.htm扩展名的文件就将由asp.dll来处理。通过使用这种方式,那些含有includes的. htm 文件不用重命名就能被处理。现在你可能在考虑:“这会不会导致我所有的.htm文件都像脚本一样被处理,从而降低系统的性能呢?”事实上,在IIS 4.0中,这的确是一个问题;但是,在IIS 5.0中,性能问题并不像你想象中的那么大,并且在IIS 5.1中,甚至会更好。IIS 5.0有一个特性叫做“Scriptless ASP”(无脚本ASP)用来处理这个特殊的问题。如果一个不包含脚本的文件被提交到ASP处理器,它就不会被解析,只是简单地作为静态页面发送出去-- 在这种特定的情况中是一个有用的特性。   
问:当我从一个客户工作站进行访问时,怎样做才能在IIS 4.0(Windows NT 4.0 Service Pack 6a)中访问IISADMIN虚拟目录而不会导致服务器重新启动呢?
 
答:  因为IIS 4.0是在Windows NT 4.0 Service Pack 6a(SP6a)之前发布的,所以一定要在安装完IIS 4.0后重新安装SP6a和所有必需的即时修补程序。  
问:在Windows 2000 Professional中,我怎样做才能让域用户来管理虚拟目录,以便域用户能够创建和管理他们自己的虚拟目录?
 
答:   你需要做的最后事情就是将域用户加入到Power Users组中,因为这样就可以为域中任何一个拥有用户帐号的人赋予经过提升的权限。如果你信任域中的每一个成员都可以对系统进行很好的管理,这样做不会 有什么问题,但是对于大多数计算机用户来说,这样的信任级别是不合适的。
为了在IIS中创建一个虚拟目录,用户需要有管理员权限。之所以这样设计,是因为任何能在Web站点上创建虚拟目录的人也能对虚拟目录进行删除、重命名、重定向或其它管理工作。
认 识到这点后,你可能希望不为用户提供管理员身份就能获得类似的权力,在IIS插件中有一个特性(“操作员”标签),能让你指定一个Web站点操作员(不是 管理员),为Web站点创建虚拟目录。这个特性只有在Windows 2000 Server、Windows 2000 Advanced Server和Windows 2000 Datacenter Server中是可用的。相同的特性也可应用于IIS 4.0。
另外,你还 可以在IIS Web站点内部创建一个虚拟目录,并将它映射到%systemroot%%systemdir%inetsrviisadmin。你应该保护这个虚拟目录 的安全,否则那些访问这个站点的人就能够管理这个Web站点。还要注意,这只有在Windows 2000 Server,Windows 2000 Advanced Server,和Windows 2000 Datacenter Server (以及IIS 4.0)上面是可行的。
当你发现你自己根据操作系统的限制将扩展权限授予了其他人或别的工作组,并且试图将你的工作站当作服务器时,你可能需要安装一个服务器操作系统。

 
问:在Windows 2000 Server上,当一个站点需要SSL时,我怎样才能在相同的站点上使用主机头?
 
答:  让我们回顾一下SSL和主机头的问题,因为对IIS来说,它的问题一直在常见问题解答的头五个中。
当 客户发出一个到IIS服务器的HTTP连接请求时,这个客户的请求包括一个叫做HOST:的字段,它包括了URL中的Web服务器请求。例如,如果你的请 求将http://www.microsoft.com作为目的地,则浏览器将其发送到服务器,并一同提交HTTP头中的其它信息,HOST: http://www.microsoft.com。因为此字段的名称是“HOST”,并且它在客户的HTTP头中,所以我们把它称作“主机头”。
如果客户请求建立一个SSL连接,主机头字段仍然会包括在请求当中,只不过它被包含在这个包的加密部分里(在应用层中),因此Web服务器无法对其进行解密,以确定应该将请求发送到哪一个Web站点。
这就产生了一条定律:当使用SSL时,不能使用主机头来作为识别一个Web站点的主要手段。
如 果你确实想使用带有主机头的SSL,那么会发生什么情况呢?考虑一下这个情况。你有两个Web站点,其中一个不使用主机头,另一个则使用。两个站点都使用 相同的IP地址,并且都配置成使用证书。当你利用SSL访问使用主机头的站点时,第一个Web站点会对此做出响应。之所以发生这种情况是因为:我们使用 IP地址来识别你希望用来建立连接的站点,而不是主机头。因为第一个站点对IP地址和HTTPS有反应,所以它接受了请求。如果第一个Web站点需要主机 头,并且在不同的IP地址上,或者没有证书,那么连接将会失败。
因此,请考虑你的配置,在你需要SSL的相同站点上,只要不使用主机头,你就可以做任何想做的事情。
问:如何在Microsoft Windows XP Home Edition中安装IIS 5.0?

首 先需要说明一点,就是这种做法可能会有风险,因此在你实际操作之前,最好明确你的行为会带来什么后果。并且经过这样处理安装的IIS在运行上可能存在某种 未知的缺陷。还有,同Professional版的XP一样,在Home版上运行的IIS也有10个并发连接的限制。在同一个时间内,最多只能有10个人 使用你提供的IIS服务。如果你还想继续,那么就往下看吧。
准备条件:一张Windows 2000 Professional的光盘(假设光驱是F盘)。
首 先在运行中输入"c:windowsinfsysoc.inf",系统会自动使用记事本打开sysoc.inf这个文件。在sysoc.inf中找到" [Components]"这一段,并继续找到类似"iis=iis.dll,OcEntry,iis.inf,hide,7"的一行字,把这一行替换为 "iis=iis2.dll,OcEntry,iis2.inf,,7"。之后保存并关闭。
把Windows 2000 Professional的光盘插入光驱,同时按下Shift键禁止光驱的自动运行。在运行中输入"CMD"然后回车,打开命令行模式,在命令行下输入下列的两条命令,在每一行命令结束后回车:
  Expand d:i386iis.dl_ c:windowssystem32setupiis2.dll
  Expand d:i386iis.in_ c:windowsinfiis2.inf
“Web 匿名用户”帐户密码的位置
问:我们希望向“Web 匿名用户”帐户授予从其他系统上读取信息的访问权;可是,我们不知道该帐户的密码。怎样才能获得该密码呢?
答: IUSR_ 帐户就是“Web 匿名用户”帐户,它是在 IIS 的安装过程中创建的。该密码存储在本地 SAM 中(对于 Windows 2000 域控制器而言存储在 Active Directory 中),Metabase 中也存储着该密码。由于该密码存储在 Metabase 中,您就可以使用一个 .vbs 脚本将 IUSR 和 IWAM 这两个帐户的密码提取出来,方法如下:
Dim IIsObject
Set IIsObject = GetObject ("IIS://localhost/w3svc")
WScript.Echo "AnonymousUserName = " & IIsObject.Get("AnonymousUserName") & vbCrlf & _
"AnonymousUserPass = " & IIsObject.Get("AnonymousUserPass") &vbCrlf &vbCrlf &_
"WAMUserName = " & IIsObject.Get("WAMUserName") & vbCrlf & _
"WAMUserPass = " & IIsObject.Get("WAMUserPass")
Set IIsObject = Nothing
注: 通过此脚本可以显示在主属性级别上针对 Web 服务设置的 IUSR 和 IWAM 帐户密码。如果您已将匿名验证配置为使用另外一个用户帐户来访问网站或目录,那么您必须相应地修改该脚本,以反映所做的更新。
如何在不同计算机之间移动 Metabase
问: 有没有文档资料记录 IIS 4.0/5.0 中针对不同计算机的密钥?如果我需要将 Metabase 从一台计算机移到另一台计算机上,应该采用哪种方法?我读了 IISSync 实用工具的说明文档,但不能解决我的问题。我在找一种类似于 MergeINI 文件这样的工具。
答:IIS 4 和 IIS 5 均使用 %systemdir%/system32/inetsrv 中的 metabase.bin 来存储 IIS 配置信息。Metabase 的密钥是针对安装 IIS 的计算机设置的,所以您不能简单地在不同系统间移动 Metabase。正如 2001 年 11 月这一期的 IIS 有问必答专栏 (http://www.microsoft.com/technet/columns/insider/iisi1101.asp) 中指出的那样,您可以使用 Metaedit 2.2 (http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe) 从 IIS 4 或 IIS 5 中导出 Metabase,然后再将这些设置导入另一个系统。导入后仍需确保导入系统中的设置正确无误。例如,如果您的 Web 站点主目录位于驱动器 D 上,而您使用 Metaedit 将 Web 站点导入一个新系统中的驱动器 E 上,就会导致 IIS 找不到站点内容。
另一个可用于迁移 Metabase 的实用工具是 IIS Export。这是一个非常实用的迁移工具,位于以下网址:http://www.adsonline.co.uk/IISExport。这个共享件实用 工具可以复制文件和权限,并将 Metabase 存储在一个数据库中,以便将配置信息应用到多个系统中。
最后,还可以借助 IIS Migration Tool。该实用工具属于 Windows 2000 资源工具包的一部分,可以从 http://www.microsoft.com/serviceproviders/downloads/migration_toolsP65238.asp 下载。该工具可以通过端口 80 传送 Metabase、文件和权限,但最多传送 4GB 的数据。尽管不支持它作为资源工具包的一个实用工具,但该工具还是非常有用的。
可用于排除 SMTP 服务故障的资源
问:我想询问有关 IIS 5.0 的 SMTP 服务的信息。我使用默认设置无法发出邮件,请问如何解决这个问题?
答:IIS 5 中的 SMTP 服务是 IIS 4 SMTP 服务的增强版本。您可以在很多地方找到非常有用的信息。除了随服务器安装的联机帮助文件,您还可以查阅以下文章:
How to Configure the IIS SMTP Service to Relay SMTP Mail(如何配置 IIS SMTP 服务以转发 SMTP 邮件,Microsoft 知识库文章 Q230235)
Setting Up the SMTP Mail Service in Windows 2000 - Part 1(在 Windows 2000 中设置 SMTP 邮件服务 - 第一部分,http://www.asptoday.com/content/articles/20000306.asp)
但我个人更愿意查阅由微软出版社出版的 Running Microsoft Internet Information Server(运行 Microsoft Internet Information Server)一书中相关的一章。本书对所有 IIS 管理员都是必读的,尽管其中介绍的是 Internet Information Server 4,但大量篇幅都适用于 IIS 5,包括涉及 SMTP 的那一章。您可以在 Microsoft TechNet 网站上找到这一章,网址是 http://www.microsoft.com/technet/prodtechnol/iis/iis4/deploy/confeat/mail.asp。
最后,还可以参考 Microsoft 培训课程中有关如何配置 SMTP 服务的一个模块,课程名称为 2295a – Implementing and Supporting Microsoft Internet Information Services 5.0(实施和支持 Microsoft Internet Information Services 5.0)。
如何在系统帐户环境之外运行应用程序
问: 我的 IIS 服务器可以运行一个自定义的 mpeg 播放应用程序。该应用程序可以将 mpeg 数据进行流式处理,具体是使用一块特殊的卡将数据解码并以流式输出到投影机上。当 mpeg 源位于本地磁盘上时,这个进程可以正常运行。但现在我需要从 Unix 服务器上提取 mpeg。当 IIS 加载 mpeg 播放应用程序时,总是以 SYSTEM 身份执行加载,但此身份无法访问 NFS(Unix 服务器)共享资源。我需要让 IIS 在启动 mpeg 播放应用程序时使用 SYSTEM 以外的一个用户身份。我已经试过更改 IIS 服务使用的用户帐户,但这样一来问题更多了。如何才能解决这个问题,我到底错在哪里呢?
答: 任何进程都总是在帐户的“上下文”中运行的。正如您指出的那样,INETINFO 是由 SYSTEM 帐户所启动的进程,所以 Inetinfo 是在 SYSTEM 帐户上下文中运行的。SYSTEM 帐户不属于典型的用户帐户。SYSTEM 帐户的一个特点之一就是不具备网络访问权,因此,以 SYSTEM 身份运行的应用程序无法访问网络资源。某些情况下,可以对服务进行配置,让它作为由一个指定的用户帐户启动的进程运行,但 IIS 又不支持此项配置功能。
最理想的做法就是让 IIS 服务器中的应用程序切换“上下文”,使用正调用该应用程序的用户的安全身份验证凭据(有关详细信息,请参考以下两本书:由微软出版社出版的 Designing Secure Web-Based Applications for Microsoft Windows 2000(为 Microsoft Windows 2000 设计安全的基于 Web 的应用程序)及 Addison Wesley 出版的 Programming Windows Security(Windows 安全性编程)。
不过,您还可以通过将应用程序配置为在进程外 运行来解决问题。您可以在 IIS 管理单元的 Web 站点或目录属性中配置该设置。在 Internet Information Server 4 中,需要选中“在单独的内存空间中运行(独立进程)”复选框;在 IIS 5 中,需要将应用程序保护级别设置为“中”或“高”。一经配置,应用程序将在 IWAM_ 帐户而不是 SYSTEM 帐户的上下文中运行。IWAM 是一个普通的用户帐户,您可以为其分配访问远程网络资源的权限,这样在此环境中运行的应用程序就可以访问这些资源了。
作为多个站点的主机时推荐使用的文件夹结构
问: 在选择主目录和主目录的物理文件夹结构时需要注意哪些事项,特别是在作为多个站点的主机时需要注意什么?如果有 A 公司、B 公司或更多公司,它们是应位于 Inetpub 文件夹下还是 wwwroot 之下?换言之,wwwroot 是所有 Web 站点的根目录还是只是安装的默认 Web 站点的根目录?这对访问 Scripts 等文件夹有何影响?
答:以下几点说明可以澄清上述疑问。安装 IIS 后,系统的目录结构将如下所示:
Drive Root
Inetpub
Adminscripts
Ftproot
Iissamples
Scripts
Wwwroot
因为看到 wwwroot 名称中含有“root”,人们往往就会推断它是存储所有 Web 内容的位置,但是,事实并非如此。该文件夹只是“默认 Web 站点”的主文件夹,您应将该名称视为与“DefaultWebRoot”等同。
故此,您最好将新的 Web 站点放入默认 wwwroot 文件夹之外的文件夹中。如果不这样做,所有 Web 站点内容都只能从默认 Web 站点中读取。另外,为安全起见,不应将网站内容放在系统驱动器中。
还 应特别注意 Scripts 文件夹。默认情况下,Scripts 文件夹的访问权限设为每个用户 - 完全控制,并允许执行脚本,所以必须使该文件夹的安全控制更严格一些。我建议将 Scripts 文件夹重新定位到新的 webroot 所在的驱动器,并对其重命名。这样如果有人想探查服务器中有没有名为“Scripts”的文件夹,并在找到此文件夹后试图上传负载,那么这种攻击行为将被 挫败。 [SplitPage]
用 IIS 设置并路由子域
问:在 W2K 服务器上,怎样用 IIS 5.0 创建子域?如果我让 BerAult.Com 在根 web 站点,并希望让 Technical.Bertault.com 带我到一个新文件夹或者子站点,应如何设置它?我所能找到的全部信息都是关于如何将 Berault.com/technical 配置成 URL 的。
答:您的 web 站点体系结构及其与 DNS 的集成对于您的 IIS 安装来说当然是一个很关键的部分。正如您说的那样,为 Berault.com/technical 配置一个站点很容易,因为它实际上就是位于 Beralut.com 站点内的一个文件夹或虚拟目录。
而 将 technical.bertault.com 配置为一个“子站点”则是另外一回事,这一点您已知道了。按照设计,URL 的构成是这样的:http://domainname.com 应是 http://hostname.domainname.com 的父级域。这是 DNS 的设计使然,DNS 要求 URL 中使用这种名称空间结构。不过,就一个 web 服务器而言,它们是两个完全不同的概念。IIS 并不认为它们之间有什么关系。
因此,您应将 technical.berault.com 作为一个完全不同的 web 站点来看待。在 DNS 中,您可以为 technical.berault.com 添加一条 A 记录,此记录给 technical.berault.com 分配一个与 berault.com 相同的 IP 地址。然后,您可以创建一个 ASP 页,用它检查传入的 URL 并相应地路由请求。如果您想让“子域”路由到您主 web 站点内的一个文件夹,这一点将非常有用。或者,您也可以创建一个全新的 web 站点,用一个新的 IP 地址(它必须在 DNS 中配置)或用 IIS 内的主机标题来标识它。
您可以为您的“子域”创建一个新的 web 站点,使其主文件夹作为其父级域内的一个位置。虽然这样做是可行的,但我建议您不要这样做,因为这样您会发现同一内容将有两个管理界面,而且没有办法使它们保持同步。这样会导致对配置和安全问题进行故障诊断时出现困难。
屏蔽 HTTP 标头(内容-位置)中的 IP 地址
问:在对 IIS 5 服务器进行端口扫描时,它返回以下信息:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Content-Location: http://192.168.0.44/Default.htm
Date: Tue, 19 Feb 2002 20:19:20 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Tue, 19 Feb 2002 20:04:10 GMT
Content-Length: 16

问题是,Content-Location(内容-位置)标头暴露了 web 服务器的内部 IP 地址。这就为黑客大开了方便之门。是否有办法让 IIS 在扫描过程中不返回服务器的 IP 地址?
答:有,您可以配置 IIS 4 和 IIS 5,使 Content-Location 字段返回 URL 而非 IP 地址,如下所示:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Content-Location: http://homer.test.bh.tm/Default.htm
Date: Tue, 19 Feb 2002 20:27:20 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Tue, 19 Feb 2002 20:04:10 GMT
Content-Length: 16

要做到这一点,您必须将 UseHostName 这一值添加到 Metabase 中的 W3SVC 键上。最简单的办法是使用默认情况下安装在 InetpubAdminscripts 中的 ADSUTIL 程序,如下所示:
adsutil set w3svc/UseHostName True

然后,您必须重新启动 web 服务。有关更多信息,请参阅 Microsoft 知识库文章 Q218180。
更改 CGI 脚本超时时间
问:我们每天都要运行一个 CGI 脚本。开始时它运行一会儿,接着我们就会收到一条消息说“超过了 CGI 的时间限制”。CGI 的时间限制是多长,是否有办法改变它?
答: IIS 确实有一个与 CGI 进程关联的超时限制,默认设置为 300 秒(5 分钟)。此设置可以在用户界面上更改。此设置只在 WWW 服务的 Master 属性中可以看到,所以不易找到它。打开“IIS 管理单元”,右键单击您的服务器并选择“属性”。在选定 WWW Service Master Properties(WWW 服务主属性)后,单击 Edit(编辑)。单击 Home Directory(主目录)选项卡,然后依次单击 Configuration(配置)选项卡、Process Options(进程选项)选项卡,如图 1 所示。在这里可以看到 CGI 脚本超时设置。
如果您的浏览器不支持内嵌框,请单击此处在单独的页中查看。
图 1 Application Configuration(应用程序配置)中的 Process(进程选项)选项卡
从 IIS Lockdown 工具中提取 URLScan
问:我们希望在服务器上安装 URLscan,但又不想运行 IISLockdown 工具。以前,Microsoft 是分别提供这些工具的,而现在它们都在同一个安装中。怎样才能既安装 URLScan 又不运行 IISLockdown 呢?
答: 您刚才说过,Microsoft 以前是分开发行 IIS Lockdown 工具和 URLScan 的。IIS Lockdown 工具的 2.1 版在更新之后包含了 URLScan 2.0。在绝大多数情况下,IIS Lockdown 向导应在 IIS 服务器上运行。这样将执行若干个重要步骤以加强您服务器的安全,并将配置和安装 URLScan ISAPI 筛选器。
可以从 IIS Lockdown 安装包中提取 URLScan 组件,并在不运行 IIS Lockdown 的情况下安装它。这将为您提供 URLScan 的 2.0 版本,而不是它的 1.0 版;在本文脱稿时,1.0 版仍可以作为一个单独的可下载软件从 Microsoft 的下载页和通过许多 Microsoft 知识库文章来下载。
如想从 IISLockdown 2.1 中提取 URLScan,请首先下载 IISLockdown 2.1。然后在该工具的位置打开一个命令提示窗口并键入以下命令:
iislockd.exe /q /c /t:c:lockdown_files

此命令将从安装包中提取这些文件。然后,您就可以将 URLScan.dll 安装为一个 WWW Master 属性级别的 ISAPI 筛选器。确保存放 URLScan.ini 文件的位置与存放 URLScan.dll 文件的位置相同。
您 很可能需要为您的服务器手动配置 URLScan.ini 文件。我们建议,只有经验丰富的管理员才可以编辑 URLscan.ini 文件。请阅读从 IIS Lockdown 实用工具中提取的 URLScan.doc 文件中的使用说明。运行 IISLockdown 工具向导来安装 URLScan 的好处之一是,它为您配置了 URLScan.ini 文件。
使用 URL 中的参数重定向请求
问:是否有办法使用 URL 中的参数作为重定向的一部分,而不使用 ASP?换言之,当人们访问我们的站点 www.oursite.com?A=1 时,我们想将此请求转发到 www.theirsite.com?A=1 站点。
答: 在 web 站点、目录、虚拟目录或文件的属性中,您可以将文件的位置指定为“本地”、在“另一系统上”(带一个 UNC 路径名),或者将请求重定向。如果您选择重定向请求,您可能要用到鲜为人知但功能十分强大的重定向变量。就您的情况而言,您需要在 Redirect To(重定向至)文本框中输入 http://www.theirsite.com$P。$Q 替换变量将全部问号及其后的参数附加到重定向请求后。
还有许多其他的重定向变量使您能够不用编写代码就可以执行替换和其他操作。您可以在 IIS 联机帮助文件中的 Redirect Reference(重定向参考)部分找到更多有关重定向参数方面的信息。
[SplitPage]
能否在 Windows XP Home Edition 上安装 IIS 或 PWS?
问: 我曾在某处读到过,不能在运行 Windows XP Home Edition(家庭版)的计算机上运行/开发 ASP.Net 应用程序。是否有办法在运行 XP 家庭版的计算机上安装 IIS 或 PWS?我有 VS.Net 专业版,但尚未找到用 ASP.Net 进行开发的方法。
答: Windows XP Home Edition(家庭版)不支持 IIS 的任何版本。据我所知,没有任何可靠的方法能让它运行 IIS。Windows XP Home Edition 不适合用作基于 Web 的应用程序的开发平台。升级到 Windows XP Professional 后将允许您在系统上安装 IIS 5.1,这样您就可以用 ASP.Net 进行开发了。Windows XP Professional 上的 IIS 5.1 是一个全功能的、强大的 Web 服务器,但仅限于使用 10 个同时连接,因为 Windows XP Professional 是一个工作站操作系统而非服务器平台。在将 Windows XP Professional 用作客户端操作系统而非服务器操作系统时,还有其他几点限制。大体上说,这两者的区别,就是将 IIS 5.0 安装在 Windows 2000 Professional 上时与安装在 Windows 2000 Server/Advanced Server 上时您会看到的那些区别。但尽管如此,在使用 .NET 框架开发基于 web 的应用程序时,Windows XP Professional 仍是一种优秀的开发环境。
ISAPI 筛选器能否在独立的进程空间中运行?
问: IIS 5.0 允许 ISAPI 扩展在独立的进程空间运行。ISAPI 筛选器是否也能在独立的进程空间运行呢?在我们安装一个包含 ISAPI 筛选器的软件后,我们一个客户的 IIS 服务器每过两三天就重启一次。最后一次故障转储显示 inetinfo.exe 因为“除以 0 的错误”而崩溃,但它在 ISAPI 筛选器中没有崩溃。如果能在独立的进程空间运行 ISAPI 就好了,这样它就不会与 inetinfo.exe 冲突。
答:再重述一次,针对在 web 服务器上运行这一目的而编写的程序有特定的要求。例如,您不能通过 URL 来调用 Notepad.exe 的一个实例并期望在客户端系统上看到记事本窗口。为让一个可执行文件(不是 CGI)与来自 IIS 的请求交互,需要用 ISAPI 来编写它。ISAPI 的意思是“Internet 服务器应用程序编程接口”。ISAPI 可执行文件分两类--扩展和筛选器。
ISAPI 扩展可从像 http://localhost/myisapi.dll 这样的 URL 直接调用。假定您将 IIS 配置为允许执行目录上的“脚本和可执行文件”而且用户具有 NTFS“执行”权限,则该 dll 将可以运行。IIS 允许您指定让应用程序在进程中运行(作为 inetinfo 的一部分来运行)还是在进程外运行(在 IIS 4 上作为 MTX 的一部分运行,或在 IIS 5.x 上作为 dllhost 的一部分运行)。当一个应用程序在进程外运行时,inetinfo 就会与您所说的那类问题隔离开,不受其影响。如果应用程序失败,则 web 服务器也将失败。
而 ISAPI 筛选器则全然不同。ISAPI 筛选器能够修改传入和传出 IIS 的数据流。所以,它们有强大的能力,可用来实现自定义的日志记录、身份验证,也可用来修改数据流。IIS 5 的 ISAPI 筛选器中实现的功能包括数据压缩、简要身份验证和 URLScan。
因为筛选器在 IIS 中扮演着这样一种重要角色,所以在设计上,它们总作为 inetinfo 的一部分在进程中运行。因此,如您所知,正确构造 ISAPI 筛选器对于服务器的正常运行来说是十分重要的。我的建议是,您可以让 Microsoft 产品支持服务与您一道找出问题所在,因为这类异常的诊查工作可能会相当难。
就这一问题,有几种新技术可能会使您的工作略轻松一点。一是期望使 用 IIS 6。由于它采用新的体系结构,所有 ISAPI 筛选器都在进程外运行。这样可让您实现将 web 服务器与反复无常的 ISAPI 筛选器隔离起来的目标,但并没有真正解决问题。为最终解决问题,请评估一下 .NET 语言在实现 ISAPI 筛选器方面的能力。我估计您会发现,用 .NET 实现同样的功能,将比采用 C++ 语言的标准 ISAPI 筛选器设计要简单得多。
使用 WebDAV 从 ASP 编辑文档的代码示例
问:在哪里能找到使用 WebDAV 从 asp 编辑文档的代码示例?
答: 在使用 IIS 上的脚本中的 WebDAV 时,您最有可能使用的是 ASP.Net 的 WebClient 类。如果您在使用 Windows XP 或 Windows .NET 服务器,则操作系统中已包含 WebDAV 功能。这使您可以像使用 UNC 路径那样,用 HTTP 来引用一个 web 服务器上的文件。例如,您可以用 NET USE * http://servername/directory 命令来映射一个驱动器,然后用该驱动器符号访问此位置。或者,您也可以创建一个用作 WebDAV 客户端的 COM 对象。您可以用此对象向 IIS 5.x 或 IIS 6.0 发出 WebDAV 操作命令。
另外,如果您在 MSDN 上搜索 WebDAV,您会找到很多关于如何用 XML 为 Exchange 和其他 Microsoft 服务器创建 WebDAV 查询的示例。在 Microsoft Exchange 2000 Server SDK 中有一个 WebDAV 示例应用程序。
尝试用 ASP 访问数据库时“访问被拒绝”
问:我们在 使用 ASP 访问一个数据库,但当我们向数据库中写入新内容时,总是出现“访问被拒绝”这一结果。在运行 NT 4.0 工作站和运行与之相当的 web 服务器时 ASP 页没有问题,但升级到装有 IIS 5.1 的 Windows XP Professional 后,它就无法使用了。问题好像出在某些目录的访问权限上,但我们怎样才能确定问题究竟在何处呢?
答:有一种极棒的免费实用工具,叫做 Filemon,可以到 http://www.sysinternals.com 上找到它。在我讲授 IIS 时,我让学生们将此工具保存在软盘上,不管到哪里都随身带着它。我并不完全是在开玩笑。您可以用 Filemon 快速诊断出多数权限问题,因为它可以实时显示服务器上被访问的所有文件、调用进程的名称以及访问结果。这样,对于任何“访问被拒绝”消息,不管问题在嵌套 的 include 中埋多深,也不管临时索引有多模糊--都可轻松找出。
如果某一应用程序在一个操作系统上可以使用,而在操作系统升级后它 无法工作了,这会让人很沮丧。不过,这类问题往往都很有启发性。IIS 4 和 IIS 5 之间存在的一种差异与 COM 和 COM+ 之间的差异有关。在 IIS 5 中,当一个 COM+ 对象代表用户访问文件时,其默认行为是使用用户的安全上下文进行访问。在 IIS 4 中则不是这样。所以,当您将包含 COM 的应用程序从 IIS 4 迁移到 IIS 5 时,您可能需要提供针对这些文件的用户权限,尽管在 IIS 4 中不要求提供这些权限。有时这可能不大方便,比如您所遇到的情况;但是,在应用程序的安全设计方面,这确实是一项改进。尽管您可能没有使用自定义 COM 对象访问数据库,但 COM 在本机 IIS 组件中的应用很广泛。
体现这一要求的场合,是在需要授予对 Access 使用的临时文件夹的权限以及需要向创建数据库请求的用户授予权限时。有关更多信息,请参阅 Microsoft 知识库文章 Q210457 和 Q271071。
如何在不恢复原设置的情况下运行 IIS 锁定工具
问:我们在我们的服务器上运行了“IIS 锁定”工具,它在对系统执行一些基本的安全设置修改时看起来很成功。但在运行此工具后,我们又给服务器添加了一些功能和内容,然后想再次运行此工具。然而,当我们启动 IIS 锁定向导时,它显示:
如果您的浏览器不支持内嵌框,请单击此处在单独的页中查看。
在这种情况下,我们不想还原到以前的设置,因为这样做会让我们丢掉存储在元数据库中的、对 IIS 配置所做的更改。我们怎样才能再次运行 IIS 锁定工具而又不用先执行还原呢?
答:在我看来,IIS 锁定工具是 Microsoft 真正的压轴戏。如您所说,此工具让您能够轻松而又显著地增加您服务器的安全性。运行此工具后,它将其操作历史存储在位于以下位置的一个文件中:system32inetsrv。您将可以在以下文件中找到此信息:
- Oblt-rep.log
- Oblt-once.md0
- Oblt-mb.md0

如果您运行了上面显示的“撤销”任务,则还会有一个 Oblt-undone.log 文件。
如果您删除这些文件,则将启动向导,好像没有运行过 IIS 锁定工具一样。据我所知,重复执行此过程没有什么风险。但在这样做之前,一定要为 metabase.bin 制作一个副本。
因为这一方法能够让您像没有运行过锁定工具那样再次运行它,但又不撤销该锁定工具第一次运行时实现的设置或对它们“解除锁定”,所以对于您所说的情形,此方法应当行得通。 [SplitPage]
如何发送用以实现重定向的查询字符串信息
问: 在我们最初的Web服务器配置方案中,多个文件夹中均包含称作browse.asp的页面。为简化设计方案,我们目前只在单一文件夹中保留了一个 browse.asp文件。然而,服务器目前仍然接受来自用户且要求在原先位置上寻找borwse.asp文件的服务请求。我希望将这些请求重定向到存放 browse.asp文件的新位置上。通过使用IIS所内建的重定向功能,这项工作看起来似乎非常简单,然而,在实际处理过程中,查询字符串信息好像总是 被丢失。举例来说,我们将针对http://servername/oldfolder/browse.asp的请求重定向至http: //servername/newfolder/browse.asp。当用户向服务器发送形式为http: //servername/oldfolder/browse.asp?cat=135的URL时,重定向操作虽然能够执行,但却无法传递查询字符串。请 问是否存在某种方式能够允许IIS发送从原始请求URL中提取的查询字符串信息?
答:在指定IIS如何对URL进行重定向方面,IIS为您提 供了相当程度的灵活性。IIS中所包含的一项鲜为人知但却非常实用的特性能够允许您在重定向过程中使用变量,从而实现了能够精确指定向目标URL传递哪些 内容的高级控制能力。举例来说,在您所描述的情况下,右键单击原有browse.asp文件,在“文件”选项卡上选择“重定向至URL”并输入http: //servername/newfolder/browse.asp$Q。这种设置方式将使用内建服务器重定向变量$Q将原有URL中所包含的查询字符 串部分内容发送到新的位置上。以下表格列出了在线IIS 5帮助文件以及编号为Q313074的Microsoft知识库文章中所包含的有关查询字符串的详细信息。
变量
描述
举例
$S
对请求URL中相匹配的后缀信息进行解析。相匹配的后缀信息是指原始URL中重定向URL被替代后所剩余的部分。
如果将/scripts重定向为/newscripts且原始请求URL为/scripts/program.exe,则/program.exe即为后缀信息。服务器将自动执行后缀替换操作,$S变量仅用于同其它变量配合使用。
$P
对原始URL中的参数进行解析。
举例来说,如果原始URL为/scripts/myscript.asp?number=1,那么,字符串“number=1”将被映射到目标URL中去。
$Q
对于从原始URL中所提取出的问号和参数进行解析。
举例来说,如果原始URL为/scripts/myscript.asp?number=1,那么,字符串“?number=1”将被映射到目标URL中去。
$V
对于请求URL中除服务器名称以外的其它信息进行解析。
举例来说,如果原始URL为//myserver/scripts/myscript.asp,那么,字符串“/scripts/myscript.asp”将被映射到目标URL中去。
$0 至$9
对请求URL中与指定通配符相匹配的部分进行解析。
举例来说,如果针对最低级别的目录名称(如*/default.htm)使用一个通配符,那么,URL中包含Default.htm的目录名称部分将被转发。
!
不进行重定向。
使用这个变量以防止对虚拟目录中已经实现重定向的子目录或独立文件进行再次重定向。

缓存溢出攻击事件中术语“在进程以内”与“在进程以外”的区别
问:能否澄清一下不同运行方式之间的区别所在?
在进程以内运行的应用程序与在进程以外运行的应用程序相比,如果遭到缓存溢出攻击的话,分别将会出现何种情况?
答: 我始终认为“在进程以内”这一术语存在一些混淆。所有应用程序均在某个进程中运行,因此,实际上并不存在所谓“在进程以外”运行的应用程序。然而,我们经 常在有关IIS应用程序的参考文献中见到这个术语,那么,它究竟代表何种含义呢?在IIS 4与IIS 5.x中,包含一个名为inetinfo的进程。当Web应用程序“在进程以内”运行时,该应用程序将在inetinfo进程内部运行。对于IIS 4应用程序来说,缺省情况下,应用程序将在inetinfo进程内运行。
与此相对应,“在进程以外”运行的应用程序是指那些并非在inetinfo进程中运行的应用程序。对于IIS 4,“在进程以外”运行的应用程序宿主于一个名为MTX的进程;对于IIS 5.x,此种应用程序则宿主于一个名为dllhost的进程。
所有进程均在某个用户帐号的安全环境中运行。Inetinfo进程在System帐号下运行。MTX(IIS 4)和dllhost(IIS 5.x)则在IWAM_帐号下运行。
现 在,我们已经对回答您的问题所涉及的相关概念进行了解释。在一次成功的缓存溢出攻击事件中,攻击者可能会在托管失败应用程序的进程安全环境中运行相关代 码。因此,如果您的应用程序在进程以内(在inetinfo进程中)运行,攻击者将在具备全面服务器访问权限的System安全环境中运行。如果您的应用 程序在进程以外(在MTX或dllhost进程中)运行,攻击者将在仅仅具备有限服务器访问权限的IWAM帐号安全环境中运行。
需要特别注意 的是,在缺省配置方案中,IIS 5按照中等应用程序保护设置(在进程以外模式下采用池分配方式)“在进程以外”运行所有应用程序。由于前面所提到的原因,这种运行方式与在进程以内运行应 用程序相比要安全可靠得多。与缺省设置相比,由于通过System帐号访问服务器在IIS 5上所导致高发性缓存溢出攻击使服务器极易遭受攻击。在针对IWAM与IUSER帐号应用严格限制条件的同时,通过运行IIS Lockdown工具还可实现额外的安全性。
顺便提及一下,(作为Windows .NET Server 2003的组成部分之一)IIS 6采用这样一种配置方式,即在缺省的工作进程独立模式下,缓存溢出攻击根本无法通过具备高级权限的用户帐号对服务器进行访问。
如何在重建站点后继续使用原先的日志文件
问: 我有一个与IIS元数据库文件相关的问题。当您在IIS 5服务器上创建一个新的Web站点时,日志文件夹将随该Web站点一同创建。IIS通过增量方式对这个文件夹进行命名。这种方式有效避免了日志文件夹命名 不当或遭到意外破坏的情况。然而,当您删除并重新安装一个‘站点’时,您将丢失所有先前使用的元数据。同时,日志文件夹位置也将随之丢失。此文件夹现在将 是按照增量方式最后创建的日志文件夹。[如果前一个取值为W3SVC8,那么,当前日志文件夹应为W3SVC9]。请问是否能够通过某种方式对元数据库进 行编辑,以便使IIS将站点属性指向原有日志文件夹名称?
答:您描述了一个非常有趣的问题,但是您所建立的假设需要进行澄清。是的,IIS确 实创建一个日志文件夹,通常情况下,这个文件夹是c:windowswinntlogfiles目录。同时,正如您敏锐观察到的那样,如果删除并重建一个 Web站点,日志文件夹名称将发生变化。然而,IIS并非为避免与原先日志文件产生冲突而采用增量方式对日志文件夹进行命名。与此相反,用以保存日志文件 的文件夹名称是基于元数据库中所存储的Web站点“站点编号”--有时也称作实例编号--生成的。您所创建的每个站点均拥有一个独立编号,当您每次创建新 的Web站点时,这个编号将依次递增。您可以通过MetaEdit工具清楚的观察到这一点,该工具以文件夹1、2、3的形式(此种情况下为元数据库键值) 来显示各个Web站点,通常情况下,1代表缺省Web站点,2代表管理Web站点,以此类推。(具体情况请查看图1)。

 

图1. MetaEdit用户界面
由此可见,如果您拥有1、2、3三个站点,当您删除站点2并希望通过从IIS控制台创建一个新的Web站点来“重建”原有站点时,IIS将为其分配下一个取值最大的站点编号,当前情况下为5。此后,日志文件将被放置在名为w3svc5(而非w3svc3)的文件夹中。
一旦创建完毕后,由于其它键值(如站点根路径)需要对其进行引用,因此,建议您最好不要对站点ID进行修改。在这种情况下,您只需将日志文件从原先使用的日志文件夹中复制到新建日志文件夹中。
然 而,如果您通过脚本而非用户界面来创建Web站点的话,您可以指定希望针对“还原”Web站点所使用的站点ID。通过此种方式,您可以实现预先期望的目 标。您可以从InetpubAdminscripts文件夹中找到一个缺省安装的名为mkw3site.vbs的脚本。在记事本或其它文本编辑器中打开这 个脚本以查看其中所使用的语法,您会发现其中的参数之一为Sitenumber。这个参数允许您使用自己指定的站点编号而非通过IIS控制台以增量方式确 定的下一个站点编号来创建Web站点。 [SplitPage]
如何在IIS上运行除ASP以外的其它类型脚本
问:我们希望在自己的IIS服务器上运行PHP和Perl程序,但我们始终无法找到允许这些脚本程序正常工作的正确方式。我们手中拥有大量非常实用的脚本,但如何才能允许IIS运行除ASP以外的其它类型脚本呢?
答: Microsoft公司在Windows 2000资源工具包中提供一种版本的Perl解释程序,但如需获取最新版本且功能最为完善的解释程序,您应从站点http: //www.activestate.com/上下载该产品的最新发布版本。从那里,您将能够获得一个称作ActivePerl的软件包,该软件包中包含 能够针对.pl和.plx文件创建应用程序映射关系的安装例程,从而允许您对上述类型的脚本文件进行管理。换言之,如果您希望针对所有脚本使用.pl文件 类型,那么,您可以删除针对.plx文件的应用程序映射关系。在条件允许的情况下,您应尽可能使用perl.dll解释程序来替代perl.exe解释程 序以获得更加优异的性能与可伸缩性。除此之外,您还可以从站点http://www.iisanswers.com/Top10FAQ/t10- installperl.htm上以及编号为Q245225的知识库文章中获取有关这一主题的操作指导文章,
您可以从站点http://www.php.net/上下载PHP解释程序以及大量相关文档与在线资源。
针对java应用程序的JRUN可以从站点http://www.macromedia.com/software/jrun上获取。
ASP.net可以通过站点http://gotdotnet.com/或Windows更新服务获得。
如何检测哪台计算机上安装了IIS
问:我想知道是否存在一种工具能够检测出某台PC机上是否安装了IIS。我们目前拥有3000多台PC,我需要通过一种方式来确定哪些计算机上安装了IIS。
答: Microsoft提供了两种允许您对子网进行扫描的工具。HFNetChk和Microsoft Security Baseline Analyzer(MSBA)将在您的网络中对所有装有Microsoft网络客户端和文件与打印共享服务,以及正在运行服务器、工作站和远程注册表服务 的系统进行扫描,以标识出“特定”类型的系统。如果这些服务无法正常工作,您还可以借助诸如fport(这种工具可以从站点http: //www.foundstone.com/上进行下载,它将告诉您网络中各个系统上有哪些端口处于打开状态)之类的工具进行端口扫描。当然,由于IIS 能够对用户所选择的任意端口进行监听,因此,您无法通过这种端口扫描操作来判断与每个端口相关联的服务;尽管如此,根据经验判定,如果80端口处于可用状 态,那么,它很可能正在被IIS使用。来自Foundstone公司的另一种免费实用工具Superscan能够以“标语”形式显示出由您所连接到的服务 返回的信息。这项细微改进能够快速完成网络扫描并报告所发现的内容。
除以上所介绍的方法外,当用户通过自己的帐号进行登录时,您还可以从用户的登录脚本中测试出IIS是否存在。凭借Internet上针对这一目的所提供的各种选择方案与可用工具,您将实现一个良好的开端。
在添加Internet服务后是否需要重新应用热修补程序和服务软件包?
问: 我们在Windows 2000服务器上安装了IIS,但没有安装任何其它类型的Internet服务。现在,我们需要为一个要求从服务器上发送电子邮件的Web应用程序添加 SMTP服务。如果我们添加SMTP服务的话,是否需要重新应用最新的服务软件包和热修补程序?
答:在Windows NT 4.0中,当您向操作系统中添加诸如SMTP之类的服务时,您需要重新安装服务软件包和热修补程序。在Windows 2000中,这种情况得到的明显改善,当您安装软件、服务或更新程序时,通常情况下无需重新应用服务软件包。举例来说,您可以安装不含IIS的 Windows 2000操作系统,并应用服务软件包x(其中x为最新服务软件包编号),此后,当您安装IIS时,其二进制(程序)版本编号将自动与服务软件包(SP)x 保持相同的级别。这项特性在添加诸如SMTP之类的服务时为您减少了大量工作。然而,热修补程序和滚动升级程序又产生了另一个问题。尽管您的SMTP服务 能够与SP x处在同一级别上,但您还需要重新应用与该服务相关的热修补程序和滚动升级程序。举例来说,当您卸载或重新安装IIS时,在最近应用的服务软件包发布后出 现的所有IIS热修补程序与滚动升级程序都必须重新加以应用。
确保您已经应用所有必要热修补程序和服务软件包的最佳方式是在系统中使用 HFNetChk或Microsoft Security Baseline Analyzer(MSBA)。这是确定需要在服务器上应用哪些热修补程序及更新程序的最可靠方式。由此可见,正确的操作过程是首先安装SMTP,之后, 运行上述工具之一以确定需要应用哪些热修补程序。[SplitPage]
重新命名IUSR帐号
问:重新命名IUSR帐号将导致何种后果?
答: IUSR帐号通常称作“Web匿名用户”帐号或“Internet来宾”帐号。IUSR帐号是一种常用的简写形式,该帐号的实际格式为IUSR_,其中, 是安装IIS时所使用的Netbios服务器名称。正如您可能已经知道的那样,当IIS服务器启用匿名身份验证方式,且该服务器上存在针对特定访问请求类 型具备适当NTFS权限的IUSR帐号时,系统将自动对其加以应用。
由于此帐号的名称是众所周知的,因此,为加大网络黑客在服务器上猜测用户名称与口令的难度,建议您在那些对安全性要求较为严格的环境中对IUSR帐号名称进行修改。对于需要具备高度安全性的服务器而言,这是一项非常良好的建议,然而,有几种注意事项您必须时刻牢记。
当 修改匿名用户帐号名称时,您必须同时在Internet Information Services管理器和针对本地计算机的用户与组中对其进行修改(假设针对匿名用户使用本地帐号)。如果您在用户与组中删除IUSR帐号或对其名称进行 修改,但未在Internet服务管理器中分配新的匿名用户帐号,那么,IUSR帐号将会在下次重新启动系统时自动重建。我经常简单的禁用当前IUSR帐 号并创建一个新的帐号,之后在Internet服务管理器中针对匿名访问分配新建帐号。如果您正在使用IIS Lockdown工具的话,请将新建用户帐号设置为Web匿名用户本地组中的成员。
当您针对匿名用户创建新的用户名称与口令时,请一定确保使 用一个难以破解的口令。Windows 2000操作系统中的匿名用户帐号是一个随机生成的由14个字母与数字所组成的字符串。通常情况下,按照人的一般习惯,事后创建的口令在保密效率上要远远 低于匿名用户最初所使用的口令,因此,您一定要确保创建一个不易破解的口令。
只要心中牢记这些注意事项,在修改帐号的过程中就不会节外生枝,最后,请一定不要忘记在Internet Information Services管理器中指定新的匿名用户帐号。
查看以往的专栏文章:2001年12月:“如何确保IUSR帐号安全性。”

利用FrontPage Server Extensions管理您的NTFS权限
问:我们在自己的 IIS 4和IIS 5服务器上装载了FrontPage Server Extensions 2000。我们发现,一旦载入FrontPage Server Extensions 2000,服务器上的NTFS权限便会遭到修改。新的权限中将包含对网络与交互组的使用。您能否解释一下这些组的作用以及FrontPage Server Extensions如何管理NTFS权限?
答:当您在Web服务器上安装FrontPage Server Extensions(FPSE)时,需要确定允许FPSE自动管理相关权限,还是希望手工管理相关权限。缺省情况下,FPSE将自动对其所处Web站点 的权限进行管理。如果需要的话,您可以禁用这种自动管理方式,为此,您只需在Internet Information Services管理器中的服务器图标上右键单击鼠标,选择“Server Extensions”选项卡,并选定“手工管理权限”复选框。请注意,这是一个服务器级选项,它无法针对各个站点采取不同的设置。在此,我强烈建议您从 允许FPSE自动管理权限或手工管理权限这两种方式中选择其一,而不要尝试同时使用这两种方式。
位于网址http: //officeupdate.microsoft.com/frontpage/wpp/serk/上的FPSE 2000资源工具包提供了关于由FPSE所分配并维护的相关权限的详细信息。这些权限中包含您在问题中所提到的针对网络与交互组的使用情况。
网 络组是一种自动进行维护的本地组,它由所有包含某种网络登录类型的用户所组成。网络组中的成员通常通过网络进行登录。交互组同样是一种自动进行维护的本地 组,它由所有包含某种本地登录类型的用户所组成。本地组包含在计算机控制台上进行登录的用户以及通过基本身份验证功能实现身份验证的用户。
从多种身份验证方法中进行选择
问:IIS 5允许您针对Web站点选择多种不同的身份验证方法。当您同时选择匿名身份验证、基本身份验证和集成化Windows身份验证方法时,请问IIS将如何选择针对特定用户的身份验证机制?
答: 针对这一问题的背景情况比较复杂,但其可以通过几条规则来加以总结。这些规则同时适用于IIS 4和IIS 5。有关身份验证方法的第一条不变规则是“如果可能的话,您将首先以匿名用户的身份通过验证。”从资源角度考虑,这种方式只要求在服务器上启用匿名身份验 证方式--即确保匿名用户拥有访问请求资源的权限。针对这条规则的唯一例外情况是,用户已经以匿名用户以外的其它用户身份通过验证,且系统支持除匿名验证 方式以外的其它身份验证方式。
假设您已经选择了多种身份验证方法,且用户无法凭借匿名用户身份通过验证,那么,如何确定所需采用的身份验证方 法呢?答案是IIS将向客户端提供一份身份验证方法列表,由客户端自行选择何种方法最为安全可靠。当您同时选择基本身份验证和集成化Windows身份验 证(或者IIS 4中的Windows NT 质询/响应身份验证方法)时,由于无法执行集成化Windows身份验证,Netscape将选择基本身份验证方法。相反,对于Internet Explorer来说,如果提供同样的选项,它将选择集成化Windows身份验证方法。在IIS 5服务器上,IIS与IE将进一步确定是否支持Kerberos,如果支持的话,最终将选择使用Kerberos身份验证方法。对于包括IIS 4在内的其它情况,将使用Windows NT 质询/响应身份验证方法。 [SplitPage]
重新命名IIS Server将会导致何种后果?
问:作为对11月份所提问题的延续:“请问对IUSR帐号进行重命名将会产生何种后果?”,我希望了解重命名服务器时针对IIS服务器所产生的后果。
答: 服务器名称是在Windows 2000安装过程中分配的,此名称可以在安装完成后进行修改。从技术上讲,服务器名称、计算机名称和主机名称这三种术语均可用于描述计算机的 Betbios名称。您可以在命令行窗口中使用“hostname”命令来确定当前服务器名称。
在Microsoft网络中,此名称用于通过 WINS、DNS(在Windows 2000中)或使用Netbios名称表查找方式将服务器名称解析为IP地址。IIS并不使用这种服务器名称,因此,您可以任意对其进行修改。然而,这并 不意味着其它应用程序或应用程序中所包含的COM对象均独立于服务器名称。举例来说,如果运行IIS 4的服务器上安装了Site Server 3,那么,系统便不支持您修改服务器名称。当您在运行IIS 4的服务器上修改服务器名称时,需要完成一些必要的内部管理工作,如需获取有关这些工作的详细描述信息,请参阅http: //support.microsoft.com/default.aspx?scid=kb;EN-US;234142&sd=tech。相比 之下,IIS 5的处理方式则截然不同,我经常对运行IIS 5的Windows 2000服务器进行服务器名称修改操作,且从未遇到过任何异常现象;但是,尽管如此,我还是建议您不要轻易执行这项操作。
如需修改服务器名称,请右键单击“我的电脑”,在随后出现的快捷菜单中选择“属性”并单击“网络标识”。此后,单击“属性”按钮以查看“计算机名称”设置。
在 执行此类修改操作后,请牢记,服务器名称以及IUSR_和IWAM_用户帐号仍将反映原有的服务器名称。这些对象未被更新为反映新的服务器名称。然而,这 与IIS没有任何关联,匿名身份验证过程(以及由此衍生而来且以IWAM用户帐号身份运行的处理应用程序)仍将顺利执行。如果使用诸如远程MMC控制台、 脚本或终端服务客户端之类需要查找原先服务器名称的远程应用程序,那么,您还需要进行其它一些修改。此外,通过IIS服务器上的文件共享方式进行内容发布 的客户端需要使用新的服务器名称对其共享文件夹连接进行更新。
请记住,安装证书服务的Windows 2000服务器无法修改自身标识。在对相应计算机名称进行修改,或者将其加入到域中或从域中剥离之前,您必须首先卸载证书服务。
“语法分析程序错误消息”具有何种含义?
问: 我拥有一台装有最新补丁程序的IIS 5服务器,这台服务器总是收到内容为“语法分析程序错误消息:这是一个由于在应用程序层上使用注册为allowDefinition= ‘MachineToApplication’的部分所导致的错误。这个错误可能是由一个在IIS中未被配置为应用程序的虚拟目录所造成的。”的出错信 息。请问这是为什么?
答:我喜欢这些内容详细的ASP.NET错误消息!它们不仅描述了出现问题的原因,同时还经常为您提供解决方案。如果您 的ASP.NET应用程序被配置为需要使用那些在元数据库定义好的“应用程序”的特性(如或),而这些“应用程序”定义又不存在,那么,您将看到这条出错 信息。您可以通过从web.config文件中删除相关设置或分别在Web站点、虚拟目录或目录的“主目录”、“虚拟目录”和“目录”属性选项卡上点击 “创建”按钮的方式纠正这种错误。为执行上述操作,您至少需要具备针对上述位置的脚本执行权限和读取权限。
如何分析URLScan日志文件?
问: 为确定我们的服务器所遭受的攻击类型并对其进行分类,我们目前正在着手对W2SVC和URLScan的日志文件进行分析。虽然我们已经找到了能够载入 W3SVC日志文件的产品,但这些工具却无一能够对URLScan的日志文件进行扫描。请问Microsoft公司是否提供了能够帮助我们对 URLScan日志文件进行分析的产品或工具?
答:请问一种允许您针对URLScan日志、W3SVC、事件查看器记录或其它任意一种基于文 本的日志文件(如防火墙或入侵监测系统日志)进行数据挖掘、格式变化并生成分析报告的免费实用工具是否能够满足您的需要?Microsoft所提供的免费 日志分析器工具正是专为满足那些需要收集并报告从具有不同文件格式的日志文件或其它数据源中所提取重要信息的IIS管理员、系统管理员和安全管理员的日常 工作需求而设计的。
日志分析器可以将采用多种不同格式的日志文件当作“数据源”进行处理,这些日志文件包括:
W3C Extended
IIS
IISMSID [在安装MSIDFILT过滤器或CLOGFILT过滤器后所生成的Microsoft IIS日志格式文件]
NCSA Common
二进制日志文件格式(针对IIS 6)
开放式数据库连接(ODBC)
URLScan
HTTP错误日志文件(针对IIS 6)
针对系统日志文件、应用程序日志文件、安全事件日志文件和EVT备份日志文件的事件查看器记录。
普通CSV文件
普通W3C文件,如个人防火墙日志文件,Windows媒体服务日志文件和Exchange跟踪日志文件。
文件与目录结构信息。
普通文本文件
日志分析器包含一种允许您通过运行SQL查询语句的方式生成分析报告或重新格式化信息结构的查询引擎。某些通过SQL语法实现的技巧将为您提供极大的便利。
例如,您可以通过以下语句针对某个Web站点汇总每小时处理的请求个数以及所发送的字节数量: SELECT TO_STRING(TO_TIMESTAMP(date, time), 'yyyy-MM-dd hh') AS Hour,
 COUNT(*) AS Total, 
 SUM(sc-bytes) AS TotBytesSent
FROM ex*.log
GROUP BY Hour
ORDER BY Hour
当然,您还可以通过单独文件夹或文件以及日志文件中所提供的诸如日期、时间之类的参数来缩小查询范围。
按照相同的方式,您便可以对URLScan日志进行查询。以下示例将报告通过某一客户端IP地址所拒绝的请求次数: SELECT   ClientIP,
 COUNT(*)
FROM URLSCAN
WHERE Comment LIKE 'Url%'
GROUP BY ClientIP
日志分析器还提供了许多其它特性,其中包括将结果输出至XML文件的功能、提供日志分析器功能的Active X对象(通过ADO实现)、以及通过自定义模板格式化输出结果的能力。
显而易见,这是一种功能非常强大的实用工具,它将顺理成章的成为广大IIS管理员“工具包”文件夹中的一员



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: