代码之家  ›  专栏  ›  技术社区  ›  Anton

对临时ASP.NET文件的ApplicationPoolIdentity权限

  •  0
  • Anton  · 技术社区  · 14 年前

    在工作中,我遇到了以下情况: 我们有一个运行在WindowsServer2008 64位计算机上的Web应用程序。应用程序的applicationPool正在applicationPoolIdentity下运行,并配置为.NET 2和经典管道模式。

    直到XMLSerialization需要在MEF用于创建知识类型集合的位置创建序列化程序程序集时,这一点仍然有效。

    为了解决这个问题,我希望向ASP.NET临时文件目录授予applicationPoolIdentity权限就足够了,但遗憾的是…

    我所做的是从命令提示符运行以下命令:

    icacls "c:\windows\microsoft.net\framework64\v2.0.50727\Temporary ASP.NET Files" /grant "IIS AppPool\MyAppPool":(M)
    

    显然这不起作用,否则你就不会读这个了。)

    奇怪的是,每当我授予用户或者更具体的用户,经过身份验证的用户对这些权限进行分组时,它就会工作。奇怪的是(在我看来)在我开始授予访问权限之前,applicationPoolIdentity已经是IIS的成员了,它对临时ASP文件目录具有修改权限。

    现在,我想知道为什么这种情况需要为经过身份验证的用户组提供修改权限。我认为这可能是因为AppPool帐户缺少其他权限(Google为此返回了一些结果,所以我尝试了这些操作),但授予applicationPoolIdentity对windows\temp目录和/或应用程序目录本身的修改权限并没有修复它。

    现在我们有一个解决办法,但我讨厌我不知道这里到底发生了什么,所以我希望你们中的任何一个能对这件事有所了解。

    提前谢谢!

    2 回复  |  直到 13 年前
        1
  •  5
  •   Carlos Aguilar Mares    14 年前

    如果应用程序池是作为AppPool标识运行的,那么事情应该是开箱即用的,因为工作进程将被注入具有正确写入权限的IIS IUSRS SID。

    我猜,应用程序必须使用Windows身份验证,并且在ASP.NET中启用了模拟,因此代码可能作为发出请求的特定用户运行,而不必作为进程标识运行。

    我猜对了应用程序正在运行Windows身份验证吗?并且在ASP.NET中启用了模拟?

        2
  •  0
  •   Robbo    14 年前

    可能与您无关-但如果您将应用程序池作为 领域 用户,启动时自动向进程中注入IIS IUSRS令牌的规则发生更改。这使我们最近在移动到.NET 4时陷入困境,并且对新的临时ASP.NET文件目录没有权限。

    有关解决方法,请参见此处: http://www.yusufozturk.info/iis7/asp-net-write-access-error-on-iis7-5.html