IIS-401.3-未经授权


92

我正在尝试开始使用IIS。我在IIS管理器上创建了一个新站点,将其映射到文件系统上的文件夹,并将index.html添加到该文件夹​​。我已将此站点的端口设置为85。当我尝试访问时http://localhost:85/index.html,出现以下错误消息:

401.3-无权限-由于Web服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面。

我授予了该文件夹上所有人的读取权限,然后重试。然后,我可以访问该页面。

然后,我将文件夹的属性与wwwroot的属性进行了比较。我发现wwwroot在IIS_IUSRS上具有读取权限...当我在文件夹上执行相同操作并再次尝试时,我再次遇到上述错误。我检查了默认情况下启用了匿名访问,但是仍然出现此错误。

为什么会这样?解决问题的正确方法是什么?

Answers:


168

我在同一问题上奋斗了几天。可以通过修改站点映射到的文件系统文件夹的安全用户访问属性来解决。但是IIS_IUSRS不是您必须授权的唯一帐户。

  • 在IIS管理控制台中,在站点配置的“身份验证”部分中,修改“匿名身份验证”行,并检查设置为“特定用户”的帐户(我的帐户为IUSR)。
  • 将站点文件夹上的读取和执行权限授予作为特定用户列出的帐户。

要么

  • 在IIS管理控制台中,在网站配置的“身份验证”部分中,通过选择“应用程序池的身份”而不是“特定用户”来修改“匿名身份验证”行。

6
我发现带有“应用程序池标识”的匿名身份验证可以正常工作,但是由于某种原因无法与IUSR一起使用。谢谢。
fortboise 2014年

5
背后的逻辑是,默认情况下,站点使用匿名身份验证,而IUSR是匿名帐户。因此,IIS使用IUSR帐户来访问文件系统(网站物理路径),该文件系统可能无法始终工作(因为许多文件系统将不接受IUSR)。这就是401.3的原因。通过更改文件系统访问权限(授予该帐户访问文件权限)或将匿名帐户更改为池标识(池标识位于IIS_IUSRS中,通常可以访问文件),IIS应该具有足够的权限来访问文件。
Lex Li

58

这对我有用。

  1. 将应用程序池标识设置为可以分配文件夹权限的帐户。
  2. 确保已向源目录和所有相关文件授予对分配给应用程序池标识属性的帐户的文件的读取权限
  3. 在IIS的服务器根节点上,将匿名用户设置为从应用程序池标识继承。(这是我努力的一部分)

要将服务器匿名设置为从应用程序池标识继承,请执行以下操作。

  • 打开IIS管理器(inetmgr)
  • 在左侧窗格中,选择根节点(服务器主机名)
  • 在中间窗格中,打开“身份验证”小程序
  • 突出显示“匿名身份验证”
  • 在右侧窗格中,选择“编辑...”(应打开一个对话框)
  • 选择“应用程序池标识”

9
#3)解决我的问题:在IIS的服务器根节点上,将匿名用户设置为从应用程序池标识继承。(这是我苦苦挣扎的部分)
拉维·拉姆

我知道您不应该写“谢谢”评论,但是我觉得我需要表达我的谢意。我没有办法解决这个问题。
强尼·库克

@RaviRam:请解释您遵循的步骤。作为初学者逐步进行。您的意思是“ n IIS,在服务器根节点上,将匿名用户设置为从应用程序池标识继承。”请提供帮助。
坚不可摧的

@RaviRam-运行命令“ inetmgr.exe”,然后将显示IIS管理屏幕。由此,按照我的答案中概述的步骤进行操作。您可能需要以管理员身份运行命令。 msdn.microsoft.com/zh-CN/library/bb763170.aspx
barrypicker

如另一个答案中所述,我发现您不必在根级别上更改匿名身份验证设置-您也可以在站点或虚拟目录级别上更改该设置
jaycer

15

TL; DR;

在大多数情况下,授予对以下一个或多个帐户的访问权限就足够了:

  1. IIS AppPool \ DefaultAppPool
  2. 研究所

具有访问权限

  1. 读取并执行
  2. 列出文件夹内容

而已!

