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
中的<authorization ...>
和<identity ...>
的值是什么,IIS 是否配置为允许匿名访问(不确定这是否仍然适用于 IIS7)?
@scherand:我已经更新了我的问题。 IIS7.5 似乎使用 .net 设置 w.r.t。匿名访问。
嗯 - 这超出了我的范围,很抱歉打扰了您 :( 如果您想尝试并且尚未这样做,您可以通过 HttpContext.Current.User.Identity.Name
或 System.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的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net MVC 3/4 托管在 IIS 7.5 默认处理程序映射上
如何使用 IIS 7.5 压缩来自 ASP.NET MVC 的 Json 结果
密码保护 IIS 7.5 中的 ASP.NET Web 应用程序