【发布时间】:2012-05-04 22:27:48
【问题描述】:
我正在处理一些驻留的 asp.net 页面,这些页面是一个巨大的 Intranet 应用程序,Intranet 应用程序池以身份 NetworkService(不要问)运行,并使用匿名身份验证作为 IUSR – IIS7。
假设 Intranet Home Dir 是 D:\Intranet\ - 相关的 asp.net 页面位于 D:\Intranet\TimeSheets\V2\
我有问题的测试脚本是D:\Intranet\TimeSheets\V2\Post.aspx,并在这些行上做了一些事情(将发布的 HTML [作为基本 64 位字符串]) - 转换为 HTML,然后尝试写入网络共享:
Dim TimeSheetInBase64 As String = Request.Form("HtmlToSave")
Dim HtmlToSave As String = ""
Dim SavePath As String = "\\DifferentFileServer\Public\Random Department\Posted Invoices\"
'#### Convert the HTML from base64 back into HTML
Try
Dim decodedBytes As Byte()
decodedBytes = Convert.FromBase64String(TimeSheetInBase64)
HtmlToSave = Encoding.Default.GetString(decodedBytes)
Catch e As Exception
echo("Error decoding HTML: " & e.Message)
Exit Select
End Try
Try
Dim objWriter As New System.IO.StreamWriter(SavePath & "text.htm", False)
objWriter.WriteLine(HtmlToSave)
objWriter.Close()
echo("OK")
Catch ex As Exception
Dim wi As WindowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()
Dim user As String = wi.Name
echo("Error Saving Invoice To Disk (" & wi.Name & "): " & ex.Message)
End Try
objWriter 在尝试将文件写入远程共享时抛出错误:
Error Saving Invoice To Disk (NT AUTHORITY\NETWORK SERVICE): Access to the path '\\DifferentFileServer\Public\Random Department\Posted Invoices\text.htm' is denied.
显然这是因为相关页面在应用程序池的范围内运行。
所以,我尝试更改 V2 文件夹上的匿名特定用户以使用对相关共享具有写入权限的 AD 帐户 - 但是,即使在保存配置更改后,重新启动 IIS 页面仍然会收到拒绝访问错误尝试写入文件时(并且 WindowsIdentity.GetCurrent() 仍然返回 NT AUTHORITY\NETWORK SERVICE(这是应用程序池的身份,而不是我为匿名访问设置的帐户)。
只是为了确认这是覆盖匿名帐户的问题,我将应用程序池设置为我试图在匿名特定用户上使用的 AD 帐户运行 - 这工作正常,文件已成功写入远程共享 - 所以凭据很好,只是 IIS 没有正确使用它们。
我的问题是,是否可以为匿名用户使用不同的 Windows 凭据运行一些子文件夹?如果是这样,除了更改匿名帐户之外我还需要做什么,因为这似乎没有效果?
我的第二个问题是:不是依靠 IIS 来提升权限,有没有办法从 asp.net 页面中执行此操作,即使用与页面运行时不同的凭据编写文件? 我曾考虑将这个子文件夹移动到它自己的应用程序池中——但这似乎有点混乱,我想尽可能避免这样做。
(对不起文字墙)
【问题讨论】:
标签: asp.net iis iis-7 permissions