Web.Config - 由于权限不足,无法读取配置文件

12

我遇到了以下错误:

Module  IIS Web Core
Notification    Unknown
Handler Not yet determined
Error Code  0x80070005
Config Error    Cannot read configuration file due to insufficient permissions
Config File \\?\C:\inetpub\wwwroot\web.config

该文件本身对IUSR拥有完全权限。IIS在ApplicationPoolIdentity下运行其应用程序池。我在文件上进行了文件监视,看到了这个:

9:04:43.8035456 AM  w3wp.exe    8104    CreateFile  C:\inetpub\wwwroot\Web.config   ACCESS DENIED   Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, AllocationSize: n/a

我不知道为什么会出现这个错误... 有任何想法吗?

6个回答

21
尝试将这些帐户赋予根目录及其所有文件/子文件夹读写权限:
NETWORK、NETWORK SERVICE 和当然是 IIS_IUSRS。

1
我认为你的意思是IUSR(而不是IIS_IUSRS)。 - Shoham
1
取决于您的Windows/IIS安装。IIS7+是IIS_IUSRS(如果我记得正确的话)。IUSR是IIS6的东西(同样是如果我记得正确的话)。 - Lawrence Johnson
太棒了!正是我们所需要的。 - Fergus
只是一个提示:可以将IIS_IUSRS用户添加为<您计算机的名称>\IIS_IUSRS。我天真地尝试将其添加为IIS_IUSRS,但它没有起作用。 - kol
如果您正在使用GUI来管理权限,只需键入IIS_IUSRS并单击“检查名称”按钮以解析域/计算机名称前缀。 - Lawrence Johnson

4
我发现将mymachine / USERS添加到C:\ inetpub \ wwwroot并给予完全权限可以修复问题。
问题的原因是我与其他开发人员共享了位于C:\ inetpub \ wwwroot内的一些站点内容。这可能会更改权限并完全破坏我的IIS。

我为我的wwwroot文件夹设置了共享,并开始出现这个错误。这个解决方案对我也起作用了。 - madmike
对我来说,只有“读取/读取和执行”权限就足够了。 - Arkane

0

我在将一个实时的WordPress网站复制到本地进行编辑/更新时,遇到了这个IIS错误。更改权限没有任何作用。

在我的情况下,简单地删除web.config就解决了问题。


0

首先,请确保IUSR在配置文件上具有读取权限(我相信您已经完成了这个步骤)

然后,将IIS身份验证方法更改为BasicAuthentication

如果仍然无法正常工作,则可能是.config扩展名未正确安装在IIS中。

尝试所有三种方法!祝你好运!

编辑:忘记问您,这是什么类型的应用程序?


这是一个 .Net Web 服务(ASP.Net 4.0)。IIS 启用了 BasicAuth 和 AnonymousAuth,文件对 IUSR 有读取权限。我现在会检查 .config 扩展名的 IIS 配置。 - Sugitime
我执行了aspnet_regiis和iisreset,但仍然出现相同的错误。 - Sugitime
你能否尝试授予整个应用目录的权限? - HOKBONG

0

我刚刚遇到了这个问题,无法找到应用程序池标识作为帐户以将其添加到文件夹安全性中。我将应用程序池标识从应用程序池标识更改为本地服务,然后网站正常运行。


2
提醒一下,这会涉及到安全问题。如果您的应用程序存在漏洞,并且服务器被攻击,LocalSystem帐户基本上具有管理员特权。请考虑最小权限原则并创建一个新的受限用户。https://en.m.wikipedia.org/wiki/Principle_of_least_privilege - Sugitime

0
今天我又遇到了这个问题。这一次,无论授权多少权限都不起作用(尝试了所有常规账户,包括everybody、只读、修改和完全控制)。
关闭进程,重新启动IIS,完全重启电脑。没有结果。
最终将所有者从“管理员”更改为自己,事情就水落石出了。
我通常以管理员级别运行Visual Studio(使用自己的帐户),因为我喜欢使用本地IIS来托管/调试ASP.NET站点。也许这导致新文件由\管理员拥有,进而可能限制了IIS或应用程序池进程对这些文件的访问。
我的DefaultAppPool身份已设置为加载用户配置文件。我不知道会话管理器何时应用UAC / 权限降低,以及用户配置文件加载是否对此有影响。值得思考...

你在最后一段差不多回答了自己的问题。如果你为应用程序池设置了特定的标识,你需要确保该标识具有访问文件的适当权限,但这可能会导致其他副作用问题,这取决于你所使用的Windows版本。如果指定的标识具有登录凭据,那么你可能需要该用户已登录才能使其工作。 - Lawrence Johnson
@LawrenceJohnson 本质上是这样的,但是在这种情况下,应用程序池已经拥有了文件的权限。然而,我认为问题在于这些文件也属于\管理员组,这会限制对非提升会话(至少在资源管理器中)的访问。我还没有找到关于这种行为如何表现在非登录用户、AppPoolIdentity(没有资源管理器?通用UAC呢?)方面的具体参考。简单地将\管理员从所有权中替换解决了问题。 - Mayyit
嗯,有趣。这可能是机器上设置的安全策略导致的。 - Lawrence Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接