共用方式為


瞭解 IIS 7.0 設定委派

Saad Ladki

簡介

IIS 為其第七個產品版本引進了全新的檔案型組態系統。 這個新系統強調適用於整個 Web 平台的數據驅動系統,其中 ASP.NET、Indigo 甚至第三方元件等技術都可以使用並擴充此元件存放區來容納任何網站或應用程式屬性。

系統會以簡單且清楚的格式所定義的 XML 檔案為基礎,其語法類似 ASP.NET web.config 檔案。 這些組態檔會保留邏輯群組中的設定,而且檔案的任何變更都會立即反映在正在修改其屬性的月臺或應用程式上。

這個新系統也提供委派的系統管理體驗:系統管理員可允許網站和應用程式擁有者修改特定設定;和,這些變更的影響僅限於有問題的特定網站或應用程式。 此模型介紹獨立式應用程式的概念,其中內容和組態設定都位於月臺或應用程式目錄中,而且可以從一部計算機部署到另一部計算機。

組態檔和組態架構

IIS 7.0 和更新版本具有名為 applicationHost.config 的中央組態檔,位於 。%WINDIR%\System32\InetSrv\Config\ 此檔案會取代 IIS 6.0 用於其組態存放區的metabase.xml檔案。 這個新的組態系統非常簡單,以檔案為基礎,但功能非常強大。 沒有設定服務,因為不需要 IISADMIN。 每個背景工作進程都有組態讀取器元件的實例,並直接從檔案擷取組態。

此外,沒有組態的記憶體內部表示法。 一旦對檔案發出變更,背景工作進程會立即挑選該檔案,並反映在指定的月臺、應用程式或虛擬目錄上。

applicationHost.config 檔案會針對 IIS 和其他 Web 技術的不同功能和元件,提供全域設定。 此檔案中設定的任何屬性都會套用至計算機中的所有月臺、應用程式和虛擬目錄。

IIS 所使用的組態讀取器會瞭解每個組態區段、元素和屬性的格式、語法和正確命名,因為它們是在架構檔案中定義。 組態的架構定義於目錄中的檔案中 %WINDIR%\System32\InetSrv\Config\Schema\ 。 具現化組態系統時,背景工作進程會將架構讀取至記憶體,這可協助系統瞭解可供設定的屬性及其格式。 至少IIS_schema.xml、ASPNET_schema.xml和FX_schema.xml檔案位於此目錄中,並定義適用於 IIS、ASP.NET 和 .NET Framework 功能的區段設定結構。

架構會定義組態及其區段的數個層面,例如區段和屬性的命名、值的預期型別、這些值的範圍,或其中任一個是唯一或必要的。 此外,它會定義特定屬性將採用的預設值。 在 applicationHost.config 中未定義屬性的指定案例中,其值取自架構檔案中所陳述的預設設定。

除了此中央檔案 applicationHost.config 之外,數個 web.config 檔案可以出現在 URL 階層的任何層級。 這些檔案可以出現在月臺、應用程式、虛擬目錄,甚至是實體路徑層級。 這些檔案會定義屬性,其值會覆寫 applicationHost.config 中定義的全域設定。不過,這些變更僅適用於檔案出現的範圍,也就是針對 web.config 檔案所在位置的指定網站、應用程式、虛擬目錄或實體路徑。

組態階層和有效設定

除了 applicationHost.config 之外,IIS 也會使用 ASP.NET,這同時 依賴 machine.config根 web.config 檔案。 machine.config 檔案會定義所有 Framework 功能所需的屬性。 根 web.config 檔案會定義針對所有 ASP.NET Web 應用程式所定義之屬性的全域設定。 這兩個檔案類似於 IIS 的 applicationHost.config。 這三個檔案存在,因為 .NET Framework 和 IIS 版本是分開的。 在具有單一版本的 IIS 的指定 Windows Server 系統中,可以安裝多個版本的 Framework。

因此,系統會針對系統的組態設定定義和計算組態階層。 階層會從machine.config開始,然後前進到根web.config檔案,後面接著applicationHost.config。從此為止,任何位於月臺、應用程式或虛擬目錄層級的選擇性web.config檔案會新增並套用至階層。 最後,屬性會繼承自machine.config到最後一個web.config檔案的父檔案到子檔案(如果有的話),並計算指定路徑的有效組態。

