IIS7权限概述-ApplicationPoolIdentity


356

我们最近已升级到IIS7作为核心Web服务器,我需要有关权限的概述。以前,当需要写入文件系统时,我应该授予AppPool用户(网络服务)访问目录或文件的权限。

在IIS7中,我默认看到AppPool用户设置为ApplicationPoolIdentity。因此,当我检查任务管理器时,我看到一个名为“ WebSite.com”的用户帐户正在运行IIS进程(“ Website.com”是IIS中网站的名称)

但是,如果我尝试使用该用户帐户授予权限,则该用户帐户不存在。那么,如何确定也要授予权限的用户呢?

编辑================================================ ============================

参见下面的屏幕快照问题。我们的网站(www.silverchip.co.uk)在用户名SilverChip.co.uk上运行。但是,当我添加权限时,该用户确实存在!

在此处输入图片说明

=================================请参阅AppPool图像

在此处输入图片说明


2
实际上,Microsoft在此问题上的信息是非常好的应用程序池标识
DanielV

Answers:


679

实际上,ApplicationPoolIdentity是在IIS7 +中使用的最佳实践。这是一个动态创建的非特权帐户。要为特定的应用程序池添加文件系统安全性,请参见IIS.net的“应用程序池标识”。快速版本:

如果应用程序池被命名为“ DefaultAppPool”(如果命名不同,只需在下面替换此文本)

  1. 打开Windows资源管理器
  2. 选择一个文件或目录。
  3. 右键单击该文件,然后选择“属性”
  4. 选择“安全性”标签
  5. 点击“编辑”,然后点击“添加”按钮
  6. 单击“位置”按钮,并确保选择本地计算机。(如果服务器属于Windows域,则不是 Windows域。)
  7. 在“输入要选择的对象名称:”文本框中输入“ IIS AppPool \ DefaultAppPool ”。(不要忘记将“ DefaultAppPool”更改为您命名的应用程序池。)
  8. 单击“检查名称”按钮,然后单击“确定”。

11
@Pino:不,不是网站名称。使用应用程序池名称。每个网站都分配给一个应用程序池。您可以在网站的属性“基本设置”对话框(在IIS7中)中分辨出哪个。
乔恩·亚当斯

2
@Pino:在这种情况下,您应该使用的安全角色是IIS AppPool\silverchip.co.uk。不过,我还没有尝试使用安全名称中的句点-您可能希望将其更改为不带标点的内容。
乔恩·亚当斯

7
正如您所说,我已按照您的指示进行。但是有一个hack。你必须设置属性enable load user profile,以true在应用程序池设置。而且只有在此设置之后,我才能够运行应用程序。因此,请更新您的说明并添加第9点。
–'Johnny_D'13年

19
请记住要检查用于匿名身份验证的服务器设置是否也在使用应用程序池标识。从IUSR退回后,此解决方案便对我有效。
bblue

11
注意这里!您无法使用用户界面查找用户,但必须输入用户名。唯一的选择就是检查名称。
雷姆科

87

解析名称时,请记住使用服务器的本地名称,而不是域名

IIS AppPool\DefaultAppPool

(仅是提醒,因为这使我有些困惑):在此处输入图片说明


是的,我每次都忘记了这一点,感谢James Toomey的提醒!
tjans

30

使用IIS默认配置,仅授予IIS AppPool \ YourAppPoolName用户访问权限可能不够

就我而言,我仍然遇到错误HTTP错误401.3-添加AppPool用户后未经授权,并且仅在向IUSR用户添加权限后才得到修复。

这是必需的,因为默认情况下,使用IUSR进行匿名访问。您可以设置另一个特定用户(应用程序池)或继续使用IUSR,但不要忘记设置适当的权限。

验证标签

归功于此答案:HTTP错误401.3-未经授权


3
这很关键!为了安全起见,必须将“匿名身份验证”更改为“应用程序池标识”!我敢肯定有一个很好的理由将它设置为IUSR,但我想不出一个。谢谢!!!
Dan B

这已经为我解决了这个问题。这可能是因为Windows Server 2012 R2上的IIS版本是8
myroslav

2
这是重要的步骤,应添加到已接受的答案中。同样,最简单的方法是将单选框更改为“应用程序池标识”
Sourcery

1
这是我的问题!谢谢!!
斯隆·雷诺兹

28

在Windows Server 2008(r2)上,无法通过“属性”->“安全性”将应用程序池标识分配给文件夹。您可以通过以下命令通过admin命令提示符进行操作:

icacls "c:\yourdirectory" /t /grant "IIS AppPool\DefaultAppPool":(R)

1
你能解释一下吗?(R)是什么意思?您实际上在此命令中输入了尖括号吗?
凯特·

