由于权限不足,无法读取配置文件

Posted

技术标签:

【中文标题】由于权限不足,无法读取配置文件【英文标题】:Cannot read configuration file due to insufficient permissions 【发布时间】:2011-08-02 16:26:57 【问题描述】:

我最近在尝试使用 IIS 托管我的 asp.net 站点时遇到了错误。我找到了一个很多人都信誓旦旦的解决方案。

解决方案:

    添加对文件夹中的文件具有读取权限的 IIS_IUSRS 将 IIS 身份验证方法更改为 BasicAuthentication 刷新网站。它会起作用的

(http://vivekthangaswamy.blogspot.com/2009/07/aspnet-website-cannot-read.html)

但是,我应该在 web.config 文件中添加什么?我以前从来没有编辑过它。这是它的当前内容:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
 <system.web>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    </system.web>
</configuration>

我的错误是:

配置错误:由于权限不足而无法读取配置文件 配置文件:\?\C:\Users*****\Documents\Visual Studio2010\WebSites\PointsForTime\web.config

【问题讨论】:

请参阅安装重写模块。为自己节省几个小时 我的解决方案是从以管理员权限打开的命令行运行命令。为此,找到命令提示符,右键单击它,然后单击以管理员权限运行。 除了其他答案,请注意加密文件系统 (EFS) 也会干扰 IIS。 我做了这个广告,现在本地主机要求输入密码,到目前为止,我离这个工作最近,谢谢 对我来说,没有 IIS_IUSR,我对 Authenticated User 也做了同样的事情,它确实有效 【参考方案1】:

您无需更改 web.config 中的任何内容。

问题在于文件系统权限。您的文件权限不允许 IIS_IUSRS 用户访问 web.config(或者可能是任何文件)。在 Windows 中更改他们的文件权限以允许 IIS_IUSRS 帐户访问它。

【讨论】:

我遇到了类似的问题。如果有人找不到 IIS_IUSRS 用户,请检查位置。我的默认是公司域,所以我没有马上找到它,因为我忘了检查它在哪里找。 @Mystere Man 我也有同样的问题。我更改了权限,然后尝试。我仍然得到同样的错误。 :( "(或者可能是任何文件)" 对我有用,允许 IIS_IUSRS 帐户访问 web.config 是不够的,我需要使其能够访问站点中的所有文件有帮助。 我必须为 IUSR 做这件事。 IIS_IUSRS 对我不起作用。 谢谢。我已授予“所有人”对 Web 应用文件夹的完全权限,并且它可以正常工作。【参考方案2】:

您的 web.config 没有问题。您的网站在一个进程下运行。在 iis 中,您可以定义该进程的身份。您网站的应用程序池所运行的身份网络服务、本地系统等)应具有访问和读取网络的权限.config 文件。

更新:

这个更新后的答案与上面的相同,但更长、更简单并有所改进。

首先:您不必更改配置文件中的任何内容。 没关系。问题在于 Windows 文件权限

出现此问题是因为您的应用程序无法访问读取 web.config 文件。

使 IIS_IUSRS 组可以访问该文件。只需右键单击 web.config 并单击 properties,在 security 选项卡下,添加 IIS_IUSRS

那么这个 IIS_IUSRS 是什么东西?

您的网站就像一个exe文件。就像任何 exe 文件一样,它应该由用户启动,并根据分配给该用户的权限运行。

当您的网站在 IIS 中启动时,您网站的应用程序池会与用户网络服务、本地系统,等等...)(并且可以在 IIS 中更改)

所以当您说 IIS_IUSRS 时,它意味着您的网站任何用户网络服务、本地系统等...)正在运行。

正如 @Seph下面的评论中提到的:如果您的计算机在域中,请记住IIS_IUSRS 组是一个本地组。 还要确保在您尝试查找此用户时检查应将其设置为本地计算机而不是公司域的位置。

【讨论】:

对于其他人来说,值得指出的是默认值通常是IIS_IUSRS,并确保当您尝试查找此用户时,请检查它应该设置为本地计算机而不是公司域名。 好答案,还有一个额外的提示 - 在域中的 Win7 上运行 IIS7,如果您尝试使用“检查名称...”进行查找,您可能无法在本地组中找到 IIS_IUSRS。不用担心 - 只需完整输入 IIS_IUSRS 并点击 OK,一切都会好起来的。 如果您有一个用于站点路径的共享驱动器怎么办?这有影响吗?您如何使用共享云端硬盘进行这项工作? 我必须为 IUSR 做这件事。由于某种原因,IIS_IUSRS 对我不起作用。 在尝试在 IIS 7 中从头开始设置新的 ASP.Net 网站时,一旦您修复了此线程中讨论的错误,您可能会遇到授权错误“HTTP Error 401.3 - Unauthorized”,如你的下一个障碍。要解决此问题,如果您启用了匿名身份验证,请将匿名用户身份从“IUSR”(由 IIS 设置为默认设置)更改为应用程序池身份。要获取此设置的编辑窗口,请使用“身份验证”IIS 功能的 IIS 功能视图中“操作”窗格中的“编辑”操作。【参考方案3】:

