如何在 IIS 7.0 中使用設定委派
摘要
本文說明如何在伺服器上啟用委派的組態。 其討論如何部署伺服器和應用程式的組態設定,以及內容頁面和應用程式程式碼。
一旦電腦系統管理員定義應用程式或虛擬目錄,以供您在主要組態檔 %windir%\system32\inetsrv\config\applicationHost.config
中使用,並允許委派特定區段,您就可以控制應用層級的設定:藉由在應用程式的web.config檔案中設定,您可以覆寫全域預設值。 如果您有應用程式目錄的存取權,即使您不是電腦上的本機系統管理員,也是如此。
閱讀本檔之後,您將瞭解如何在全域層級定義應用程式和虛擬目錄、解除鎖定委派的組態區段,以及覆寫組態階層較低層級個別應用程式的組態設定。
簡介
IIS 可讓電腦系統管理員將設定和變更設定的工作委派給月臺和應用程式擁有者。 若要這樣做,請使用內容目錄中web.config檔案。 這些檔案會指定在階層和向下層級上生效的組態區段。 電腦系統管理員必須在全域層級明確解除鎖定區段,才能啟用這類委派。 根據預設,大部分的 IIS 區段都會鎖定以供委派,而所有 .NET Framework 區段 (包括 ASP.NET) 不會在全域層級鎖定。
本檔說明如何在全域層級定義新的應用程式和虛擬目錄, (只有電腦系統管理員可以執行這項工作;它永遠無法委派) 。
本檔接著說明如何使用應用程式內容來部署web.config,以覆寫特定層級的某些設定。 它也說明組態系統的核心概念,因此會說明如何使用直接編輯組態檔來執行這些工作,而不需在組態系統之上使用 UI 或其他抽象概念。
必要條件
- 請確定電腦上已安裝 IIS 7.0 或更新版本。 從 IE 移至
http://localhost/
,並查看預設的 [建構中] 頁面隨即開啟。 如果未安裝 IIS,請參閱安裝程式How-To以取得安裝指示。 - 請確定您在電腦上具有系統管理許可權。 根據預設,如果您以內建系統管理員帳戶以外的使用者身分登入,則不會有這些帳戶,即使此使用者已新增至電腦上的本機 Administrators 群組也一樣。 這是 Windows Server® 2008 中稱為 LUA 的新安全性功能,超出 IIS 的範圍。 以內建系統管理員帳戶登入,或使用 「runas」 Cmd-line 工具,視需要明確叫用應用程式作為內建系統管理員:
例如,若要啟動notepad.exe,請執行此命令:「runas /user:administrator notepad.exe」。 系統會提示您輸入系統管理員帳戶的密碼。 執行 「runas /user:administrator cmd.exe」,讓已提升許可權的 Cmd-box 殼層很有用。 每個從該 Cmd-box 執行的應用程式也會提高許可權,而且您不需要從該 Cmd-box 使用 「runas」 語法。
- 請確定已備份主要組態檔。 只要將applicationHost.config複製到不同的檔案,您稍後就可以加以還原。 您會在 inetsrv\ 目錄底下找到applicationHost.config,而該目錄接著位於系統目錄底下。
注意
您必須是系統管理員才能執行此動作 , 請參閱上述專案符號點。
- 開始之前,請確定您處於「清除狀態」。 若要這樣做,請還原先前練習中applicationHost.config檔案的變更。 (如果您使用) ,最簡單的方式就是重新開機映射,而不儲存其狀態) 。
- 建議您關閉 IE (工具>選項> 進階) 中的易記 HTTP 錯誤訊息,以便更快速進行疑難排解。
步驟 1:定義新的應用程式
使用 [記事本] 之類的文字編輯器,在下列位置開啟ApplicationHost.config檔案:
%windir%\system32\inetsrv\config\applicationHost.config
流覽至
<sites>
區段,如下所示:<sites> <siteDefaults> <logFile directory="C:\WINDOWS\System32\LogFiles" /> </siteDefaults> <applicationDefaults applicationPool="DefaultAppPool"/> <site name="Default Web Site" id="1"> <bindings> <binding protocol="http" bindingInformation="*:80:" /> </bindings> <application path="/"> <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" /> </application> <logFile directory="C:\WINDOWS\System32\LogFiles" /> </site> </sites>
確認網頁伺服器正在執行,而且您可以存取預設的網站。 若要這樣做,請啟動瀏覽器並要求
http://localhost/
要求應該會傳回網頁。 如果沒有,請從命令方塊輸入 「net start w3svc」 來啟動 IIS 伺服器,或使用 Windows 事件記錄檔檢視器進行疑難排解。
在瀏覽器中要求
http://localhost/
此要求不會傳回頁面 (您看到錯誤頁面) ,因為虛擬路徑尚未定義于組態中,這是下一個程式。
在ApplicationHost.config檔案中,新增
<application>
路徑為 「/app」 的專案,其中包含最上層<virtualDirectory>
元素。 最上層虛擬目錄是路徑 「 / 」 的一個。 針對虛擬目錄的實體路徑,請指定C:\tmp
(或類似專案,以便稍後使用) 。當您完成時,這些
<sites>
區段看起來會像下面這樣:<sites> <siteDefaults> <logFile directory="C:\WINDOWS\System32\LogFiles" /> </siteDefaults> <applicationDefaults applicationPool="DefaultAppPool"/> <site name="Default Web Site" id="1"> <bindings> <binding protocol="http" bindingInformation="*:80:" /> </bindings> <application path="/"> <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" /> </application> <application path="/app" > <virtualDirectory path="/" physicalPath="C:\tmp" /> </application> <logFile directory="C:\WINDOWS\System32\LogFiles" /> </site> </sites>
您剛在組態檔中定義新的應用程式。
在瀏覽器中要求
http://localhost/
Web 服務器會傳回錯誤頁面,指出瀏覽目錄未啟用。 這是因為您還沒有 中
c:\tmp
的內容,因此伺服器正在處理要求做為流覽目錄的要求。 從目錄複寫iisstart.htm\inetpub\wwwroot
,c:\tmp
然後重新整理瀏覽器。 現在您會看到 [建構下] 頁面。
步驟 2:解除鎖定設定區段
使用 [記事本] 之類的文字編輯器,開啟applicationHost.config並找出 < 驗證 > 區段群組。
將 < anonymousAuthentication > 和
<windowsAuthentication>
區段從檔案中的目前位置移至檔案底部具有 overrideMode=「Allow」 的新位置標籤,如下所示:<configuration> <system.webServer> <security> <authentication> <!-- cut the anonymousAuthentication and windowsAuthentication --> <!-- XML elements from this area in the file, and paste below --> </authentication> </security> </system.webServer> <location overrideMode="Allow"> <system.webServer> <security> <authentication> <!-- paste the 2 sections from above here --> </authentication> </security> </system.webServer> </location> </configuration>
這些區段現在可由命名空間的較低層級覆寫,因為它們位於指定 overrideMode=「Allow」 的位置標記中。 所有較低層級web.config檔案現在可以覆寫這些設定。
步驟 3:覆寫應用層級的設定
使用記事本之類的文字編輯器,在應用程式資料夾中建立新的文字檔 (,例如
c:\tmp
) 名為 web.config。在web.config檔案中,建立
<configuration>
專案和<system.webServer>
元素做為其子系。 在 專案內<system.webServer>
,建立<security>
包含<authentication>
元素的專案。輸入設定以停用全域層級預設開啟的Windows 驗證和匿名驗證配置。
完成時,web.config檔案看起來如下:
<configuration> <system.webServer> <security> <authentication> <windowsAuthentication enabled="false" /> <anonymousAuthentication enabled="false" /> </authentication> </security> </system.webServer> </configuration>
在瀏覽器中,要求
http://localhost/app
。注意
您未獲授權查看頁面,因為您已停用web.config檔案中此頁面的所有驗證方法。
在瀏覽器中,要求
http://localhost/
並確認您可以存取頁面。 web.config檔案中的組態僅適用于應用層級。在web.config檔案中,將已啟用的 元素新增
<basicAuthentication>
為 true,藉以 啟用 基本驗證。完成時,web.config檔案看起來如下:
<configuration> <system.webServer> <security> <authentication> <windowsAuthentication enabled="false" /> <anonymousAuthentication enabled="false" /> <basicAuthentication enabled="true" /> </authentication> </security> </system.webServer> </configuration>
再次要求
http://localhost/app
。 您會看到錯誤頁面,指出某些組態在全域層級鎖定,而web.config檔案正嘗試覆寫它,因此它是組態錯誤。 若要解決此問題,請在全域層級 (applicationHost.config) 允許 < 覆寫 basicAuthentication > 區段,如同您針對這兩個其他區段所做的一樣。 然後重新整理瀏覽器 。現在系統會提示您輸入使用者名稱和密碼,這表示正在進行基本驗證。
輸入登入使用者的使用者名稱和密碼,並記下頁面顯示。
如果您要求
http://localhost/
,則不會要求您輸入使用者名稱和密碼,因為您對設定所做的變更僅適用于應用層級。注意
伺服器和瀏覽器都會快取使用者權杖。 如果您想要從頭開始,且不再看到使用者名稱提示,請關閉瀏覽器,並停止 IIS 背景工作進程 (或從 Windows 命令列執行 「net stop /y HTTP',然後從 Windows 命令列執行 」net start w3svc「,以重新開機 IIS) 。
總結
本檔說明如何在主要組態檔中定義應用程式和虛擬目錄,applicationHost.config。它也涵蓋如何在 區段中部署包含伺服器設定 <system.webServer>
的應用程式特定組態檔。 您可以將設定新增至區段群組中的 <system.web>
web.config檔案,例如 ASP.NET 設定。
最佳做法是設定存取控制清單 (ACL) web.config檔案或應用程式的整個目錄,讓非系統管理使用者無法存取檔案。