116

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

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

我授予文件夹中每个人的读取权限并再次尝试。然后我可以访问该页面。

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

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

4

10 回答 10

205

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

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

或者

  • 在 IIS 管理控制台中,在站点配置的身份验证部分中,通过选择“应用程序池的身份”而不是“特定用户”来修改“匿名身份验证”行。
于 2014-05-06T12:29:33.857 回答
71

这对我有用。

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

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

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

TL;博士;

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

  1. IIS 应用程序池\默认应用程序池
  2. IUSR

具有访问权限

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

而已!

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


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

在此处输入图像描述

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

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

IIS AppPool\DefaultAppPoolaccount 是新建 IIS Web 应用程序的默认 AppPool 帐户,如果您设置了自定义帐户,请使用自定义帐户。


为帐户授予以下权限:

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

在此处输入图像描述

于 2017-06-04T21:39:27.777 回答
14

由于您正在处理静态内容...

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

于 2013-11-08T23:34:17.873 回答
3

试试这个解决方案:

https://serverfault.com/questions/38222/iis-7-5-windows-7-http-error-401-3-unauthorized

还要检查运行 IIS AppPool 的用户是否具有对该文件夹/文件的读取权限。

看看这个:

http://www.iis.net/learn/manage/configuring-security/application-pool-identities

也看看这个:

http://www.iis.net/learn/get-started/planning-for-security/understanding-built-in-user-and-group-accounts-in-iis

于 2014-06-09T17:48:03.853 回答
1
  1. 创建一个新站点,右键单击站点文件夹,然后单击添加站点
  2. 输入站点名称。
  3. 选择物理路径
  4. 选择 IP 地址
  5. 更改端口
  6. 点击确定
  7. 转到应用程序池
  8. 选择站点池
  9. 右键单击高级设置
  10. 将 .Net CLR 版本更改为“无管理代码”
  11. 将身份更改为“ApplicationPoolIdentity”
  12. 转到站点主页,然后单击“身份验证”
  13. 右键单击匿名身份验证,然后单击“编辑”
  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>
于 2020-08-12T11:56:45.500 回答
1

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

于 2019-05-08T22:16:51.513 回答
0

请在 Windows 2012 R2 中启用以下项目

在此处输入图像描述

于 2019-12-30T17:28:23.347 回答
0

另一个与接收未授权有关的问题可能与 IIS 的身份验证设置中使用的提供程序有关。在我的情况下,如果我将 Windows 身份验证提供程序设置为“协商”,我就会遇到这个问题。在我选择“NTLM”选项后,访问被授予。

有关身份验证提供程序的更多信息

https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/authentication/windowsauthentication/providers/

于 2019-12-13T19:42:09.240 回答
0

如果您正在使用应用程序池身份验证(而不是 IUSR),您应该这样做,那么Jean Sun 的这个检查列表是我能找到的最好的处理 IIS 中的 401 错误的列表:


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

  1. 打开高级设置(它位于右侧的操作窗格中)。
  2. 记下应用程序池名称,然后关闭此窗口
  3. 双击身份验证图标以打开身份验证设置
  4. 禁用 Windows 身份验证
  5. 右键单击匿名身份验证,然后单击编辑
  6. 选择应用程序池标识单选按钮单击确定
  7. 从左侧的 IIS 管理器树中选择应用程序池节点,然后选择您在步骤 3 中记下的应用程序池名称
  8. 右键单击并选择高级设置
  9. 展开 Process Model 设置并从“Built-in account”下拉列表中选择 ApplicationPoolIdentity,然后单击 OK。
  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. 经常被忽视并且很少在网络上提及。

于 2020-01-10T10:38:48.457 回答