只有累積,沒有奇蹟

2019年1月13日 星期日

[.NET] 檔案名稱: redirection.config 錯誤: 無法讀取設定檔案,因為權限不足

問題
假日在自己練習要透過 WebAPI 對 IIS Server 進行 App Pool 的操作,呼叫寫好的 API 接口時一直噴錯誤檔案名稱: redirection.config 錯誤: 無法讀取設定檔案,因為權限不足這篇文章簡單紀錄處理問題過程
處理方式
An error has occurred.
檔案名稱: redirection.config 錯誤: 無法讀取設定檔案,因為權限不足 
System.UnauthorizedAccessException

於 Microsoft.Web.Administration.Interop.IAppHostAdminManager.GetAdminSection(String bstrSectionName, String bstrPath) 於 Microsoft.Web.Administration.Configuration.GetSectionInternal(ConfigurationSection section, String sectionPath, String locationPath) 於 Microsoft.Web.Administration.ServerManager.ApplicationPoolsSectionCreator() 於 Microsoft.Web.Administration.Lazy.Initialize[T](T& target, CreateInstanceDelegate`1 valueFactory) 於 Microsoft.Web.Administration.ServerManager.ApplicationPoolCollectionCreator() 於 Microsoft.Web.Administration.Lazy.Initialize[T](T& target, CreateInstanceDelegate`1 valueFactory) 於 WebAPI.Controllers.ValuesController.RestartApplication() 於 C:\Users\marcustung\source\repos\WebAPI\WebAPI\Controllers\ValuesController.cs: 行 54 於 lambda_method(Closure , Object , Object[] ) 於 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_1.b__3(Object instance, Object[] methodParameters) 於 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken) --- 先前擲回例外狀況之位置中的堆疊追蹤結尾 --- 於 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 於 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 於 System.Web.Http.Controllers.ApiControllerActionInvoker.d__1.MoveNext() --- 先前擲回例外狀況之位置中的堆疊追蹤結尾 --- 於 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 於 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 於 System.Web.Http.Controllers.ActionFilterResult.d__5.MoveNext() --- 先前擲回例外狀況之位置中的堆疊追蹤結尾 --- 於 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 於 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 於 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext()
從 MSDN 可以得知 UnauthorizedAccessException 為 當作業系統因為 I/O 錯誤或特定類型的安全性錯誤而拒絕存取時,所擲回的例外狀況研判是因為權限不足導致此錯誤發生,此專案是在本機 IIS 自行建立應用程式,我們可以透過工作管理員得知執行 w3wp.exe 的使用者是 DefaultAppPool,預設的身分只有用戶權限權限較低在設計上是安全以確保不會因為漏洞而權限大開
在 IIS 7.5 之後新增 ApplicationPoolIdentity 虛擬帳戶,改善了過去為了 IIS Application 設定權限定義很多不同的 User Roles 管理問題,詳細介紹可以參考 保哥blog,這次遇到的問題可以透過設定ApplicationPoolIdentity 解決,說明步驟如下

設定 ApplicationPoolIdentity
Step 1 : 開啟 IIS > 選擇應用程式集區 > 選擇要設定的 Application Pool > 按下進階設定
Step 2 : 拉到最下方 > 選擇 識別 
Step 3 : 說明可以看到是設定應用程式集區以選擇的方式 其中有四個選項
  • Application Pool Identity : 預設是 ApplicationPoolIdentity
  • Network Service : 其中包含可用來在遠端電腦上的資源的存取權的低層級的使用者存取權限
  • Local System : 這是具有多個與 Network Service 或 Local Service 帳戶的使用者權限的帳戶。
  • Local Service : 其具有低層級的存取權限。 您不需要在遠端電腦上的資源的存取權的情況下使用此設定。

Step 4 : 選擇 LocalSystem,按下確定

在重試一次即可正常使用,宣告結案 !!

參考
Application Pool Identities
step-1-configure-application-pool-identity

0 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com