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

Метабаза - иерархическая база данных, в которой хранятся параметры конфигурации IIS. С появлением метабазы разработчики Microsoft перенесли в нее большинство относящихся к IIS величин из реестра, дополнив их множеством новых параметров и значительно расширив возможности настройки. Отчасти эти изменения сделаны для того, чтобы получить функциональность, отсутствующую в реестре. Например, поскольку в метабазе содержатся только параметры, относящиеся к IIS, ее размеры меньше, чем у реестра. Благодаря меньшему размеру метабазы, доступ к ней можно ускорить, сохранив ее копию в памяти.

Еще одно усовершенствование - совместимость метабазы с протоколом LDAP (Lightweight Directory Access Protocol - упрощенный протокол доступа к каталогам). LDAP имеет набор стандартных интерфейсов, поддерживающих ADSI (Active Directory Service Interfaces). Набор стандартных объектов и интерфейсов ADSI используется для доступа к каталогам и другим иерархическим структурам данных. Уже сам факт замены прямого доступа к реестру интерфейсом на базе стандартов - большое достижение; однако главное преимущество заключается в возможности строить с помощью ADSI утилиты для дистанционного доступа и редактирования метабазы. Прежде чем рассматривать методы редактирования, необходимо выяснить, как защитить метабазу.

Как защитить метабазу

Одна из самых серьезных неприятностей для IIS - разрушение или порча метабазы. Поэтому администратору необходимо уметь создать ее резервную копию. Чтобы начать процесс копирования, нужно открыть диспетчер Internet Service Manager (ISM), в разделе Internet Information Services щелкнуть правой кнопкой мыши на имени своего компьютера, а затем выбрать пункт Backup/Restore Confi-guration (копировать/восстановить конфигурацию). В диалоговом окне Backup/Restore, показанном на Экране 1, следует щелкнуть на кнопке Create Backup («создать копию»). Имя копии необходимо дать краткое, но отображающее смысл. После щелчка на кнопке OK резервный файл будет помещен в каталог system32inetsrvmetaback.

Экран 1. Создание резервной копии метабазы.

Кроме того, метабазу можно спрятать. Спрятанная метабаза будет защищена от любого человека, получившего неограниченный доступ к системе на файловом уровне. Я рекомендую дать метабазе имя менее заметное, нежели принимаемое по умолчанию metabase.bin. Кому интересен файл recipes.imb в каталоге my documents ec-ipes? В процессе установки IIS файл me-tabase.bin помещается в каталог system32inetsrv. Для перемещения метабазы необходимо перезапустить IIS перед переименованием или после копирования метабазы.

Сообщить новое имя и местоположение метабазы серверу IIS можно через реестр (следует всегда делать резервную копию перед изменением реестра). Нужно открыть редактор реестра и добавить в подраздел HKEY_LOCAL_MACHINE SOFTWAREMicrosoftInetMgrParameters параметр MetadataFile (REG_SZ). В параметре должен храниться полный путь к перемещенному и переименованному файлу, в том числе буквенное обозначение диска и имя файла. Кроме того, необходимо переместить или заменить исходный файл метабазы и переместить резервную копию.

Доступ к параметрам метабазы

Редактировать метабазу можно несколькими способами:

  • через ISM или встраиваемый модуль Internet Information Services консоли Microsoft Management Console (MMC);
  • с помощью встраиваемого модуля MMC Microsoft Site Server Configuration Console;
  • из командной строки;
  • через интерфейсы программирования (т. е. IMSAdminBase и ADSI-GetObject);
  • с помощью MetaEdit.

