【问题标题】:What are all the user accounts for IIS/ASP.NET and how do they differ?IIS/ASP.NET 的所有用户帐户是什么?它们有何不同?
【发布时间】:2011-08-09 09:54:14
【问题描述】:

在安装了 ASP.NET 4.0 的 Windows Server 2008 下,有一大堆相关的用户帐户,我不明白哪个是哪个,它们有何不同,以及哪个是我的应用程序运行的真正的用户帐户在下面。这是一个列表:

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

什么是什么?

【问题讨论】:

  • 使用 Windows Server 2012 和 ASP.NET 4.0 或更高版本?

标签: asp.net security iis user-accounts


【解决方案1】:

这是一个非常好的问题,遗憾的是,在作为 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 配置为通过本地 web.config 文件中的 <identity impersonate="true" /> 设置模拟站点的匿名帐户(如果该设置被锁定,则需要由管理员在 machine.config 文件中完成)。

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

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

LOCAL SERVICE:

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

LocalService Account

LOCAL SYSTEM:

你没有问这个问题,但为了完整起见,我添加了。这是一个本地内置帐户。它拥有相当广泛的特权和信任。切勿将网站或应用程序池配置为在此身份下运行。

LocalSystem Account

实践:

实际上,保护网站的首选方法(如果网站有自己的应用程序池 - 这是 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)

...或者...如果您站点的应用程序池被称为BobsCatPicBlogthen:

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

我希望这有助于解决问题。

更新:

我刚刚从 2009 年偶然发现了这个出色的答案,其中包含一堆有用的信息,非常值得一读:

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

【讨论】:

  • 不同意使用同一用户进行匿名身份验证和应用程序池身份...如果您需要授予 apppoolidentity 对文件夹的写入权限...
  • @giammin - 为什么不呢?除非您有特殊情况,否则使用应用程序池标识是最安全的方法,前提是每个站点都在自己的应用程序池中。讨厌“诉诸权威”,但做了 15 年的共享网络主机工程师和安全人员,这种方法在 IIS7+ 上是轻而易举的事。
  • @Kev 只是我不喜欢将网站上的写权限授予匿名用户
  • 您的应用程序池可以通过使用 IIS AppPool\ 更加具体。在相关说明中,IIS Express 仅适用于 IIS AppPool\ASP.NET v4.0,因为未创建应用程序池虚拟帐户。
  • @daub815 - IIS Express 的工作方式不同,因为它旨在在您的 Windows 登录和启动下运行,并在开发和调试时根据需要关闭。实际上,它实际上并没有使用或依赖 Full Fat IIS 应用程序池或基础架构。 IIS Express 的目的是为开发人员提供与真实事物一样多的行为、风格和配置,因为 VS 的玩具 Web 服务器受到严重限制......
猜你喜欢
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多