我最近在尝试使用 IIS 托管我的 asp.net 站点时遇到了错误。我找到了许多人发誓的解决方案。
解决方案:添加对文件夹中文件具有读取权限的IIS_IUSRS 将IIS 身份验证方法更改为BasicAuthentication 刷新网站。它会工作
(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
您的 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 组是本地组。还要确保在您尝试查找此用户时检查应将其设置为本地计算机而不是公司域的位置。
我在 web.config
文件上遇到了似乎相同的权限问题。
但是,我的问题是由于 IIS 无法加载配置文件引起的,因为它包含 URL 重写规则,并且我没有在新服务器上安装 IIS URL 重写模块。
解决方案是安装重写模块。
error:
:) +1 因为不需要 SSL,我将 URL 重写为 HTTPS,以防有人在没有 https 的情况下链接。真是个难题。
当我尝试与另一个用户共享站点根文件夹时,我遇到了同样的问题。某些文件夹失去了权限。因此,我按照 Afshin Gh 的建议按照步骤向 IIS_IUSRS 组添加权限。问题是这个组对我不可用。我正在使用 Windows 7。
我所做的只是更改了一些步骤:
右键单击父文件夹(失去权限),属性=>安全=>在“组或用户名:”中,单击编辑...窗口“您的文件夹的权限”将打开。在“组或用户名:”中按添加... btn,键入 Authen 并按检查名称,您将看到完整的组名“已验证的用户”按确定 => 应用。这应该再次启用权限。
这对我有用。
C:\
即 C:\Dev
或 C:\Code
等处。安全组 Authenticated Users
在 C:\
上被授予并传播到子文件夹。但是,在 C:\Users
文件夹中,此传播将停止。因此,像我这样在主文件夹中托管代码的开发人员必须授予对这些 IIS 根文件夹的 Authenticated Users
的访问权限,才能使 IIS 正常工作。
编者注:按照这个答案的建议做:“将身份更改为 LocalSystem”是危险的! LocalSystem 帐户是一个......完全受信任的帐户,比管理员帐户更重要。单个盒子上没有什么是这个账号不能做的,它有权作为机器访问网络(这需要Active Directory并授予机器账号对某事的权限)
将身份从 ApplicationPoolIdentity 更改为 LocalSystem 完成了工作;)。
我正在使用带有 IIS 7.5 的 win7 64
关于Application Pool Identity in IIS 7.5 and win 7 的更多信息
https://i.stack.imgur.com/yeImw.png
使 IIS_IUSRS 组可以访问该文件。右键单击您的 web.config,展开属性,然后在安全选项卡下,添加 IIS_IUSRS。授予组读/写访问权限。
当组不可用时,将 IIS_IUSRS 替换为 ComputerName\IIS_IUSRS
您不必更改 web.config 中的任何内容。
问题是文件系统权限。您的文件权限不允许 IIS_IUSRS 用户访问 web.config(或者可能是任何文件)。在 Windows 中更改他们的文件权限以允许 IIS_IUSRS 帐户访问它。
当您向 IIS_IUSRS 授予权限时,您应该检查 Web 应用程序的 IIS/身份验证部分,匿名身份验证凭据使用应用程序池标识而不是 IUSR。
https://i.stack.imgur.com/BWPzU.png
转到父文件夹,右键单击并选择属性。选择安全选项卡,编辑权限并添加。单击高级和立即查找。选择 IIS_IUSRS 并再次单击 OK 和 OK。确保你有检查写。单击“确定”并再次单击“确定”。
任务完成!
出于某种原因,您的 web.config 设置为只读。取消选中 web.config 文件的只读选项。
我需要向 IUSR 添加权限(除了 ISS-IUSRS,正如其他人所建议的那样)。 (另见:http://codeasp.net/blogs/raghav_khunger/microsoft-net/2099/iis-7-5-windows-7-http-error-401-3-unauthorized)
除了授予 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
使固定:
https://i.stack.imgur.com/zAHfY.png
首先查看上面的配置文件参数以确定需要访问的位置。在这种情况下,整个 publish
文件夹都需要访问。右键单击文件夹并选择属性,然后选择安全选项卡。
https://i.stack.imgur.com/UzSJh.png
点击 Edit...
,然后点击 Add...
。
现在查看 Internet 信息服务 (IIS) 管理器和应用程序池:
https://i.stack.imgur.com/0bUx3.png
在我的情况下,我的网站在 LocalTest 应用程序池下运行,然后我输入名称 IIS AppPool\LocalTest
https://i.stack.imgur.com/V6QPw.png
按 Check Names
,应该会找到用户。
https://i.stack.imgur.com/xrRBE.png
为用户提供所需的访问权限(默认:读取和执行、列出文件夹内容和读取),一切正常。
我使用 subst 创建了从 D: 到 C: 的映射,以便与团队中的其他开发人员保持相同的设置。这也给了我与描述相同的错误。删除它为我修复了它。
当 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>
C:\inetpub\MySite\\MyService
。将其更改为单个反斜杠有效
将流程模型标识更改为 LocalSystem 为我解决了这个问题。如果您右键单击应用程序池并选择“高级设置”,您可以找到此设置。我正在运行 IIS 7.5。
将您的项目转移到 C 以外的其他驱动器:为我工作但同样的错误。
接受的解决方案不适合我。我使用 Git 存储库并将其克隆到以下文件夹
c:\users\myusername\source\repos\myWebSite
我创建了新的 IIS 网站并将其指向路径。哪个没有接受的解决方案中建议的 iis_iusrs 权限。当我添加权限时,它仍然不起作用。
当我向“用户”组授予以下权限并且继承将权限级联到 web.config 时,它才开始工作。可能应该将其仅应用于 web.config 以减少攻击面。
https://i.stack.imgur.com/sM3l8.png
给出的所有答案都是有效的,并且在不同的情况下工作。
对我来说,重新启动 Visual Studio 是有效的。
我们在 apppool 中有一个以特定身份运行的网站,只有在授予该用户对包含 web.config 的文件夹的读取权限后,它才能工作。我们在添加“每个人”用户后进行了跟踪,一切正常。
对我来说,在我的本地机器上调试期间出现了错误,结果证明与基础 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
右键单击 Web.Config => Tab Security => Button Edit => Button Add => Button Advanced => Button Find Now => 在搜索结果中选择您的组(在我们的例子中为“IIS_IUSRS”)=> Ok => Ok=>好的
我通过向应用程序池用户(WIN SERVER 2008 R2)的文件夹添加读取权限解决了这个问题:C:\Windows\System32\inetsrv\config
一点背景知识:我们的服务器已使用经典错误被黑客入侵,其中应用程序用户拥有应有的更多权限(本地管理员)。
为了解决这个问题,我们创建了新的域用户,该用户仅对应用程序文件夹具有权限,并具有所需的最低权限,并将其分配为应用程序池用户。比我们遇到的问题,这是我们问题的解决方案。
如果您的应用程序位于虚拟目录中并且文件的路径是映射驱动器,则可能会发生这种情况。
如果您将文件的路径更改为本地驱动器,这将解决它,如果这确实是您的问题。
上面的答案很有帮助,但万一这对任何人都有帮助 - 我遇到了这个确切的问题,结果我(Windows网络)共享了托管该网站的根文件夹。我们终止了共享,并添加了用户读取/执行的权限,它再次正常工作。
我怀疑共享搞砸了。
我也收到“由于权限不足而无法读取配置文件”。原来 IIS 中针对 ASP.NET 4.0 32 位和 64 位的 ISAPI 和 CGI 限制设置为拒绝。将它们都标记为允许解决了我的问题。
虚拟应用程序有这个问题。所有权限都设置好了。 IIS_IUSRS、AppPoolIdentity,然后授予每个人完全访问权限。没有任何效果。重新启动了应用程序池、站点和 IIS,但不行。
删除了虚拟应用程序并从头开始重新添加它并开始工作。
希望我知道是什么解决了它。
检查文件是否未标记为只读,尽管有 IIS_IUSRS 权限,但它会显示相同的消息。
我收到此错误消息,原来是由于我的物理文件夹位于网络驱动器而不是本地驱动器上。默认情况下,此类驱动器上的权限似乎可能不同。例如,虽然本地驱动器位置向本地计算机的用户授予权限,但网络位置却没有。
此外,接受的答案不适用于这种情况。本地用户或 IIS 用户不可分配权限。解决方案是将物理文件夹移动到本地驱动器。
我遇到了同样的问题,在做了这里写的所有东西作为答案之后,它仍然被复制了。问题的后半部分是 .NET 在“打开或关闭 Windows 功能”下关闭的事实
有时,如果它是一台新服务器,您需要在 IIS 上配置或安装 ASP.NET 功能,以便它能够读取您的 web.config 文件。
就我而言,这就是原因。
就我而言,我试图从映射驱动器(subst)托管页面。问题是 subst 是在我的帐户下运行的,并且 IIS 用户无法看到相同的驱动器
IIS_IUSRS
,并确保当您尝试查找此用户时,请检查应将其设置为本地计算机而不是公司域的位置。