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

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

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


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

#1 楼

更新:最初的问题是针对Windows Server 2008的,但是对于Windows Server 2008 R2和Windows Server 2012(以及Windows 7和8),该解决方案更容易。您可以通过直接在NTFS UI中键入用户来添加用户。该名称的格式为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注入方法非常好,因为它允许您使用单个用户,但将每个站点彼此完全隔离,而不必为每个应用程序池创建唯一的用户。

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

评论


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

– Scott Forsyth-MVP
09年11月4日在23:12

请注意,如果在编辑权限时将“ IIS APPPOOL \ DefaultAppPool”直接输入到“选择用户或组”中(而不是搜索它),它将被很好地识别(在Win7 x64和Win2k8 R2 x64上测试)。

–米兰·加迪安
2010年4月7日在17:18

您是正确的Win7和Win2k8 R2。它不是在Win2k8 RTM中实现的,而是在R2中实现的。

– Scott Forsyth-MVP
2010-4-17的12:38

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

–Ciaran Bruen
2013年6月14日上午10:49

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

–伊恩·格兰杰(Ian Grainger)
13年11月14日上午11:00

#2 楼

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

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

#3 楼

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

#4 楼

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

#5 楼

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


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


评论


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

– Jeff McJunkin
15年5月19日在19:58

#6 楼

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