我们最近升级到 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
ApplicationPoolIdentity 实际上是在 IIS7+ 中使用的最佳实践。它是一个动态创建的非特权帐户。要为特定应用程序池添加文件系统安全性,请参阅 IIS.net's "Application Pool Identities"。快速版本:
如果应用程序池名为“DefaultAppPool”(如果名称不同,只需替换下面的此文本)
打开 Windows 资源管理器 选择一个文件或目录。右键单击文件并选择“属性” 选择“安全”选项卡 单击“编辑”,然后单击“添加”按钮 单击“位置”按钮并确保选择本地计算机。 (如果服务器属于一个,则不是 Windows 域。)在“输入要选择的对象名称:”文本框中输入“IIS AppPool\DefaultAppPool”。 (不要忘记将此处的“DefaultAppPool”更改为您为应用程序池命名的任何名称。)单击“检查名称”按钮,然后单击“确定”。
解析名称时记得使用服务器的本地名称,而不是域名
IIS AppPool\DefaultAppPool
https://i.stack.imgur.com/eTsyl.png
hostname
,或者右键单击文件资源管理器中的“我的电脑”图标并选择“属性”,它应该在那里列出。
cmd /c start chrome /new-window www.google.com
之类的命令或执行带有路径的 chrome bin
对于 IIS 默认配置,授予对 IIS AppPool\YourAppPoolName 用户的访问权限可能还不够。
就我而言,我仍然遇到错误 HTTP 错误 401.3 - 添加 AppPool 用户后未经授权,并且仅在向 IUSR 用户添加权限后才修复。
这是必要的,因为默认情况下,匿名访问是使用 IUSR 完成的。您可以设置另一个特定用户,即应用程序池或继续使用 IUSR,但不要忘记设置适当的权限。
https://i.stack.imgur.com/Woroc.png
此答案的功劳:HTTP Error 401.3 - Unauthorized
在 Windows Server 2008(r2) 上,您无法通过“属性”->“安全”将应用程序池标识分配给文件夹。您可以使用以下命令通过管理员命令提示符执行此操作:
icacls "c:\yourdirectory" /t /grant "IIS AppPool\DefaultAppPool":(R)
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”用户授予所有或尽可能多的权限。选中“替换所有子对象权限...”并应用并关闭。
您现在应该可以使用浏览网站了
乔恩亚当斯的最佳答案
这是为 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
只是为了增加混乱,(Windows 资源管理器)有效权限对话框不适用于这些登录。我有一个使用直通身份验证的站点“Umbo4”,并查看了站点根文件夹中用户的有效权限。 Check Names 测试解析了名称“IIS AppPool\Umbo4”,但 Effective Permissions 显示用户对文件夹完全没有权限(所有复选框均未选中)。
然后,我使用 Explorer 安全选项卡从文件夹中明确排除了该用户。正如预期的那样,这导致站点因 HTTP 500.19 错误而失败。然而,有效权限看起来和以前一模一样。
我通过简单地创建一个名为 IUSER 的新用户并使用密码将其添加到网络服务和用户组来解决了我所有的 asp.net 问题。然后创建您的所有虚拟站点和应用程序,使用其密码将身份验证设置为 IUSER.. 设置高级文件访问权限以包括 IUSER 和 BAM 它修复了至少 3-4 个问题,包括这个问题..
戴夫
IIS AppPool\silverchip.co.uk
。不过,我还没有尝试过安全名称中的句点——您可能希望将其更改为不带标点符号的名称。enable load user profile
设置为true
。只有在这个设置之后,我才能运行应用程序。因此,请更新您的说明并添加第 9 点。