ChatGPT解决这个技术问题 Extra ChatGPT

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

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

请参阅安装重写模块。为自己节省几个小时
我的解决方案是从以管理员权限打开的命令行运行命令。为此,请找到命令提示符,右键单击它,然后单击以管理员权限运行。
除了其他答案,请注意加密文件系统 (EFS) 也会干扰 IIS。
我做了这个广告,现在本地主机要求输入密码,离我最近的工作谢谢
对我来说,没有 IIS_IUSR,我对 Authenticated User 做了同样的事情并且它有效

S
Sнаđошƒаӽ

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


对于其他人,值得指出的是,默认值通常是 IIS_IUSRS,并确保当您尝试查找此用户时,请检查应将其设置为本地计算机而不是公司域的位置。
好的答案,这里有一个额外的提示 - 在域中的 Win7 上运行 IIS7,如果您尝试使用“检查名称...”进行查找,您可能无法在本地组中找到 IIS_IUSRS。不用担心 - 只需完整输入 IIS_IUSRS 并点击 OK,一切都会好起来的。
如果您有一个站点路径的共享驱动器怎么办?这有影响吗?您如何使用共享驱动器进行这项工作?
我必须为IUSR做这件事。 IIS_IUSRS 出于某种原因对我不起作用。
在尝试在 IIS 7 中从头开始设置新的 ASP.Net 网站时,一旦您修复了此线程中讨论的错误,您可能会遇到授权错误“HTTP 错误 401.3 - 未经授权”作为您的下一个障碍。要解决此问题,如果您启用了匿名身份验证,请将匿名用户身份从“IUSR”(由 IIS 设置为默认设置)更改为应用程序池身份。要获取此设置的编辑窗口,请使用“身份验证”IIS 功能的 IIS 功能视图中“操作”窗格中的“编辑”操作。
T
TylerH

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

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

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


是的。我使用它的上一个服务器重写了到 ssl 的非 ssl 路由。对于来自 IIS 的一个很好的错误消息来说如此之多。 error: :) +1 因为不需要 SSL,我将 URL 重写为 HTTPS,以防有人在没有 https 的情况下链接。真是个难题。
谢谢你!!!几个小时以来一直在玩弄权限,最终还是这样!
如何安装 IIS URL 重写模块?
这也是我的问题——谢谢!要安装重写模块,请从此页面下载:iis.net/downloads/microsoft/url-rewrite 关闭 IIS,安装,重新启动 IIS(只是为了安全起见)。
@B.ClayShannon 使用 Web Platform Installer,搜索 IIS Rewrite
I
IgorAlves

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

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

右键单击父文件夹(失去权限),属性=>安全=>在“组或用户名:”中,单击编辑...窗口“您的文件夹的权限”将打开。在“组或用户名:”中按添加... btn,键入 Authen 并按检查名称,您将看到完整的组名“已验证的用户”按确定 => 应用。这应该再次启用权限。

这对我有用。


好的,我想我对 为什么 这有效。一些开发人员将他们的代码托管在 C:\ C:\DevC:\Code 等处。安全组 Authenticated UsersC:\ 上被授予并传播到子文件夹。但是,在 C:\Users 文件夹中,此传播将停止。因此,像我这样在主文件夹中托管代码的开发人员必须授予对这些 IIS 根文件夹的 Authenticated Users 的访问权限,才能使 IIS 正常工作。
当我单击检查名称时,它会询问我的凭据。我不确定这里需要哪些用户凭据。有人可以帮忙吗?
M
MeSo2