Встраиваемые модули MMC - прикладные компоненты, обеспечивающие ограниченный доступ к метабазе. Обратите внимание на два интерфейса программирования. Первый из них - IIS Admin Base Object (IMSAdmin-Base), совместимый с библиотекой шаблонов Active Template Library. IMSAdminBase идеально подходит для извлечения данных из метабазы. Однако, так как IMSAdminBase не принадлежит к числу интерфейсов на базе ADSI, любое решение о создании специального атрибута метабазы необходимо тщательно взвешивать. Более подробную информацию об интерфейсе IMSAdminBase можно найти в библиотеке Microsoft Developer Network (MSDN) Online Library (http://msdn.microsoft.com/library/default.asp?url=/library/psdk/iisref/abre6bol.htm).

Второй программный интерфейс - ADSI-GetObject. Этот интерфейс удобен для доступа к большинству объектов (ключей) и значений (свойств), составляющих метабазу. К сожалению, интерфейсу ADSI свойственны ограничения. Например, некоторые элементы метабазы, созданные с помощью интерфейса IMSAdminBase, не совместимы с ADSI. Кроме того, через интерфейс ADSI трудно установить и извлечь некоторые свойства, добавляемые при установке Site Server или Microsoft Commerce Server 2000.

Примером успешного применения объектов ADSI может служить интерфейс базы данных с командной строкой. Этот интерфейс представляет собой набор сценарных файлов, хранящихся в каталоге inetpubadminscripts в Windows 2000 и в каталоге system32inetsrvadminscripts в Windows NT 4.0. Один из этих сценариев - adsutil.vbs - можно назвать универсальным. В статьях Microsoft часто рекомендуется использовать его, если нужно проверить или изменить конкретный параметр метабазы, недоступный из ISM.

Сценарий ADSUtil.vbs воспринимает почти любую команду ADSI в качестве первого параметра. К общим командам, например Get и Set, позволяющим просматривать и обновлять конкретные значения метабазы, добавлены такие команды, как Enum, которая используется для организации циклов обработки значений, связанных с данным ключом. К недостаткам этого и других сценариев относится необходимость понимать структуру метабазы и точно знать, какие свойства требуется изменить. Более подробные сведения об интерфейсе ADSI можно найти в библиотеке MSDN Online Library (http://msdn.microsoft.com/library/default.asp).

Чтобы обойти это ограничение и сделать среду редактирования более интуитивно понятной, специалисты Microsoft выпустили программу MetaEdit 2.1. Первоначально это графическое Win32-приложение вошло в пакет Microsoft Windows NT Server 4.0 Resource Kit, затем обновленный инструмент появился в составе Microsoft Windows 2000 Resource Kit. Загружаемый файл и более подробную информацию об утилите можно найти в статье Microsoft «FILE: How to Downlowd, Install, and Uninstall the IIS MetaEdit 2.1 Utility» (http://support.microsoft.com/support/kb/articles/q232/0/68.asp). MetaEdit 2.1 совместима с операционными системами Windows 2000 и NT 4.0.

MetaEdit 2.1 - отличное средство для серверов разработки и промежуточных серверов. Утилита обеспечивает доступ к метабазе с локальной машины; с ее помощью можно обновить значения или изменить базовую схему. Однако, если не проявлять осторожности, можно даже испортить метабазу.

Структура метабазы

Как уже упоминалось, метабаза имеет иерархическую (или узловую) структуру данных, в которой разделы (key) верхнего уровня представляют локальную машину (local machine, LM) и схему. Под разделами верхнего уровня расположены подразделы и свойства. На Рисунке 1 показана базовая структура некоторых основных разделов ниже LM. Узлы здесь размещены в виде дерева, в котором их можно увидеть в MetaEdit. В каждом узле над линией приведен образец имени раздела; ниже линии находится имя соответствующего объекта. Каждый ключ метабазы представляет собой экземпляр объекта. Определение для каждого имени объекта приведено в Таблице 1. Полный список объектов метабазы со ссылками на полные определения можно найти по адресу: http://msdh.microsoft.com/library/default.asp?url=/library/psdk/iisref/aore94th.htm.

Подобно пути каталога, путь к разделу начинается на уровне LM и проходит по цепочке различных подразделов до избранного. Еще один способ увидеть иерархическую структуру - открыть MetaEdit. При расширении дерева ниже верхнего раздела LM, как показано на Экране 2, видно, что структура дерева очень похожа на диаграмму из Рисунка 1. Чтобы отыскать имя объекта, связанного с другими разделами на экране MetaEdit, нужно выбрать раздел в левой панели окна. В правой панели окна появится список свойств, принадлежащих данному разделу. Одно из этих свойств называется Key Type, ID 1002. Это свойство - имя объекта метабазы, определяющего данный раздел.

Экран 2. Структура метабазы в MetaEdit.

Важная конструктивная особенность метабазы заключается в том, что на экран выводятся лишь установленные пользователем свойства раздела. Если свойство не определено, это не значит, что метабаза испорчена. С помощью меню проверки MetaEdit можно узнать о незнакомых свойствах. Само по себе сообщение о структурной проблеме еще не означает, что IIS обнаружила некорректные разделы и свойства. Природа метабазы допускает на первый взгляд противоречивое поведение в случаях, когда свойство не востребовано; с помощью MetaEdit нельзя получить полный список свойств, действительных для каждого раздела данного типа. Чтобы выяснить, какие свойства можно назначить какому-либо типу раздела, следует найти в схеме зашифрованное определение объекта для нужного раздела или воспользоваться определением объекта из библиотеки MSDN.

На Рисунке 1 некоторые разделы имеют одинаковые имена. Например, под разделом W3SVC находится раздел 1 точно так же, как и под разделом MSFTPSVC. Указывать полный путь доступа к свойству раздела необходимо потому, что имена разделов могут дублироваться. Типы объектов также могут дублироваться, что видно на примере двух разделов default.asp, которые представляют собой объекты IIsWeb-File, расположенные на разных путях в каталоге-образце Root.

Одно из преимуществ иерархической структуры заключается в интуитивно-понятном наследовании значений. На Рисунке 1 показано, как можно установить свойство AuthFlags (ID6000) на уровне Web Service (IIsWebService) и как каждый Web-узел может унаследовать это свойство. Наследование может быть продолжено в виртуальных каталогах (IIsWebVirtualDir) ниже этого узла. Однако точно так же, как свойство может быть унаследовано разделом, унаследованное свойство раздела может быть изменено. Если просмотреть разделы с помощью программы MetaEdit, то обнаружится, что у каталогов, тип защиты которых отличается от принимаемого по умолчанию, свойство AuthFlags переопределено в соответствии с выбранным администратором уровнем безопасности.

Наследование - лишь один из возможных атрибутов свойства. На Экране 3 показано диалоговое окно Edit Metabase Data («редактирование данных метабазы»). Как видно из рисунка, одно свойство состоит из нескольких полей. В поле ID хранятся имя свойства и соответствующий идентификационный номер, которые не подлежат редактированию. (Имя нельзя редактировать, даже создавая новые элементы.)

Экран 3. Диалоговое окно Edit Metabase Data.

Под полями ID расположены пять флажков Attributes, каждый из которых соответствует свойству, связанному с данным разделом. Первый атрибут, Inherit, уже установлен. Второй атрибут, Secure, запрещает таким инструментам, как MetaEdit, выводить на экран данные, связанные со свойством, и требует шифровать данные при сохранении. С его помощью можно обезопасить пароли и другие данные, которые нужно защитить, однако следует помнить, что этот атрибут - односторонний. Если свойство отмечено как защищенное, то атрибут отменить нельзя. Атрибут Reference указывает, что на ассоциированные данные имеется ссылка из другого компонента Windows. Атрибут Reference обычно связан с двоичными данными, которые не следует редактировать из метабазы. Обычно данные, на которые есть ссылка, принадлежат другому компоненту операционной системы. Изменение этих данных из метабазы совершается в обход правил и может привести к порче не только метабазы, но и всей ОС. Данные, хранящиеся в свойстве с атрибутом Volatile, должны размещаться в оперативной памяти и не записываются в файловую систему. Последний атрибут, Insert Path, используется при считывании значения метабазой; он показывает, следует ли вставлять путь в метабазе к данному свойству в извлеченные данные. Обратите внимание, что путь метабазы указывается относительно дескриптора, используемого для считывания свойства.

В раскрывающемся списке User Type можно указать, каким образом данные будут использоваться в метабазе. В Таблице 2 перечислены пользовательские типы, распознаваемые IIS. Для большинства свойств используется тип Server Type. Выбрать тип данных при определении свойства можно в списке Data Type, но при этом данные нельзя редактировать. Список типов данных метабазы представлен в Таблице 3.

И наконец, устанавливается связь данных со свойством. Эти данные можно редактировать, но нужно помнить о том, что их нельзя быстро восстановить после того, как изменение сохранено. Кроме того, если выбрано свойство с типом данных MultiSZ, то изменяется диалоговое окно Edit Metabase Data. Помимо поля Edit, доступного для других типов данных, появляется новое окно списка для редактирования отдельных строк, составляющих свойство.

Свойства Default Web Site

Теперь, после знакомства со структурой метабазы, можно рассмотреть некоторые свойства Default Web Site.

Default Web Site автоматически строится в процессе установки IIS. В метабазе сайту назначается идентификатор экземпляра (instance ID) 1. IIS назначает каждому созданному на сервере Web-узлу идентификационный номер, который представляет собой имя ключа метабазы для данного сайта и входит в путь метабазы к сайту. Благодаря нумерации можно независимо изменять свойства разных сайтов на одном сервере. Например, путь к параметрам Default Web Site - LM/W3SVC/1. При добавлении нового Web-узла IIS назначает новому сайту следующий по порядку идентификатор экземпляра. (На вновь установленном сервере следующим идентификатором экземпляра будет 3.) Добавив новый сайт, можно обновить представление данных в MetaEdit и увидеть новую конфигурацию разделов. Таким образом, IIS идентифицирует Web-узлы на сервере. После того как IIS назначает Web-узлу идентификатор экземпляра, этот ID не изменяется, вне зависимости от результатов редактирования сайта. Однако идентификационный номер удаленного сайта освобождается. В отличие от большинства индексов базы данных, в которых освобожденные номера не используются, IIS может повторно задействовать освободившийся идентификатор экземпляра.

При взгляде на вновь созданный сайт в метабазе становится очевидно, что число свойств ключей сайта ограничено. Например, если открыть ISM, щелкнуть правой кнопкой мыши на новом сайте, выбрать пункт Properties и щелкнуть на закладке Documents, то на экране появится список документов по умолчанию. Однако как в новом сайте, так и в его корневом виртуальном каталоге эти данные отсутствуют. Новый Web-узел наследует этот параметр от объекта IIsWebService, где находится свойство 6006, DefaultDoc.

Уильям Шелдон - ведущий инженер компании InterKnowlogy, имеет сертификаты MCSD и MCP+SiteBuilding. С ним можно связаться по адресу: mailto:bsheldon@interknowlogy.com.


Таблица 1. Объекты и определения метабазы.
ОбъектОпределение
IIsComputerУстанавливает глобальные параметры конфигурации IIS
IIsFTPServiceСвойства конфигурации, общие для всех FTP-серверов
IIsFTPServerИнформация о конфигурации единственного FTP-сервера
IIsMimeMapУправление отображением MIME
IisWebServiceОбщая информация о конфигурации всех Web-серверов
IisWebVirtualDirСвойства, ассоциированные с витруальным каталогом
IisWebDirectoryСвойства отдельного Web-каталога
IisWebFileСвойства файла
IIsFiltersНабор фильтров для объектов Web Service и Web Server
IIsFilterИнформация о конкретном фильтре
IIsLogModulesИнформация об установленных модулях регистрации

назад


Таблица 2. Пользовательские типы, распознаваемые IIS.
Пользовательский типДисплейное имяОписание
ASP_MD_UT_APPASP AppИнформация о конфигурации приложений ASP (Active Server Pages)
IIS_MD_UT_FILEFileРазрешения доступа к файлам, методы регистрации и т. д.
IIS_MD_UT_SERVERServerПорты, IP-адреса и другие серверные данные
IIS_MD_UT_WAMWAMУправление приложениями Web

назад


Таблица 3. Типы данных, используемые метабазой.
Тип данныхОпределение
DWORD_METADATA32-разрядное число без знака
STRING_METADATAASCII-строка с завершающим нулевым символом
MULTISZ_METADATAНабор ASCII-строк с завершающим нулевым символом (данные завершаются двумя последовательными нулевыми символами)
EXPANDZ_METADATAСтрока с завершающим нулевым символом, содержащая нерасширенные переменные среды, такие, как %PATH%
BINARY_METADATAДвоичные данные - любой формат

назад

Поделитесь материалом с коллегами и друзьями