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

Fre*_*nöw 329 asp.net iis-7 file-permissions

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

解:

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

(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>
Run Code Online (Sandbox Code Playgroud)

我的错误是:

配置错误:由于权限不足,无法读取配置文件
配置文件:\?\ C:\ Users*****\Documents\Visual Studio2010\WebSites\PointsForTime\web.config

Afs*_* Gh 521

你的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",并确保当您尝试查找此用户时,请检查应将其设置为本地计算机而非公司域的位置. (77认同)
  • 虽然试图建立从头开始一个新的ASP.Net网站在IIS 7日起,一旦你有固定在这个线程可能会面临一个授权错误"HTTP错误401.3 - 未授权"正在讨论的误差为你的下一个障碍.要解决此问题,如果已启用匿名身份验证,请将匿名用户身份从"IUSR"(由IIS设置为默认值)更改为应用程序池标识.要获取此设置的编辑窗口,请使用IIS功能视图中"操作"窗格中的"编辑"操作,以获取"身份验证"IIS功能. (13认同)
  • 为了消除混淆,组名是"IIS_IUSRS" (3认同)
  • 很好的答案,这里有一个额外的提示 - 在域中的Win7上运行IIS7,如果您尝试使用"检查名称...",您可能在本地组中找不到IIS_IUSRS.别担心 - 只需输入完整的IIS_IUSRS并点击OK,一切都会好的. (3认同)
  • 如果您有一个站点路径的共享驱动器怎么办?这会产生影响吗?如何使用共享驱动器工作? (2认同)
  • 我必须为 IUSR 这样做。IIS_IUSRS 出于某种原因对我不起作用。 (2认同)

Jar*_*rod 63

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

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

  • 谢谢 - 我已经搞好了几天的权限,这解决了它. (4认同)
  • 这也是我的问题-谢谢!要安装重写模块,请从此页面下载:https://www.iis.net/downloads/microsoft/url-rewrite关闭IIS,安装并重新启动IIS(为安全起见)。 (2认同)
  • @B.ClayShannon 使用 Web Platform Installer,搜索 IIS Rewrite (2认同)

amd*_*amd 62

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

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


将标识从ApplicationPoolIdentity更改为LocalSystem完成了工作;).

我在IIS 7.5中使用win7 64

有关IIS 7.5和win 7中的应用程序池标识的更多信息

在此输入图像描述

  • 由于您授予此服务的访问权限,因此进行此更改存在安全风险:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684190%28v=vs.85%29.aspx (22认同)
  • 由于安全漏洞存在于服务器上,因此对此进行了投票.您永远不应该在本地系统帐户下运行IIS等公共服务!对于任何可以破解服务器的人来说,你基本上都是将密钥交给王国.说真的不要这样做. (21认同)
  • OMG这个答案对于安全性来说是不正确的.需要适度干预.这是一个可怕的想法.想象一下在查询字符串上指定的任何文件访问...繁荣...任何人都可以阅读web.config并且IIS将很乐意为世界提供服务.不要使用这个答案. (5认同)

zwi*_*ion 41

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

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

  1. 右键单击父文件夹(谁失去了权限),
  2. Properties => Security =>在"组或用户名:"中,
  3. 点击编辑...
  4. 窗口"您的文件夹的权限"将被打开.
  5. 在"组或用户名:"中按ADD ... btn,
  6. 键入Authen并按Check Names,
  7. 您将看到完整的组名称" Authenticated Users "
  8. 按ok => apply.
  9. 这应该再次启用权限.

这对我有用.

  • 好吧,我想我对*为什么*这有效有一个解释。一些开发人员将其代码托管在“C:\”,即“C:\Dev”或“C:\Code”等。安全组“Authenticated Users”在“C:\”上授予并传播到子文件夹。但是,在“C:\Users”文件夹中,此传播停止。因此,像我这样在主文件夹中托管代码的开发人员必须向这些 IIS 根文件夹授予“经过身份验证的用户”访问权限,以便 IIS 正常工作。 (3认同)
  • 这对我有用。这应该是公认的答案。我尝试了其他方法,但它们不起作用。 (2认同)

Eri*_*sch 17

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

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

  • 我该怎么做? (3认同)
  • 我不得不为IUSR做这件事.IIS_IUSRS对我不起作用. (2认同)

Kur*_*den 15

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

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

  • +1 好提示。接受的答案很好,但忽略了您可能需要在“IIS_IUSRS”前面添加您的计算机名称,这就是让我过去的原因。 (2认同)

小智 14

转到父文件夹,右键单击并选择" 属性".选择" 安全"选项卡,编辑权限并添加.单击" 高级"和" 立即查找".选择IIS_IUSRS并单击确定确定一次.请确保您有检查.点击OK确定一次.

任务完成!

  • 当Read是所需要的时候,建议使用Write访问权限究竟是什么?/ downvoted (19认同)
  • 我唯一的IIS*是IIS_WPG (2认同)

Car*_*los 11

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

在此输入图像描述


小智 6

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


Ogg*_*las 6

IIS_IUSRS您也可以仅向使用该站点的应用程序池标识授予访问权限,而不是向所有 IIS 用户授予访问权限。这是 Microsoft 推荐的方法,可以在此处找到更多信息:

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

使固定:

在此输入图像描述

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

在此输入图像描述

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

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

在此输入图像描述

就我而言,我的网站在 LocalTest 应用程序池下运行,然后我输入名称IIS AppPool\LocalTest

在此输入图像描述

按一下Check Names,应该会找到用户。

在此输入图像描述

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


小智 5

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