繼承行為預設為完成。 階層中較低層級的任何設定會覆寫目前層級上方檔案中定義的父設定。 不過,進一步向下階層,設定的範圍會更加有限。 其中作為machine.config、root web.config 和 applicationHost.config 檔案的設定會套用至系統中的所有內容,選擇性的 web.config 檔案設定僅適用於目前的位置和下方(無論是網站、應用程式或虛擬目錄)。

組態區段

在組態檔內,可以讀取和設定的可能設定。 這些設定會以結構化方式分組。 類似或適用於特定功能(i.e. ASP、驗證、ISAPI 等)的多個設定會分組在稱為 組態區段的邏輯單元區塊中。 每個組態區段都可以包含其中的其他組態區段,但最常定義元素、集合或屬性。

組態專案是定義多個組態屬性的 XML 專案。 組態集合是組態專案的特殊案例,其中包含以 add/remove/clear 組態指示詞定義的元素清單。 最後,組態屬性是代表 XML 屬性的分葉組態設定。

下列代碼段顯示 defaultDocument> 區段的<設定。 啟用的字組是屬性,其中檔案單字是包含 add 指示詞和一系列屬性所定義之其他元素的清單。

<defaultDocument enabled="true"> 
    <files> 
        <add value="Default.htm" /> 
        <add value="Default.asp" /> 
        <add value="index.htm" /> 
        <add value="index.html" /> 
        <add value="iisstart.htm" /> 
        <add value="default.aspx" /> 
    </files> 
</defaultDocument>

此組態區段具有相關聯的架構。 下列代碼段顯示檔案IIS_schema.xml中 <defaultDocument> 區段的架構。 架構會定義區段的名稱及其出現的命名空間(在此案例中為 system.webServer)。 此外,架構也會描述屬性和元素,以及每個名稱、類型、預設值和其他有趣的數據。

<sectionSchema name="system.webServer/defaultDocument"> 
    <attribute name="enabled" type="bool" defaultValue="true" /> 
    <element name="files"> 
      <collection addElement="add" clearElement="clear" removeElement="remove" mergeAppend="false"> 
        <attribute name="value" type="string" isUniqueKey="true"/> 
      </collection> 
    </element> 
</sectionSchema>

特殊區段: <configSections>

<configSections> 態區段是 applicationHost.config 中定義的特殊區段。它會作為 IIS 伺服器的組態區段的登錄點。 本節是註冊系統中目前可用的組態區段。 在指定的案例中,組態系統已擴充,而且自定義區段會新增至伺服器,您必須將專案專案新增至此區段來註冊。

下列代碼段顯示 <configSections> defaultDocument> 區段的專案<。 為了清楚起見,其他專案已被省略。 有趣的部分 <configSections> 是區段群組專案,定義每個區段的命名空間--在此案例 中為 system.webServer 和 overrideModeDefault 屬性的值,此區段的值為 “Allow”。 由於未宣告allowDefinition,因此會取自架構,且預設值為 「Everywhere」。。

<configSections> 
    <sectionGroup name="system.webServer"> 
        <section name="defaultDocument" overrideModeDefault="Allow" />
    </sectionGroup>
</configSections>

除了定義區段及其區段群組之外,還有兩個定義的主要屬性: overrideModeDefaultallowDefinition

overrideModeDefault 屬性是選擇性屬性,可定義區段的鎖定狀態。 其可用值為 AllowDeny。 預設值為 「Allow」。 所有與伺服器效能、安全性或關鍵層面相關的 IIS 區段都會鎖定,且此屬性設定為 「拒絕」。 如果 overrideModeDefault 屬性設定為 “Deny”,則較低層級的任何組態檔 (亦即 web.config files) 設定特定組態區段屬性的值都無法生效並覆寫全域值。 這會產生鎖定違規,併發生錯誤。

allowDefinition 屬性是另一個選擇性屬性,可定義區段的階層層級,而且可以設定屬性。 如果其值為 MachineOnly,則區段只能在 applicationHost.config 或 machine.config 中設定。如果其值為 MachineToRootWeb,則可以在 MachineOnly 檔案中或根 web.config 中設定區段。如果其值為 MachineToApplication,則可以在前三個檔案中設定區段,也可以在應用程式根資料夾中的 web.config 檔案中設定。 最後,如果其值為 「隨處 」(這是預設值),它可以在任何組態檔中設定,無論是全域影響組態的組態,還是套用至指定月臺、應用程式或虛擬目錄的 web.config 檔案。

