﻿# IIS6：HTTP 401.1 - 未經授權：因認證無效而存取遭到拒絕

我有個客戶的主機位於中國大陸，作業系統是簡體版的 Windows Server 2003，預設網站停用中，正式網站的站台可以正常運作，但我們做的新網站安裝完之後卻發現總是無法遠端瀏覽，只能在本機看到網頁與程式都正常執行，遠端看的時候主要錯誤訊息為「**HTTP 错误 401.1 - 未经授权：访问由于凭据无效被拒绝。**」這台主機實在不知道被多少人荼毒過，怎麼設定就是無法讓網站成功安裝起來，即便連靜態檔案都無法存取，心裡雖然明白重灌就能解決問題，但一份不服輸的精神總想著要釐清問題才能終身解除夢魘，所幸皇天不負苦心人，問題終於找到了答案。

先分享我所有找答案失敗的過程，這些過程每個都有其背景知識，也許有任何一個環節都是未來可能會遇到的，而解決權限問題的思路也非常重要，這些都有助於未來快速釐清類似的問題。

在我新增完一個全新的站台後，問題的主要徵狀如下描述：

-   該主機的 IIS6 有兩個原本就有的站台，與一個我們這次才新增的站台
    -   預設站台：已停用
    -   站台 1：目前舊版網站正常使用中
    -   站台 2：本次新增的站台（也就是有問題的站台）
-   這個新增的 站台 2 在這台 Windows Server 2003 本機可以正常瀏覽網頁
-   當試圖透過遠端主機瀏覽該網頁時，就會立即出現要求登入的畫面 (如下圖示)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e0db2a299779c6b545f1-SNAGHTML7713b23.png)

看到登入視窗基本上就不對了，因為我們要的是讓網站可以匿名瀏覽網頁，所以按下取消或輸入錯誤的帳號密碼就會立即看到「**HTTP 错误 401.1 - 未经授权：访问由于凭据无效被拒绝。**」錯誤訊息。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/df5dabd01dab5ae11f7a-image_974.png)

根據錯誤訊息來看，我肯定這是與權限有關的錯誤，因此我就把找問題的方向給先定下來。

既然我們這網頁要求匿名訪問，當然先去看匿名訪問的安全性設定

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/24006a3811a8ac66775e-image_975.png)

我比對了預設站台的設定與這次新增的 站台 2 設定，完全一模一樣，因此不疑有他的繼續下一條線索：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/64f261bd577498becec8-image_976.png)

接著檢查 IP 地址和域名限制，預設也是授權訪問，應該不會有這個問題，所以繼續跳過：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b536237f50d5915eaa11-image_977.png)

然後我查看應用程式集區的設定，並發現預設站台、站台 1 與站台 2 的應用程式集區是一樣的，因此也不可能是應用程式集區的權限問題：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fa9860807793a261ee27-image_978.png)

接著我檢查網站目錄的 NTFS 檔案權限，我發現這部分也是沒問題的！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/933d053b56e903f42df3-image_979.png)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/64ccd9f8f8a0619b2f86-image_980.png)

查看進階權限設定也看不出有權限不足的情況：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6a2bf59fce7142cc8966-image_981.png)

我看了這麼多可能的地方，還是無法讓網頁正常瀏覽，都是一樣的錯誤訊息，已經快到走投無路的時候，想起了 Windows 界的瑞士刀 Sysinternals 工具組，並使用 [Process Monitor](http://technet.microsoft.com/en-us/sysinternals/bb896645) 查看有沒有任何透過 IIS 存取檔案的地方，結果還是一樣讓人哀傷，當透過遠端瀏覽的時候，IIS 根本沒有對該檔案進行存取動作，這也代表著 IIS 被卡在 **認證** (Authentication) 這一關過不去！

接著我想到了可以從**事件檢視器**查看**安全性**事件，也因此發現了有一筆 **IUSR\_A-EE2135DE33C84** 的驗證失敗紀錄，你可能會想這就怪了，站台 1 與 站台 2 也是完全相同的設定啊，為什麼新增的站台就會有權限的問題呢？？！！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9caccd2cfd571ce0d276-image_982.png)

難道～ 這幾個站台的匿名存取帳戶所設定的密碼不一樣？有可能嗎？！太扯了吧！誰這麼無聊會去改這種設定啊！！（ 生氣 … >”< ）

