[BUG]ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限

解决ASP.NET访问文件资源权限问题
博客讨论了在ASP.NET应用中遇到的文件访问权限问题,详细描述了尝试为不同用户分配权限失败的情况,最终通过修改web.config的<identity>标签解决了问题。涉及到IIS 7.0和.NET Framework 2.0的配置。

“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

对路径“//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参考:

 

要加密用户名和密码并将它们存储在注册表中,请按如下方式设置 userNamepassword 属性。

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) 才能恢复帐户的凭据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值