什么是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_IUSRS
和IUSR
更多信息,请参阅:
了解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服务”帐户之间的区别?