位置概念

在組態階層的指定檔案中指定的任何設定都會套用至該層級和以下層級,並有可能由子檔案覆寫。 不過,您可以使用具有path屬性的位置標籤,來指定組態設定,並將組態設定套用至目前組態檔下的特定路徑。 如果組態檔是applicationHost.config,位置標籤可以包含路徑,範圍從系統中的所有月臺、應用程式和虛擬目錄到特定月臺、應用程式、虛擬目錄或檔案。 位置標記也可以在 web.config 檔案中指定,而且它可以包含目前月臺、應用程式或虛擬目錄下路徑的任何相對路徑。

下列代碼段示範如何指定僅適用於開發人員網站的組態屬性。 這也可以透過網站內容中的web.config檔案來達成。 開發人員網站的有效組態會是 applicationHost.config 中檔案集合的項目清單,加上網站的位置路徑和任何 web.config 檔案。

<location path="Developer Site" overrideMode="Allow"> 
    <defaultDocument enabled="true"> 
        <files> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location>

如果未宣告任何路徑,這相當於指定點 (.),則會將路徑理解為從這個層級和下方到所有子路徑。 在 applicationHost.config 中這樣做也會指定全域層級的組態。

可以在位置標記中定義的屬性是 overrideMode。 如同 overrideModeDefault,這會指定指定的組態區段參考和目前位置標記中設定的屬性是否可以在較低層級的階層中編輯和覆寫。

鎖定和解除鎖定區段

您可以透過 區段中的 overrideModeDefault 標籤 <configSections> 鎖定區段的初始概念,並擴充為更精細。 藉由允許在層級覆 <configSections> 寫區段,該區段會開啟,而且其值可由系統中的任何人透過URL命名空間的任何層級的web.config 檔案覆寫。 不過,這可能會造成嚴重的安全性風險,並可能對系統的可用性或效能造成負面影響。 透過位置標籤,人們可以使用 overrideMode 屬性,並指定區段的鎖定狀態,並針對指定的路徑加以限制。

下列代碼段示範如何解除鎖定 <windowsAuthentication> 系統中所有網站、應用程式和虛擬目錄的 區段。 這是藉由在 overrideModeDefault 屬性中設定 「Allow」 來完成。 這種方法的缺點是,它會解除鎖定每個人的區段,而任何人都可以透過web.config檔案覆寫其網站或應用層級的設定。

<section name="windowsAuthentication" overrideModeDefault="Allow" />

下列代碼段示範如何達成相同的動作、解除 <windowsAuthentication> 鎖定區段,但僅適用於 AdministratorSite,以便透過月臺 AdministratorSite 層級的 web.config 檔案修改該區段的屬性。 系統中的其他月臺具有鎖定 <windowsAuthentication> 區段的預設行為。 這是透過 overrideMode 屬性完成的。

<location path="AdministratorSite" overrideMode="Allow"> 
   <security> 
        <authentication> 
            <windowsAuthentication enabled="false"> 
                <providers> 
                    <add value="Negotiate" /> 
                    <add value="NTLM" /> 
                </providers> 
            </windowsAuthentication> 
        </authentication> 
   </security> 
</location> 
 
The location tag path can be specified here a site, application or even a virtual directory to which the administrator wants to unlock configuration and/or apply configuration at that level.

可以達成相反的行為,這是鎖定特定網站的區段,而系統的其餘部分則能夠編輯它。 例如, <defaultDocument> 是一個區段,其 overrideModeDefault 屬性在 區段中設定為 “Allow” <configSections> ,但是透過位置標記,我們可以鎖定基本網站的這個區段。 下列代碼段示範如何完成此作業,同時設定 ,讓系統接受的唯一值做為伺服器的默認頁面,如首頁標題 為basic.htm。 clear 指示詞會從組態階層中的上述層級中 Null 任何繼承的值,在此案例中是 applicationHost.config 檔案的全域清單。

<location path="Basic Site" overrideMode="Deny"> 
    <defaultDocument enabled="true"> 
        <files> 
       </clear> 
            <add value="basic.htm" /> 
        </files> 
    </defaultDocument> 
</location>

細微鎖定

