尝试隔离我的 Web 应用程序时出现 IIS 7 权限问题

Posted

技术标签:

【中文标题】尝试隔离我的 Web 应用程序时出现 IIS 7 权限问题【英文标题】:IIS 7 permissions issue when trying to isolate my web application 【发布时间】:2013-10-23 20:27:38 【问题描述】:

我正在尝试为在 IIS 7 上运行的 Web 应用程序设置权限,以便其他 Web 应用程序无法访问它。

我首先将它设置为在我自己命名为 MyAppsPoolName2 的应用程序池下运行,命名为 ApplicationPoolIdentity

启用匿名身份验证并设置为使用应用程序池身份:

之后我这样配置 ACL 权限:

我的 Web 应用程序的根文件夹:“C:\inetpub\www_test1”设置了以下权限:

允许 FILE_GENERIC_READ 到 IIS AppPool\MyAppsPoolName2 拒绝 FILE_ALL_ACCESS 到 IUSR 拒绝 FILE_ALL_ACCESS 到 IIS_IUSRS

所以在 IIS 中安装并启动我的网站后,我收到以下错误:

HTTP 错误 500.19 - 内部服务器错误 无法访问请求的页面 访问,因为该页面的相关配置数据是 无效。

知道如何解决这个问题吗?

【问题讨论】:

错误信息中的web.config文件是否有你列出的权限?您能否显示 ACL 的 PowerShell 输出,例如:PS > Get-Acl C:\Inetpub\www_test1 | fl 另外,如果您删除 DENY 权限,它会起作用吗? (我相信 AppPoolIdentities 是 IIS_IUSRS 组的一部分,并且 DENY 优先于 ALLOW) @dirt:我不认为 web.config 与它有任何关系。如屏幕截图所示,它甚至无法读取。所以我不知道你会如何在 web.config 中列出这些权限?至于 powershell 输出然后我得到一个错误,Get-Process : Cannot find a process with the name "C:\Inetpub\www_test1". Verify the process name and call the cmdlet again. @dirt:是的,如果我同时删除 deny 权限,它工作得很好——但这违背了我想要实现的目的...... 你的问题;由于组拒绝条目按预期工作,appPool 无权读取您的文件(它开始通过读取您的 web.config 文件,因此该文件列在您提供的错误屏幕截图中)。您可能需要重新考虑您要完成的工作。 【参考方案1】:

我没有专门测试过这个,但我相信它会起作用。

将您的应用程序池配置为使用 AppPool 标识。更改您的匿名用户身份以使用您创建的帐户。将 web.config 的读取权限授予 AppPool 身份并拒绝访问匿名用户身份。

这应该会为您提供工作进程的进程令牌的 AppPool 身份,我相信这将在读取 web.config 文件时生效。在请求期间,匿名用户将用作拒绝访问 web.config 文件的线程令牌。

您也可以依赖 IIS 默认不会提供 web.config 文件这一事实。

【讨论】:

嗯,这就是我的想法……但正如您在上面看到的那样,它不起作用。这几乎就像一些内部进程仍在 IIS_IUSRS 组下运行。

以上是关于尝试隔离我的 Web 应用程序时出现 IIS 7 权限问题的主要内容,如果未能解决你的问题,请参考以下文章

更新在 iis 中发布的 Web 应用程序时出现 404 错误

使用 IIS 时出现多个错误

在 IIS 7.5 中托管的 Web Api 中找不到 HTTP 404 页面

在 IIS 7 中启动应用程序时出现“CS0016:无法写入输出文件”错误

为啥在 IIS 7.5 下部署 MVC 3 应用程序时出现 401.2/Access is denied 错误?

在 iis 7.0 上运行 .net framework 4.0 网站时出现问题