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


282

在安装了ASP.NET 4.0的Windows Server 2008下,有一整套相关的用户帐户,我无法理解哪个是哪个,它们之间如何不同以及哪个真的是我的应用程序运行所基于的帐户。清单:

  • IIS_IUSRS
  • 研究所
  • DefaultAppPool
  • ASP.NET v4.0
  • NETWORK_SERVICE
  • 本地服务。

什么是什么?


并使用Windows Server 2012和ASP.NET 4.0或更高版本?
Kiquenet 2014年

Answers:


432

这是一个非常好的问题,可悲的是,在成为Web开发人员和设置IIS的情况下,许多开发人员没有提出有关IIS / ASP.NET安全性的足够的问题。所以去...

要涵盖列出的身份,请执行以下操作:

IIS_IUSRS:

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

IUSR:

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

有关更多信息IIS_IUSRSIUSR请参见:

了解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中,您可以让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帐户是服务控制管理器使用的内置帐户。它在本地计算机上具有最低权限集。它的使用范围相当有限:

LocalService帐户

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年的一个很好的答案,其中包含很多有用的信息,非常值得一读:

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


不同意使用同一用户进行匿名身份验证和应用程序池标识...如果您需要给apppoolidentity写入文件夹的权限....
giammin 2015年

1
@giammin-为什么不呢?除非您有特殊情况,否则使用应用程序池标识是最安全的方法,前提是每个站点都位于其自己的应用程序池中。讨厌做“呼吁权威”,但作为共享的Web主机工程师和安全人员已有15年了,这种方法对IIS7 +毫无疑问。
凯夫

@Kev只是我不喜欢将网站上的写许可权授予匿名用户
giammin

1
通过使用IIS AppPool \ <名称_apppool>,您的应用程序池甚至可以更加具体。在相关说明中,由于未创建应用程序池虚拟帐户,因此IIS Express仅可与IIS AppPool \ ASP.NET v4.0一起使用。
kevindaub

@ daub815-IIS Express的工作方式有所不同,因为它旨在在Windows登录和启动下运行,并在开发和调试时根据需要关闭。实际上,它实际上并没有使用或完全依赖Full Fat IIS应用程序池或基础结构。IIS Express的目的是给开发人员与真实事物一样的行为,风格和配置,因为VS的玩具Web服务器受到严格限制...
Kev 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.