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

441

最近我在尝试使用IIS托管我的asp.net站点时遇到了一个错误。我找到了一种被许多人推崇的解决方案。

解决方案:

  1. 将IIS_IUSRS添加为具有该文件夹中文件读取权限的用户
  2. 更改IIS身份验证方法为BasicAuthentication
  3. 刷新网站,它会正常工作

(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


9
请参考安装重写模块。这将为您节省数小时的时间。 - regisbsb
我的解决方案是使用管理员权限打开的命令行运行命令。为此,请找到命令提示符,右键单击它,并单击以管理员身份运行。 - David Waddington
2
除了其他答案之外,还要注意加密文件系统(EFS)也可能会干扰IIS。 - G-Wiz
我已经完成了这个广告,现在本地主机正在要求密码,到目前为止,这是我最接近让它工作的方法,谢谢。 - Paul Ledger
2
对我来说,没有IIS_IUSR, 我对已验证的用户做了同样的操作,它起作用了。 - Bhanu Chhabra
40个回答

640

你的 web.config 没有问题。你的网站在一个进程下运行。在 IIS 中,你可以定义该进程的身份。你的网站所运行的应用程序池的身份(如 Network Services、Local System 等)需要有权限访问和读取 web.config 文件。

更新:

这个更新后的答案与上面的内容相同,但更简洁易懂且更好。

首先:你不必更改配置文件中的任何内容。没问题。问题出在 Windows 文件权限上。

这个问题出现的原因是你的应用程序无法访问读取 web.config 文件。

将文件设置为可由 IIS_IUSRS 组访问。只需右键单击 web.config,然后点击属性,在安全选项卡下,添加IIS_IUSRS

那么,IIS_IUSRS 是什么?

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

当你的站点在 IIS 中启动时,你的网站的应用程序池与一个用户(如 Network Services、Local System 等)相关联(可以在 IIS 中更改)

所以当你说 IIS_IUSRS 时,它意味着任何用户(如 Network Services、Local System 等),你的站点正在以该用户身份运行。

正如@Seph在下面的评论中所提到的如果你的电脑是在域上的,请记住IIS_IUSRS组是一个本地组。 同时,请确保当你尝试查找此用户时,检查位置应设置为本地计算机,而不是企业域。


88
值得提醒其他人的是,默认情况下通常是 IIS_IUSRS 用户,确保在查找该用户时检查其设置为本地计算机而不是企业域。 - Seph
5
好的回答,这里还有一个额外的提示 - 在域中运行Win7上的IIS7时,如果您尝试使用“检查名称”查找本地组中的IIS_IUSRS,则可能找不到。不要担心 - 只需完全键入IIS_IUSRS并单击“确定”,一切都会没问题的。 - Eight-Bit Guru
2
如果您有一个共享驱动器用于站点路径,会产生什么影响?如何使用共享驱动器使其正常工作? - Kevin
4
我不得不为IUSR做这个。由于某些原因,IIS_IUSRS对我没有起作用。 - Kind Contributor
14
在尝试在 IIS 7 或更高版本中从头设置新的 ASP.Net 网站时,一旦您修复了本讨论中讨论的错误,您可能会面临一个授权错误 "HTTP Error 401.3 - Unauthorized" 作为下一个障碍。要修复它,如果您已启用匿名身份验证,请将匿名用户身份从默认设置的 "IUSR" 更改为应用程序池身份。要获取此设置的编辑窗口,请使用 IIS 功能视图中 "身份验证" IIS 功能的操作窗格中的 "编辑" 操作。 - RBT
显示剩余23条评论

88

我在web.config文件上遇到了一个看起来相同的权限问题。

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

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


是的。我之前使用的服务器将非SSL路由重写为SSL。这就是IIS提供的优秀错误信息。错误:) +1 因为我不是要求SSL,而是在URL中重写为HTTPS,以防有人链接时没有使用https。真是个难题。 - Piotr Kula
非常感谢!我已经在权限方面纠结了几个小时,最终发现问题就出在这里! - Carl Woodhouse
如何安装IIS URL重写模块? - B. Clay Shannon-B. Crow Raven
2
这也是我的问题 - 谢谢!要安装重写模块,请从此页面下载:https://www.iis.net/downloads/microsoft/url-rewrite 关闭IIS,安装后重新启动IIS(以确保安全)。 - Tyler Forsythe
3
请使用 Web 平台安装程序,搜索 IIS Rewrite。 - enorl76
显示剩余2条评论

82

当我尝试与另一个用户共享网站根目录时,遇到了相同的问题。一些文件夹失去了权限。

所以我按照Afshin Gh建议的步骤为组添加了权限。

