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

时间:2011-04-20 11:05:55

标签: asp.net security iis user-accounts

在安装了ASP.NET 4.0的Windows Server 2008下,有大量相关的用户帐户,我无法理解哪一个是哪个,它们如何不同,哪一个真的是我的应用运行的那个下。这是一个清单:

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

什么是什么?

1 个答案:

答案 0 :(得分:404)

这是一个非常好的问题,遗憾的是,许多开发人员在成为Web开发人员和设置IIS的环境中没有提出有关IIS / ASP.NET安全性的足够问题。所以这就是......

涵盖列出的身份:

<强> IIS_IUSRS:

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

<强> IUSR:

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

有关IIS_IUSRSIUSR的详细信息,请参阅:

  

Understanding Built-In User and Group Accounts in IIS 7

DefaultAppPool:

如果应用程序池配置为使用“应用程序池标识”功能运行,则将动态创建名为IIS AppPool\<pool name>的“合成”帐户,以用作池标识。在这种情况下,将为池的生命周期创建一个名为IIS AppPool\DefaultAppPool的综合帐户。如果删除池,则此帐户将不再存在。在对文件和文件夹应用权限时,必须使用IIS AppPool\<pool name>添加这些权限。您也不会在计算机用户管理器中看到这些池帐户。有关更多信息,请参阅以下内容:

  

Application Pool Identities

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设置模拟站点的匿名帐户(如果该设置已锁定,则需要由管理员在{{1}中完成文件)。

设置machine.config在使用共享应用程序池的共享托管环境中很常见(与部分信任设置结合使用可防止模拟帐户的展开)。

在IIS7.x / ASP.NET中,模拟控件现在通过站点的身份验证配置功能进行配置。因此,您可以将其配置为以池标识<identity impersonate="true">或特定的自定义匿名帐户运行。

<强> IUSR

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

  

LocalService Account

<强> LOCAL SERVICE

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

  

LocalSystem Account

在实践中:

实际上,保护网站的首选方法(如果网站获得自己的应用程序池 - 这是IIS7的MMC中新网站的默认设置)将在LOCAL SYSTEM:下运行。这意味着将其应用程序池的高级设置中的站点标识设置为Application Pool Identity

enter image description here

然后,您应该在网站中配置身份验证功能:

enter image description here

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

enter image description here

确保选择“应用程序池标识”

enter image description here

当您开始应用文件和文件夹权限时,您将授予应用程序池标识所需的任何权限。例如,如果您授予Application Pool Identity池权限的应用程序池标识,那么您可以通过资源管理器执行此操作:

enter image description here

单击“检查姓名”按钮:

enter image description here

或者您可以使用ASP.NET v4.0实用程序执行此操作:

icacls c:\wwwroot\mysite /grant "IIS AppPool\ASP.NET v4.0":(CI)(OI)(M)

...或...如果您的网站的应用程序池被称为ICACLS.EXE,那么:

icacls c:\wwwroot\mysite /grant "IIS AppPool\BobsCatPicBlog":(CI)(OI)(M)

我希望这有助于澄清事情。

<强>更新

我刚刚在2009年提出了这个优秀的答案,其中包含了大量有用的信息,非常值得一读:

  

The difference between the 'Local System' account and the 'Network Service' account?