Основные сведения о делегировании конфигурации IIS 7.0

Саад Ладки (Saad Ladki)

Введение

IIS представляет новую файловую систему конфигурации для седьмого выпуска продукта. Эта новая система подчеркивает систему на основе данных, подходящую для всей веб-платформы, где такие технологии, как ASP.NET, Indigo и даже сторонние компоненты, могут использовать и расширять это хранилище конфигураций для размещения любого сайта или свойства приложения.

Система основана на XML-файлах, определенных в простом и понятном формате с синтаксисом, аналогичным синтаксису ASP.NET web.config файлов. Эти файлы конфигурации содержат параметры в логических группах, и любые изменения в файлах немедленно отражаются на сайте или в приложении, свойства которых изменяются.

Эта новая система также предоставляет делегированный интерфейс администрирования, в котором: администраторы могут разрешить владельцам сайтов и приложений изменять определенные параметры; и влияние этих изменений ограничивается конкретным сайтом или приложением. В этой модели представлена концепция автономных приложений , в которых как содержимое, так и параметры конфигурации размещаются на сайте или в каталоге приложений и могут быть развернуты x-copy с одного компьютера на другой.

Файлы конфигурации и схема конфигурации

В IIS 7.0 и более поздних версий имеется центральный файл конфигурации с именемapplicationHost.config , расположенный в %WINDIR%\System32\InetSrv\Config\. Этот файл заменяет файл metabase.xml, который iis 6.0 использовал для хранилища конфигураций. Эта новая система конфигурации очень простая, основанная на файлах и при этом очень мощная. Служба конфигурации отсутствует, так как IISADMIN не требуется. Каждый рабочий процесс имеет экземпляр компонента чтения конфигурации и извлекает конфигурацию из файлов напрямую.

Кроме того, в памяти отсутствует представление конфигурации. После внесения изменений в файл он немедленно получается рабочим процессом и отражается на заданном сайте, приложении или виртуальном каталоге.

Файл applicationHost.config содержит глобальные параметры для различных функций и компонентов IIS и других веб-технологий. Любое свойство, заданное в этом файле, будет применяться ко всем сайтам, приложениям и виртуальным каталогам на компьютере.

Средство чтения конфигурации, которое использует 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 определяет свойства, необходимые для всех функций Платформы. Корневой файл web.config определяет глобальные параметры для свойств, определенных для всех ASP.NET веб-приложений. Эти два файла аналогичны applicationHost.config IIS. Эти три файла существуют, так как версии платформа .NET Framework и IIS по отдельности. В заданной системе Windows Server с одной версией IIS может быть установлено несколько версий платформы.

Таким образом, иерархия конфигурации определяется и вычисляется для параметров конфигурации системы. Иерархия начинается с machine.config, затем переходит к корневому файлу web.config и applicationHost.config. С этого момента любой необязательный файл web.config, расположенный на уровне сайта, приложения или виртуального каталога, добавляется и применяется к иерархии. В конце свойства наследуются от родительского к дочернему файлу от machine.config до последнего файла web.config (если таковой имеется), а эффективная конфигурация вычисляется для заданного пути.

Поведение наследования выполняется по умолчанию. Любой параметр на более низком уровне иерархии переопределяет родительский параметр, определенный в файле выше текущего уровня. Однако при дальнейшем переходе по иерархии область конфигурации является более ограниченным. Если в качестве machine.config, параметры корневых web.config и applicationHost.config файлов применяются ко всему в системе, то необязательные параметры файлов web.config применяются только к текущему расположению и ниже (будь то сайт, приложение или виртуальный каталог).

Разделы конфигурации

В файле конфигурации есть возможные параметры, которые можно считывать и задавать. Параметры группируются структурированным образом. Несколько параметров, которые похожи или применимы к определенной функции (например, ASP, проверка подлинности, ISAPI и т. д.), группируются в логические блоки, называемые разделами конфигурации. Каждый раздел конфигурации может включать в себя другие разделы конфигурации, но чаще всего определяет элементы, коллекции или атрибуты.

Элемент конфигурации — это XML-элемент, определяющий несколько атрибутов конфигурации. Коллекция конфигураций — это особый случай элемента конфигурации, который содержит список элементов, определенных с помощью директив конфигурации add/remove/clear. Наконец, атрибуты конфигурации являются параметрами конечной конфигурации, которые представляют АТРИБУТы XML.

В следующем фрагменте кода показаны параметры раздела <defaultDocument> . Включенное слово — это атрибут, в котором слово files — это элемент, включающий список других элементов, определенных директивой 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>

