什么是IIS / ASP.NET的所有用户帐户,它们有什么不同?

在安装了ASP.NET 4.0的Windows Server 2008下,有一大堆相关的用户账号,我不明白哪一个是哪一个,哪一个是不同的,哪一个真的是我的应用运行的。 这是一个列表:

  • IIS_IUSRS
  • IUSR
  • 默认应用
  • ASP.NET v4.0
  • NETWORK_SERVICE
  • 本地服务。

什么是什么?

这是一个非常好的问题,很遗憾,许多开发人员在作为Web开发人员和设置IIS的情况下,不会提出有关IIS / ASP.NET安全性的问题。 所以这里去…

为了涵盖列出的身份:

IIS_IUSRS:

这与旧的IIS6 IIS_WPG组类似。 它是一个内置的组,其安全性被configuration为使得该组中的任何成员都可以充当应用程序池标识。

IUSR:

此帐户类似于旧的IUSR_<MACHINE_NAME>本地帐户,该帐户是IIS5和IIS6网站(即通过网站属性的目录安全性选项卡configuration的默认匿名用户)的默认用户。

有关IIS_IUSRSIUSR更多信息,请参阅:

了解IIS 7中的内置用户和组帐户

DefaultAppPool:

如果将应用程序池configuration为使用“应用程序池标识”function运行,则会立即创build名为IIS AppPool\<pool name>的“合成”帐户以用作池标识。 在这种情况下,将会有一个名为IIS AppPool\DefaultAppPool帐户在池的生命周期中创build。 如果您删除该池,则该帐户将不再存在。 将权限应用于文件和文件夹时,必须使用IIS AppPool\<pool name>添加这些权限。 您也不会在您的计算机用户pipe理器中看到这些池帐户。 请参阅以下内容获取更多信息:

应用程序池标识

ASP.NET v4.0:

这将是ASP.NET v4.0应用程序池的应用程序池标识。 请参阅上面的DefaultAppPool

NETWORK SERVICE:

NETWORK SERVICE帐户是在Windows 2003上引入的内置身份NETWORK SERVICE是一个低权限帐户,您可以在其中运行应用程序池和网站。 运行在Windows 2003池中的网站仍然可以模拟该网站的匿名帐户(IUSR_或您configuration为匿名身份的任何内容)。

在Windows 2008之前的ASP.NET中,您可以让ASP.NET在Application Pool帐户(通常是NETWORK SERVICE )下执行请求。 或者,您可以将ASP.NETconfiguration为通过本地web.config文件中的<identity impersonate="true" />设置来模拟站点的匿名帐户(如果该设置已locking,则需要由machine.config的pipe理员完成machine.config文件)。

设置<identity impersonate="true">在使用共享应用程序池的共享宿主环境中(与部分信任设置一起使用以防止模拟帐户的解除)是常见的。

在IIS7.x / ASP.NET中,模拟控件现在通过站点的身份validationconfigurationfunction进行configuration。 因此,您可以configuration为以池身份, IUSR或特定的自定义匿名帐户身份运行。

LOCAL SERVICE:

LOCAL SERVICE帐户是服务控制pipe理器使用的内置帐户。 它在本地计算机上具有一组最小权限。 它有一个相当有限的使用范围:

本地服务帐户

LOCAL SYSTEM:

你没有问这个问题,但是为了完整性,我join了。 这是一个本地的内置帐户。 它有相当广泛的特权和信任。 您不应将网站或应用程序池configuration为以此身份运行。

本地系统帐户

在实践中:

在实践中,保护网站的首选方法是在“ Application Pool Identity下运行(如果网站具有自己的应用程序池 – 这是IIS7 MMC中新站点的默认设置)。 这意味着将站点的标识设置为Application Pool Identity程序池的高级设置为Application Pool Identity

在这里输入图像说明

在网站中,您应该configuration身份validationfunction:

在这里输入图像说明

右键单击并编辑匿名身份validation条目:

在这里输入图像说明

确保select“应用程序池标识”

在这里输入图像说明

当您应用文件和文件夹权限时,您将授予应用程序池标识所需的任何权限。 例如,如果您授予ASP.NET v4.0池权限的应用程序池标识,则可以通过资源pipe理器执行此操作:

在这里输入图像说明

点击“检查姓名”button:

在这里输入图像说明

或者您可以使用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年的这个很好的答案,其中包含一些有用的信息,非常值得一读:

“本地系统”帐户和“networking服务”帐户之间的区别?