Поделиться через


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

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

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

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

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

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

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

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

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

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