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


350

我最近在尝试使用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

除了其他答案,请注意,加密文件系统(EFS)也可能会干扰IIS。
G-Wiz

我现在做了这则广告,本地主机要求输入密码,距离我能工作的地方最近了。谢谢
Paul Ledger

1
对我来说,没有IIS_IUSR,我做了验证的用户相同的,它的工作
巴努•尔斯基

Answers:


542

你的web.config中没有问题。您的网站正在运行。在iis中,您可以定义该进程的身份。的身份,你的网站的应用程序池运行作为(网络服务,本地系统等),应有权访问和读取web.config文件。

更新:

更新后的答案与上述相同,但更长,更简单,也有所改进。

首先:您无需在配置文件中进行任何更改。没关系。问题出在Windows文件权限上

发生此问题的原因是您的应用程序无法访问读取web.config文件。

使该文件可供IIS_IUSRS组访问。只需右键单击web.config并单击“ 属性”,在“ 安全性”选项卡下,添加IIS_IUSRS

那么IIS_IUSRS是什么呢?

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

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

因此,当您说IIS_IUSRS时,它表示您的网站正在以其运行的任何用户网络服务,本地系统等)。

就像@Seph下面的注释中提到的:如果您的计算机在域中,请记住IIS_IUSRS组是本地组。另外,请确保在尝试查找此用户时,应将其设置为本地计算机而不是公司域。


79
对于其他用户,值得指出的是,默认值通常是IIS_IUSRS,并确保当您尝试查找该用户时,应将其设置为本地计算机而不是公司域。
Seph 2012年

3
好的答案,这是另一个提示-在域中的Win7上运行IIS7,如果尝试使用“检查名称...”查找,则可能在本地组中找不到IIS_IUSRS。不用担心-只需完整键入IIS_IUSRS并单击OK,一切都会好起来。
八位大师

2
如果您有用于站点路径的共享驱动器怎么办?这有效果吗?您如何使用共享驱动器来完成这项工作?
凯文(Kevin)

2
我必须为此做IUSR。IIS_IUSRS由于某些原因对我不起作用。
2014年

13
在尝试解决了该线程中正在讨论的错误之后,尝试从IIS 7开始从头开始安装新的ASP.Net网站时,您可能会遇到授权错误“ HTTP错误401.3-未经授权”,这是下一个障碍。要解决此问题,如果您启用了匿名身份验证,则可以将匿名用户身份从“ IUSR”(由IIS设置为默认值)更改为应用程序池身份。若要获取此设置的编辑窗口,请使用IIS功能视图中“操作”窗格中的“编辑”操作,以获取“身份验证” IIS功能。
RBT

71

我在web.config文件上出现了相同的权限问题。
但是,我的问题是由于IIS无法加载配置文件引起的,因为它包含URL重写规则,并且我没有在新服务器上安装IIS URL重写模块。

解决方案:安装重写模块。
希望可以节省一些时间。


对。我在此之前使用的以前的服务器将non ssl路由重写为ssl ..如此之多,都是来自IIS的错误消息。error::) +1因为不需要某人链接而没有使用https,所以我将URL重写为HTTPS而不是要求SSL。真是个难题。
Piotr Kula 2014年

谢谢!!!忙了几个小时的权限,最终归结为这!
卡尔·伍德豪斯

如何安装IIS URL重写模块?
B. Clay Shannon

2
这也是我的问题-谢谢!要安装重写模块,请从此页面下载:iis.net/downloads/microsoft/url-rewrite 关闭IIS,安装并重新启动IIS(为安全起见)。
泰勒·福赛斯

2
@ B.ClayShannon使用Web平台安装程序,搜索IIS Rewrite
enorl76 '17

64

编者注:这样做的答案是 危险!LocalSystem帐户是一个...

完全受信任的帐户,而不是管理员帐户。此帐户无法在一个盒子上做任何事情,并且它有权像计算机一样访问网络(这需要Active Directory并向计算机帐户授予某些权限)


将标识从ApplicationPoolIdentity更改为LocalSystem完成了工作;)。

我在IIS 7.5中使用win7 64

有关IIS 7.5和Win 7中的应用程序池标识的更多信息

在此处输入图片说明


IIS 6的有用答案。:如何更改应用程序池标识在微软的网站上找到这里更多信息microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/...
曼努埃尔·阿尔瓦雷斯

22
由于您正在授予此服务访问权限,因此进行此更改会带来安全风险:msdn.microsoft.com/en-us/library/windows/desktop/…–
WhiteKnight

这似乎是我在这里遇到的问题,将App Pool Identity更改为LocalSystem的过程如上所述!
瓦西里大厅

21
由于留在服务器上的巨大安全漏洞,对此不赞成。您永远不要在本地系统帐户下运行面向公众的服务,例如IIS !!!基本上,您是将密钥移交给可以入侵服务器的任何人。认真不要这样做。
Dimesio

5
OMG这个答案太不安全了。需要适度干预。这是一个可怕的想法。想象一下在querystring上指定的任何文件访问...繁荣...任何人都可以读取web.config,IIS会很乐意将其提供给全世界。请勿使用此答案。
enorl76

47

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

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

  1. 右键单击父文件夹(丢失了权限的文件夹),
  2. 属性=>安全=>在“组或用户名:”中,
  3. 点击编辑...
  4. 将打开“文件夹权限”窗口。
  5. 在“组或用户名:”中,按ADD ... btn,
  6. 输入Authen,然后按Check Names,
  7. 您将看到完整的组名“ Authenticated Users
  8. 按确定=>应用。
  9. 这应该再次启用特权。

