前言:401 非單一錯誤,子代碼揭示真實阻斷點
HTTP 401 Unauthorized 細分為 401.1~401.7,其中 401.1/401.2/401.3 最常見。精準識別子代碼,直擊根因,避免盲目嘗試。
401.1 — 憑證無效
症狀:`HTTP Error 401.1 - Unauthorized: Access is denied due to invalid credentials.`
根因**:匿名存取使用的帳號(預設 `IUSR_<機器名>`)被**停用**、鎖定、密碼過期,或**無「從網路存取此電腦」權限**。
修復步驟
- 檢查本地使用者管理 (`lusrmgr.msc`) → `IUSR_<機器名>` → 確認**未勾選「帳號已停用」**。
- 本地安全性原則 (`secpol.msc`) → 本地原則 → 使用者權限指派 → **「從網路存取此電腦」** → 新增 `IUSR_<機器名>` 或其所屬群組(通常為 `Guests`/`IIS_IUSRS`)。
- 最佳實踐**:自訂匿名帳號時,統一歸屬專用群組(如 `IIS_Anonymous_Users`),透過群組授權,避免單一帳號管理混亂。
401.2 — 伺服器配置拒絕
症狀**:`HTTP Error 401.2 - Unauthorized: Access is denied due to server configuration.`
根因**:**未勾選「啟用匿名存取」** 或匿名帳號未正確指定。
修復步驟
- IIS 管理員 (`inetmgr`) → 網站屬性 → 目錄安全性 → 驗證方法「編輯」。
- 勾選 **「啟用匿名存取」**。
- 帳號欄:輸入 `IUSR_<機器名>` 或點選「瀏覽」選擇有效本地帳號。
- 密碼欄:輸入兩次相同密碼(若勾選「允許 IIS 控制密碼」可留空由 IIS 自動管理)。
- 確定套用 → 重新啟動網站 (`iisreset`)。
401.3 — ACL 權限拒絕
症狀**:`HTTP Error 401.3 - Unauthorized: Access is denied due to ACL settings on the requested resource.`
根因**:匿名帳號(屬於 `Guests` 群組)無法存取網站實體資料夾的 **NTFS 權限**。常見於:資料夾僅授予 `Administrators`、`SYSTEM`,未包含 `Everyone`/`Users`/`IUSR_*` 讀取權限。
修復步驟
- 檔案總管 → 網站資料夾右鍵 → 屬性 → **安全性** 分頁。
- 新增 → 輸入 `IUSR_<機器名>` 或 `Everyone` → 確定。
- 授予 **「讀取及執行」、「列出資料夾內容」、「讀取」** 權限。
- 勾選「取代所有子物件的權限項目…」→ 套用 → 是。
快速對照表
| 錯誤碼 | 核心原因 | 關鍵修復動作 |
| 401.1 | 帳號停用/無網路存取權 | 啟用帳號 + 授予「從網路存取此電腦」 |
| 401.2 | 未啟用匿名存取 | IIS 勾選啟用匿名存取 + 指定有效帳號 |
| 401.3 | NTFS ACL 拒絕存取 | 資料夾安全性新增 IUSR/Everyone 讀取權限 |
進階提示
- IIS 6.0 (Win2003) 預設應用程式池身分為 `Network Service`,若使用應用程式池身分而非經典匿名帳號,權限模型不同,需授予 `IIS_WPG` / `IIS_IUSRS` 群組權限。
- 啟用失敗請求追蹤 (Failed Request Tracing) 可記錄完整 401 子代碼與模組決策流程,輔助疑難排解。
結語
401 子代碼是精準的指路標:**401.1 看帳號狀態與網路權限、401.2 看 IIS 匿名設定、401.3 看 NTFS ACL**。對症下藥,分鐘級解決。