Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткие сведения
В этом документе объясняется, как заблокировать и разблокировать конфигурацию на сервере. Вы узнаете, какие параметры могут быть переопределены в файлах конфигурации на уровне приложения, и как использовать элемент <location> для блокировки целых разделов.
Вы будете экспериментировать с более детализированной блокировкой параметров конфигурации в разделах, таких как:
- Блокировка определенных элементов и атрибутов
- Блокировка всего, кроме определенных элементов или атрибутов
- Блокировка определенных директив коллекции, таких как директивы
<add>,<remove>и<clear> - Блокировка определенных элементов в коллекциях
После чтения этого документа вы узнаете, как управлять различными функциями блокировки конфигурации путем прямого редактирования XML-элементов в файлах конфигурации (программный интерфейс для выполнения этих задач следует структуре XML очень тесно).
В этом документе основное внимание уделяется редактированию XML-элементов в файлах конфигурации, вместо того чтобы показать, как выполнять те же задачи с помощью API администрирования, скриптов или ПИ.
Введение
IIS 7.0 и более поздних версий позволяет блокировать и разблокировать параметры конфигурации в различных уровнях и областях. Блокировка конфигурации означает, что ее нельзя переопределить (или задать вообще) на более низких уровнях в иерархии. Разблокировка конфигурации может выполняться только на уровне, где она была заблокирована. Это полезно, например, при создании различных конфигураций для разных сайтов и путей, и только некоторые из них могут переопределять эту настройку. Блокировка может выполняться на уровне раздела или для определенных элементов, атрибутов, элементов коллекции и директив коллекции в разделах.
Задача 1. Блокировка раздела с помощью тега <location>
В этой задаче вы узнаете, как использовать <location> тег для блокировки (или разблокировки) всех разделов конфигурации на глобальном уровне, чтобы они не были переопределены на уровнях приложений иерархии конфигурации.
Замечание
По умолчанию большинство разделов IIS в applicationHost.config заблокированы, и ни одна из платформ .NET не заблокирована (включая разделы ASP.NET в группе разделов system.web< в >machine.config и корневом web.config).
Используя текстовый редактор, например Блокнот, откройте файл applicationHost.config в следующем расположении:
%windir%\system32\inetsrv\config\applicationHost.config
<configSections> Просмотрите раздел в самой верхней части файла: он содержит метаданные о разделах конфигурации в этом файле, таких как имена разделов, содержащих группы разделов, а также о том, заблокированы ли они.
Заблокированные разделы задаются атрибутом overrideModeDefault, который имеет значение Allow или Deny. Очень немногие разделы по умолчанию не блокируются, как указано в этой строке, например:
<section name="defaultDocument" overrideModeDefault="Allow" />
Здесь мы имеем дело с разделом <windowsAuthentication> . Он заблокирован по умолчанию.
Чтобы разблокировать весь раздел для всех приложений на сервере, переместите его содержимое из текущего расположения в файле в нижней части файла и поместите его в <location overrideMode="Allow"> элемент. Не забудьте также иметь группы разделов, окружающие его: <system.webServer>затем <security> , а затем <authentication>. Конечный результат должен выглядеть следующим образом:
<location overrideMode="Allow">
<system.webServer>
<security>
<authentication>
<!-- the content of windowsAuthentication section is here -->
</authentication>
</security>
</system.webServer>
</location>
Теперь раздел разблокирован для всех приложений. Можно указать путь к тегу расположения, чтобы раздел был разблокирован только для этого пути. Путь по умолчанию, если он не указан (как на предыдущем шаге), имеет значение path=". (или path=", то же самое), что означает "текущий уровень". В этом случае, так как это applicationHost.config, текущий уровень означает глобальный уровень. Вы также можете использовать теги расположения в любой точке иерархии пространства имен, например в web.config на уровне vdir, чтобы заблокировать конфигурацию с этой точки вниз.
Ниже приведен пример разблокировки этого раздела только для сайта AdminSuperTrusted. Это означает, что файлы web.config на этом сайте могут переопределить параметры в этом разделе; но для всех остальных сайтов на сервере они заблокированы на глобальном уровне и не могут быть переопределены.
В этом примере необходимо оставить содержимое раздела в исходном месте в applicationHost.config, а затем указать раздел в теге расположения с определенным путем:
<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> в файле выше) не содержит <раздел windowsAuthenitcation>. Раздел не может отображаться в одном файле как за пределами тега расположения, так и внутри <пути расположения=".> Тег; это считается недопустимой конфигурацией.
Чтобы проверить, заблокирован ли раздел, перейдите http://localhost/app в браузер.
Если раздел заблокирован, браузер отображает ошибку, так как файл web.config на уровне приложения содержит <windowsAuthentication> раздел. Это означает, что web.config пытается переопределить <windowsAuthentication> на своем уровне. Однако, так как этот раздел теперь заблокирован на глобальном уровне, конфигурация в файле web.config недопустима.
Измените тег location, установив для параметра overrideMode значение "Deny". Это снова блокирует раздел. Экспериментируйте с другими секциями, например, секциями ASP.NET в файлах конфигурации machine.config или корневом web.config. Попробуйте заблокировать их на глобальном уровне и переопределить их на уровне web.config.
Задача 2. Блокировка определенных элементов и атрибутов
На основе предыдущей задачи найдите <windowsAuthentication> раздел внутри тега <location> . Задайте тег расположения, чтобы разблокировать раздел: overrideMode="Allow". Мы не заблокируем только определенные части раздела.
Задайте для атрибута включено значение true, а затем заблокируйте его, задав lockAttributes="enabled".
Это предотвращает файл конфигурации уровня приложения от изменения значения атрибута <windowsAuthentication>enabled в разделе.
Если вы хотите заблокировать другие атрибуты, добавьте их в значение lockAttributes , разделенное запятыми, как показано в следующем примере:
lockAttributes="enabled,attribute1,attribute2"
Вы также можете заблокировать все атрибуты с помощью "*", как в следующем примере:
lockAttributes="*"
Теперь раздел должен выглядеть следующим образом:
<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> разделе.
В браузере попросите страницу проверить, можно ли переопределить все параметры, кроме заблокированных, в этом случае — включенный атрибут.
Замечание
Простое указание атрибута в файле web.config приводит к сбою конфигурации, даже если атрибут, заданный в файле Web.config, имеет то же значение, что и в файле ApplicationHost.config. Установка заблокированного атрибута на любое значение считается попыткой переопределить атрибут и поэтому завершается сбоем. (Кроме того, обратите внимание, что атрибуты отличаются от элементов— в следующей задаче вы заблокируете элемент.)
Удалите атрибут lockAttributes .
Задайте lockElements="providers" для блокировки <providers> элемента в разделе.
Если у вас есть другие элементы для блокировки, их можно добавить, разделяя запятыми, вот так:
lockElements="providers,element1,element2"
Теперь раздел должен выглядеть следующим образом:
<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 переопределите другие элементы или атрибуты, такие как включенный атрибут. Перейдите на страницу и заметьте, что ошибка не отображается.
Удалите атрибут lockElements .
Задача 3. Блокировка всего, кроме определенных атрибутов
В этой задаче вы узнаете, как заблокировать все элементы или атрибуты в разделе, кроме определенных, которые вы определили. Это полезно в случаях, когда вы не уверены, какие свойства раздела имеют или будут иметь в будущем, и вы хотите заблокировать все, кроме свойств, которые вы явно задали для разблокировки.
На основе предыдущей задачи найдите <windowsAuthentication> раздел в теге расположения.
Задайте атрибуты lockAllElementsExcept или lockAllAttributesExcept в виде списка элементов или атрибутов, разделенных запятыми, для блокировки. Например, раздел может выглядеть следующим образом:
<windowsAuthentication enabled="true" lockAllElementsExcept="providers">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
Или, как показано ниже.
<windowsAuthentication enabled="true" lockAllAttributesExcept="enabled">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
В этом конкретном разделе в настоящее время нет других атрибутов или элементов. Если вы хотите проверить влияние настройки атрибутов lockAllElementsExcept или lockAllAttributesExcept , добавьте те же атрибуты в другие разделы, которые имеют более широкий набор атрибутов.
Задача 4. Блокировка некоторых директив коллекции
В этой задаче вы узнаете, как заблокировать <add> и <remove> директивы коллекции, чтобы на уровне приложения элементы файла конфигурации можно добавлять, но не удалять.
На основе предыдущей задачи найдите <windowsAuthentication> раздел в теге расположения.
Задайте атрибут lockElements в <providers> коллекции, чтобы удалить,очистить.
По завершении раздел выглядит следующим образом:
<windowsAuthentication enabled="true" >
<providers lockElements="remove,clear">
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
В файле web.config приложения создайте <remove> элемент, который удаляет элемент NTLM из коллекции.
По завершении файл web.config выглядит следующим образом:
<configuration>
<system.webServer>
<security>
<authentication>
<windowsAuthentication>
<providers>
<remove value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</configuration>
В браузере сделайте запрос http://localhost/app.
Задача 5. Блокировка определенных элементов в коллекции
В этой задаче вы узнаете, как заблокировать определенные элементы коллекции. Разработчики по-прежнему могут добавлять элементы в коллекцию на более низких уровнях иерархии, и они по-прежнему могут удалять неблокированные элементы из коллекции. Однако они не могут удалить элементы, которые вы специально заблокировали. Невозможно очистить коллекцию, так как очистка означает удаление всех элементов из коллекции.
На основе предыдущих задач найдите <windowsAuthentication> раздел в теге расположения.
В коллекции <providers>, в элементе <add> для NTLM-провайдера установите lockItem в "true".
По завершении раздел выглядит следующим образом:
<windowsAuthentication enabled="true" >
<providers>
<add value="Negotiate" />
<add value="NTLM" lockItem="true" />
</providers>
</windowsAuthentication>
В файле приложения web.config создайте <remove> элемент, который удаляет элемент NTLM из коллекции.
По завершении файл Web.config выглядит следующим образом:
<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. Блокировка вступает в силу с этого уровня вниз.