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

Vil*_*lx- 271 asp.net security iis user-accounts

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

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

什么是什么?

Kev*_*Kev 418

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

涵盖列出的身份:

IIS_IUSRS:

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

IUSR:

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

有关的更多信息IIS_IUSRS,IUSR请参阅:

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

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中,您可以在应用程序池帐户下(通常NETWORK SERVICE)具有ASP.NET执行请求.或者,您可以将ASP.NET配置为通过本地文件<identity impersonate="true" />设置模拟站点的匿名帐户web.config(如果该设置已锁定,则需要由machine.config文件中的管理员完成).

设置<identity impersonate="true">在使用共享应用程序池的共享托管环境中很常见(与部分信任设置结合使用可防止模拟帐户的展开).

在IIS7.x/ASP.NET中,现在通过站点的身份验证配置功能配置模拟控制.因此,您可以配置为以池标识IUSR或特定的自定义匿名帐户运行.

LOCAL SERVICE:

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

本地服务帐户

LOCAL SYSTEM:

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

LocalSystem帐户

在实践中:

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

确保选中"应用程序池标识":

在此输入图像描述

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

在此输入图像描述

单击"检查名称"按钮:

在此输入图像描述

或者您可以使用该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年提出了这个优秀的答案,其中包含了大量有用的信息,非常值得一读:

"本地系统"帐户与"网络服务"帐户之间的区别是什么?

  • @giammin - 为什么不呢?除非您有特殊情况,否则使用应用程序池标识是最安全的方法,前提是每个站点都位于自己的应用程序池中。我讨厌“诉诸权威”,但作为一名共享 Web 主机工程师和安全人员已经有 15 年了,这种方法在 IIS7+ 上是理所当然的。 (2认同)