前言
在將 ASP.NET Core 網站部署到 IIS 的過程中,許多人都遇過這個疑問:
1.部署網站目錄時,是否一定要手動加上 IIS AppPool\YourAppPool
帳號的權限?
2.為什麼很多時候沒加也能正常執行?
這篇文章將徹底解析 IIS Application Pool Identity 的目錄權限運作原理,分享實際測試、設定流程,以及安全性最佳實踐,幫助你徹底搞懂這個主題!
IIS Application Pool Identity
IIS 預設會使用 Application Pool Identity(IIS AppPool\YourAppPool
)來執行網站程序。它有以下特點:
- 只要目錄權限有
BUILTIN\Users
或NT AUTHORITY\Authenticated Users
,IIS AppPool Identity 預設就能正常存取。 - 如果這些群組被移除,就必須**明確加入
IIS AppPool\YourAppPool
**,否則會遇到 500 錯誤。
這樣的設計,雖然方便,但不符合「最小權限原則」(Least Privilege Principle)。
建議為生產環境明確只授權給實際需要的 AppPool Identity,移除其他不必要的群組帳號。
ASP.NET Core 網站在 IIS 部署與最小權限設定
以下是一套完整、符合最佳實踐的 IIS 目錄權限設定步驟:
1.在部署的 Server 上安裝 ASP.NET Core Hosting Bundle 後,執行 iisreset
2.在 IIS 中建立一個新的應用程式集區(假設名稱為webdemo
),如下圖:

3.在 IIS 中建立一個新的應用程式(假設名稱為webdemo
),並將應用程式集區指定到上面建立的集區,設定檔案所在目錄

4.在 IIS 站台,點擊webdemo
,設定HTTP 回應標頭(移除不必要的標頭,加入 Security 的一些標頭),如下圖:

5.在檔案總管中,點選部署目錄->內容->安全性->SYSTEM 的權限(P)->點擊「進階」Button->點擊「停用繼承(I)」 Button 後,按下「確定」,如下圖:

6.在檔案總管中,點選部署目錄->內容->安全性->群組或使用者名稱(G)->點擊「編輯」Button->移除Authenticated Users 及 Users 群組帳號,如下圖:

7.在檔案總管中,點選部署目錄->內容->安全性->群組或使用者名稱(G)->點擊「編輯」Button->加入 IIS AppPool\webdemo 帳號(允許讀取與執行
, 列出資料夾內容
及 讀取
權限),如下圖:


8.針對特定子目錄(如 uploads、logs)加「寫入」或「寫入 + 修改」(有要刪除檔案) 權限,如下圖:
