当前位置 主页 > iis相关 > 最大化 缩小

    关于IIS7的权限简述

    栏目:iis相关 时间:2018-09-28 14:19

      IIS7对于以往是革命性的改变,不再是以前缝缝补补的破衣裳,全部重写的代码带来了更为优秀的性能与扩展能力.他不再是一个WebServer了而变成了一个ApplicationServer能够承载一切以通讯为基础的应用.新的变革也带来了新的知识,想更好的驾驭IIS7权限则是最基础的一部分也是最先需要了解的一部分.本文让你初步了解IIS7的权限应用的基本相关知识,了解来龙去脉不会再因应用程序突然多出一个莫名其妙权限而感到困惑.虽然下面的内容均以Web服务为例,但道理同样适用于以IIS7宿主的其他应用如FTP等等。
     
      一、工作进程(WorkerProcess)
     
      WorkerProcess是IIS应用程序的宿主,在任务管理器中可以看到每一个WorkerProcess就是一个w3wp.exe.
     
      工作进程标识(WorkerProcessIdentity-WPI)
     
      是WorkerProcess运行时的身份:
     
      1、在IIS6,Windows2008IIS7下,默认关联权限是NetworkService。
     
      2、在Windows2008R2IIS7.5下,默认是关联权限是ApplicationPoolIdentity。
     
      这里并没有提供一个直接的手段来设置WorkerProcess在什么身份标识下运行,而是通过ApplicationPool的身份标识设定来实现的。
     
      二、应用程序池(ApplicationPool)
     
      ApplicationPool包含至少一个或多个WorkerProcess(WebGarden模式).在运行时会将ApplicationPool的身份注入到WorkerProcess中,就会以ApplicationPool的身份运行.可以认为ApplicationPool与其包含的WorkerProcess的运行身份是一致的。
     
      应用程序池标识(ApplicationPoolIdentity)
     
      是ApplicationPool运行时的身份:
     
      1、在IIS6,Windows2008IIS7下,默认关联权限是NetworkService。
     
      2、在Windows2008SP2IIS7下,运行身份设置时除了LocalService,NetworkService,LocalSystem外增加了ApplicationPoolIdentity一个选项,而这个则是一个可以设置权限的虚拟标识。
     
      3、在Windows2008R2IIS7.5下,默认是关联权限是ApplicationPoolIdentity。
     
      三、虚拟帐户ApplicationPoolIdentity
     
      上面提到的身份标识选项中你可以选择他,但他只是一个统称,并不存在实际的这个命名.他依赖你的ApplicationPool的名称,例如我的ApplicationPool名字叫做:SimonwAppPool,那么这个虚拟标识的全名是:IISAppPool\SimonwAppPool运行在此ApplicationPool下的WorkerProcess从任务管理器中可以看到w3wp.exe是在SimonwAppPool这个用户下运行的.可以在文件系统中对这个帐户分配权限.这么做的好处是能够将能够将权限分离开来做粒度更细的配置,不像是NetworkService有很多应用基于此,设置一个权限影响一大片。
     
      不过有时候通过UI找不到这个对象大约是个Bug,通过命令行icacls处理即可.
     
      四、什么是impersonate
     
      这可能是一个让人容易迷糊的词汇impersonate-扮演,装扮.他是指在某个特定的时刻以一个新的身份来代替已有身份来运行应用程序.一个请求来临时在IIS处理管道中,在authentication之前authenticateduser的上下文是未知的,这时你的应用程序以WPI的权限在运行.在authentication之后authenticateduser的上下文被建立,但依然没有去扮演,直至请求被映射到他的handler也就是handlermapping后应用程序开始使用扮演则将默认的WPI权限替换为authenticateduser的权限来执行应用程序。
     
      举个例子,php配置fastcgi时推荐设置fcgi.impersonate=true,体现在请求一个php文件时
     
      false:始终使用WPI的权限,默认权限是NetworkService。
     
      true:使用authenticateduser,默认为IUSR,也就是说可以让在站点级别上设置的权限生效。
     
      五、用户组与用户
     
      在IIS7下需要注意2个特殊的用户和用户组,在IIS6中有着类似的对应关系
     
      IIS6:IIS_WPG-IIS7:IIS_IUSRS
     
      IIS6:IUSR_MachineName-IIS7:IUSR
     
      最大的改变就是他们都成为了系统内置帐户(built-inaccount)有着统一的SID,这样的好处在于做不同机器/系统间的拷贝时可以连带权限一同拷贝过去了,在以往因为SID不同换了机器权限是无法有效拷贝的只能挨个手动设置,现在方便多了。
     
      1、IIS_IUSRS组
     
      默认他会拥有适当的权限来运行WorkerProcess.所有的WPI下的运行帐户均被隐式的自动加入到这个组中,以获得最小的运行权限.例如当你将SimonwAppPool这个ApplicationPool的运行身份设置为ApplicationPoolIdentity,那么IISAppPool\SimonwAppPool这个用户会被自动加入到IIS_IUSRS组中拥有他的全部权限.因此对此组权限赋值需很小心很容易不知不觉中影响一大片。
     
      2、IUSR默认匿名帐户
     
      特别需要注意的别看他是一个匿名帐户并且没有密码,但他属于authenticatedusers,而authenticatedusers属于Users组,因此IUSR默认具备了Users组的权限。