问题是这个组对我不可用,因为我使用的是Windows 7。

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

  1. 右键单击父文件夹(失去权限的文件夹)
  2. 属性 => 安全 => 在“组或用户名”中,
  3. 单击编辑...
  4. 窗口“您的文件夹的权限”将被打开。
  5. 在“组或用户名”中,按添加...按钮,
  6. 输入并按检查名称,
  7. 您会看到完整的组名“<已验证的用户>”
  8. 按确定 => 应用。
  9. 这应该重新启用特权。

这对我起作用了。


5
好的,我认为我有一个解释为什么这个方法可行。一些开发人员将他们的代码放在 C:\,例如 C:\DevC:\Code等目录下。安全组 Authenticated Users 被授权访问 C:\ 并向子文件夹传播。然而,在 C:\Users 文件夹中,此传播会停止。因此,像我这样将代码放在主文件夹内的开发人员必须授予 Authenticated Users 对这些IIS根文件夹的访问权限,以便IIS正常工作。 - Colin
当我点击“检查名称”时,它会要求我的凭据。我不确定这里需要哪个用户凭据。有人可以帮忙吗? - RSB

66
编辑注:执行此答案建议的操作:将标识更改为LocalSystem危险的!LocalSystem帐户是完全受信任的帐户,比管理员帐户更可信。单个计算机上没有任何东西是此帐户无法完成的,并且它有权以机器身份访问网络(这需要Active Directory并授予机器帐户对某些内容的权限)

将标识从ApplicationPoolIdentity更改为LocalSystem就解决了问题;)

我正在使用Win7 64位和IIS 7.5

了解更多信息: IIS 7.5和Win 7中的应用程序池标识

输入图像描述


28
进行此更改是一种安全风险,因为它授予了该服务的访问权限:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684190%28v=vs.85%29.aspx - WhiteKnight
26
由于这个漏洞给服务器留下了巨大的安全隐患,所以我要对此进行投票。你绝不应该使用本地系统账户来运行像IIS之类的公共服务!这就等于把王国的钥匙交给能够入侵服务器的任何人。认真地,千万别这样做。 - Dimesio
在Windows 10上使用IIS 10时遇到了相同的错误,但是这个方法解决了问题。谢谢! - Libin M
7
哦,我的天啊,这个答案在安全方面是非常错误的。需要进行调节干预。这个想法太可怕了。想象一下,在查询字符串上指定任何文件访问...嘭...任何人都可以读取web.config文件,并且IIS会乐意向世界提供它。不要使用这个答案。 - enorl76
1
这个回答的作者应该真正考虑删除它。 - David Walschots
显示剩余4条评论

22

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

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


2
+1 好建议。被接受的答案很好,但忽略了可能需要在“ IIS_IUSRS”前面添加计算机名称,这就是让我通过的方法。 - Ralph Lavelle
这个("当组不可用时")让我很有希望,但即使我在计算机名前面加上了("IBM-TAMMYFAYEBAKER.platypus.local\IIS_IUSRS"),我仍然得到相同的错误。我也尝试了完整的计算机名,但它甚至不接受它作为有效用户。 - B. Clay Shannon-B. Crow Raven

19

你不需要在web.config中做任何更改。

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


1
我曾经遇到过类似的问题。如果有人找不到IIS_IUSRS用户,请检查其位置。我的默认为公司域,因此我没有立即找到它,因为我忘记了检查它正在查找的位置。 - jgreep
@Mystere Man 我也遇到了同样的问题。我已经更改了权限,然后尝试了一下。但是仍然出现相同的错误。:( - Rauf
“(或者可能是任何文件)”对我有用,允许IIS_IUSRS帐户访问web.config是不够的,我需要启用它以访问站点中的所有文件。 - Tuyen Nguyen
5
我必须为IUSR执行此操作。对我而言,IIS_IUSRS无法正常工作。 - Kind Contributor
谢谢。我已经授予“Everyone”对Web应用程序文件夹的完全权限,并且它正常工作。 - Minh Nguyen

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

1
我可以在哪里获取这个接口? - user1108948
1
在您的Web应用程序的“特性视图”选项卡中:身份验证。 - Carlos
1
这个答案应该作为被接受的答案的一部分,因为如果没有它,您还需要将IUSR添加到网站文件夹的访问列表中。 - Laurent S.

13

前往父文件夹,右键并选择属性。选择安全选项卡,编辑权限并添加。单击高级查找。选择IIS_IUSRS并单击确定确定。确保你已经选中写入。单击确定确定

工作完成!


23
为什么会建议开通写入权限,明明只需要读取权限就可以了?/被踩 - TristanK
2
我唯一拥有的IIS*是IIS_WPG。 - B. Clay Shannon-B. Crow Raven
1
@B.ClayShannon 我也是。我只有IIS_WPG。 - Fortune

8

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


如果您的权限是完全访问,但仍然遇到错误,那么这是正确的答案(y)。 - Vasil Valchev

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接