IIS7.5的工作原理与IIS7.0基本是一样的
在IlS7.0里,系统自动为各应用程序新建一个应用程序池。默认情况下,应用程序池被配置为以 NETWORKSERVICE 账号运行。而当工作进程被创建时,IIS7.0会向 NETWORKSERVICE安全令牌注入一个特殊的唯一标识该应用程序池的SID(通常是应用程序池的名称)。IIS7.0还会为工作进程创建一个配置文件,并且将文件的ACL设置为仅允许应用程序池唯一的SID访问。这么做的结果就是:一个应用程序池的配置将无法被别的应用程序池读取。顺便提醒一下,你可以更改内容文件的ACL,从而允许应用程序池唯一的SID进行访问而不是NETWORKSERVICE账号。这可以阻止应用程序池A中的某个应用程序读取应用程序池B中某应用程序的内容文件。
对于Web服务器来说,使用哪个账号作为匿名访问的身分凭证是关系进程身份的重要问题。IIS6依赖于一个本地账户——IUSR_计算机名,将其作为匿名用户登录的身份凭证。IlS7则使用了一个全新的内置账号——IUSR,这是一个特殊的账户,用户不能使用该账户进行本地登录,它没有密码,所以任何基于密码破解的攻击对它是无效的。由于IUSR账号总是拥有相同的SID,所以它的相关ACL在WindowsSewer2008的机器之间是可传递的。如果IUSR账号不适合我们的应用场景的话(也就是说,如果匿名请求需要经身份验证的网络访问的话),可以关闭匿名用户账号,IIS7将为匿名请求使用工作者进程身份。
同样全新的还有内置的IIS_IUSRS组,这个用户组取代了原先的IIS_WPG组。在IIS6里,IIS_WPG组提供了运行一个工作者进程所需的最小权限,而且必须手动地将账号添加到该组,从而为一个工作者进程提供自定制的身份凭证。IIS_IUSRS组为lIS7提供了类似的角色,但是不必特意将账号添加到该组。取而代之的是,当账号被指派为某一应用程序池的身份凭证时,IIS7会自动将这些账号收入到IIS_IUSRS组。并且和IUSR账号一样,IIS_IUSRS组也是内置的,所以在所有的WindowsServer2008机器上,它总是具有相同的名称和SID,这就让ACL以及其它配置在WindowsServer2008(以及WindowsVista)机器之间是完全可迁移的。