那对我有用。


2
这对我有用。这应该是公认的答案。我尝试了其他方法,但它们不起作用。
GunWanderer '17

1
尝试过所有其他解决方案,直到此解决方案才起作用。
jenna_3108

1
好吧,我想我有一个解释,为什么这个工程。一些开发人员在C:\ ie C:\Dev或处托管其代码C:\Code。安全组Authenticated Users在上被授予C:\ 并传播到子文件夹。但是,在C:\Users文件夹中,该传播停止了。因此,像我这样将代码托管在home文件夹中的开发人员必须授予Authenticated Users对这些IIS根文件夹的访问权限,以便IIS能够正常工作。
科林

当我单击检查名称时,它会询问我凭据。我不确定这里需要哪些用户凭据。有人可以帮忙吗?
RSB

18

您无需在web.config中进行任何更改。

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


1
我有一个类似的问题。如果没有人找到IIS_IUSRS用户,请检查位置。我的默认域名是公司域名,因此我没有立即找到它,因为我忘记了查看它的位置。
jgreep 2011年

@Mystere Man我有同样的问题。我更改了权限,然后尝试了。我仍然遇到相同的错误。:(
Rauf

“(或任何文件)”对我有用,仅允许IIS_IUSRS帐户访问web.config是不够的,我需要启用它才能访问站点中的所有文件。
Tuyen Nguyen

2
我必须为此做IUSR。IIS_IUSRS对我不起作用。
2014年

谢谢。我已向“所有人”授予对Web应用程序文件夹的完全许可,并且它可以正常工作。
Minh Nguyen

16

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

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


+1好提示。接受的答案是好的,但是忽略了您可能需要在“ IIS_IUSRS”前面添加计算机名称的问题,这正是我无法做到的。
拉尔夫·拉维尔

这个(“组不可用时”)寄予了我很大的希望,但是即使我在计算机名之前添加了名称(“ IBM-TAMMYFAYEBAKER.platypus.local \ IIS_IUSRS”),我仍然遇到相同的错误。我也尝试使用完整的计算机名称,但它甚至不接受作为有效用户。
B. Clay Shannon'3

15

转到父文件夹,右键单击并选择“ 属性”。选择安全性选项卡,编辑权限,然后添加。单击“ 高级”和“ 立即查找”。选择IIS_IUSRS并单击确定确定一次。确保您已选中Write。点击OK确定一次。

任务完成!


19
当需要阅读时,推荐写访问权限到底是什么?/ downvoted
TristanK

2
我唯一的IIS *是IIS_WPG
B. Clay Shannon,

1
@ B.ClayShannon我也是。我只有IIS_WPG
《财富》杂志

13

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

在此处输入图片说明


在哪里可以找到此界面?

在Web应用程序的“功能视图”选项卡中:身份验证
卡洛斯,

如果没有此答案,则此答案应为已接受答案的一部分,否则,您还需要在网站文件夹的访问列表
Laurent S.

7

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


如果您具有完全访问权限,但仍然出现错误,则这是正确的答案(y)。
Vasil Valchev '18 -10-16


4

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


3

公认的解决方案对我来说不是。我使用一个Git存储库并将其克隆到以下文件夹

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

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

仅当我将以下权限授予“用户”组并继承了对web.config的权限时,它才开始工作。可能应该仅将其应用到web.config上以减少攻击表面积。

用户人数


情况完全一样。这有帮助。
罗默

2

只有在授予该用户对包含web.config的文件夹的读取访问权限后,我们才能在apppool中运行一个具有特定标识的网站。在添加具有读取权限的“所有人”用户之后,我们对此进行了跟踪,并且一切正常。



2

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



2

IIS应用程序虚拟目录物理路径包含正斜杠/而不是反斜杠时,这发生在我们身上\。在我们的持续交付过程中,这是意外地使用用于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>

1
就我而言,物理路径具有双反斜线,例如C:\inetpub\MySite\\MyService。将其更改为单个反斜杠有效
Ben Anderson

2

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

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

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



2

如果您的应用程序在虚拟目录中,并且文件的路径是映射的驱动器,则会发生这种情况。

如果将文件的路径更改为本地驱动器,则可以解决此问题,如果确实存在问题。


2

给出的所有答案都是有效的,并且可以在不同情况下使用。

对我来说,重新启动Visual Studio是可行的。


1

上面的答案很有帮助,但万一这对任何人都有帮助-我遇到了这个确切的问题,原来我(Windows网络)正在共享托管站点的根文件夹。我们取消了该共享,并向用户添加了读取/执行权限,该共享再次正常运行。

我怀疑份额弄乱了。


0

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


0

虚拟应用程序存在此问题。设置了所有权限。IIS_IUSRS,AppPoolIdentity,然后授予对所有人的完全访问权限。没事。重新启动了apppool,站点和IIS,但没有成功。

删除了虚拟应用程序,然后从头开始再次添加它,它开始工作。

希望我知道解决的办法。



0

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

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


0

我遇到了同样的问题,并做了这里写的所有内容作为答案之后,仍然可以复制。问题的下半部分是在“打开或关闭Windows功能”下关闭.NET的事实。


0

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

就我而言,这就是原因。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.