如何强制不在IIS 7+中使用模拟?

时间:2011-01-12 16:02:03

标签: iis-7 impersonation

我正在尝试强制我的Web应用程序作为AppPool用户(Domain \ UserForApp)完全运行,并且我在IIS中正确设置了设置并且一切正常并且“System.Security.Principal.WindowsIdentity.GetCurrent()。” “返回正确的”Domain \ UserForApp“。

但是,当我尝试将我的网络应用程序目录的权限限制为所需的简单:

  • SYSTEM(完全访问)
  • 我(完全访问)
  • 管理员(完全访问权限)
  • UserForApp(阅读)

我无法再加载任何静态文件。所以我下载了Process Monitor来找出原因并且每当它试图访问一个静态文件时,我都会收到以下错误:

ACCESS DENIED:
Desired Access:     Generic Read
Disposition:        Open
Options:            Sequential Access, No Buffering
Attributes:         RE
ShareMode:          Read, Write, Delete
AllocationSize:     n/a
Impersonating:      NT AUTHORITY\IUSR

正如您从上面所看到的那样,IUSR没有权限,所以这是正确的,但我只是不明白为什么它试图模仿无论如何。在我的web.config文件中,我有:

<location path="" overrideMode="Deny">
    <system.web>
        <identity impersonate="false" />
    </system.web>
</location>

只是为了确保没有人打开模仿,但它没有效果。

它在Classic和Pipelined模式下都不起作用,但错误略有不同。在查看图像时,它只显示一个HTTP Error 401.3 - Unauthorized页面,当使用Pipelined时,它会重定向到登录站点。

1 个答案:

答案 0 :(得分:2)

如果您不希望该网站以应用程序池的身份运行,那么您需要:

<location path="my_site">
     <system.webServer>
         <security>
             <authentication>
                 <anonymousAuthentication userName="" />
             </authentication>
         </security>
    </system.webServer>
</location>

您可以通过以下操作在applicationHost.config文件(可能是最佳位置)中进行设置:

APPCMD.exe set config "my_site" -section:system.webServer/security/authentication/anonymousAuthentication /username:"" /commit:apphost