繁体   English   中英

IIS - 401.3 - 未经授权

[英]IIS - 401.3 - Unauthorized

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

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

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

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

为什么会发生这种情况? 解决问题的正确方法是什么?

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

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

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

这对我有用。

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

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

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

TL; 博士;

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

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

具有访问权限

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

就是这样!

请继续阅读以获取更详细的解释...


  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

在此处输入图片说明

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

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

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

  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>

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

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

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

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

在此处输入图片说明

如果您正在使用应用程序池身份验证(而不是 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. 经常被忽视并且在网络上很少提及。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM