IIS 服務安裝完成、網站建立無誤,但使用瀏覽器訪問時卻彈出 Windows 安全性對話框,要求輸入使用者名稱與密碼。此問題在 IIS 5.0/6.0/7.x/8.x/10.x 皆常見,本文提供系統性排查步驟。
徵兆:特定頁面 (如 `iisstart.asp`) 提示密碼,其他靜態頁面正常。
排查:
修正:移除不必要的拒絕規則,補齊讀取權限,取消檔案屬性中的「加密內容以保護資料」。
核心機制:IIS 使用內建帳號 `IUSR` (IIS 7+) 或 `IUSR_<機器名>` (IIS 6) 代表匿名使用者。若此帳號停用、密碼不同步、或未勾選「允許 IIS 控制密碼」,將導致驗證失敗彈窗。
排查步驟 (IIS 7.0+ / 10.0):
排查步驟 (IIS 6.0):
前提:網站實體路徑位於 NTFS 磁碟分區 (FAT32 無安全性標籤)。
標準權限配置 (最小權限原則):
| 帳號/群組 | 權限 | 遞歸 |
|---|---|---|
| SYSTEM | 完全控制 | 是 |
| Administrators | 完全控制 | 是 |
| IUSR (IIS 7+) / IUSR_<機器名> (IIS 6) | 讀取和執行、列出資料夾內容、讀取 | 是 |
| IIS_IUSRS (IIS 7+ 內建群組) | 讀取和執行、列出資料夾內容、讀取 | 是 |
| 應用程式集區自訂身分帳號 (若使用) | 讀取和執行、列出資料夾內容、讀取 (+ 寫入目錄若需上傳/快取) | 是 |
| CREATOR OWNER | 完全控制 (僅子物件) | 是 |
操作:右鍵網站根目錄 → 內容 → 安全性 → 編輯 → 新增上述帳號 → 給予權限 → 確定套用。
Import-Module WebAdministration
$site = "Default Web Site"
$auth = Get-WebConfigurationProperty -Filter "system.webServer/security/authentication/anonymousAuthentication" -Name "enabled" -PSPath "IIS:\Sites\$site"
Write-Host "匿名驗證啟用狀態: $($auth.Value)"
$anonUser = Get-WebConfigurationProperty -Filter "system.webServer/security/authentication/anonymousAuthentication" -Name "userName" -PSPath "IIS:\Sites\$site"
Write-Host "匿名帳號: $($anonUser.Value)"
$acl = Get-Acl "C:\inetpub\wwwroot" # 替換為實際網站路徑
$required = @("IUSR","IIS_IUSRS")
foreach($r in $required){
$has = $acl.Access | Where {$_.IdentityReference.Value -like "*$r*" -and $_.FileSystemRights -band [System.Security.AccessControl.FileSystemRights]::ReadAndExecute}
Write-Host "$r 權限: $(if($has){'正常'}else{'缺失 - 需補充'})"
}
IIS 彈出密碼提示 90% 以上源於匿名驗證配置錯誤或NTFS 權限遺漏。依循本文三步驟排查,通常可在 5 分鐘內定位並解決。建議建立標準化部署腳本 (PowerShell/Ansible),自動化套用正確權限與驗證設定,從源頭杜絕此類問題。