应用程序隔离是指按进程边界来隔离应用程序,以防不同的应用程序互相影响。对于这两种 IIS 隔离模式,应用程序隔离的配置方式不同。
本主题包含下列信息:
使用以工作进程隔离模式运行的 IIS 6.0,可以把 Web 应用程序分组编入“应用程序池”。应用程序池允许将特定配置设置应用于多个应用程序组,并允许工作进程为这些应用程序提供服务。可向应用程序池指派任何 Web 目录或虚拟目录。
应用程序池中的每个应用程序都共享相同的工作进程。因为每个工作进程都作为工作进程可执行文件 (W3wp.exe) 的单独实例操作,所以为应用程序池服务的工作进程之间是相互分离的。这就确保在 Web 应用程序发生故障时,它不会影响运行在其他应用程序池中的应用程序。
可以配置和管理应用程序池来使用下面的功能:
通过检测应用程序池的稳定(或运行状况)的程度,IIS 确定是否需要纠正操作。如果在指派到应用程序池的工作进程中所有可用的 IIS 线程都出现了阻塞,或者工作进程通知 IIS 存在故障,则万维网发布服务(WWW 服务)能检测到已经异常终止的不良运行状况的工作进程。
工作进程回收是 Web 应用程序的自动刷新过程,它是通过重新启动指派给它们的工作进程来实现的。回收可使存在问题的应用程序保持顺利运行,尤其是在无法修改应用程序代码时。当发生回收事件时,当前正在处理应用程序池的工作进程就会终止,然后 WWW 服务会重新启动新的工作进程来替换它。
Web 园是被配置用来运行多个工作进程的应用程序池。Web 园中的工作进程共享对特定应用程序池的请求,从而可增强应用程序池中应用程序的性能和可靠性。
处理器关系是应用程序池的属性,该属性强制工作进程运行在特定的微处理器或 CPU 上。它应用于处理特定应用程序池的所有工作进程。使用了 Web 园和处理器关系的高级配置可用在多处理器的计算机上,这样计算机中的 CPU 群集能专注于特定的应用程序池。通过将特定网络接口卡关系设置到特定 CPU 上,可以进一步地使用该配置。
应用程序池标识是一种用户帐户,应用程序池中的工作进程将使用该帐户作为其进程标识。“进程标识”是操作系统术语,用来表示进程运行在其下的帐户。每个运行在基于 Microsoft® Windows NT® 操作系统上的进程都具有进程标识,用来控制对系统资源的访问。可以将预定义的帐户或用户可配置的帐户指派给应用程序池标识。
当选择应用程序池标识时,应选择具有应用程序所需要的最少特权的标识。如果编码如此,Internet 服务器 API (ISAPI) 扩展会很容易地作为工作进程标识运行。在这种情况下,ISAPI 扩展所进行的操作都在工作进程标识的上下文环境中。当工作进程标识设置为具有高特权的帐户(如本地系统)时,结果可能是应用程序被赋予了超出经过身份验证的用户范围的权限。因此,请考虑将工作进程标识设置为具有低特权的帐户以防止 ISAPI 扩展以这种方式提高其特权。这样做可以防止应用程序破坏安全性。
模拟允许进程使用与其基本标识不同的安全凭据运行。因为两者通常容易混淆,理解由应用程序池标识创建的工作进程标识如何与模拟用户相关联是很重要的。
当 WWW 服务创建工作进程时,工作进程标识由与应用程序池标识相关的进程令牌创建。这样就建立了工作进程的进程标识。在默认情况下,工作进程所采取的所有操作都是在这个工作进程标识帐户的上下文环境中完成的。然而,当处理客户端请求时,处理请求的线程在请求期间使用与该客户端相关的令牌,也就是经过身份验证的用户令牌。这也称为“模拟”。
应用程序中的行为如下所示:
在 IIS 处理 URL 前,根据被请求资源的访问控制列表 (ACL) 来验证经过身份验证的用户令牌。另外,如果是对 ISAPI 扩展的请求(如 ASP),则工作进程将作为模拟令牌的经过身份验证的用户令牌应用到调用 ISAPI 扩展的线程上。当 ISAPI 扩展开始处理请求时,模拟令牌应用到它所进行的操作上。因此,ISAPI 扩展所进行的操作与经过身份验证的用户相关,而不是与进程标识相关。
工作进程使用的进程标识与在 IIS 5.0 中使用的标识不同。这会影响已从 IIS 5.0 迁移而来、并期望进程标识作为特定的帐户(如 IWAM_ComputerName)来运行的应用程序。同样,对于在 IIS 5.0 中创建的 Web 应用程序,标识由组件服务来配置;而在以工作进程隔离模式运行的 IIS 6.0 中,标识是在 IIS 管理器中配置的。
IIS_WPG 组是由 IIS 6.0 提供的用户组。IIS_WPG 组提供了 IIS 所需的最少特权集,并且,由于不必为标识手动指派特权,IIS_WPG 组为标识帐户使用特定的用户提供了方便的方法。如果帐户不在 IIS_WPG 组中且不具备相应的权限,则工作进程将无法启动。
预定义帐户也称为“服务用户帐户”,它由操作系统创建。IIS 允许用户为应用程序池标识选择下面的预定义帐户:
在默认情况下,这些帐户都是 IIS_WPG 组成员,并且应用程序池标识设置为网络服务帐户,该帐户是这三个帐户具有最低特权的帐户。在配置帐户及其生效前,建议将应用程序的安全要求与预定义帐户的权限级别进行比较。
当使用该选项时,必须为应用程序池标识指定本地计算机或域用户名和密码。指定的帐户应该是 IIS_WPG 用户组的成员。如果用户帐户不在 IIS_WPG 组中,必须手动应用工作进程所需要的适当资源上的 ACL 设置,尽管不建议这样做。
当以 IIS 5.0 隔离模式运行时,通过使用
当以 IIS 5.0 隔离模式运行 IIS 6.0 时,请设置为低隔离 Web 应用程序以本地系统标识运行。本地系统帐户具有对计算机上所有资源的访问权。这意味着如果恶意用户的攻击成功地控制了被设置为低隔离的 Web 应用程序,则本地计算机上的所有资源都将暴露给攻击者。
设置为中或高隔离的 Web 应用程序以 IWAM_ComputerName 为默认标识来运行。
当 IIS 以 IIS 5.0 隔离模式运行时,如果以高隔离配置运行应用程序就会有性能上的损失。这是由于公共对象模型 (COM) 使用了远程过程调用 (RPC),这种情况就发生在下面的操作中:
与之相反,当 IIS 6.0 以工作进程隔离模式运行时,应用程序就会以进程内方式加载到 W3wp.exe 中。因此,没有性能损失。