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

Saad Ladki

Введение

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

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

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

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

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

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

В файле конфигурации есть возможные параметры, которые можно считывать и задавать. Параметры группируются структурированным образом. Несколько параметров, которые похожи или применимы к определенной функции (i.e. 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, связанные с производительностью, безопасностью или критически важными аспектами сервера, блокируются, если этот атрибут установлен в "Запретить". Если атрибут overrideModeDefault имеет значение "Запретить", все файлы конфигурации на более низком уровне (т. е. web.config файлы), которые задают значение для свойства для определенного раздела конфигурации, не могут входить в силу и переопределять глобальные значения. Это вызывает нарушение блокировки и возникает ошибка.

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

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

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

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

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

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

В следующем фрагменте кода показано, как разблокировать <windowsAuthentication> раздел для всех сайтов, приложений и виртуальных каталогов в системе. Для этого в атрибуте overrideModeDefault задано значение Allow. Недостатком этого подхода является разблокировка раздела для всех, и любой пользователь может переопределить параметры на уровне сайта или приложения с помощью 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, установленным на "Allow" в <configSections> разделе, но с помощью тега location можно заблокировать этот раздел для сайта Basic. В следующих фрагментах кода показано, как это сделать, а также задать, чтобы единственное значение, принятое системой в качестве страницы по умолчанию для сервера, отображаемой в качестве домашней страницы, называется basic.htm. Директива clear обнуляет все унаследованные значения из вышестоящих уровней в иерархии конфигурации, что в данном случае соответствует глобальному списку файлов из applicationHost.config.

<location path="Basic Site" overrideMode="Deny"> 
    <defaultDocument enabled="true"> 
        <files> 
       </clear> 
            <add value="basic.htm" /> 
        </files> 
    </defaultDocument> 
</location>

Гранулярная блокировка

Открытие раздела с помощью тега расположения является эффективным способом разблокировки раздела и всех его свойств для владельца сайта или приложения указанного пути. Это фактически подход "все или ничего" для разрешения владельцам сайтов и приложений получать неограниченный доступ к разделу. Однако иногда администраторам требуется конкретный контроль над определенными свойствами в разделе и контроль над определенным значением. Другие могут быть делегированы. Именно здесь вступает в действие гранулярная блокировка.

Гранулярная блокировка — это группирование определенных атрибутов, которые можно задать на элементы или другие атрибуты. Гранулярная блокировка может указывать, могут ли пути ниже текущего изменять значения конфигурации. Значения можно считывать, но если замки установлены, они не могут быть изменены или даже установлены. Не изменяйте значения, блокировки которых заданы, так как это приведет к ошибкам блокировки конфигурации.

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

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

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

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

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