透過位置標籤開啟區段是解除鎖定區段及其所有屬性的有效方式,適用於指定路徑之網站或應用程式的擁有者。 這實際上就是讓網站和應用程式擁有者可以無限制地存取區段的方法。 不過,有時候系統管理員想要特定控制區段中的特定屬性,以及想要控制特定值。 其他可以委派。 這是細微鎖定所在的位置。

細微鎖定是可在專案或其他屬性上設定的特定屬性群組。 細微鎖定可以宣告目前路徑下方的路徑是否可以修改組態值。 可以讀取值,但如果已設定鎖定,就無法編輯或甚至宣告這些值。 請勿編輯鎖定設定的值,因為這樣會導致設定鎖定違規錯誤。

細微鎖定群組中的第一個屬性是 lockAttributes。 lockAttributes 定義以逗號分隔的屬性清單,這些屬性會鎖定在目前組態層級以下的路徑。 它也接受星號 \ 作為其值,這表示所有屬性都已鎖定。 此時,可以在子層級路徑甚至鎖定的屬性中讀取組態區段,但編輯受保護的屬性會導致錯誤。

下列代碼段示範如何鎖定開發人員網站的 defaultDocument> 區段已啟用狀態<。 如果開發人員網站的擁有者停用預設檔功能,或甚至宣告屬性的值與其在位置標籤中所陳述的值相同,就會發生鎖定違規。

<location path="Developer Site" > 
    <defaultDocument enabled="true" lockAttributes="enabled" /> 
</location>

細微鎖定群組中的第二個屬性是 lockElements。 lockElements 會定義以逗號分隔的元素清單,這些元素會鎖定在目前組態層級下方的路徑。 如同 lockAttributes,它也接受星號 \ 作為其值,這表示所有元素都已鎖定。 這對於具有多個元素或集合且必須針對子層級路徑保護的組態區段非常有用。 同樣地,編輯任何鎖定的值會導致錯誤。

下列代碼段示範如何鎖定開發人員網站的檔案集合。 這會讓網站擁有者決定是否啟用預設檔功能;但是,如果啟用,它就無法修改全域值,並繼承計算機系統管理員在 applicationHost.config 中所陳述的內容。

<location path="Developer Site"> 
    <defaultDocument enabled="true" lockElements="files" > 
        <files> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location>

lockElement 範例在集合中也很有用,可鎖定 這類集合的指示詞 。 指示詞是新增、移除、清除集合等關鍵詞。 藉由鎖定 指示詞,系統管理員可以微調集合清單是否可用於新增或移除特定或所有元素。

下列代碼段示範如何鎖定檔案集合中目前專案的移除和清除。 網站擁有者可以視需要將新專案新增至檔案集合。 如果網站擁有者指定清楚標記或嘗試移除專案,就會發生鎖定違規。

<location path="Developer Site"> 
    <defaultDocument enabled="true" > 
        <files lockElements="clear,remove"> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location> 
 
Besides lockAttribute and lockElement, there are negative counterparts: lockAllAttributesExcept, and lockAllElementsExcept. These attributes achieve  the inverse action of the previous ones in which the comma-separated list declares the attributes and elements to be unlocked while the rest are not  available to be edited in child paths.

也有 lockItem 屬性。 這會鎖定屬性,並在 XML 屬性層級運作。 下列代碼段顯示網站管理員如何執行任何想要執行的任何動作,例如新增或移除集合中的專案,但修改檔案集合中的basic.htm專案除外。

<location path="Developer Site"> 
    <defaultDocument enabled="true" > 
        <files> 
            <add value="basic.htm" lockItem="true"/> 
        </files> 
    </defaultDocument> 
</location>

摘要

本檔概述組態系統、其檔案、架構和委派功能的基本概觀。 它也會討論組態階層和有效的組態。 本文也介紹了組態區段及其元素和屬性的結構。 它說明瞭位置、鎖定和細微鎖定的概念。

整體來說,IIS 引進了新的檔案型組態系統,其功能包括中央組態檔中的所有組態,或透過web.config檔案散發,網站和應用程式管理員能夠修改套用至其應用程式和內容的屬性。 透過分散式組態模型,獨立式應用程式的概念包括內容和組態設定都儲存在月臺或應用程式目錄中,而且可以從一部計算機部署至另一部機器的 x-copy