编者注:按照这个答案的建议做:“将身份更改为 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 6 的有用答案也是如此。在此处的 Microsoft 网站上找到有关如何更改应用程序池标识的更多信息:microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/…
由于您授予此服务的访问权限,因此进行此更改存在安全风险:msdn.microsoft.com/en-us/library/windows/desktop/…
由于这在服务器上留下了巨大的安全漏洞,因此对此投了反对票。您永远不应该在本地系统帐户下运行 IIS 等面向公众的服务!!!!您基本上是将王国的钥匙交给任何可以破解服务器的人。认真不要这样做。
OMG 这个答案对于安全性来说太不正确了。需要适度干预。这是一个可怕的想法。想象一下在查询字符串中指定的任何文件访问......繁荣......任何人都可以阅读 web.config 并且 IIS 将很高兴地为世界提供它。不要使用这个答案。
这个答案的作者真的应该考虑删除它。
K
Kurt Van den Branden

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

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


+1 好提示。接受的答案很好,但忽略了您可能需要在“IIS_IUSRS”前面添加您的计算机名,这让我通过了这个。
这(“当该组不可用时”)让我寄予厚望,但即使我在计算机名称前面添加了(“IBM-TAMMYFAYEBAKER.platypus.local\IIS_IUSRS”),我仍然会遇到同样的错误。我也尝试了完整的计算机名称,但它甚至不接受它作为有效用户。
E
Erik Funkenbusch

您不必更改 web.config 中的任何内容。

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


我有一个类似的问题。如果有人找不到 IIS_IUSRS 用户,请检查位置。我的默认为公司域,所以我没有马上找到它,因为我忘了检查它在哪里找。
@Mystere Man 我有同样的问题。我更改了权限,然后尝试。我仍然得到同样的错误。 :(
“(或可能任何文件)”对我有用,允许 IIS_IUSRS 帐户访问 web.config 是不够的,我需要使其能够访问站点中的所有文件帮助。
我必须为IUSR做这件事。 IIS_IUSRS 对我不起作用。
谢谢。我已授予“所有人”对 Web 应用程序文件夹的完全权限,并且它可以正常工作。
C
Carlos

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

https://i.stack.imgur.com/BWPzU.png


我在哪里可以得到这个接口?
在 Web 应用程序的“功能视图”选项卡中:身份验证
这个答案应该是接受答案的一部分,因为没有这个你还需要在网站文件夹的访问列表中添加 IUSR
Q
Quinny

转到父文件夹,右键单击并选择属性。选择安全选项卡,编辑权限并添加。单击高级和立即查找。选择 IIS_IUSRS 并再次单击 OK 和 OK。确保你有检查写。单击“确定”并再次单击“确定”。

任务完成!


当只需要读取时,推荐写入访问到底是什么? /否决
我唯一的 IIS* 是 IIS_WPG
@B.ClayShannon 我也是。我只有 IIS_WPG
L
Luis

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


如果您的权限是完全访问权限但仍然出现错误,则这是正确答案 (y)。
c
coberlin

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


O
Ogglas

除了授予 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

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


我尝试为 IIS_IUSRS 和“Authenticated User”授予读取权限,但它仅在我将其提供给我的应用程序应用程序池后才有效。
S
Sniipe

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


S
SliverNinja - MSFT

当 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。将其更改为单个反斜杠有效
j
jshoaf

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


T
Talha Imam

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


T
Tom McDonald

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

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

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

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

https://i.stack.imgur.com/sM3l8.png


有完全相同的情况。这有帮助。
D
Doruk

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

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


r
rob

我们在 apppool 中有一个以特定身份运行的网站,只有在授予该用户对包含 web.config 的文件夹的读取权限后,它才能工作。我们在添加“每个人”用户后进行了跟踪,一切正常。


C
Community

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


I
Ihor Levkivskyi

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


l
ludens

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

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

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


U
UKcentric

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

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


M
Michael

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

我怀疑共享搞砸了。


E
Earl

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


g
gbs

虚拟应用程序有这个问题。所有权限都设置好了。 IIS_IUSRS、AppPoolIdentity,然后授予每个人完全访问权限。没有任何效果。重新启动了应用程序池、站点和 IIS,但不行。

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

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


S
Syed Umar Ahmed

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


K
Kat

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

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


B
Bogdan Mates

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


S
SanthoshM

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

就我而言,这就是原因。


D
Dinesh Rajan

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