Этот раздел конфигурации содержит связанную схему. В следующем фрагменте кода показана схема для <раздела defaultDocument> в файле IIS_schema.xml. Схема определяет имя раздела и пространство имен, в котором он отображается (в данном случае 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 не объявлен, он берется из схемы, а значение по умолчанию — "Везде".

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

Помимо определения раздела и его группы разделов, определены два ключевых атрибута: overrideModeDefault и allowDefinition.

Атрибут overrideModeDefault является необязательным атрибутом, определяющим заблокированное состояние раздела. Доступные значения: Allow или Deny. Значение по умолчанию — "Разрешить". Все разделы IIS, связанные с какой-либо производительностью, безопасностью или критическим аспектом сервера, блокируются с этим атрибутом , для которых задано значение "Deny". Если атрибут overrideModeDefault имеет значение Deny, то все файлы конфигурации на более низком уровне (т. е. web.config файлы), задающие значение свойства для определенного раздела конфигурации, не могут входить в силу и переопределять глобальные значения. Это вызывает нарушение блокировки и возникает ошибка.

Атрибут allowDefinition — это еще один необязательный атрибут, определяющий уровень иерархии, в которой можно определить раздел и задать свойства. Если его значение равно MachineOnly, раздел можно задать только в applicationHost.config или machine.config. Если его значение — MachineToRootWeb, раздел можно задать либо в файлах MachineOnly, либо в корневом web.config. Если оно имеет значение MachineToApplication, раздел можно задать во всех предыдущих трех файлах или в web.config файлах в корневой папке приложения. И, наконец, если его значение равно Everywhere (по умолчанию), его можно задать в любом файле конфигурации, независимо от того, который влияет на конфигурацию глобально или в web.config файлах, которые применяются к данному сайту, приложению или виртуальному каталогу.

Концепция расположения

Любой параметр, указанный в заданном файле иерархии конфигурации, применяется к данному уровню и ниже с возможностью переопределения дочерними файлами. Однако существует возможность указать и применить параметры конфигурации к определенным путям в текущем файле конфигурации с помощью тега location с атрибутом path. Если файл конфигурации applicationHost.config, теги расположения могут включать путь от всех сайтов, приложений и виртуальных каталогов в системе к определенному сайту, приложению, виртуальному каталогу или файлу. Тег location также можно указать в файлах 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 также указывается конфигурация для глобального уровня.

Атрибут, который можно определить в теге location, — это overrideMode. Как и overrideModeDefault, это указывает, можно ли изменить и переопределить заданный раздел конфигурации, на который ссылается ссылка, и свойства, заданные в теге текущего расположения, на более низких уровнях иерархии.

Блокировка и разблокировка раздела

Первоначальная концепция блокировки раздела с помощью тега overrideModeDefault в <configSections> разделе может быть взята и расширена для более детализированного. Разрешив переопределить раздел на <configSections> уровне , он открывается и его значения могут быть переопределены любым пользователем в системе с помощью web.config файлов на любом уровне пространства имен URL-адреса. Однако это может представлять серьезную угрозу безопасности и может негативно повлиять на доступность или производительность системы. С помощью тегов расположения можно использовать атрибут overrideMode и указать состояние блокировки раздела и ограничить его для заданного пути.

В следующем фрагменте кода показано, как разблокировать <windowsAuthentication> раздел для всех сайтов, приложений и виртуальных каталогов в системе. Для этого задается значение Allow в атрибуте overrideModeDefault. Недостаток этого подхода заключается в том, что он разблокирует раздел для всех, и любой пользователь может переопределить параметры на уровне своего сайта или приложения с помощью web.config файлов.

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

В следующем фрагменте кода показано, как выполнить то же самое, разблокируя <windowsAuthentication> раздел, но только для AdministratorSite, чтобы свойства этого раздела можно было изменить с помощью web.config файлов на уровне сайта AdministratorSite. Другие сайты в системе по умолчанию используют заблокированный <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 в <configSections> разделе имеет значение "Разрешить", но с помощью тега location мы можем заблокировать этот раздел для базового сайта. В следующих фрагментах кода показано, как это сделать, а также задать так, чтобы единственное значение, принятое системой в качестве страницы по умолчанию для сервера в качестве домашней страницы, называлось 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 определяет разделенный запятыми список атрибутов, заблокированных для путей ниже текущего уровня конфигурации. Он также принимает звездочку (*) в качестве значения, что означает, что все атрибуты заблокированы. На этом этапе раздел конфигурации можно прочитать в путях дочернего уровня и даже заблокированных атрибутах, но изменение защищенных из них приводит к ошибкам.

В следующем фрагменте кода показано, как заблокировать состояние <enabled раздела defaultDocument> для сайта разработчика. Если владелец сайта разработчика отключает функцию документа по умолчанию или даже объявляет свойство с тем же значением, что и в теге location, происходит нарушение блокировки.

<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 также полезен в коллекциях для блокировки директив такой коллекции. Директивы — это ключевые слова, такие как add, remove, clear of a collection. Блокируя директивы, администратор может точно настроить доступность списка коллекции для добавления или удаления определенных или всех элементов.

В следующем фрагменте кода показано, как заблокировать удаление и очистку текущих записей в коллекции файлов. При необходимости владелец сайта может добавить новые записи в коллекцию файлов. Если владелец сайта указывает чистый тег или пытается удалить запись, происходит нарушение блокировки.

<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 файлы, где администраторы сайтов и приложений могут изменять свойства, которые применяются к их приложениям и содержимому. В модели распределенной конфигурации включена концепция автономных приложений, в которых как содержимое, так и параметры конфигурации размещаются на сайте или в каталоге приложений и могут быть развернуты с одного компьютера на другой.