摘要
本文档介绍如何锁定和解锁服务器上的配置。 你将了解应用程序级配置文件可以替代哪些设置,以及如何使用 <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 编辑过