3
嗨,凯特,我使用<>表示“此处的应用程序池名称”,但保留了合法的应用程序池名称。在IIS管理器->应用程序池中,您需要匹配名称(包括空格)。我做的最后一个是“ IIS AppPool \ ClientName_CompanyName-Intranet”。:(R)在这种情况下授予读取访问权限。您也可以使用F(完整),M(修改),RX(读+执行)和W(只写)。
克里斯(Chris

9
实际上,您可以通过Windows Server 2008 R2中“属性”中的“证券”选项卡进行分配,因此您不需要此替代方法。确保在对象类型和位置上选择了内置安全主体。
rism

这个答案对我有用。选择的答案对我不起作用。
Tuyen Nguyen 2014年

3
另请参阅[link] serverfault.com/questions/81165/…的选择答案的原始响应。 对于纯Windows Server 2008(或Datacenter版),您几乎必须使用命令行将应用程序池帐户纳入安全性。对话。一旦存在,就可以对其进行管理,更改子目录的权限级别等。还要考虑:“ icacls” c:\ yourdirectory“ / t / grant” IIS AppPool \ DefaultAppPool“ :( OI)(CI)(R)” OI -对象继承,CI容器继承。
secretwep

7

A部分:配置应用程序池

假设应用程序池名为“ MyPool”,请从IIS管理器转到应用程序池的“高级设置”

  1. 向下滚动到“身份”。尝试编辑值将弹出一个对话框。选择“内置帐户”,然后在其下选择“ ApplicationPoolIdentity”。

  2. 在“身份”下方的几行中,您应该找到“加载用户个人资料”。此值应设置为“ True”。

B部分:配置您的网站

  1. 网站名称:SiteName(仅作为示例)
  2. 物理路径:C:\任何(仅作为示例)
  3. 以...身份连接:应用程序用户(通过身份验证)(以上设置可以在IIS管理器中站点的“基本设置”中找到)
  4. 配置基本设置后,在站点的主控制台中的“ IIS”下查找“身份验证”配置。打开它。您应该看到“匿名身份验证”的选项。确保已启用。然后右键单击并“编辑...”。选择“应用程序池标识”。

C部分:配置文件夹

有问题的文件夹是C:\ Whatever

  1. 转到属性-共享-高级共享-权限,然后勾选“共享此文件夹”
  2. 在同一对话框中,您将找到“权限”按钮。点击它。
  3. 将打开一个新对话框。点击“添加”。
  4. 一个新的对话框“选择用户或组”将打开。在“来自此位置”下,确保名称与本地主机名相同。然后,在“输入对象名称”下,键入“ IIS AppPool \ MyPool”,然后单击“检查名称”,然后单击“确定”。
  5. 为“ MyPool”用户授予完全共享权限。应用它并关闭文件夹属性
  6. 再次打开文件夹属性。这次,转到“安全性-高级-权限”,然后单击“添加”。顶部将有一个“选择主体”选项,或其他一些选项来选择一个用户。点击它。
  7. “选择用户或组”对话框将再次打开。重复步骤4。
  8. 向“ MyPool”用户授予所需的全部或尽可能多的权限。
  9. 选中“替换所有子对象权限...”,然后应用并关闭。

您现在应该可以使用浏览网站


您是丛林之王!谢谢
tno2007

5

乔恩·亚当斯的热门回答

这是为PowerShell人员实施此操作的方法

$IncommingPath = "F:\WebContent"
$Acl = Get-Acl $IncommingPath
$Ar = New-Object  system.security.accesscontrol.filesystemaccessrule("IIS AppPool\DefaultAppPool","FullControl","ContainerInherit, ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $IncommingPath $Acl

1

只是增加了混乱,(Windows资源管理器)“有效权限”对话框不适用于这些登录。我有一个使用传递身份验证的网站“ Umbo4”,并在网站根文件夹中查看了用户的有效权限。“检查名称”测试将名称解析为“ IIS AppPool \ Umbo4”,但“有效权限”显示该用户根本没有对该文件夹的任何权限(所有复选框均未选中)。

然后,使用“浏览器安全性”选项卡,将该用户从文件夹中明确排除。如预期的那样,这导致该站点失败并出现HTTP 500.19错误。但是,有效权限与以前完全一样。


1

我仅通过创建一个名为IUSER的新用户并使用密码并将其添加到网络服务和用户组中,即可解决了所有asp.net问题。然后创建所有虚拟站点和应用程序,并使用密码将身份验证设置为IUSER。设置高级文件访问权限以包括IUSER和BAM,它至少解决了3-4个问题,包括此问题。

戴夫

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.