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

我最近遇到了一个错误,试图用IIS托管我的asp.net站点。我找到了一个很多人信誓旦旦的解决办法。

解决方案:

  1. 对文件夹中的文件添加具有读权限的IIS_IUSRS
  2. 修改IIS认证方式为BasicAuthentication
  3. 刷新网站。会有用的

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

我在我的网里加了什么?配置文件?我以前从来没编辑过。以下是其当前内容:

<?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>

我的错误是:

Config Error: Cannot read configuration file due to insufficient permissions .
.

Config Error:不能读取配置文件 配置文件:\?用户* * * * * \ C: \ \ \ PointsForTime \ web . config文件\视觉Studio2010 \网站< / p >

718201 次浏览

你不需要改变你的web.config中的任何东西。

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

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

< em >更新:< / em >

这个更新后的答案和上面的一样,但更长、更简单、更完善。

首先:你不需要改变配置文件中的任何东西。没关系。问题出在Windows文件权限上。

出现此问题是因为您的应用程序不能访问阅读web . config文件。

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

这个IIS_IUSRS是什么?

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

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

所以当你说IIS_IUSRS,这意味着你的网站运行的任何用户 (网络服务,本地系统,等. ...)。

正如下面的评论: 如果您的计算机在某个域上中提到的< em > @Seph < / em >,记住IIS_IUSRS组是一个本地组。 另外,当你试图找到这个用户时,检查它的位置应该设置为本地计算机,而不是公司域

出于某种原因,你的网。Config设置为只读。取消选中web的只读选项。配置文件。

转到父文件夹,右键单击并选择属性。选择安全选项卡,编辑权限和添加。单击先进的找到现在。选择IIS_IUSRS,再次单击好吧好吧。确保你检查了。再次单击好吧好吧

完成工作!

我有什么似乎是相同的权限问题在web.config文件。

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

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

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

做这个答案所暗示的:“change Identity to localsystem”;< >强危险< / >强!LocalSystem帐户是一个…

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


将标识符从ApplicationPoolIdentity更改为LocalSystem即可;)。

我使用的是win7 64和IIS 7.5

< p > iis7.5和win7中的应用程序池标识 < / p >

enter image description here

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

我们在apppool中使用特定的身份运行一个网站,只有在给予该用户对包含web的文件夹的读访问权之后。配置会起作用。 我们在添加'everyone'用户read后追踪到这一点,一切工作正常

我也收到了“由于权限不足而无法读取配置文件”的提示。结果是IIS中的ISAPI和CGI限制。NET 4.0 32位和64位被设置为拒绝。把它们都标记为允许修正了我的问题。

对我来说,在我的本地机器上调试时出现了这个错误,结果证明与基础web有关。config,它是由. net框架在编译网站时启动的。我的C:\Windows\ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web。配置文件有一个无法识别的元素(folderLevelBuildProviders)。修复此修复了500.19错误。

看这个:IIS管理器不能在。net 4应用程序上配置。net编译

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

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

enter image description here

虚拟应用程序出现此问题。所有权限都设置好了。 IIS_IUSRS, AppPoolIdentity,然后给Everyone完全的访问权。毫无效果。

.重新启动应用程序,站点和IIS,但是没有启动

删除虚拟应用程序并重新添加它,然后它开始工作。

真希望我知道是什么解决了这个问题。

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

我有这个错误消息,原来是由于我的物理文件夹位于网络驱动器,而不是本地驱动器。在默认情况下,这些驱动器上的权限似乎是不同的。例如,虽然本地驱动器位置为本地计算机的用户提供了权限,但网络位置却没有。

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

当我试图与另一个用户共享站点根文件夹时,我遇到了同样的问题。某些文件夹失去权限。 所以我按照Afshin Gh的建议,按照步骤添加权限到IIS_IUSRS组。 问题是这个小组不适合我。

.

.

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

  1. 右键单击父文件夹(失去权限的人),
  2. 属性=>安全=>在“组或用户名:”中,
  3. 单击Edit……
  4. 将打开“权限文件夹”窗口。
  5. 在“组或用户名:”中按ADD…btn,
  6. 输入Authen并按“检查名称”,
  7. 您将看到完整的组名“通过身份验证的用户
  8. 按ok =>应用。
  9. 这将再次启用特权。

这对我很管用。

使IIS_IUSRS组可以访问该文件。右键点击你的网页。展开属性,在“security”页签下添加“IIS_IUSRS”。给予组读/写权限。

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

我有同样的问题,在做了所有写在这里的东西作为答案后,它仍然复制。 问题的第二部分是。net在“打开或关闭Windows功能”

下被关闭

在我的例子中,我试图从映射驱动器(subst)承载页面。 问题是subst是在我的帐户下运行的,IIS用户无法看到相同的驱动器

右击Web。Config =>选项卡安全=>按钮编辑=>按钮添加=>按钮高级=>按钮立即查找=>在搜索结果中选择您的组(在我们的例子中是“IIS_IUSRS”)=> Ok=> Ok=> Ok