由于某种原因,您的 web.config 被设置为只读。取消选中 web.config 文件的只读选项。

【讨论】:

如果您的权限是完全访问权限但仍然出现错误,这是正确答案 (y)。【参考方案4】:

转到父文件夹,右键单击并选择属性。选择安全标签,编辑权限并添加。点击高级立即查找。选择 IIS_IUSRS 并再次点击 OKOK。确保您勾选了Write。再次点击OKOK

任务完成!

【讨论】:

在只需要读取的情况下推荐写入访问权限到底是什么? /否决 我唯一的 IIS* 是 IIS_WPG @B.ClayShannon 我也是。我只有 IIS_WPG【参考方案5】:

我在 web.config 文件上似乎遇到了相同的权限问题。

但是,我的问题是由于 IIS 无法加载配置文件,因为它包含 URL 重写规则,并且我没有在新服务器上安装 IIS URL 重写模块。

解决方案是安装重写模块。

【讨论】:

是的。我使用它的上一个服务器重写了到 ssl 的非 ssl 路由。对于来自 IIS 的一个很好的错误消息来说非常重要。 error: :) +1 因为不需要 SSL,我将 URL 重写为 HTTPS,以防有人在没有 https 的情况下链接。真是个难题。 谢谢!!!几个小时以来一直在玩弄权限,最终还是这样! 如何安装 IIS URL 重写模块? 这也是我的问题——谢谢!要安装重写模块,请从以下页面下载:iis.net/downloads/microsoft/url-rewrite 关闭 IIS,安装,重新启动 IIS(为了安全起见)。 @B.ClayShannon 使用 Web Platform Installer,搜索 IIS Rewrite【参考方案6】:

我使用 subst 创建了从 D: 到 C: 的映射,以便与团队中的其他开发人员保持相同的设置。这也给了我与描述相同的错误。删除它为我修复了它。

【讨论】:

【参考方案7】:

编者注:按照这个答案的建议做:“将身份更改为 LocalSystem”DANGEROUS! LocalSystem 帐户是一个 ...

完全受信任的帐户,比管理员帐户更重要。单机上没有什么是这个账号不能做的,它有权作为机器访问网络(这需要Active Directory并授予机器账号对某事的权限)


将身份从 ApplicationPoolIdentity 更改为 LocalSystem 完成了工作;)。

我正在使用带有 IIS 7.5 的 win7 64

更多关于 Application Pool Identity in IIS 7.5 and win 7

【讨论】:

对 IIS 6 也很有用。在此处的 Microsoft 网站上找到有关如何更改应用程序池标识的更多信息:microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/… 进行此更改存在安全风险,因为您授予此服务的访问权限:msdn.microsoft.com/en-us/library/windows/desktop/… 由于服务器上留下了巨大的安全漏洞,对此投了反对票。您永远不应该在本地系统帐户下运行 IIS 等面向公众的服务!!!!您基本上是将王国的钥匙交给任何可以破解服务器的人。真的不要这样做。 OMG 这个答案对于安全性来说太不正确了。需要适度干预。这是一个可怕的想法。想象一下在查询字符串中指定的任何文件访问...繁荣...任何人都可以阅读 web.config 并且 IIS 将很高兴地将其提供给世界。不要使用这个答案。 这个答案的作者真的应该考虑删除它。【参考方案8】:

