“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------
对路径“//10.6.27.8/rec/rec/20100719/170007.voc”的访问被拒绝。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.UnauthorizedAccessException: 对路径“//10.6.27.8/rec/rec/20100719/170007.voc”的访问被拒绝。
ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}/ASPNET,在 IIS 6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。
要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。
源错误:
行 120: return;
行 121: }
行 122: File.Copy(pathSource, pathTo_voc);
行 123: int result=DjVocConvert.PcmtoWave(pathTo_voc, pathTo_wav);
行 124: if (result > 0)
源文件: c:/inetpub/wwwroot/qc/RecPlay/RecPlay.aspx.cs 行: 122
堆栈跟踪:
[UnauthorizedAccessException: 对路径“//10.6.27.8/rec/rec/20100719/170007.voc”的访问被拒绝。]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +7714255
System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite) +7628060
System.IO.File.Copy(String sourceFileName, String destFileName) +6
RecPlay_RecPlay.Do(String pathSource, String agentID) in c:/inetpub/wwwroot/qc/RecPlay/RecPlay.aspx.cs:122
RecPlay_RecPlay.BuildWav(String serviceID) in c:/inetpub/wwwroot/qc/RecPlay/RecPlay.aspx.cs:94
RecPlay_RecPlay.Page_Load(Object sender, EventArgs e) in c:/inetpub/wwwroot/qc/RecPlay/RecPlay.aspx.cs:45
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.3074; ASP.NET 版本:2.0.50727.3074
///////////------------------------------以上是在Windows Server 2008 IIS 7.0
解决方案:(1)给文件夹加IUSR_MACHINENAME用户,且赋予完全控制权:失败
(2)给文件夹加Net_service用户,且赋予完全控制权:失败
(3)给文件夹加everyOne用户,且赋予完全控制权:失败
(4)web.config "<system.web>节添加
<identity impersonate="false" userName="" password="" />
",:OK,搞定!
MSDN参考:
要加密用户名和密码并将它们存储在注册表中,请按如下方式设置 userName 和 password 属性。
userName="registry:HKLM/Software/AspNetProcess,Name"password="registry:HKLM/Software/AspNetProcess,Pwd"
字符串中位于关键字 registry 之后和逗号之前的部分表示 ASP.NET 打开的注册表项的名称。逗号之后的部分包含一个字符串值的名称,ASP.NET 将从此名称中读取凭据。必须有逗号,并且凭据必须存储在 HKLM 配置单元中。如果配置格式不正确,则 ASP.NET 不会启动辅助进程,然后将显示造成当前帐户创建失败的代码路径。
凭据必须为 REG_BINARY 格式,并且包含 Windows API 函数 CryptProtectData 调用的输出。可以用 Aspnet_setreg.exe 来创建加密凭据,并将它们存储在注册表中。该程序使用 CryptProtectData 来完成加密。若要下载 Aspnet_setreg.exe 以及 Microsoft Visual C++ 源代码和文档,请转到 ASP.NET 网站并搜索 aspnet_setreg。
应该对存储加密凭据的密钥的访问权限进行配置,以便仅向 Administrators 和 SYSTEM 提供访问权。由于密钥会被作为 SYSTEM 运行的 ASP.NET 进程读取,因此应设置以下权限:
-
Administrators:F
-
SYSTEM:F
-
CREATOR OWNER:F
-
ProcessAccount:R
这可以提供两道保护数据的防线,如下所示:
-
ACL 权限要求访问数据的身份是 Administrator。
-
攻击者必须在服务器上运行代码 (CryptUnprotectData API) 才能恢复帐户的凭据。
解决ASP.NET访问文件资源权限问题
博客讨论了在ASP.NET应用中遇到的文件访问权限问题,详细描述了尝试为不同用户分配权限失败的情况,最终通过修改web.config的<identity>标签解决了问题。涉及到IIS 7.0和.NET Framework 2.0的配置。
635

被折叠的 条评论
为什么被折叠?



