摘要
本文檔介紹如何鎖定和解鎖服務(wù)器上的配置。 你將了解應(yīng)用程序級(jí)配置文件可以替代哪些設(shè)置,以及如何使用 <location>
元素來(lái)鎖定整個(gè)部分。
你將在部分內(nèi)嘗試更精細(xì)地鎖定配置設(shè)置,例如:
閱讀本文檔后,你將了解如何通過(guò)直接編輯配置文件中的 XML 元素來(lái)管理配置鎖定的不同功能, (編程接口來(lái)執(zhí)行這些任務(wù),這些任務(wù)非常) XML 結(jié)構(gòu)。
本文檔有意只側(cè)重于編輯配置文件中的 XML 元素,而不是展示使用管理 API、腳本或用戶界面 (UI) 完成相同任務(wù)的方法。
IIS 7.0 及更高版本允許鎖定和解鎖不同級(jí)別和范圍內(nèi)的配置設(shè)置。 鎖定配置意味著不能在層次結(jié)構(gòu)中較低級(jí)別的所有) (重寫或設(shè)置它。 解鎖配置只能在鎖定的級(jí)別上完成。 這非常有用,例如,為不同的站點(diǎn)或路徑創(chuàng)建不同的配置,并且僅允許某些站點(diǎn)和路徑重寫它。 鎖定可以在節(jié)級(jí)別執(zhí)行,也可以對(duì)節(jié)內(nèi)的特定元素、屬性、集合元素和集合指令進(jìn)行鎖定。
任務(wù) 1:使用 <location>
標(biāo)記鎖定節(jié)
在此任務(wù)中,你將了解如何使用 <location>
標(biāo)記在全局級(jí)別鎖定 (或解鎖) 整個(gè)配置節(jié),以便無(wú)法在配置層次結(jié)構(gòu)的應(yīng)用程序級(jí)別重寫它們。
備注
默認(rèn)情況下,applicationHost.config 中的大多數(shù) IIS 節(jié)都處于鎖定狀態(tài),并且不會(huì)鎖定任何 .NET Framework (包括 machine.config 和 root web.config) 中的 <system.web> 節(jié)組中的 ASP.NET 節(jié)。
使用記事本等文本編輯器,在以下位置打開 applicationHost.config 文件:
%windir%\system32\inetsrv\config\applicationHost.config
<configSections>
查看文件最頂部的部分:其中包含有關(guān)此文件中配置節(jié)的元數(shù)據(jù),例如節(jié)的名稱、包含節(jié)組以及它們是否被鎖定。
鎖定部分由“overrideModeDefault”屬性指定,該屬性為“Allow”或“Deny”。 默認(rèn)情況下,不鎖定極少數(shù)部分,如以下行所指定,例如:
XML
<section name="defaultDocument" overrideModeDefault="Allow" />
在這里,我們將處理 部分 <windowsAuthentication>
。 默認(rèn)情況下,它處于鎖定狀態(tài)。
若要解鎖服務(wù)器上所有應(yīng)用程序的整個(gè)部分,請(qǐng)將其內(nèi)容從文件中的當(dāng)前位置移動(dòng)到文件底部,并將其置于 元素內(nèi) <location overrideMode="Allow">
。 還記得讓節(jié)組圍繞它:<system.webServer
,然后><security
是 <authentication
>。> 最終結(jié)果應(yīng)如下所示:
XML
<location overrideMode="Allow">
<system.webServer>
<security>
<authentication>
<!-- the content of windowsAuthentication section is here -->
</authentication>
</security>
</system.webServer>
</location>
現(xiàn)在,已為所有應(yīng)用程序解鎖該部分。 可以在位置標(biāo)記上指定路徑,以便僅為此路徑解鎖分區(qū)。 如果未按上一步) (指定默認(rèn)路徑,則默認(rèn)路徑為 path=“.” (或 path=“”,) 表示“此當(dāng)前級(jí)別”。 在這種情況下,由于這是applicationHost.config,因此當(dāng)前級(jí)別表示全局級(jí)別。 還可以在命名空間層次結(jié)構(gòu)中的任何位置(例如 vdir 級(jí)別的web.config)使用位置標(biāo)記,從此點(diǎn)向下鎖定配置。
下面是如何僅為“AdminSuperTrusted”站點(diǎn)解鎖此部分的示例。 這意味著該站點(diǎn)上的web.config文件可以替代本節(jié)中的設(shè)置;但是,對(duì)于框上的所有其他站點(diǎn),它在全局級(jí)別鎖定,無(wú)法重寫。
在此示例中,必須將節(jié)的內(nèi)容保留在其原始位置applicationHost.config,然后在 location 標(biāo)記中指定具有特定路徑的節(jié):
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>
返回到上面的第三個(gè)示例,為所有站點(diǎn)中的所有應(yīng)用程序解鎖節(jié), (location path=“。) 。 檢查主<身份驗(yàn)證節(jié)組是否 (元素外部的<location>
組,) 文件中的“主身份驗(yàn)證>”部分是否不包含 <windowsAuthenitcation> 節(jié)。 節(jié)不能出現(xiàn)在位置標(biāo)記外部和 location path=“的同一 <文件中。> 標(biāo)記;這被視為無(wú)效配置。
若要測(cè)試某個(gè)分區(qū)是否已鎖定,請(qǐng)?jiān)跒g覽器中轉(zhuǎn)到 http://localhost/app
。
如果分區(qū)被鎖定,瀏覽器將顯示錯(cuò)誤,因?yàn)閼?yīng)用程序級(jí)別的 web.config 文件包含 <windowsAuthentication>
節(jié)。 這意味著web.config嘗試對(duì)其級(jí)別進(jìn)行替代 <windowsAuthentication>
。 但是,由于該部分現(xiàn)在在全局級(jí)別鎖定,因此web.config文件中的配置無(wú)效。
將位置標(biāo)記更改為 overrideMode=“Deny”。 這會(huì)再次鎖定該部分。 嘗試其他分區(qū),例如machine.config或根web.config中的 ASP.NET 節(jié)。嘗試在全局級(jí)別鎖定它們,并在web.config級(jí)別替代它們。
在上一個(gè)任務(wù)的基礎(chǔ)上,找到 <windowsAuthentication>
標(biāo)記內(nèi)的 <location>
節(jié)。 設(shè)置位置標(biāo)記以解鎖節(jié):overrideMode=“Allow”。 我們僅不會(huì)鎖定節(jié)的特定部分。
將 enabled 屬性設(shè)置為 true,然后通過(guò)設(shè)置 lockAttributes=“enabled”將其鎖定。
這可以防止應(yīng)用程序級(jí)配置文件更改節(jié)的 enabled 屬性的值<windowsAuthentication>
。
如果要鎖定其他屬性,請(qǐng)將其添加到用逗號(hào)分隔的 lockAttributes 值,如以下示例所示:
控制臺(tái)
lockAttributes="enabled,attribute1,attribute2"
還可以使用“*”鎖定所有屬性,如以下示例所示:
控制臺(tái)
lockAttributes="*"
部分現(xiàn)在應(yīng)如下所示:
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>
在應(yīng)用程序的 web.config 文件中,嘗試替代 部分中的設(shè)置 <windowsAuthentication>
。
在瀏覽器中,請(qǐng)求頁(yè)面驗(yàn)證是否可以替代除鎖定的設(shè)置之外的所有設(shè)置(在本例中為 enabled 屬性)。
備注
只需在 web.config 文件中指定 屬性會(huì)導(dǎo)致配置失敗,即使在 Web.config 文件中設(shè)置的屬性的值與 ApplicationHost.config 文件中的值相同也是如此。 將鎖定的屬性設(shè)置為任何值被視為嘗試替代該屬性,因此會(huì)失敗。 (另請(qǐng)注意,屬性與元素不同,在下一個(gè)任務(wù)中,你將鎖定 element.)
刪除 lockAttributes 屬性。
設(shè)置 lockElements=“providers”以鎖定 <providers>
節(jié)中的元素。
如果有要鎖定的其他元素,可以添加用逗號(hào)分隔的元素,如下所示:
控制臺(tái)
lockElements="providers,element1,element2"
部分現(xiàn)在應(yīng)如下所示:
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>
在應(yīng)用程序Web.config文件中,通過(guò)設(shè)置元素或嘗試將 元素添加到集合、從集合中刪除或清除來(lái)替代 <providers>
元素。
在瀏覽器中,請(qǐng)求頁(yè)面,并注意顯示錯(cuò)誤。 在 web.config 文件中,替代其他元素或?qū)傩?,例?nbsp;enabled 屬性。 瀏覽到頁(yè)面,注意未顯示任何錯(cuò)誤。
刪除 lockElements 屬性。
任務(wù) 3:鎖定除特定屬性之外的所有內(nèi)容
在此任務(wù)中,你將了解如何鎖定節(jié)中的所有元素或?qū)傩裕x的特定元素或?qū)傩猿狻?如果不確定節(jié)具有或?qū)?lái)將具有哪些屬性,并且想要鎖定除顯式設(shè)置為解鎖的屬性之外的所有屬性,這非常有用。
在上一個(gè)任務(wù)的基礎(chǔ)上,在 <windowsAuthentication>
位置標(biāo)記中找到 節(jié)。
將 lockAllElementsExcept 或 lockAllAttributesExcept 屬性設(shè)置為要鎖定的元素或?qū)傩缘亩禾?hào)分隔列表。 例如, 部分可能如下所示:
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>
在此特定部分中,當(dāng)前沒有其他屬性或元素。 如果要測(cè)試設(shè)置 lockAllElementsExcept 或 lockAllAttributesExcept 屬性的效果,請(qǐng)將相同的屬性添加到具有更豐富的屬性集的其他節(jié)。
在此任務(wù)中,你將了解如何鎖定 <add>
集合上的 和 <remove>
指令,以便在應(yīng)用程序級(jí)別添加但不能刪除配置文件元素。
在上一個(gè)任務(wù)的基礎(chǔ)上,在 <windowsAuthentication>
位置標(biāo)記中找到 節(jié)。
將集合中的 <providers>
lockElements 屬性設(shè)置為 remove,clear。
完成后,該部分如下所示:
XML
<windowsAuthentication enabled="true" >
<providers lockElements="remove,clear">
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
在應(yīng)用程序的 web.config 文件中,創(chuàng)建一個(gè) <remove>
從集合中刪除 NTLM 元素的 元素。
完成后,web.config文件如下所示:
XML
<configuration>
<system.webServer>
<security>
<authentication>
<windowsAuthentication>
<providers>
<remove value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</configuration>
在瀏覽器中,請(qǐng)求 http://localhost/app
。
在此任務(wù)中,你將了解如何鎖定特定的集合元素。 開發(fā)人員仍可以在較低 (應(yīng)用程序) 層次結(jié)構(gòu)級(jí)別向集合中添加元素,并且他們?nèi)匀豢梢詮募现袆h除非鎖定元素。 但是,它們無(wú)法刪除你專門鎖定的元素。 無(wú)法清除集合,因?yàn)榍宄馕吨鴱募现袆h除所有元素。
在前面的任務(wù)的基礎(chǔ)上,在 <windowsAuthentication>
位置標(biāo)記中找到 部分。
在 <providers>
集合中,在 NTLM 提供程序的 元素中 <add>
,將 lockItem 設(shè)置為“true”。
完成后,該部分如下所示:
XML
<windowsAuthentication enabled="true" >
<providers>
<add value="Negotiate" />
<add value="NTLM" lockItem="true" />
</providers>
</windowsAuthentication>
在應(yīng)用程序web.config 文件中,創(chuàng)建一個(gè) <remove>
從集合中刪除 NTLM 元素的 元素。
完成后,Web.config文件如下所示:
XML
<configuration>
<system.webServer>
<security>
<authentication>
<windowsAuthentication>
<providers>
<remove value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</configuration>
在瀏覽器中,請(qǐng)求 http://localhost/app
-- 請(qǐng)求失敗。
本文檔介紹了如何鎖定配置設(shè)置。 可以通過(guò)使用 <location>
元素或?qū)?biāo)記的 lockItem 屬性設(shè)置為 true 來(lái)鎖定整個(gè)節(jié)。 如果在集合元素上使用 lockAttributes、 lockElements、 lockAllAttributesExcept、 lockAllElementsExcept 或 lockItem 設(shè)置,并且對(duì)集合使用 lockElements 設(shè)置來(lái)指定特定集合指令 (<add>
、 <remove>
或) ,則鎖定可以更加靈活和 <clear>
精細(xì)。 鎖定可以在層次結(jié)構(gòu)的任何級(jí)別發(fā)生,而不僅僅是ApplicationHost.config。鎖定從該級(jí)別向下生效。
相關(guān)教程:
IIS7中如何通過(guò)新增加的管理工具AppCmd直接修改鎖定節(jié)和解除鎖定屬性等各種參數(shù)[18]
http://21613.oa22.cn
升級(jí)點(diǎn)晴MIS系統(tǒng)時(shí)提示:HTTP錯(cuò)誤500.19-Internal Server Error鎖定沖突,如何解決?[9]
http://21614.oa22.cn
IIS7站點(diǎn)控制管理工具appcmd命令行直接修改IIS配置參數(shù)[4]
http://21616.oa22.cn
該文章在 2023/10/9 15:30:16 編輯過(guò)