【问题标题】:IIS7 Permissions Overview - ApplicationPoolIdentityIIS7 权限概述 - ApplicationPoolIdentity
【发布时间】:2011-11-12 03:35:09
【问题描述】:

我们最近升级到 IIS7 作为核心 Web 服务器,我需要在权限方面进行概述。以前,当需要写入文件系统时,我会让 AppPool 用户(网络服务)访问目录或文件。

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

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

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

有关屏幕截图中的问题,请参见下文。我们的网站 (www.silverchip.co.uk) 在用户名 SilverChip.co.uk 上运行。但是,当我添加权限时,该用户不存在!

==================================查看 AppPool 图片

【问题讨论】:

标签: iis-7 permissions


【解决方案1】:

ApplicationPoolIdentity 实际上是在 IIS7+ 中使用的最佳实践。它是一个动态创建的非特权帐户。要为特定应用程序池添加文件系统安全性,请参阅IIS.net's "Application Pool Identities"。快速版本:

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

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

【讨论】:

  • @Pino:不,不是网站名称。使用 应用程序池 名称。每个网站都分配给一个应用程序池。您可以在网站的属性基本设置对话框(在 IIS7 中)中分辨出哪一个。
  • @Pino:在这种情况下,您应该使用的安全角色是IIS AppPool\silverchip.co.uk。不过,我还没有尝试过安全名称中的句点——您可能希望将其更改为不带标点符号的名称。
  • 我已按照您所说的进行了操作。但是有一个技巧。您必须在应用程序池设置中将属性 enable load user profile 设置为 true。只有在这个设置之后,我才能运行应用程序。因此,请更新您的说明并添加第 9 点。
  • 记得检查匿名身份验证的服务器设置是否也在使用应用程序池标识。当我从 IUSR 切换回来时,这个解决方案就对我有用。
  • 注意这里!您无法使用用户界面查找用户,但您必须输入它。检查名称是您唯一可以做的事情。
【解决方案2】:

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

IIS AppPool\DefaultAppPool

(只是提醒一下,因为这让我有点绊倒):

【讨论】:

  • 是的,我每次都忘记了,感谢 James Toomey 的提醒!
  • 所以我们可以从哪里找到本地服务器名称
  • @user889030,您可以在命令行输入hostname,或者在文件资源管理器中右键单击“我的电脑”图标并选择“属性”,它应该会在那里列出。
  • @JamesToomey 是的,我已经卸载了 IIS,因为它在打开 exe 时出现问题,我无法从中打开像 chrome firefox 等系统浏览器,出现一些缓存类型错误,我认为 IIS 移动了午饭前把exe放到沙箱里,所以我切换到没有此类问题的apache
  • @JamesToomey 可以验证浏览器是否可以从 IIS -> php 启动,或者不喜欢执行 cmd /c start chrome /new-window www.google.com 之类的命令或使用路径执行 chrome bin
【解决方案3】:

仅使用 IIS 默认配置访问 IIS AppPool\YourAppPoolName 用户可能还不够

在我的情况下,我在添加 AppPool 用户后仍然遇到错误 HTTP Error 401.3 - Unauthorized,并且仅在向 IUSR 用户添加权限后才修复。

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

感谢这个答案:HTTP Error 401.3 - Unauthorized

【讨论】:

  • 这很关键!!!必须将“匿名身份验证”更改为“应用程序池身份”以确保安全!我确信将其设置为 IUSR 是有充分理由的,但我想不出一个。谢谢!!!
  • 这已经为我解决了这个问题。可能是因为我在 Windows Server 2012 R2 上的 IIS 版本是 8
  • 这是一个重要的步骤,应该添加到已接受的答案中。同样最简单的方法是将单选框更改为应用程序池标识
  • 这是我的问题!谢谢!!
【解决方案4】:

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

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

【讨论】:

  • 你能解释一下吗? (R) 是什么意思?你真的在这个命令中输入了尖括号吗?
  • 嗨,Kate,我使用 来表示“您的应用程序池名称”,但留下了一个合法的应用程序池名称。在 IIS 管理器 -> 应用程序池中,您需要匹配名称,包括空格。我做的最后一个是“IIS AppPool\ClientName_CompanyName - Intranet”。 :(R) 在这种情况下是授予读取访问权限。您还可以使用 F(完全)、M(修改)、RX(读取+执行)和 W(只写)。
  • 您实际上可以通过 Windows Server 2008 R2 中属性中的证券选项卡进行分配,因此您不需要此解决方法。确保在对象类型和位置上选择了内置安全主体。
  • 此答案对我有效。所选答案对我无效。
  • 另请参阅 [link]serverfault.com/questions/81165/… 选择答案的原始响应 对于普通的 Windows Server 2008(或 Datacenter 版本),您几乎必须使用命令行来获取应用程序池帐户安全对话框。一旦它在那里,您就可以管理它,更改权限级别,子目录等。还要考虑:“icacls”c:\ yourdirectory“/t /grant“IIS AppPool\DefaultAppPool”:(OI)(CI)(R)“OI - 对象继承,CI 容器继承。
【解决方案5】:

A 部分:配置应用程序池

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

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

  2. 在“身份”下方几行,您应该会找到“加载用户配置文件”。此值应设置为“True”。

B 部分:配置您的网站

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

C 部分:配置文件夹

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

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

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

【讨论】:

  • 你是丛林之王!谢谢
  • 为什么要“共享”文件夹?无需“分享”它。这是一个安全风险,只需更改“安全”选项卡下的权限即可。
  • IIS AppPool\MyAppPool 是我所需要的。谢谢!
【解决方案6】:

乔恩·亚当斯的最佳答案

这是 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

【讨论】:

  • 向网站的物理路径添加完全控制会为要由 Web 应用程序更改或创建的文件打开一个攻击向量。我建议只授予读取和执行权限。只允许明确写入特定的子文件夹,最好不要将文件写入网站的物理路径。
【解决方案7】:

更令人困惑的是,(Windows 资源管理器)有效权限对话框不适用于这些登录。 我有一个使用直通身份验证的站点“Umbo4”,并查看了站点根文件夹中用户的有效权限。 Check Names 测试解析了名称“IIS AppPool\Umbo4”,但 Effective Permissions 显示用户对文件夹没有任何权限(所有复选框均未选中)。

然后,我使用 Explorer 安全选项卡从文件夹中明确排除了该用户。 正如预期的那样,这导致站点因 HTTP 500.19 错误而失败。然而,有效权限看起来与以前完全相同。

【讨论】:

    【解决方案8】:

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

    戴夫

    【讨论】:

      猜你喜欢
      • 2013-09-16
      • 2012-09-14
      • 2015-10-10
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2011-08-19
      相关资源
      最近更新 更多