首先，Windows 內建的 **IUSR\_A-EE2135DE33C84** 匿名帳戶密碼多少我不知道，但我知道這個密碼是可以改的，以前我只知道這個密碼改掉了之後會很麻煩，因為以往我們再設定這種系統內建的服務帳戶、密碼時，最直覺的方式就是不輸入密碼就代表使用系統預設的密碼，但當時並不知道為為什麼要這樣，不過經過這次茶包修復的經驗之後，一整個打通多年前濛濛懂懂的疑惑。

經過一番測試與驗證之後，我終於可以確認**新增的 站台 2** 與**站台 1** 所設定的匿名帳戶密碼是不一致的 (因為預設站台並沒有啟用，所以就先跳過不管)，接著變試著從 IIS 的 Metabase 中找出那些設定：

首先先進入 C:\\Inetpub\\AdminScripts 目錄，並執行以下指令查詢預設**站台 1** 的匿名帳戶密碼為何：  
備註： 175255 為你的站台 ID，不同站台 ID 就會不一樣喔！

```
cscript adsutil.vbs get w3svc/175255/root/anonymoususerpass
```

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/bc36943b4d9e48b64857-image_983.png)

可惜的是，基於安全理由預設密碼是不會顯示出來的，但還好我有找到 [KB909887](https://web.archive.org/web/20140205132410/http://support.microsoft.com:80/kb/909887) 文件有教如何將密碼顯示出來，因此這才確認了這台主機的 **IUSR\_A-EE2135DE33C84** 匿名帳戶密碼真的被修改過了，而且我確認當初的工程師在修改過該帳戶的密碼後還手動去修改了**站台 1** 的匿名帳戶密碼，想當然的，這種改密碼的事情怎麼會有文件呢！我半路接手這台主機要設定網站，怎麼可能會有這些資訊，因此花了好幾天才釐清並解決這個問題。

IIS 中有個地方儲存了 IUSR\_\* 的預設密碼，這個密碼是從 Windows 安裝時就賦予的，而且每台電腦都不一樣，不是無聊人不會去修改這個密碼才對，因此任何新增的站台都會自動繼承這個預設匿名帳戶密碼，這也是為什麼只要新增站台就會發生「**HTTP 错误 401.1 - 未经授权：访问由于凭据无效被拒绝。**」這個問題的主要原因！

一勞永逸的解決辦法有兩種：

1.  找出 IIS6 預設的匿名帳戶密碼，並將 IUSR\_\* 帳戶的密碼重設回復到出廠狀態的密碼，這個步驟可以參照 [KB909887](https://web.archive.org/web/20140205132410/http://support.microsoft.com:80/kb/909887) 來完成設定。

```
cscript adsutil.vbs get w3svc/anonymoususerpass
```

3.  改掉 IIS6 預設的匿名帳戶密碼，如此一來日後新增的站台就可以預設繼承 IIS Metabase 的密碼設定，也不會再次發生 HTTP 401.1 的錯誤了。（備註：以下 NEWPASSWORD 請換成新的密碼）

```
cscript adsutil.vbs set w3svc/anonymoususerpass NEWPASSWORD
```

**心得分享**

我記得在兩年前的明天說過一句話：「[你永遠不知道接手一個爛案子可以學到多少開發經驗！唯有正向思考才能讓你進步，抱怨只會讓自己越來越消極～](http://www.plurk.com/p/1e0p4k)」（ 好巧耶，只差一天剛好滿兩年 XD ）

這句話到了今天我還是覺得非常認同，我知道當下處理問題的情緒與憤怒，在解決問題時的當下要能夠不帶情緒的正向思考是有難度的，過程中是否擁有正面能量幫助你走過這段路我覺得很重要，我知道問題一定會被解決 (這需要自信)，而當你的正面能量大過負面能量時，你就會用微笑帶著[草泥馬](http://zh.wikipedia.org/zh-tw/%E8%8D%89%E6%B3%A5%E9%A6%AC)陪你一路過關斬將，過程中或許髒話不斷，但是不會給其他人帶來負面情緒與壓力，甚至於激起其他人的共鳴陪你一起解決困難，進而享受在解決問題的情境之中。

很多事情一體多面，工作中難免遇到許多無理的、無助的、無力的問題，若能對每一件事情用好的、正向的角度去思考、去體驗，我想遇到再多的困難都不會害怕，也不會因為負面情緒在心中內耗而感覺到疲累，與各位共勉之。 ^\_^

**相關連結**

-   [Error message when you try to view a Web site that is hosted on Internet Information Server 6.0 by using anonymous access: "401.1 Unauthorized: Logon failed"](https://web.archive.org/web/20140205132410/http://support.microsoft.com:80/kb/909887)
