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

时间:2011-04-10 23:00:44

标签: asp.net iis-7 file-permissions

我最近在尝试使用IIS托管我的asp.net网站时遇到错误。我找到了许多人发誓的解决方案。

  

解决方案:

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

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

40 个答案:

答案 0 :(得分:500)

你的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 组是本地组。 还要确保当您尝试查找此用户时,请检查应将其设置为本地计算机而非公司域的位置。

答案 1 :(得分:65)

  

编者注:这句话的答案是DANGEROUS! LocalSystem帐户是......

     
    

完全信任的帐户,比管理员帐户更多。这个帐户无法在一个盒子上执行任何操作,并且它有权作为计算机访问网络(这需要Active Directory并授予计算机帐户权限)

  

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

我在IIS 7.5中使用win7 64

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

enter image description here

答案 2 :(得分:58)

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

解决方案:安装重写模块 希望能节省几个小时。

答案 3 :(得分:31)

当我尝试与其他用户共享网站根文件夹时遇到了同样的问题。某些文件夹丢失了权限。 所以我按照Afshin Gh的建议,按照步骤添加 IIS_IUSRS 组的权限。 问题是这个小组不适合我。我正在使用Windows 7。

我做了什么我只是改变了一些步骤:

  1. 右键单击父文件夹(谁失去了权限),
  2. 属性=&gt; Security =&gt;在“组或用户名:”,
  3. 点击编辑...
  4. 窗口“您的文件夹权限”将被打开。
  5. 在“组或用户名:”中按ADD ... btn,
  6. 键入验证,然后按检查名称,
  7. 您会看到完整的群组名称“经过身份验证的用户
  8. 按ok =&gt;适用。
  9. 这应该再次启用权限。
  10. 这对我有用。

答案 4 :(得分:17)

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

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

答案 5 :(得分:14)

转到父文件夹,右键单击并选择属性。选择安全标签,修改权限并添加。点击高级立即查找。选择 IIS_IUSRS ,然后再次点击确定确定。确保选中写入。再次点击确定确定

完成工作!

答案 6 :(得分:14)

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

当该群组可用时,请将 ComputerName \ IIS_IUSRS

替换为IIS_IUSRS

答案 7 :(得分:11)

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

enter image description here

答案 8 :(得分:6)

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

答案 9 :(得分:5)

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

答案 10 :(得分:3)

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

答案 11 :(得分:2)

所有答案都是有效的,并且在不同情况下有效。

对我来说,重新启动Visual Studio有效。

答案 12 :(得分:1)

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

错误配置示例 - <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}}

答案 13 :(得分:1)

除了授予IIS_IUSRS之类的所有IIS用户访问权限之外,您还可以仅使用该站点授予对应用程序池标识的访问权限。这是Microsoft推荐的方法,可以在这里找到更多信息:

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

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

修复:

enter image description here

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

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

为用户提供所需的访问权限(默认:“读取并执行”,列出文件夹内容并读取),一切正常。

答案 14 :(得分:1)

我通过向应用程序池用户(WIN SERVER 2008 R2)的文件夹添加读取权限来解决这个问题: C:\ Windows \ System32下\ INETSRV \配置

一点背景: 我们的服务器已使用经典错误进行攻击,其中app用户拥有应该具有的更多权限(本地管理员)。

为了解决这个问题,我们创建了新的域用户,该用户只拥有应用程序文件夹的权限,具有最小所需权限并将其指定为应用程序池用户。比我们遇到的问题还要解决我们的问题。

答案 15 :(得分:1)

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

答案 16 :(得分:1)

接受的解决方案不适合我。我使用Git repo并将其克隆到以下文件夹

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

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

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

User Pemissions

答案 17 :(得分:1)

确保您的web.config文件未标记为只读

答案 18 :(得分:1)

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

如果将文件的路径更改为本地驱动器,那么如果确实存在问题,这将解决该问题。

答案 19 :(得分:1)

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

我怀疑份额弄乱了。

答案 20 :(得分:1)

我们在apppool中运行了一个具有特定身份的网站,只有在给予该用户对包含web.config的文件夹的读访问权之后才能运行。 我们在将“每个人”用户添加到阅读后跟踪了这一点,一切正常。

答案 21 :(得分:1)

对我来说,在我的本地计算机上调试期间出现了错误,并且结果与基本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

答案 22 :(得分:1)

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

答案 23 :(得分:1)

右键单击Web.Config =&gt;选项卡安全性=&gt;按钮编辑=&gt;按钮添加=&gt;按钮高级=&gt; Button Find Now =&gt;在搜索结果中选择您的组(在我们的案例中为#34; IIS_IUSRS&#34;)=&gt;好的&gt; OK =&GT;确定

答案 24 :(得分:0)

虚拟应用程序存在此问题。所有权限都已设置。 IIS_IUSRS,AppPoolIdentity然后给予Everyone完全访问权限。没有任何效果。重新启动了apppool,网站和IIS,但没有去。

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

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

答案 25 :(得分:0)

enter image description here

我将.NET CLR版本设置为“无托管代码”,一切开始正常运行。

答案 26 :(得分:0)

如果像我这样找不到IIS_USR来访问配置文件的人,只需在根文件夹中授予“所有人”的权限

答案 27 :(得分:0)

由于权限不足,我收到了#34;无法读取配置文件&#34;同样。结果显示IIS中的ISAPI和CGI限制,因为ASP.NET 4.0 32位和64位都被设置为拒绝。将它们标记为允许修复我的问题。

答案 28 :(得分:0)

我尝试了以前的大多数建议,但没有成功。我无法重新加载网站,所以我编辑了.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>

Editing .csproj file

答案 29 :(得分:0)

我当时在一个本地主机/ MyApp上运行一个网站,该网站通过Visual Studio本身创建的虚拟目录通过Visual Studio构建并运行。

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

答案 30 :(得分:0)

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

显然在我的电脑上有些东西被腐蚀了;删除IIS并重新添加它什么也没做(因为似乎没有删除IIS元数据库)。删除和重新创建应用程序池也没有任何帮助。

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

答案 31 :(得分:0)

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

唯一有效的方法是复制文件夹并重命名。它必须是Windows中IIS / ASP.NET无法访问的损坏文件夹。

答案 32 :(得分:0)

  1. 转到IIS,(网站)
  2. 右键点击网站内的项目。enter image description here
  3. 并点击修改权限。

    1. 转到安检处。

    2. 点击编辑按钮。

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

    4. 点击提前。

    5. 点击立即查找按钮。

      并且可以选择。 选择IIS_USERS并单击确定...确定....确定

答案 33 :(得分:0)

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

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

答案 34 :(得分:0)

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

答案 35 :(得分:0)

我提供了许可并使用了ICACLS.exe但没有用。然后我改变了物理路径并且它成功运行。

(IIS 8.5 windows 2012 R2)

答案 36 :(得分:0)

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

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

答案 37 :(得分:0)

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

下关闭.NET的事实

答案 38 :(得分:0)

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

就我而言,这就是原因。

答案 39 :(得分:0)

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