【问题标题】:How do I force to not use impersonation in IIS 7+?如何强制不在 IIS 7+ 中使用模拟?
【发布时间】:2011-06-07 22:34:50
【问题描述】:

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

但是,当我尝试将网络应用目录的权限限制为所需的基本权限时:

  • 系统(完全访问)
  • 我(完全访问)
  • 管理员(完全访问)
  • 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>

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

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

【问题讨论】:

    标签: iis-7 impersonation


    【解决方案1】:

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

    <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
    

    【讨论】:

    • 就是这样。我最终确实找到了这个,但我认为这只是一种解决方法。感谢您为我确认。
    • 这解决了我自过去 2 天以来所面临的问题。我运行了命令,该站点开始为我正常工作。只是想知道这些更改适用于哪个配置?
    猜你喜欢
    • 2021-03-23
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2010-12-28
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    相关资源
    最近更新 更多