我需要向 IUSR 添加权限(除了 ISS-IUSRS,正如其他人所建议的那样)。 (也可以看看: http://codeasp.net/blogs/raghav_khunger/microsoft-net/2099/iis-7-5-windows-7-http-error-401-3-unauthorized)

【讨论】:

【参考方案9】:

我们在 apppool 中有一个以特定身份运行的网站,只有在授予该用户对包含 web.config 的文件夹的读取权限后,它才能工作。 我们在添加具有 read 的“每个人”用户后对此进行了跟踪,并且一切正常。

【讨论】:

【参考方案10】:

我也收到“由于权限不足而无法读取配置文件”。原来 IIS 中针对 ASP.NET 4.0 32 位和 64 位的 ISAPI 和 CGI​​ 限制设置为拒绝。将它们都标记为允许解决了我的问题。

【讨论】:

【参考方案11】:

对我来说,在本地计算机上调试期间出现的错误与基础 web.config 有关,该基础 web.config 在编译网站时由 .NET Framework 启动。我的 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config 文件有一个无法识别的元素(folderLevelBuildProviders)。修复此问题修复了 500.19 错误。

看到这个:IIS Manager can't configure .NET Compilation on .NET 4 Applications

【讨论】:

【参考方案12】:

将流程模型标识更改为 LocalSystem 为我解决了这个问题。如果您右键单击应用程序池并选择“高级设置”,您可以找到此设置。我正在运行 IIS 7.5。

【讨论】:

【参考方案13】:

当您向 IIS_IUSRS 授予权限时,您应该检查您的 Web 应用程序的 IIS/Authentication 部分,匿名身份验证凭据使用应用程序池标识而不是 IUSR。

【讨论】:

这个界面在哪里可以得到? 在 Web 应用程序的“功能视图”选项卡中:身份验证 这个答案应该是接受的答案的一部分,因为没有这个你还需要在网站文件夹的访问列表中添加 IUSR【参考方案14】:

虚拟应用程序出现此问题。所有权限都设置好了。 IIS_IUSRS、AppPoolIdentity 然后授予每个人完全访问权限。没有任何效果。重新启动了应用程序池、站点和 IIS,但不行。

删除了虚拟应用程序并从头开始重新添加它并开始工作。

希望我知道是什么解决了它。

【讨论】:

【参考方案15】:

检查文件是否未标记为只读,尽管有 IIS_IUSRS 权限,它仍会显示相同的消息。

【讨论】:

【参考方案16】:

我收到此错误消息,原来是由于我的物理文件夹位于网络驱动器上,而不是本地驱动器上。默认情况下,此类驱动器的权限似乎可能不同。例如,虽然本地驱动器位置向本地计算机的用户授予权限,但网络位置却没有。

此外,接受的答案不适用于这种情况。本地用户或 IIS 用户不可分配权限。解决方案是将物理文件夹移动到本地驱动器。

【讨论】:

【参考方案17】:

当我尝试与其他用户共享站点根文件夹时,我遇到了同样的问题。某些文件夹失去了权限。 因此,我按照 Afshin Gh 的建议按照步骤向 IIS_IUSRS 组添加权限。 问题是这个组对我不可用。我正在使用 Windows 7。

我所做的只是改变了一些步骤:

    右键单击父文件夹(失去权限), 属性 => 安全 =>在“组或用户名:”中, 点击编辑... 将打开“文件夹权限”窗口。 在“组或用户名:”中按 ADD... btn, 输入 Authen 并按检查名称, 您将看到完整的组名称“Authenticated Users” 按确定 => 申请。 这应该会再次启用权限。

这对我有用。

【讨论】:

好的,我想我已经解释了为什么这行得通。一些开发人员在C:\ 上托管他们的代码,即C:\DevC:\Code 等。在C:\ 上授予安全组Authenticated Users 并传播到子文件夹。但是,在 C:\Users 文件夹中,此传播将停止。因此,像我这样将代码托管在主文件夹中的开发人员必须向那些 IIS 根文件夹授予对 Authenticated Users 的访问权限才能使 IIS 正常工作。 当我单击检查名称时,它会询问我的凭据。我不确定这里需要哪些用户凭据。有人可以帮忙吗?【参考方案18】:

使 IIS_IUSRS 组可以访问该文件。右键单击您的 web.config,展开属性,然后在安全选项卡下,添加 IIS_IUSRS。授予组读/写访问权限。

当组可用时,将 IIS_IUSRS 替换为 ComputerName\IIS_IUSRS

【讨论】:

+1 好提示。接受的答案很好,但忽略了您可能需要在“IIS_IUSRS”前面添加您的计算机名称,这让我通过了这个。 这(“当该组不可用时”)让我寄予厚望,但即使我在计算机名称前面添加了(“IBM-TAMMYFAYEBAKER.platypus.local\IIS_IUSRS”),我仍然得到相同的结果错误。我也尝试了完整的计算机名称,但它甚至不接受它作为有效用户。【参考方案19】:

我遇到了同样的问题,在做了这里写的所有东西作为答案之后,它仍然重现。 问题的后半部分是在“打开或关闭 Windows 功能”下关闭了 .NET

【讨论】:

【参考方案20】:

就我而言,我试图从映射驱动器 (subst) 托管页面。 问题是 subst 是在我的帐户下运行的,而 IIS 用户无法看到相同的驱动器

【讨论】:

【参考方案21】:

右键单击 Web.Config => Tab Security => Button Edit => Button Add => Button Advanced => Button Find Now => 在搜索结果中选择您的组(在我们的例子中为“IIS_IUSRS”)=> Ok =>好的=>好的

【讨论】:

【参考方案22】:

IIS 应用程序 有一个 Virtual Directory 和一个 Physical Path 包含正斜杠 / 而不是反斜杠 \。这是在我们的持续交付过程中使用 IIS 的 powershell 管理 API 意外完成的。

错误配置示例 - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite/MyService" />
</application>

确保physicalPath 属性不包含正斜杠/,仅包含反斜杠\

更正的配置示例 - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite\MyService" />
</application>

【讨论】:

在我的例子中,物理路径有一个双反斜杠,例如C:\inetpub\MySite\\MyService。将其更改为单个反斜杠有效【参考方案23】:

有时,如果它是一个新服务器,您需要在 IIS 上配置或安装 ASP.NET 功能,以便它能够读取您的 web.config 文件。

就我而言,这就是原因。

【讨论】:

【参考方案24】:

我已通过为应用程序池用户 (WIN SERVER 2008 R2) 添加对文件夹的读取权限来解决此问题: C:\Windows\System32\inetsrv\config

一点背景: 我们的服务器已使用经典错误被黑客入侵,其中应用用户拥有应有的更多权限(本地管理员)。

为了解决这个问题,我们创建了新的域用户,该用户仅对应用程序文件夹具有权限,并拥有所需的最低权限,并将其分配为应用程序池用户。比我们遇到的问题,这是我们问题的解决方案。

【讨论】:

【参考方案25】:

将您的项目转移到 C 以外的其他驱动器: 为我工作但同样的错误。

【讨论】:

【参考方案26】:

我授予了权限并使用了 ICACLS.exe,但没有工作。然后我更改了物理路径,它成功了。

(IIS 8.5 windows 2012 R2)

【讨论】:

【参考方案27】:

接受的解决方案不适合我。我使用了一个 Git 存储库,它克隆到了以下文件夹

c:\users\myusername\source\repos\myWebSite

我创建了新的 IIS 网站并将其指向路径。哪个没有接受的解决方案中建议的 iis_iusrs 权限。当我添加权限时,它仍然不起作用。

只有当我向“用户”组授予以下权限并且继承将权限级联到 web.config 时,它才开始工作。可能应该将其仅应用于 web.config 以减少攻击面。

【讨论】:

有完全相同的情况。这有帮助。【参考方案28】:

当然,这是权限问题。我采取了以下步骤,它对我有用。

    在左下角选择您的网站或应用程序。在大多数情况下,它会位于默认网站下。 在 IIS Manager 7 或更高版本中点击右上角的基本设置。 点击连接为按钮。 使用“特定用户”,点击设置按钮。 输入您的用户名和密码。比如域\用户名。对我来说就像 ABC\rrajkumar,输入密码。 重新启动 IIS,浏览您的网站。它现在应该可以工作了。

【讨论】:

【参考方案29】:
    转到 IIS,(站点) 右键单击站点内的项目。enter image description here

然后点击编辑权限。

    去安检。

    点击编辑按钮。

    点击添加按钮。输入 COMPUTER_NAME\IIS_USERS

    点击前进。

    点击立即查找按钮。

    并且有选项可供选择。 选择 IIS_USERS 并单击确定...确定....确定 .

【讨论】:

【参考方案30】:

我遇到了同样的问题,但这些解决方案都不适合我。我在事件查看器中不断收到相同的错误和一个关于“无法开始监视更改”的错误。

唯一可行的方法是复制文件夹并将其重命名。它一定是 IIS/ASP.NET 无法访问的 Windows 中损坏的文件夹。

【讨论】:

以上是关于由于权限不足,无法读取配置文件的主要内容,如果未能解决你的问题,请参考以下文章

IIS.由于权限不足而无法读取配置文件的解决办法

IIS------Http错误:50019,由于权限不足无法读取配置文件

win7 web开发遇到的问题-由于权限不足而无法读取配置文件,无法访问请求的页面

appcmd.exe 权限不足,无法读取配置文件

在网上下载了一个ASP源代码;结果浏览时;“配置错误 由于权限不足而无法读取配置文件” 错误代码0x800700

IIS7下由于权限不足,导致没法读取配置文件,引发的错误