如何为ApplicationPoolIdentity帐户分配权限


263

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

如何为该“ ApplicationPoolIdentity”帐户分配权限。它不会在计算机上显示为本地用户。它不会在任何地方成组显示。没有什么比它更遥远的地方了。当我浏览本地用户,组和内置帐户时,它不会出现在列表中,也不会出现在列表中。到底是怎么回事?

我不是唯一遇到此问题的人:有关示例,请参阅IIS 7.5 + Windows 7中的ApplicationPoolIdentity的问题。


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

Answers:


289

更新:最初的问题是针对Windows Server 2008的,但对于Windows Server 2008 R2和Windows Server 2012(以及Windows 7和8),该解决方案更容易。您可以通过直接在NTFS用户界面中输入用户来添加用户。该名称的格式为IIS APPPOOL \ {应用程序池名称}。例如: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帐户。


1
这有点奇怪,因为它不像用户所在的组,也不像计算机帐户和用户帐户完全不同。应用程序池帐户“重叠”应用程序池标识用户。例如,您可以有5个使用Network Service的应用程序池,另外5个使用自定义帐户的应用程序池,但是它们是10个不同的系统托管的应用程序池帐户。c:\ inetpub \ temp \ appPools文件夹注意到了这些优点,该文件夹在该文件夹中被自动管理并干净地锁定了系统。IIS很好地利用了它们。我们在文件夹上的使用是可选的。
Scott Forsyth-MVP,

29
请注意,如果在编辑权限时直接在“选择用户或组”中输入“ IIS APPPOOL \ DefaultAppPool”(而不是进行搜索),则将其识别的很好(在Win7 x64和Win2k8 R2 x64上进行了测试)。
米兰加迪安

5
您是正确的Win7和Win2k8 R2。它不是在Win2k8 RTM中实现的,而是在R2中实现的。
Scott Forsyth-MVP 2010年

9
终于明白了-如果您像上面的@Milan Gardian一样直接输入应用程序池名称,并将位置字段更改为本地计算机,则它可以正常工作
Ciaran Bruen

4
非常感谢您“需要注意的两件事”。我在这两个方面都遇到了困难,这是对问题以及如何实现我所需要达到的清晰而简单的解释。遗憾的是,没有MSDN文档这么清楚。
Ian Grainger13年

22

您必须确保将From this location字段设置为local machine而不是域。

我遇到了同样的问题,一旦更改,它就可以正常工作。


4

您实际上应该按照“角色”创建组,并在文件系统上分配该组访问权限。然后根据需要将应用程序池添加到特定于角色的组中。这样,即使以后删除应用程序池(并且虚拟用户成为poof),也不必担心重做所有权限,只需将替换应用程序池添加到现有组即可。


3

阅读@Scott Forsyth-MVP答案后,我尝试重新启动Application Host Helper服务。那为我解决了问题。


0

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

cacls [文件路径] / T / E / G“ IIS APPPOOL \ DefaultAppPool”:C


2
奇怪的是,我必须要做“ IIS AppPool \ DefaultAppPool”才能被接受。注意混合大小写-与我第一次一样,所有大写字母都没有从GUI接受。
Jeff McJunkin,2015年

0

如果此问题是关于如何在msdb数据库中执行_sp_send_dbmail(使用msdb中的SQL send Database Mail存储过程),则可以采取一些措施。将数据库的.net应用程序用户名(在.net应用程序中的连接字符串上定义)添加到具有“ DatabaseMailUserRole”角色成员资格的msdb用户中

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.