Answers:
这是一个非常好的问题,可悲的是,在成为Web开发人员和设置IIS的情况下,许多开发人员没有提出有关IIS / ASP.NET安全性的足够的问题。所以去...
要涵盖列出的身份,请执行以下操作:
IIS_IUSRS:
这类似于旧的IIS6 IIS_WPG
组。这是一个内置组,其安全性已配置为使得该组的任何成员都可以充当应用程序池标识。
IUSR:
此帐户类似于旧的IUSR_<MACHINE_NAME>
本地帐户,该帐户是IIS5和IIS6网站的默认匿名用户(即,通过站点属性的“目录安全性”选项卡配置的帐户)。
有关更多信息IIS_IUSRS
,IUSR
请参见:
DefaultAppPool:
如果将应用程序池配置为使用“应用程序池标识”功能运行IIS AppPool\<pool name>
,则将即时创建一个名为“综合”的帐户以用作池标识。在这种情况下,将为IIS AppPool\DefaultAppPool
池的整个生命周期创建一个称为“综合”的帐户。如果删除池,则该帐户将不再存在。将权限应用于文件和文件夹时,必须使用来添加这些权限IIS AppPool\<pool name>
。您也不会在计算机用户管理器中看到这些池帐户。有关更多信息,请参见以下内容:
ASP.NET v4.0:
--
这将是ASP.NET v4.0应用程序池的应用程序池标识。见DefaultAppPool
上文。
NETWORK SERVICE:
--
该NETWORK SERVICE
帐户是Windows 2003上引入的内置身份。该帐户是NETWORK SERVICE
低特权帐户,您可以在该帐户下运行应用程序池和网站。在Windows 2003池中运行的网站仍然可以模拟该网站的匿名帐户(IUSR_或您配置为匿名身份的任何内容)。
在Windows 2008之前的ASP.NET中,您可以让ASP.NET在“应用程序池”帐户下执行请求(通常是NETWORK SERVICE
)。或者,您可以配置ASP.NET通过本地文件中的<identity impersonate="true" />
设置来模拟站点的匿名帐户web.config
(如果该设置被锁定,则需要由machine.config
文件中的管理员来完成)。
设置<identity impersonate="true">
在使用共享应用程序池的共享托管环境中很常见(与部分信任设置结合使用,以防止假冒帐户撤消)。
在IIS7.x / ASP.NET中,模拟控件现在通过站点的“身份验证”配置功能进行配置。因此,您可以配置为以池身份IUSR
或特定的自定义匿名帐户身份运行。
LOCAL SERVICE:
该LOCAL SERVICE
帐户是服务控制管理器使用的内置帐户。它在本地计算机上具有最低权限集。它的使用范围相当有限:
LOCAL SYSTEM:
您没有问这个问题,但我想补充一下。这是本地内置帐户。它具有相当广泛的特权和信任。您永远不应将网站或应用程序池配置为以该身份运行。
在实践中:
在实践中,保护网站安全的首选方法(如果该站点拥有自己的应用程序池-这是IIS7的MMC中新站点的默认设置)在下运行Application Pool Identity
。这意味着在“应用程序池”的“高级设置”中将站点的身份设置为Application Pool Identity
:
然后,您应该在网站上配置身份验证功能:
右键单击并编辑“匿名身份验证”条目:
确保选择“应用程序池标识”:
当您要应用文件和文件夹权限时,需要授予应用程序池标识任何所需的权限。例如,如果您要为应用程序池标识授予ASP.NET v4.0
池权限,则可以通过资源管理器执行此操作:
点击“检查姓名”按钮:
或者,您可以使用ICACLS.EXE
实用程序执行此操作:
icacls c:\ wwwroot \ mysite / grant“ IIS AppPool \ ASP.NET v4.0” :( CI)(OI)(M)
...或...如果您网站的应用程序池被调用,BobsCatPicBlog
则:
icacls c:\ wwwroot \ mysite / grant“ IIS AppPool \ BobsCatPicBlog” :( CI)(OI)(M)
我希望这有助于清理问题。
更新:
我刚刚碰到了2009年的一个很好的答案,其中包含很多有用的信息,非常值得一读: