提问



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



  解:

  
  

      
  1. 为文件夹
  2. 中的文件添加具有读取权限的IIS_IUSRS
      
  3. 将IIS身份验证方法更改为BasicAuthentication

  4.   
  5. 刷新网站。它会起作用

  6.   



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


但是我要将哪些内容添加到我的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


最佳参考


您的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



  编者按:做这个答案说的是危险!LocalSystem帐号是......

  
  

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

  






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


我在IIS 7.5中使用win7 64


更多关于
IIS 7.5中的应用程序池标识和win 7 [11]




其它参考2


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

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


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

希望能节省几个小时。

其它参考3


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


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



  1. 右键单击父文件夹(谁失去了权限),

  2. 属性=>安全性=>在组或用户名:,

  3. 点击修改...

  4. 窗口您的文件夹权限将被打开。

  5. 在组或用户名:中按ADD ... btn,

  6. 键入验证,然后按检查名称,

  7. 您会看到完整的群组名称经过身份验证的用户

  8. 按ok => apply。

  9. 这应该再次启用权限。



这对我有用。

其它参考4


你不必在web.config中改变任何东西。


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

其它参考5


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


任务完成!

其它参考6


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


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

其它参考7


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




其它参考8


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

其它参考9


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

其它参考10


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

其它参考11


我们在apppool中运行了一个具有特定身份的网站,只有在为该用户提供对包含web.config的文件夹的读访问权之后才有效。
我们在使用read添加everyone用户后跟踪了这一点,一切正常。

其它参考12


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


请参阅:IIS管理器无法在.NET 4应用程序上配置.NET编译

其它参考13


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

其它参考14


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

其它参考15


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>

其它参考16


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


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


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

其它参考17


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

其它参考18


接受的解决方案对我来说没有。我使用Git repo并将其克隆到以下文件夹中


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


我创建了新的IIS网站并指出了它的路径。哪个没有在接受的解决方案中建议的iis_iusrs权限。当我添加权限时,它仍然无法正常工作。


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


[14]

其它参考19


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

其它参考20


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

其它参考21


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


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


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

其它参考22


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

其它参考23


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


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

其它参考24


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

其它参考25


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


在我的情况下,这就是原因。

其它参考26


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

其它参考27


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


(IIS 8.5 windows 2012 R2)

其它参考28


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



  1. 在左下角选择您的网站或应用程序。在大多数情况下,它将位于默认网站

  2. 点击IIS Manager 7或更高版本右上角的基本设置

  3. 点击连接为按钮。

  4. 使用特定用户,点击设置按钮。

  5. 输入您的用户名和密码。比如域名\\用户名。对我来说就像
    ABC \\ rrajkumar,输入密码。

  6. 重启IIS,浏览您的网站。它应该现在可以工作。


其它参考29



  1. 转到IIS,(网站)

  2. 右键单击sites.enter图像说明中的项目
    这里



并点击编辑权限。[15]



  1. 转到安检。

  2. 点击编辑按钮。

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


    要么

  4. 点击提前。

  5. 点击立即查找按钮。


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