摘要
本文檔介紹如何鎖定和解鎖服務器上的配置。 你將了解應用程序級配置文件可以替代哪些設置,以及如何使用 <location>
元素來鎖定整個部分。
你將在部分內嘗試更精細地鎖定配置設置,例如:
閱讀本文檔后,你將了解如何通過直接編輯配置文件中的 XML 元素來管理配置鎖定的不同功能, (編程接口來執行這些任務,這些任務非常) XML 結構。
本文檔有意只側重于編輯配置文件中的 XML 元素,而不是展示使用管理 API、腳本或用戶界面 (UI) 完成相同任務的方法。
IIS 7.0 及更高版本允許鎖定和解鎖不同級別和范圍內的配置設置。 鎖定配置意味著不能在層次結構中較低級別的所有) (重寫或設置它。 解鎖配置只能在鎖定的級別上完成。 這非常有用,例如,為不同的站點或路徑創建不同的配置,并且僅允許某些站點和路徑重寫它。 鎖定可以在節級別執行,也可以對節內的特定元素、屬性、集合元素和集合指令進行鎖定。
在此任務中,你將了解如何使用 <location>
標記在全局級別鎖定 (或解鎖) 整個配置節,以便無法在配置層次結構的應用程序級別重寫它們。
備注
默認情況下,applicationHost.config 中的大多數 IIS 節都處于鎖定狀態,并且不會鎖定任何 .NET Framework (包括 machine.config 和 root web.config) 中的 <system.web> 節組中的 ASP.NET 節。
使用記事本等文本編輯器,在以下位置打開 applicationHost.config 文件:
%windir%\system32\inetsrv\config\applicationHost.config
<configSections>
查看文件最頂部的部分:其中包含有關此文件中配置節的元數據,例如節的名稱、包含節組以及它們是否被鎖定。
鎖定部分由“overrideModeDefault”屬性指定,該屬性為“Allow”或“Deny”。 默認情況下,不鎖定極少數部分,如以下行所指定,例如:
XML
<section name="defaultDocument" overrideModeDefault="Allow" />
在這里,我們將處理 部分 <windowsAuthentication>
。 默認情況下,它處于鎖定狀態。
若要解鎖服務器上所有應用程序的整個部分,請將其內容從文件中的當前位置移動到文件底部,并將其置于 元素內 <location overrideMode="Allow">
。 還記得讓節組圍繞它:<system.webServer
,然后><security
是 <authentication
>。> 最終結果應如下所示:
XML
<location overrideMode="Allow">
<system.webServer>
<security>
<authentication>
<!-- the content of windowsAuthentication section is here -->
</authentication>
</security>
</system.webServer>
</location>
現在,已為所有應用程序解鎖該部分。 可以在位置標記上指定路徑,以便僅為此路徑解鎖分區。 如果未按上一步) (指定默認路徑,則默認路徑為 path=“.” (或 path=“”,) 表示“此當前級別”。 在這種情況下,由于這是applicationHost.config,因此當前級別表示全局級別。 還可以在命名空間層次結構中的任何位置(例如 vdir 級別的web.config)使用位置標記,從此點向下鎖定配置。
下面是如何僅為“AdminSuperTrusted”站點解鎖此部分的示例。 這意味著該站點上的web.config文件可以替代本節中的設置;但是,對于框上的所有其他站點,它在全局級別鎖定,無法重寫。
在此示例中,必須將節的內容保留在其原始位置applicationHost.config,然后在 location 標記中指定具有特定路徑的節:
XML
<location path="AdminSuperTrustedSite" overrideMode="Allow">
<system.webServer>
<security>
<authentication>
<!-- note: this is different than previous example, in that -->
<!-- the content of the section is in the original place and -->
<!-- was not moved here; in addition, the section is also -->
<!-- specified here, just by its name, so that it gets -->
<!-- unlocked only for the site specified in the location. -->
<windowsAuthentication/>
</authentication>
</security>
</system.webServer>
</location>
返回到上面的第三個示例,為所有站點中的所有應用程序解鎖節, (location path=“。) 。 檢查主<身份驗證節組是否 (元素外部的<location>
組,) 文件中的“主身份驗證>”部分是否不包含 <windowsAuthenitcation> 節。 節不能出現在位置標記外部和 location path=“的同一 <文件中。> 標記;這被視為無效配置。
若要測試某個分區是否已鎖定,請在瀏覽器中轉到 http://localhost/app
。
如果分區被鎖定,瀏覽器將顯示錯誤,因為應用程序級別的 web.config 文件包含 <windowsAuthentication>
節。 這意味著web.config嘗試對其級別進行替代 <windowsAuthentication>
。 但是,由于該部分現在在全局級別鎖定,因此web.config文件中的配置無效。
將位置標記更改為 overrideMode=“Deny”。 這會再次鎖定該部分。 嘗試其他分區,例如machine.config或根web.config中的 ASP.NET 節。嘗試在全局級別鎖定它們,并在web.config級別替代它們。
在上一個任務的基礎上,找到 <windowsAuthentication>
標記內的 <location>
節。 設置位置標記以解鎖節:overrideMode=“Allow”。 我們僅不會鎖定節的特定部分。
將 enabled 屬性設置為 true,然后通過設置 lockAttributes=“enabled”將其鎖定。
這可以防止應用程序級配置文件更改節的 enabled 屬性的值<windowsAuthentication>
。
如果要鎖定其他屬性,請將其添加到用逗號分隔的 lockAttributes 值,如以下示例所示:
控制臺
lockAttributes="enabled,attribute1,attribute2"
還可以使用“*”鎖定所有屬性,如以下示例所示:
部分現在應如下所示:
XML
<location path="." overrideMode="Allow"> <system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" lockAttributes="enabled">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</location>
在應用程序的 web.config 文件中,嘗試替代 部分中的設置 <windowsAuthentication>
。
在瀏覽器中,請求頁面驗證是否可以替代除鎖定的設置之外的所有設置(在本例中為 enabled 屬性)。
備注
只需在 web.config 文件中指定 屬性會導致配置失敗,即使在 Web.config 文件中設置的屬性的值與 ApplicationHost.config 文件中的值相同也是如此。 將鎖定的屬性設置為任何值被視為嘗試替代該屬性,因此會失敗。 (另請注意,屬性與元素不同,在下一個任務中,你將鎖定 element.)
刪除 lockAttributes 屬性。
設置 lockElements=“providers”以鎖定 <providers>
節中的元素。
如果有要鎖定的其他元素,可以添加用逗號分隔的元素,如下所示:
控制臺
lockElements="providers,element1,element2"
部分現在應如下所示:
XML
<location path="." overrideMode="Allow"> <system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" lockElements="providers">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</location>
在應用程序Web.config文件中,通過設置元素或嘗試將 元素添加到集合、從集合中刪除或清除來替代 <providers>
元素。
在瀏覽器中,請求頁面,并注意顯示錯誤。 在 web.config 文件中,替代其他元素或屬性,例如 enabled 屬性。 瀏覽到頁面,注意未顯示任何錯誤。
刪除 lockElements 屬性。
在此任務中,你將了解如何鎖定節中的所有元素或屬性,但定義的特定元素或屬性除外。 如果不確定節具有或將來將具有哪些屬性,并且想要鎖定除顯式設置為解鎖的屬性之外的所有屬性,這非常有用。
在上一個任務的基礎上,在 <windowsAuthentication>
位置標記中找到 節。
將 lockAllElementsExcept 或 lockAllAttributesExcept 屬性設置為要鎖定的元素或屬性的逗號分隔列表。 例如, 部分可能如下所示:
XML
<windowsAuthentication enabled="true" lockAllElementsExcept="providers">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
或者如下所示:
XML
<windowsAuthentication enabled="true" lockAllAttributesExcept="enabled">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
在此特定部分中,當前沒有其他屬性或元素。 如果要測試設置 lockAllElementsExcept 或 lockAllAttributesExcept 屬性的效果,請將相同的屬性添加到具有更豐富的屬性集的其他節。
在此任務中,你將了解如何鎖定 <add>
集合上的 和 <remove>
指令,以便在應用程序級別添加但不能刪除配置文件元素。
在上一個任務的基礎上,在 <windowsAuthentication>
位置標記中找到 節。
將集合中的 <providers>
lockElements 屬性設置為 remove,clear。
完成后,該部分如下所示:
XML
<windowsAuthentication enabled="true" >
<providers lockElements="remove,clear">
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
在應用程序的 web.config 文件中,創建一個 <remove>
從集合中刪除 NTLM 元素的 元素。
完成后,web.config文件如下所示:
XML
<configuration>
<system.webServer>
<security>
<authentication>
<windowsAuthentication>
<providers>
<remove value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</configuration>
在瀏覽器中,請求 http://localhost/app
。
在此任務中,你將了解如何鎖定特定的集合元素。 開發人員仍可以在較低 (應用程序) 層次結構級別向集合中添加元素,并且他們仍然可以從集合中刪除非鎖定元素。 但是,它們無法刪除你專門鎖定的元素。 無法清除集合,因為清除意味著從集合中刪除所有元素。
在前面的任務的基礎上,在 <windowsAuthentication>
位置標記中找到 部分。
在 <providers>
集合中,在 NTLM 提供程序的 元素中 <add>
,將 lockItem 設置為“true”。
完成后,該部分如下所示:
XML
<windowsAuthentication enabled="true" >
<providers>
<add value="Negotiate" />
<add value="NTLM" lockItem="true" />
</providers>
</windowsAuthentication>
在應用程序web.config 文件中,創建一個 <remove>
從集合中刪除 NTLM 元素的 元素。
完成后,Web.config文件如下所示:
XML
<configuration>
<system.webServer>
<security>
<authentication>
<windowsAuthentication>
<providers>
<remove value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</configuration>
在瀏覽器中,請求 http://localhost/app
-- 請求失敗。
本文檔介紹了如何鎖定配置設置。 可以通過使用 <location>
元素或將標記的 lockItem 屬性設置為 true 來鎖定整個節。 如果在集合元素上使用 lockAttributes、 lockElements、 lockAllAttributesExcept、 lockAllElementsExcept 或 lockItem 設置,并且對集合使用 lockElements 設置來指定特定集合指令 (<add>
、 <remove>
或) ,則鎖定可以更加靈活和 <clear>
精細。 鎖定可以在層次結構的任何級別發生,而不僅僅是ApplicationHost.config。鎖定從該級別向下生效。
相關教程:
IIS7中如何通過新增加的管理工具AppCmd直接修改鎖定節和解除鎖定屬性等各種參數[18]
http://21613.oa22.cn
升級點晴MIS系統時提示:HTTP錯誤500.19-Internal Server Error鎖定沖突,如何解決?[9]
http://21614.oa22.cn
IIS7站點控制管理工具appcmd命令行直接修改IIS配置參數[4]
http://21616.oa22.cn
該文章在 2023/10/9 15:30:16 編輯過