IIS 7.5、ASP.NET、模拟和访问 C:\Windows\Temp

Posted

技术标签:

【中文标题】IIS 7.5、ASP.NET、模拟和访问 C:\\Windows\\Temp【英文标题】:IIS 7.5, ASP.NET, impersonation, and access to C:\Windows\TempIIS 7.5、ASP.NET、模拟和访问 C:\Windows\Temp 【发布时间】:2011-02-28 16:54:57 【问题描述】:

总结:我们的一个 Web 应用程序需要对 C:\Windows\Temp 的写入权限。但是,无论我如何削弱NTFS权限,procmon都会显示ACCESS DENIED

背景(可能与问题相关,也可能不相关):我们正在使用 OLEDB 访问 MS Access 数据库(位于 C:\外部窗口\临时)。不幸的是,这个 OLEDB 驱动程序需要对用户配置文件的 TEMP 目录(在 IIS 7.5 下运行时恰好是 C:\Windows\Temp)的写入权限,否则会引发可怕的“未指定错误”OleDbException。有关详细信息,请参阅KB 926939。我按照知识库文章中的步骤操作,但没有帮助。

详情

这是icacls C:\Windows\Temp 的输出。出于调试目的,我授予了Everyone 的完全权限。

C:\Windows\Temp NT AUTHORITY\SYSTEM:(OI)(CI)(F)
                CREATOR OWNER:(OI)(CI)(IO)(F)
                BUILTIN\IIS_IUSRS:(OI)(CI)(S,RD)
                BUILTIN\Users:(CI)(S,WD,AD,X)
                BUILTIN\Administrators:(OI)(CI)(F)
                Everyone:(OI)(CI)(F)

然而,这是procmon的截图:

Desired Access: Generic Read/Write, Delete
Disposition:    Create
Options:        Synchronous IO Non-Alert, Non-Directory File, Random Access, Delete On Close, Open No Recall
Attributes:     NT
ShareMode:      None
AllocationSize: 0
Impersonating:  MYDOMAIN\myuser

PS:当我以MYDOMAIN\myuser 登录时,我可以使用Windows 资源管理器在C:\Windows\Temp 中创建文件,没有任何问题。

编辑:web.config 的相关部分:

 <authentication mode="Windows" />
 <identity impersonate="true" />
 <authorization>
   <deny users="?" />
   <allow users="*" />
 </authorization>

身份验证似乎有效,即System.Security.Principal.WindowsIdentity.GetCurrent().Name(显示在我的自定义错误页面上)返回MYDOMAIN\myuser

【问题讨论】:

PS:我也考虑过将其发布到 serverfault,但我猜这是 ASP.NET 处理模拟的问题,而不是 Windows 配置问题。 Web.config 中的&lt;authorization ...&gt;&lt;identity ...&gt; 的值是什么,IIS 是否配置为允许匿名访问(不确定这是否仍然适用于 IIS7)? @scherand:我已经更新了我的问题。 IIS7.5 似乎使用 .net 设置 w.r.t。匿名访问。 嗯 - 这超出了我的范围,很抱歉打扰了您 :( 如果您想尝试并且尚未这样做,您可以通过 HttpContext.Current.User.Identity.NameSystem.Threading.Thread.CurrentPrincipal.Identity.Name 检查身份,如果您觉得喜欢阅读我发现了以下文章Breaking Changes for ASP.NET 2.0 applications running in Integrated mode on IIS 7.0,但我完全不确定这是否会有所帮助...... @scherand:没问题,感谢您的时间(和链接)! 【参考方案1】:

您是否尝试过按照以下步骤操作: loadUserProfile and IIS 7 temporary directory failures

【讨论】:

嗯,这正是我所做的(授予权限)。我什至授予全部权限。 如果那是临时目录所在的位置,您确实没有将其设置为 loadUserProfile @AndrewBarber:文章说:“答案很简单:关闭 loadUserProfile, ACL 临时目录以允许写入。 " 请注意“”。因此,根据文章,仅在临时目录上设置 ACL应该 解决问题,但事实并非如此。但是,是的,使用 loadUserProfile 的解决方法很有用,所以对答案 +1(还没有“接受的答案”,因为它没有回答原始问题 - “为什么对 C:\Windows\Temp 的写访问甚至不起作用尽管已授予完整权限”)。 :-) 同意@Heinzi ...虽然这里没有回答原来的问题,但确实解决了问题,所以+1。

以上是关于IIS 7.5、ASP.NET、模拟和访问 C:\Windows\Temp的主要内容,如果未能解决你的问题,请参考以下文章

IIS 7.5 ASP.Net 和远程共享

ASP.Net MVC 3/4 托管在 IIS 7.5 默认处理程序映射上

如何使用 IIS 7.5 压缩来自 ASP.NET MVC 的 Json 结果

密码保护 IIS 7.5 中的 ASP.NET Web 应用程序

如何确保使用 ASP.NET MVC5 和 IIS 7.5 express 刷新 CSS 文件

ASP.Net / IIS 7.5 无法识别用于 OutputCache 的 jMeter