题 如何为ApplicationPoolIdentity帐户分配权限


在Windows Server 2008上的IIS 7中,应用程序池可以作为“ApplicationPoolIdentity”帐户而不是NetworkService帐户运行。

如何为此“ApplicationPoolIdentity”帐户分配权限。它不会在计算机上显示为本地用户。它不会在任何地方出现。在任何地方都没有任何类似的东西。当我浏览本地用户,组和内置帐户时,它不会出现在列表中,也不会在列表中显示任何类似内容。到底是怎么回事?

我不是唯一有这个问题的人:看 IIS 7.5 + Windows 7中的ApplicationPoolIdentity问题 举个例子。


“不幸的是,这是Windows Server 2008 / Windows Vista上对象选择器的限制 - 正如几个人已经发现的那样,您仍然可以使用命令行工具来操作应用程序池标识的ACL ICACLS“。


252
2017-11-03 21:52






答案:


更新: 原始问题适用于Windows Server 2008,但Windows Server 2008 R2和Windows Server 2012(以及Windows 7和8)的解决方案更容易。您可以通过直接键入NTFS UI来添加用户。名称格式为IIS APPPOOL \ {app pool name}。例如:IIS APPPOOL \ DefaultAppPool。

IIS APPPOOL\{app pool name}

注意:根据以下评论,有两件事需要注意:

  • 直接在“选择用户或组”中输入字符串,而不是在搜索字段中输入。
  • 在域环境中 您需要先将位置设置为本地计算机。

参考Microsoft Docs文章: 应用程序池标识>保护资源

原始回复: (对于Windows Server 2008)这是一个很棒的功能,但正如您所提到的那样,它尚未完全实现。您可以使用类似icacls的命令提示符添加应用程序池标识,然后您可以从GUI管理它。例如,从命令提示符运行类似的东西:

icacls c:\inetpub\wwwroot /grant "IIS APPPOOL\DefaultAppPool":(OI)(CI)(RX)

然后,在Windows资源管理器中,转到wwwroot文件夹并编辑安全权限。您将看到名为DefaultAppPool的组(组图标)。您现在可以编辑权限。

但是,您根本不需要使用它。如果你愿意,这是你可以使用的奖励。您可以使用旧方法为每个应用程序池创建自定义用户并将自定义用户分配给磁盘。这有完整的UI支持。

这种SID注入方法很不错,因为它允许您使用单个用户,但可以完全隔离每个站点,而无需为每个应用程序池创建唯一用户。非常令人印象深刻,并且在UI支持下会更好。

注意:如果找不到应用程序池用户,请检查名为Application Host Helper Service的Windows服务是否正在运行。它是将应用程序池用户映射到Windows帐户的服务。


281
2017-11-04 03:07



这是一种奇怪的野兽,因为它不像用户所在的群体,并且它不像计算机帐户与用户帐户彼此完全不同。应用程序池帐户“重叠”应用程序池标识用户。例如,您可以使用网络服务拥有5个应用程序池,使用自定义帐户可以拥有5个其他应用程序池,但它们是10个不同的系统管理应用程c:\ inetpub \ temp \ appPools文件夹注意到这些优点,它自动管理并干净地锁定系统。 IIS很好地利用它们。我们对文件夹的使用是可选的。 - Scott Forsyth - MVP
请注意,如果在编辑权限时直接将“IIS APPPOOL \ DefaultAppPool”输入“选择用户或组”(而不是搜索它),它将被识别为正常(在Win7 x64和Win2k8 R2 x64上测试)。 - Milan Gardian
你对Win7和Win2k8 R2是正确的。它没有在Win2k8 RTM中实现,而是在R2中实现。 - Scott Forsyth - MVP
最后得到了这个 - 如果你直接输入应用程序池名称就像@Milan Gardian上面说的那样 和 将位置字段更改为本地计算机然后它的工作原理 - Ciaran Bruen
非常感谢你对'两件事要注意'。我对这两个问题都感到磕磕绊绊,这是对问题的明确而简单的解释以及如何实现我所需要的。遗憾的是,MSDN文档中没有一个是明确的。 - Ian Grainger


您必须确保“从此位置”字段设置为本地计算机而不是域。

我有同样的问题,一旦我改变它,它工作正常。


21
2017-08-01 13:29





您应该真正为每个“角色”创建组,并在文件系统上分配该组访问。然后根据需要将应用程序池添加到特定于角色的组。这种方式即使您稍后删除了应用程序池(虚拟用户也会这样做) ),您不必担心重做所有权限,只需将替换应用程序池添加到现有组。


4
2018-06-14 17:42





在阅读@Scott Forsyth - MVP回答后,我尝试重新启动Application Host Helper Service。这解决了我的问题。


3
2017-12-04 11:05





我正在运行WS8 R2,我无法添加 IIS APPPOOL\DefaultAppPool 通过Windows资源管理器它的唯一工作方式是通过命令行:

cacls [FILE PATH] / T / E / G“IIS APPPOOL \ DefaultAppPool”:C


0
2018-03-19 14:46



奇怪的是,我不得不做“IIS AppPool \ DefaultAppPool”才能被接受。请注意混合大小写 - 全部大写,就像我第一次做的那样,未被GUI接受。 - Jeff McJunkin


如果这个问题是关于如何在msdb数据库中执行_sp_send_dbmail(使用msdb中的SQL发送数据库邮件存储过程),这里有一些解决方法。 将数据库的.net应用程序用户名(在.net应用程序中的连接字符串上定义)添加到具有“DatabaseMailUserRole”角色成员身份的msdb用户


0
2017-07-25 00:50