我最近负责修复运行 IIS 6.0 的 Windows Server 2003 服务器,该服务器出现以下问题:
HTTP Error 401.3 - Unauthorized: Access is denied due to an ACL set on the requested resource.
Windows 更新补丁后它开始给出这些响应kb2633880已应用,这似乎已经改变了 IUSR_Machine 帐户和 .Net 框架目录的一些默认权限。
问题是,所有对 asp.net 资源的请求(例如 .aspx)均不起作用,而其他所有资源(例如文本、html)均起作用。该应用程序设置为使用 IUSR_machine 帐户和应用程序池帐户的网络服务来处理匿名请求。
我确认网络服务帐户可以C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
正常访问该目录,但 IUSR_machine 帐户不能。授予 IUSR_machine 帐户访问该C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
目录的权限后,问题得到解决。这对我来说似乎很奇怪。
我的问题是,为什么 IIS 不使用我的应用程序池 (网络服务) 的帐户来加载 aspnet_isapi.dll?从上面的故障排除来看,很明显它实际上是使用 IUSR_machine 来实现这一点,这似乎是一个安全漏洞。web.config 中的身份标记也未设置,因此这是默认设置。
我将非常感激任何关于此事的建议,谢谢。
答案1
我无法说出您的期望,但几乎每个系统或 .Net DLL 的默认设置都是让用户具有读取权限。
Aspnet_ISAPI 既是一个过滤器,又是一个扩展,因此可以通过 W3WP 启动(作为应用程序池帐户)加载,或者通过访问脚本映射文件(脚本映射实际上在执行工作的用户上下文中运行 DLL,正如您所期望的那样)来加载。