ChatGPT解决这个技术问题 Extra ChatGPT

IIS7 权限概述 - ApplicationPoolIdentity

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

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

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

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

https://i.stack.imgur.com/K89uH.png

请参阅 AppPool 图像:

https://i.stack.imgur.com/70AHp.png

其实微软关于这件事的资料非常好Application Pool Identities

J
Jon Adams

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

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

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


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

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

IIS AppPool\DefaultAppPool

https://i.stack.imgur.com/eTsyl.png


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

对于 IIS 默认配置,授予对 IIS AppPool\YourAppPoolName 用户的访问权限可能还不够。

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

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

https://i.stack.imgur.com/Woroc.png

此答案的功劳:HTTP Error 401.3 - Unauthorized


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

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

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

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

A 部分:配置应用程序池

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

向下滚动到“身份”。尝试编辑该值将弹出一个对话框。选择“内置帐户”并在其下选择“ApplicationPoolIdentity”。在“身份”下方几行,您应该找到“加载用户配置文件”。此值应设置为“真”。

B 部分:配置您的网站

网站名称:SiteName(仅举例) 物理路径:C:\Whatever(仅举例) Connect as... : Application User (pass-through authentication) (以上设置可在站点的“基本设置”中找到在 IIS 管理器中)配置基本设置后,在站点主控制台的“IIS”下查找“身份验证”配置。打开它。您应该会看到“匿名身份验证”选项。确保它已启用。然后右键单击并“编辑...”它。选择“应用程序池标识”。

C 部分:配置文件夹

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

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

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


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

乔恩亚当斯的最佳答案

这是为 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 应用程序更改或创建的文件打开一个攻击向量。我建议只授予读取和执行权限。只允许明确写入特定的子文件夹,最好不要将文件写入网站的物理路径。
S
StuartN

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

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


D
David Granic

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

戴夫