IIS应用程序虚拟目录物理路径包含正斜杠/而不是反斜杠时,就会发生这种情况。这是在我们的持续交付过程中使用IIS的powershell管理API意外完成的。

错误配置示例- applicationHost.config . conf

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

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

修正的配置示例- applicationHost.config . Config . Config

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

有时如果它是一个新的服务器,你需要配置或安装ASP。IIS上的NET特性,使它能够读取您的web。配置文件。

对我来说,这就是原因。

我已经通过为应用程序池用户(WIN SERVER 2008 R2)添加读权限来解决这个问题: C:\Windows\System32\inetsrv\配置< / p > 一个小背景: 我们的服务器被使用经典错误入侵,应用程序用户拥有更多的权限(本地管理员)

为了解决这个问题,我们创建了一个新的域用户,它只对应用程序文件夹有权限,并将其分配为应用程序池用户。然后我们遇到了问题,这是我们问题的解决方案。

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

我给了许可,并使用ICACLS.exe,但没有工作。然后我改变了物理路径,它成功地工作了。

(IIS 8.5 windows 2012 R2)

公认的解决方案并不适合我。我使用一个Git回购,它克隆到下面的文件夹

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

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

当我给'Users'组以下权限和继承级联权限web.config时,它才开始工作。也许应该把它只用在网络上。配置减少攻击表面积。

User Pemissions

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

  1. 在左上角选择你的网站或应用程序。在大多数情况下,它将在默认网站之下。
  2. 在iismanager 7或以上版本的右上角单击基本设置
  3. 点击连接,按钮。
  4. 使用“特定的用户”,点击设置按钮。
  5. 输入用户名和密码。像域\用户名。对我来说就像 ABC\rrajkumar,输入密码。
  6. 重启IIS,浏览你的网站。现在应该可以了。

我也遇到过同样的问题,但这些解决方案都对我不起作用。我一直得到相同的错误和一个关于“未能开始监视更改”在事件查看器。

唯一有效的方法是复制文件夹并将其重命名。它一定是一个损坏的文件夹在Windows IIS/ASP。NET无法访问。

确保你的网。配置文件没有标记为只读

所有给出的答案都是有效的,并在不同的情况下工作。

对我来说,重新启动Visual Studio起作用了。

我在Windows 10上使用microsoftaccount\email@contosa.com帐户运行应用程序池时遇到了这个问题(例如,用Microsoft帐户而不是本地帐户登录PC)。

显然在我的电脑上有些东西损坏了;删除IIS并重新添加它没有任何作用(因为IIS元数据库似乎没有被删除)。删除和重新创建应用程序池也无济于事。

我的解决方案是创建一个新的应用程序池,使用相同的设置,但名称不同。这为我解决了问题;显然,有些东西已经损坏了与appool,即使删除它,重新添加它与相同的名称不会修复。

我在localhost/MyApp上运行一个网站,通过Visual Studio自己创建的虚拟目录构建和运行。

我的“解决方案”是删除虚拟目录,让Visual Studio重新创建它。

如果应用程序位于虚拟目录中,而文件的路径是映射驱动器,就会发生这种情况。

如果您将文件的路径更改到本地驱动器,这将解决问题,如果这确实是您的问题。

我尝试了以前的大部分建议,但都没有用。我无法重新加载网站,所以我编辑了.csproj文件并更改了端口号,它立即工作了:

 <WebProjectProperties>
<UseIIS>True</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>**4000**</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:**4000**/</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>

正在编辑.csproj文件 .

上面的答案很有帮助,但如果这对任何人都有帮助的话——我有一个确切的问题,结果是我(windows网络)共享了站点托管的根文件夹。我们终止了共享,并添加了用户权限来读取/执行,它再次工作得很好。

我怀疑是股票搞砸了。

enter image description here

我将. net CLR版本设置为No Managed Code,一切都开始正常工作。

不是像IIS_IUSRS那样给所有的IIS用户访问,你也可以使用站点只给应用程序池标识访问。这是微软推荐的方法,更多信息可以在这里找到:

https://support.microsoft.com/en-za/help/4466942/understanding-identities-in-iis

https://learn.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities

解决办法:

enter image description here

首先查看上面的配置文件参数,以确定需要访问的位置。在这种情况下,整个publish文件夹都需要访问。右键单击文件夹,选择属性,然后选择Security选项卡。

enter image description here

单击Edit...,然后单击Add...

现在看看Internet信息服务(IIS)管理器和应用程序池:

enter image description here

在我的例子中,我的站点在LocalTest应用程序池下运行,然后我输入名称IIS AppPool\LocalTest

enter image description here

Check Names,应该会找到用户。

enter image description here

给予用户所需的访问权限(默认值:读取&执行,列出文件夹内容和读取),一切都应该工作。

在某些情况下,网络。配置文件格式不正确。 打开网络。

.配置并粘贴如下代码

<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>