【问题标题】:Web.Config - Cannot read configuration file due to insufficient permissionsWeb.Config - 由于权限不足,无法读取配置文件
【发布时间】:2012-10-04 16:06:45
【问题描述】:

我收到错误:

Module  IIS Web Core
Notification    Unknown
Handler Not yet determined
Error Code  0x80070005
Config Error    Cannot read configuration file due to insufficient permissions
Config File \\?\C:\inetpub\wwwroot\web.config

文件本身对 IUSR 具有完全权限。 IIS 在 ApplicationPoolIdentity 下运行其应用程序池。我对文件做了一个文件监视器,我看到了这个:

9:04:43.8035456 AM  w3wp.exe    8104    CreateFile  C:\inetpub\wwwroot\Web.config   ACCESS DENIED   Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, AllocationSize: n/a

不知道为什么会出现此错误...有什么想法吗?

【问题讨论】:

    标签: asp.net windows iis acl


    【解决方案1】:

    尝试将这些帐户的读/写权限授予您的 Web 应用程序的根文件夹以及其中的所有文件/子文件夹:

    网络、网络服务,当然还有 IIS_IUSRS

    【讨论】:

    • 我认为您的意思是 IUSR(而不是 IIS_IUSRS)
    • 取决于您的 windows/iis 安装。 IIS7+ 是 IIS_IUSRS(如果我没记错的话)。 IUSR 是 IIS6 的东西(如果我没记错的话)。
    • 太棒了!正是我们需要的
    • 请注意:IIS_IUSRS 用户可以添加为<your coumputer's name>\IIS_IUSRS。我天真地尝试将其添加为IIS_IUSRS,但没有成功。
    • 如果您使用 GUI 管理权限,只需键入 IIS_IUSRS 并单击 Check Names 按钮即可解析域/计算机名称前缀。
    【解决方案2】:

    我发现添加对 C:\inetpub\wwwroot 具有完全权限的 mymachine/USERS 解决了这个问题。

    问题是因为我与其他开发人员共享了 C:\inetpub\wwwroot 内的一些站点内容。这一定是更改了权限并完全破坏了我的 IIS。

    【讨论】:

    • 我为我的 wwwroot 文件夹设置了共享并开始出现此错误。这个解决方案也对我有用。
    【解决方案3】:

    首先,确保 IUSR 对配置文件具有读取权限(我相信您已经这样做了)

    然后,将 IIS 身份验证方法更改为 BasicAuthentication

    如果仍然无法正常工作,可能是 .config 扩展名未正确安装在 IIS 中。

    尝试所有 3 个!祝你好运!

    编辑:忘了问你,这是什么应用程序?

    【讨论】:

    • 它是一个 .Net Web 服务 (ASP.Net 4.0) IIS 启用了 BasicAuth 和 AnonymousAuth,并且该文件确实具有 IUSR 的读取权限。我现在将检查 .config 扩展名的 IIS 配置。
    • 我做了一个 aspnet_regiis 然后 iisreset。仍然出现同样的错误。
    • 您也可以尝试授予整个应用目录的权限吗?
    【解决方案4】:

    我刚刚遇到这个问题,无法找到作为帐户的 applicationpoolidentity 以将其添加到文件夹安全性中。我将应用程序池标识从 applicationpoolidentity 更改为 Local Service,站点运行良好。

    【讨论】:

    • 作为参考,这有安全隐患。如果您的应用程序存在缺陷,并且服务器受到威胁,则 LocalSystem 帐户基本上具有管理员权限。考虑最小特权的主体并创建一个新的受限用户。 en.m.wikipedia.org/wiki/Principle_of_least_privilege
    【解决方案5】:

    发生此 IIS 错误时,我正在将实时 WordPress 站点复制到本地计算机以进行编辑/更新。更改权限没有任何作用。

    就我而言,只需删除 web.config 即可。

    【讨论】:

      【解决方案6】:

      我今天又遇到了这个问题。这一次,无论授予多少权限都不起作用(尝试了所有常用帐户、所有人、只读、修改、完全控制)。

      关闭进程,重新启动 IIS,完全重新启动。没有结果。

      最终将所有者从“管理员”更改为我自己,事情就到位了。

      我通常在管理员级别(使用我自己的帐户)运行 Visual Studio,因为我喜欢使用本地 IIS 来托管/调试 ASP.NET 站点。也许这会导致新文件归 \Administrators 所有,而后者又可能限制 IIS 或 App Pool 进程对这些文件的访问。

      我的 DefaultAppPool 身份设置为加载用户配置文件。我不知道会话管理器在什么时候应用 UAC / 权限下降以及用户配置文件加载是否对此有任何影响。值得深思...

      【讨论】:

      • 您在最后一段中或多或少地回答了您自己的问题。如果您为应用程序池设置特定身份,则需要确保该身份具有访问文件的适当权限,但这可能会产生其他副产品问题,具体取决于您使用的 Windows 版本。例如,如果指定的身份具有登录凭据,您最终可能会要求该用户登录才能使其工作。
      • @LawrenceJohnson 本质上,但是......在这种情况下,应用程序池 拥有 文件权限。但是,我认为问题在于这些文件也归 \Administrators 组所有,该组将访问(至少在资源管理器中)限制为非提升会话。我无法找到关于此行为如何针对未登录用户 AppPoolIdentity 表现的具体参考(没有资源管理器?一般 UAC 怎么样?)。只需从所有权中替换 \Administrators 即可解决问题。
      • 嗯,很有趣。它可能是在执行此操作的机器上设置的安全策略。
      最近更新 更多