Internet 信息服务 (IIS) 6.0 中的很多设计修改是为了直接满足保护整个万维网发布服务(WWW 服务)以及特定网站和 FTP 站点安全的需要。如果您没有启用某些默认锁定或禁用的功能或服务,就会出现错误。本主题描述这些错误的某些症状以及纠正这些错误的过程(或指向描述如何纠正错误的主题的链接)。有关 IIS 6.0 中更改的完整列表(包括安全性更改和新进程模型的简短解释),请参阅更改的内容。
动态或静态内容错误
连接错误
其他错误
在全新安装之后,IIS 6.0 以工作进程隔离模式运行。默认情况下,以此模式运行的应用程序使用网络服务标识。“网络服务”是具有极少用户权限的帐户,因此可通过限制对 Web 服务器上资源的访问来提供更高的安全性。如果在服务器处于工作进程隔离模式时将应用程序迁移到 IIS 6.0,并且应用程序先前作为本地系统在进程内运行(在 Inetinfo.exe 中),则应用程序可能由于网络服务标识设定的限制无法访问资源。本地系统帐户拥有操作系统上几乎所有资源的访问权限,因此,可能会产生严重的安全隐患。尽可能不要使用本地系统帐户。如果必须使用本地系统帐户来运行某个应用程序,则在其自己的虚拟目录中的新应用程序池中运行该应用程序,以便通过隔离该应用程序来减少攻击面。或者,如果应用程序需要使用可信计算库 (TCB) 的权限,则以可配置的身份运行该应用程序,并给该可配置的身份指派 TCB 权限。但是,这种方法仍存在安全隐患,因为可通过 TCB 权限执行很多操作。
为了更好地预防恶意用户和攻击者的攻击,IIS 是在高度安全和锁定模式下安装的。在默认情况下,IIS 仅处理静态内容,这意味着除非启用 ASP、ASP.NET、在服务器端的包含文件、WebDAV 发布、FrontPage® Server Extensions 和通用网关接口等功能,否则无法使用这些功能。如果在安装 IIS 后没有启用此功能,则在拒绝此类服务时,IIS 默认返回常规 404 自定义错误页以防止泄漏配置信息。默认情况下,IIS 还将 404 错误及子状态代码 2 (404.2) 写入到 W3C 扩展日志文件中。
要点 您必须是本地计算机上 Administrators 组的成员或者您必须被委派相应的权限才能执行下列步骤。作为安全性的最佳操作,请使用不属于 Administrators 组的帐户登录计算机,然后使用运行方式命令以管理员身份运行 IIS 管理器。在命令提示符下,键入 runas /user:administrative_accountname "mmc %systemroot%\system32\inetsrv\iis.msc"。
启用或禁用 Web 服务扩展
要以编程方式启用或禁用 Web 服务扩展,请参阅
对于静态内容请求,此版本的 IIS 仅处理具有已知文件扩展名的文件请求,此功能称为“已知扩展名”。如果所请求资源的文件扩展名没有映射到
有关添加或编辑 MIME 映射的详细信息,请参阅使用 MIME 类型。
默认情况下,工作进程在 120 分钟后回收。如果在回收工作进程时 ASP 应用程序并不存储会话状态,则该 ASP 应用程序中的会话状态可能会丢失。要解决此问题,可以将会话状态存储在数据库中,或者禁用工作进程回收。
禁用工作进程回收
如果 ASP 页使用
通过 IIS 管理器启用父路径
由于早期版本的 ASP 在事件中没有用户上下文,因此只能在宿主进程的安全上下文(或用户标识)中执行事件。这将会导致一些问题,例如在将文件写入 Session_OnEnd 事件中时发生拒绝访问错误。在当前版本中,ASP 默认匿名运行 global.asa 事件、
要以编程方式更改此设置,请参阅
如果 CGI 进程没有运行,则确保已启用了 CGI Web 服务扩展。请参阅本主题中的动态内容请求返回 404 错误。另外,除非给运行 CGI 进程使用的帐户指派了某些用户权限,否则,CGI 不会启用。您可以将该帐户添加为 IIS_WPG 组的成员,并为它分配以下两种用户权限:
为本地计算机上的帐户分配用户权限
Microsoft® Windows NT® Server 的协作数据对象 (CDONTS) 已从 Microsoft Windows® Server 2003 家族中删除。如果 Web 应用程序使用 CDONTS,则可以将它们转换为 Microsoft 协作数据对象 (CDO)。CDONTS 中的大多数方法在 CDO 中都有相匹配的方法,但是名称可能不同。
有关平台软件开发工具包 (PSDK) 中 CDO 的参考资料,请参阅 MSDN Online 上的 Overview of CDO。
检查错误事件日志以确定 503 错误是在 HTTP.sys 中还是在万维网发布服务(WWW 服务)中检测到的。如果该错误是在 HTTP.sys 中检测到的,则可能是由于队列中的请求太多,而导致 HTTP.sys 超过其应用程序池队列长度限制。要解决此问题,请增加应用程序池队列长度限制。
更改应用程序池队列长度限制
如果在 WWW 服务中检测到 503 错误,则问题可能是 IIS 已启动了快速失败保护,因为在给定一段时间内为应用程序池分配的许多工作进程都处于不正常的运行状态。要解决此问题,请增加启动快速失败保护前出现的故障数量或时间。您应该测试应用程序是否存在内存泄漏或者其他使工作进程处于不正常状态的问题。
配置快速失败保护
默认情况下,在 IIS 6.0 中不启用子验证组件 Iissuba.dll。在早期版本中,Iissuba.dll 允许 IIS 管理匿名帐户的密码,这会产生潜在的安全隐患。在 IIS 6.0 中,您可以使用子验证管理匿名帐户的密码,但必须满足以下条件:
对于 IIS 6.0 全新安装和从配置了子验证的 IIS 安装升级到 IIS 6.0,为满足以上要求所采取的操作是不同的。
有关配置子验证的步骤的信息,请参阅匿名身份验证。
Windows Server 2003 家族提供基于软件的防火墙,以防止从远程计算机对服务器进行未经授权的访问。默认情况下禁用 Internet 连接防火墙 (ICF)。不过,如果您在安装 Windows Server 2003 家族成员之后和安装 IIS 之前以默认配置方式启用了防火墙,客户端将不能连接到您的服务器。以下步骤将配置 ICF,以便允许客户端启动连接到服务器的 Web 和其他 IIS 相关连接。
为 IIS 配置 Internet 连接防火墙
通用命名约定 (UNC) 验证方法也称为“UNC Passthrough 验证”,它确定获得远程计算机上 UNC 共享访问使用的凭据。从 IIS 6.0 开始,UNC 验证使用以下方法查看请求用户和配置数据库
注意 不再将 UNCAuthenticationPassthrough 配置数据库项用于 UNC 验证。
除非提出请求的远程用户是 Administrators 组中经过验证的成员,否则,使用 Windows System32 目录中控制台应用程序(如 Cmd.exe)的请求被拒绝访问。这种拒绝访问是由于以下原因造成的:Windows System32 目录中所有控制台应用程序的特殊访问控制列表 (ACL) 仅限管理员、本地系统、交互用户和服务能够访问。ACL 限制并不影响拥有访问权限的本地登录用户,也不会影响您自己的自定义 CGI 可执行程序。
在 IIS 6.0 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击。IIS 在连接级别强制实施以下超时限制:
如果 IIS 必须访问 UNIX 或 Linux 系统上的文件,除非在 IIS 中启用了网络文件系统 (NFS) 支持,否则文件名大小写区分可能会引起问题。
UNIX 和 Linux 均支持混合大小写的文件名,而 IIS 完全支持以区分大小写的方式请求静态文件。然而,当 IIS 随后从其静态文件缓存中请求文件时,会出现问题。因为所有的文件名会在 IIS 缓存中转换为大写字母,从 IIS 静态文件缓存进行完第一次请求之后,所有的请求都可能失败或返回错误的文件。
解决该问题的方法是禁用 IIS 静态文件缓存,以便所有文件请求都以全新形式发出,从而保持正确的文件名大小写。可以针对网站上的单个虚拟目录禁用静态文件缓存,也可以针对所有站点在全局禁用。
注意 更改该设置不会影响缓存 ASP 文件和模板的方式。
为特定网站虚拟目录禁用静态文件缓存
针对所有站点禁用静态文件缓存
默认情况下,IIS 5.0 中的 /scripts 和 /msadc 目录允许运行脚本和可执行文件。在 IIS 6.0 中删除了这些目录,因为如果恶意用户能够访问这些目录之一,该用户就可以运行脚本或可执行文件,并有可能会控制 Web 服务器。如果服务器配置需要此类目录,则需要创建一个目录并为其指派适当的 NTFS 权限。
在 IIS 6.0 中,为了优化资源,直到所请求的网站需要 ISAPI 筛选器时才会加载它。直到提出此类请求时,IIS 管理器才会显示 ISAPI 筛选器的状态。另外,如果 ISAPI 筛选器需要
要点 如果由于访问控制列表 (ACL) 的限制而使 IIS 工作进程标识无法加载 ISAPI 筛选器,则请求收到 503 错误。要解决此问题,请在 ISAPI 筛选器 DLL 上设置 ACL 以允许访问 IIS_WPG 组。
将 IIS 配置为 IIS 5.0 隔离模式