尝试隔离我的 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 7.5 中托管的 Web Api 中找不到 HTTP 404 页面
在 IIS 7 中启动应用程序时出现“CS0016:无法写入输出文件”错误