继续阅读以获取更详细的说明...


  1. 打开IIS并选择您的应用程序
  2. 在右侧单击Authentication
  3. 在此处选择“ 匿名身份验证 ”。
  4. 弹出以下对话框。

在此处输入图片说明

根据上图所选择的内容,授予对Web应用程序文件夹的ACL的访问权限:

  • 特定用户:为两个用户授予访问权限IUSR(在我的情况下)+IIS AppPool\DefaultAppPool
  • 应用程序池标识IIS AppPool\DefaultAppPool仅授予访问权限

IIS AppPool\DefaultAppPool 该帐户是新IIS Web应用程序的默认AppPool帐户,如果已设置自定义帐户,请使用该自定义帐户。


为该帐户授予以下权限:

  1. Read & Execute
  2. List folder contents
  3. Read

在此处输入图片说明


13

由于您要处理静态内容...

在充当网站根目录的文件夹上-如果右键单击>属性>安全,列表中是否显示“用户”?如果未单击“添加...”并键入,请确保完成后单击“应用”。



1

以防万一其他人遇到这个问题。我对所有这些步骤进行了故障排除,结果是因为我从MAC解压缩了某些文件,Microsoft却没有任何通知就自动将其加密了。经过数小时的尝试设置文件夹权限,我走进去,看到文件名是绿色的,这意味着文件已加密,即使文件夹权限正确,IIS也会抛出相同的错误。


在这个完全相同的问题上花了太多时间。只是在这里表示同情。我最终在这里搜索IIS并访问EFS,但是您的回答使我陷入了问题的根本原因-来自Mac的扩展zip文件。我的特定情况是一个问题,其中在IIS上托管的ASP.NET Core无法启动-没有事件日志消息,没有stdout日志等。通过本地主机访问会给出一条错误消息,表明web.config无效但没有显示源。显然文件是可访问的,但无法读取内容。
亚伦

1
  1. 创建一个新站点,右键单击“站点”文件夹,然后单击“添加站点”
  2. 输入站点名称。
  3. 选择物理路径
  4. 选择IP地址
  5. 更改端口
  6. 点击确定
  7. 转到应用程序池
  8. 选择站点池
  9. 用鼠标右键单击单击高级设置
  10. 将.Net CLR版本更改为“无管理代码”
  11. 将标识更改为“ ApplicationPoolIdentity”
  12. 转到网站主页,然后单击“身份验证”
  13. 右键单击到AnonymousAuthentication,然后单击“编辑”
  14. 选择应用程序池标识
  15. 点击确定
  16. 繁荣!

对于路由添加一个web.config

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="React Routes" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>



0

如果您应该使用应用程序池身份验证(而不是IUSR),那么让·孙的检查清单是我发现的处理IIS中401错误的最佳方法:


打开IIS管理器,导航到您的网站或将网站部署到的应用程序文件夹。

  1. 打开“高级设置”(位于右侧的“操作”窗格中)。
  2. 记下应用程序池名称,然后关闭此窗口
  3. 双击身份验证图标以打开身份验证设置
  4. 禁用Windows身份验证
  5. 右键单击“匿名身​​份验证”,然后单击“编辑”。
  6. 选择“应用程序池标识”单选按钮,然后单击“确定”。
  7. 从左侧的IIS管理器树中选择“应用程序池”节点,然后选择在步骤3中记下的“应用程序池”名称
  8. 右键单击并选择高级设置
  9. 展开“过程模型”设置,然后从“内置帐户”下拉列表中选择ApplicationPoolIdentity,然后单击“确定”。
  10. 再次单击确定以保存和关闭“应用程序池”高级设置页面
  11. 打开管理员命令行(右键单击CMD图标,然后选择“以管理员身份运行”。它将在开始菜单中的某个位置,可能在“附件”下。
  12. 运行以下命令:

    icacls <path_to_site> /grant "IIS APPPOOL\<app_pool_name>"(CI)(OI)(M)
    

    例如:

    icacls C:\inetpub\wwwroot\mysite\ /grant "IIS APPPOOL\DEFAULTAPPPOOL":(CI)(OI)(M)
    

特别是步骤5和6.通常经常被忽略,并且在网络上很少提及。

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.