Первые шаги к инфраструктуре AD Windows 2003

Нам часто приходится слышать о Windows Server 2003 и преимуществах, которые этот продукт обеспечивает для инфраструктуры Active Directory (AD). Заглянув в документацию, можно убедиться, что процесс перевода контроллера домена (DC) с Windows 2000 на Windows 2003 прост. Но нельзя забывать о том, что перед модернизацией инфраструктуры до Windows 2003 AD необходимо подготовить схему и структуру леса Windows 2000 AD с помощью утилиты Adprep.

Порядок применения Adprep кажется простым. Утилита используется в двух режимах: Forestprep, в котором она запускается один раз для леса, и Domainprep, предназначенном для однократного запуска утилиты в каждом домене. Процесс не занимает много времени, но администратор должен досконально знать требования утилиты и быть готовым к последствиям ее применения, так как Adprep вызывает необратимые изменения во всем лесу.

Требования Adprep

Как и при любых значимых изменениях в системе, необходимо обратиться в базу знаний Microsoft Knowledge Base за информацией об Adprep, которая в документации продукта отсутствует. Например, в статье Microsoft «Hotfixes to Install on Windows 2000 Domain Controllers Before Running Adprep /Forestprep» (http://support.microsoft.com/?kbid=331161) подробно описано, какие исправления и пакеты обновлений должны быть развернуты перед запуском утилиты. На контроллерах домена должен быть установлен по меньшей мере пакет Windows 2000 Service Pack 2 (SP2). Если число DC или база данных AD велики (насколько — в статье не уточняется), то следует развернуть SP3, так как в этом пакете имеется исправление, благодаря которому индексация нового атрибута не оказывает заметного влияния на производительность DC. SP4 — текущий пакет обновлений, поэтому выполнить данное требование несложно.

Модернизация схемы — прозрачный процесс, в котором редко случаются сбои, но он необратим. После завершения работы Forestprep и репликации изменений в лесу единственный способ вернуться к исходному состоянию — принудительное восстановление (authoritative restore) всей инфраструктуры AD. Прежде чем приступить к глубокой модернизации схемы, следует убедиться в корректности инфраструктуры AD, создать резервные копии состояния системы по крайней мере на двух DC в каждом домене и протестировать процедуру восстановления с резервной копии. Если база данных AD велика (C:\%systemroot% tds tds.dit), то нужно сделать резервные копии каждого DC; восстановить данные с ленты получится быстрее, чем реплицировать и заново строить базу данных. В статье Microsoft «How to Upgrade Windows 2000 Domain Controllers to Windows Server 2003» (http://support.microsoft.com/?kbid=325379) подробно описано, как модернизировать контроллеры домена Windows 2000 до уровня Windows 2003, выполнить аудит доменов для клиентов нижнего уровня и убедиться в корректности программного уровня DC. Если в лесу применяется или будет применяться Microsoft Exchange 2000 Server, то следует обратить внимание на раздел статьи, в котором говорится о переопределении утилитой Forestprep трех атрибутов, несовместимых с документами Request for Comments (RFC) комитета Internet Engineering Task Force (IETF): houseIdentifier, secretary и labeledURI. Если администратор уже использовал пакет Windows 2000 InetOrPerson Kit, то проблем, как правило, не возникает. В противном случае Forestprep может нарушить эти атрибуты. Поэтому перед запуском Adprep следует запустить файл Lightweight Directory Access Protocol (LDAP) Data Interchange Format (LDIF), который исправляет ошибки в схеме Exchange. Подробная информация приведена в статье «How to Upgrade Windows 2000 Domain Controllers to Windows Server 2003».

Еще одна часто упускаемая из виду особенность модернизации DC заключается в том, что блокируется служба Distributed Link Tracking Server, которая связывает службу Distributed Link Tracking Client с отслеживаемыми ссылками (track links) при перемещении файлов на компьютере или между компьютерами. Microsoft рекомендует блокировать службу на контроллерах домена (сделать это нужно безотлагательно, не следует ждать, пока будет установлена Windows 2003), чтобы уменьшить нагрузку при репликации и удалить таблицы Distributed Link Tracking в AD, сократив размер базы данных. Подробная информация приведена в статье Microsoft «Distributed Link Tracking on Windows-Based Domain Controllers» (http://support.microsoft.com/?kbid=312403).

Выполнение Forestprep и вывод на консоль

Для запуска Forestprep следует зарегистрироваться на главной консоли схемы леса с учетной записью, которая входит в группы Enterprise Admins и Schema Admins. По умолчанию мастером схемы назначается первый DC в лесу. Мастера схемы можно обнаружить с помощью команды Netdom Query FSMO (из комплекта ресурсов Microsoft Windows 2000 Resource Kit).

Администратор может отобрать Adprep.exe и необходимые ей файлы, но проще переписать всю папку i386 во временную папку на мастере схемы и всех мастерах инфраструктуры, что позволит выполнить команды Forestprep и Domainprep локально. Команда Forestprep проста:

adprep /forestprep

После предупреждения о необходимости модернизации всех DC, по крайней мере до уровня Windows SP2, команда Forestprep выдает следующее приглашение, чтобы убедиться в наличии пакета Windows 2000 SP2 или более позднего:

[User Action]

Если все контроллеры домена Windows 2000 соответствуют этому требованию, то следует нажать клавиши «C» и Enter, чтобы продолжить работу. В противном случае можно ввести любой другой символ и нажать клавишу Enter, чтобы выйти из программы.

После того как администратор подтвердит свое намерение запустить Forestprep нажатием сначала клавиши C, а затем Enter, утилита начнет обновление схемы, от версии 14 до версии 30. На экране 1 показан фрагмент процесса модернизации.

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

Внутренние механизмы Forestprep

Хотя операция Forestprep представляет собой существенное обновление схемы, она не добавляет и не удаляет никаких атрибутов из частичного набора атрибутов (partial attribute set). Частичный набор атрибутов — подмножество всех атрибутов AD в глобальном каталоге (Global Catalog, GC). В Windows 2000 изменение атрибутов, назначенных для GC, вызывает повторную синхронизацию GC на каждом DC в лесу. В лесу, содержащем большие домены, подобная операция на DC может занять несколько дней. Если на предприятии используется такое приложение, как Exchange 2000, работа которого в значительной степени зависит от GC, то последствия для пользователей будут еще более ощутимыми. Однако команда Forestprep на GC не влияет.

Forestprep выполняет две важные функции. Во-первых, она запускает schupgr.exe, утилиту обновления схемы Windows 2000. Schupgr последовательно обрабатывает файлы C:\%system-root%system23schxx.ldf, в которых xx изменяется от 14 до 30. В этих файлах содержится информация об изменениях, произведенных программой Forestprep в AD, и, чтобы узнать об этих изменениях, следует заглянуть в файлы. Если Forestprep потребуется перезапустить, то процесс возобновится с последнего успешно обновленного файла schxx.ldf. Во-вторых, Forestprep изменяет списки управления доступом (ACL) в разделе настроек. В Windows 2000 и NT 4.0 в состав группы Everyone входит группа Guests (т. е. анонимные посетители). В Windows 2003 избран более строгий подход; группа Everyone включает пользователей Authenticated Users, но не Guests. Чтобы контроллеры домена прочитали информацию в других доменах, необходимо настроить некоторые ACL на существующих объектах, предоставив группе Enterprise Domain Controllers право Read.

Adprep ведет подробное протоколирование своих действий в файле C:\%systemroot%system32debugadpreplogsYYYYmmDDhhMMssadprep.log, где YYYYmmDDhhMMss указывают год, месяц, день, час, минуту и секунду запуска Adprep. Такое соглашение об именовании гарантирует, что для каждого запуска Adprep выделяется особая папка, в которой хранятся журналы выполнения каждого LDIF-файла. В этих журналах отражается, насколько успешным было выполнение утилиты на мастере схемы.

Но как определить, были ли изменения реплицированы в лесу? После успешного завершения работы Forestprep утилита создает контейнер Windows 2003 Update в CN=ForestUpdates,CN=Configuration,DC=rootdomain, DC=company,DC=com, где rootdomain и company — имена корневого домена и компании. Простой способ отследить изменения схемы в лесу — установить соединение с серверами-мостами основных сайтов с помощью ADSI Edit, чтобы определить, когда Forestprep создает контейнер.

Другой способ определить, что процесс репликации Forestprep достиг конкретного DC, — проверить значение атрибута ObjectVersion этого DC. Можно применить к проверяемому DC утилиту ldp.exe (из комплекта Windows 2000 Support Tools). Для этого следует запустить Ldp и выбрать функции Connection, Connect; ввести целевой DC в диалоговое окно Connect; щелкнуть на кнопке OK. Затем зарегистрироваться на DC с помощью действительных учетной записи и пароля. Необходимо выбрать Browse, Search и контейнер схемы (CN=Schema,CN=Configuration,DC=yourdomain,DC=xyz, где yourdomain и xyz — имя домена и расширение, например, com, org, net). В текстовое поле Filter следует ввести запрос LDAP (objectversion=*) и выбрать пункт Subtree на вкладке Scope, чтобы выполнить поиск в контейнере схемы значения ObjectVersion вслед за базовым отличительным именем (distinguished name — DN) по всему поддереву. Результаты будут выглядеть следующим образом:

ldap_search_s(ld,»CN=Schema,

CN=Configuration,

DC=domain1,DC=deuby,DC=net»,

2, «(objectversion=*)», attrList,

0, &msg)

Result <0>: (null)

Matched DNs:

Getting 1 entries:

>> Dn: CN=Schema,

CN=Configuration,

DC=domain1,DC=deuby,

DC=net

1> objectVersion: 30;

Управление Forestprep

В главе 12, «Upgrading Windows 2000 Domains to Windows Server 2003 Domains», документа Designing and Deploying Directory and Security Services (Microsoft Windows Server 2003 Deployment Kit; http://www.microsoft.com/windowsserver 2003/techinfo/reskit/deploykit.mspx) рекомендуется, чтобы во время модернизации мастер схемы работал. Но действительно ли такой подход оптимален? Инженеры и системные администраторы обычно консервативны; они чувствуют себя неуютно без плана возврата к исходному состоянию и возможности контролировать процесс, если приходится выполнять операцию, которая мало подвержена сбоям, но имеет чрезвычайно серьезные последствия (в случае порчи схемы). Простого способа отмены изменений после сбоя процесса Forestprep не существует. Лучший вариант для администратора — если механизм репликации сохраняет работоспособность и можно выполнить исчерпывающее восстановление раздела схемы или восстановить лес. Процедура восстановления леса документирована на Web-узле Microsoft (http://download.microsoft.com/download/ win2000srv/utility/1.001/nt5/en-us/forestrecovery.exe).

Microsoft признает существование этой проблемы. В справочных файлах Windows 2003 рекомендуется отключить мастера схемы от сети перед запуском Forestprep. Однако в статье Microsoft «Windows Server 2003 Help Files Contain Incorrect Information About How to Update a Windows 2000 Domain» (http://support.microsoft.com/?kbid=821076) говорится, что рекомендация в Help-файле неверна. Почему нельзя отключать мастера схемы? На первый взгляд отключение мастера схемы от остальной сети — разумное решение. В этом случае, если схема будет испорчена в ходе модернизации схемы, ошибка не будет реплицирована по всему лесу. Но во время выполнявшихся разработчиками Microsoft тестов Forestprep на мастере схемы Windows 2000 SP3 выяснилось, что после перезагрузки изолированный мастер не берет на себя роль мастера схемы в отсутствие другого DC для репликации. Поэтому, если администратор отключает второй DC от общедоступной сети, необходимо изменить записи DNS, чтобы корректно организовать связь между двумя машинами. Если администратор не восстановил все записи в исходное состояние (случайно нарушив связь между двумя машинами) при повторном переводе систем в рабочий режим, то измененные записи DNS будут реплицированы по всему домену. Вряд ли следует использовать этот метод, так как существует более простой способ: можно эффективно управлять репликацией изменений Forestprep и Domainprep, изолировав мастера схемы на его собственном сайте и управляя репликацией между сайтом и остальными сайтами леса.

Концепцию карантина можно развить дальше, изолировав существующий сайт (обычно тот, на котором размещается мастер схемы) как от сайта мастера схемы, так и от остального леса. Организовать сайт мастера схемы — отличная идея, но единственный изолированный DC мало пригоден для тестирования AD. Чтобы быть уверенным в успехе модернизации, необходимо протестировать изменения Forestprep на важнейших AD-совместимых приложениях, таких как Exchange 2000. Только после этого можно реплицировать изменения схемы по всему домену.

Теперь рассмотрим процесс карантина подробнее. Назовем сайт мастера схемы сайтом первого этапа карантина, а другой сайт — сайтом второго этапа карантина.

Процесс карантина Forestprep

Первый шаг к созданию сайта карантина этапа 1 — создать ссылку и сайт (рис. 1). Ссылка сайта должна связать сайт этапа 1 с сайтом этапа 2 с интервалом 15 минут и стоимостью 1. Можно использовать соглашение об именовании, в котором отражаются как физическое местоположение, так и схема, чтобы прояснить назначение сайта. Например, если мастер схемы компании и несколько других DC расположены в Мьюлшоу (шт. Техас) и сайт AD назван Muleshoe, то сайт этапа 1 и его ссылку можно назвать Muleshoe-Schema. Для сайта второго этапа карантина можно сохранить первоначальное имя.

Чтобы переместить мастера схемы в сайт этапа 1, следует запустить оснастку AD Sites and Services в консоли управления Microsoft Management Console (MMC), перейти в текущий сайт мастера схемы, щелкнуть правой кнопкой мыши на объекте-компьютере мастера схемы и выбрать пункт Move. Затем следует указать сайт этапа 1 в качестве места назначения объекта и щелкнуть на кнопке OK. Предоставлять этому сайту информацию о подсети не требуется, так как он будет использоваться только для репликации (но не регистрации клиентов). Поэтому нет необходимости вводить информацию о подсети или изменять IP-параметры на мастере схемы. На данном этапе действия администратора мало влияют на текущие рабочие операции.

Все PDC и мастера относительных идентификаторов (RID) следует переместить из сайта второго этапа карантина в другой сайт. В результате карантин не повлияет на эти важнейшие роли инфраструктуры службы каталогов.

Сайт второго этапа карантина должен быть изолирован от остального леса. Чтобы приостановить репликацию, следует идентифицировать все ссылки сайта и созданные вручную объекты соединений (Connection Object, CO) между сайтом второго этапа карантина и остальным лесом. Затем нужно отредактировать свойства каждой идентифицированной ссылки с помощью оснастки AD Sites and Services. Необходимо выполнить следующие действия.

  • В левой панели выбрать Sites, Inter-Site Transports, IP.
  • В правой панели щелкнуть правой кнопкой мыши на идентифицированной ссылке сайта и выбрать пункт Properties.
  • Щелкнуть на Change Schedule.
  • Выбрать режим Replication Not Available; при этом цвет всех блоков в расписании репликации изменится с синего на белый.
  • Предполагая, что сегодня — день реализации, следует выделить в расписании интервалы с 12.00 сегодняшнего дня до времени, когда будет активизирован карантин репликации.
  • Выбрать пункт Replication Available; при этом цвет всех сегодняшних временных интервалов (до карантина репликации) изменится с белого на синий (экран 2). Если время для репликации не выделено, то AD проигнорирует расписание и все равно выполнит репликацию.
  • Дважды щелкнуть на кнопке ОК.

Необходимо также приостановить репликацию на каждом созданном вручную CO, который получает реплицируемые данные с сайта второго этапа карантина; в противном случае произойдет утечка изменения через CO. Если администратор не вел учета созданных вручную CO, то единственный способ приостановить репликацию — рассмотреть параметры NTDS каждого DC в лесу (за исключением DC на карантине) и отыскать входящие CO из сайтов карантина. Чтобы приостановить репликацию CO, требуется запустить оснастку AD Sites and Services. В левой панели нужно выбрать Sites (удаленный сайт с созданным вручную CO), Servers (сервер, которому принадлежит CO) и затем NTDS Objects. В правой панели следует щелкнуть правой кнопкой мыши на CO и выбрать пункт Properties. Для приостановки репликации на объекте нужно выполнить шаги 3-7 описанной выше процедуры.

Следует приостановить репликацию между сайтом первого этапа карантина и сайтом этапа 2, повторив описанные выше манипуляции с расписанием репликации. При этом не возникает необходимости работать с созданными вручную CO. Таким образом, работа по организации двухэтапного карантина для мастера схемы завершена.

Карантин не позволяет остальному лесу увидеть изменения, внесенные в AD внутри зоны карантина. Несоблюдение этого условия может привести к проблемам. Например, если не направить связанные с AD операции службы поддержки на DC вне карантина, то пользователи могут увидеть результаты изменений в службе поддержки лишь спустя много часов.

Теперь все готово для запуска Forestprep, как описано выше. После выполнения утилиты следует просмотреть журнал adprep.log в поисках ошибок. Запустив Dcdiag (из пакета Windows 2000 Support Tools), можно просмотреть журналы событий, чтобы отыскать любые необычные сообщения об ошибках.

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

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

Если результаты тестирования удовлетворительны, то можно открыть изменения схемы для остального леса. С помощью инструмента ReplMon (из пакета Windows 2000 Support Tools) можно выполнить принудительную репликацию с сайта этапа 2 на каждый удаленный сайт, для которого имеется ссылка. Потребуется выполнить следующие действия.

  • Щелкнуть правой кнопкой мыши на Monitored Servers и добавить DC в удаленный сайт в качестве Monitored Server.
  • В левой панели выбрать Monitored Servers, целевой удаленный сайт, а затем — целевой DC в удаленном сайте.
  • Открыть репликацию контекста именования схемы под именем DC.
  • Щелкнуть правой кнопкой мыши на любом партнере репликации в сайте второго этапа карантина, выбрать пункт Synchronize with this replication partner и проследить за выполнением репликации.
  • Перевести расписания репликации ссылки сайта и CO в нормальный режим, чтобы снять карантин.

Domainprep

После репликации изменений, внесенных командой Forestprep, можно запустить процесс Domainprep. В сравнении с Forestprep команда Domainprep отличается завидной простотой. Нужно зарегистрироваться на мастере инфраструктуры каждого домена и выполнить команду

adprep /domainprep

После завершения работы Domainprep на консоли появится сообщение: ADPREP successfully updated the domain-wide information («ADPREP успешно обновила информацию в домене»). Затем следует проверить, нет ли ошибок в журнале adprep.log, запустить Dddiag и просмотреть журналы событий в поисках необычных сообщений об ошибках.

В документации Microsoft отмечается одна особенность Domainprep: команда изменяет некоторые наследуемые записи управления доступом контейнера (Access Control Entries, ACE) в папке \%systemroot%SYSVOL; в результате служба File Replication Service (FRS) выполняет полную синхронизацию контента. Синхронизация не представляет проблемы для большинства доменов, но создаст заметную нагрузку, если папка SYSVOL велика (содержит множество объектов групповой политики — Group Policy Object, GPO, длинные сценарии регистрации или перемещаемые профили). Пакет Windows 2003 SP1 будет дополнен исправлением, которое удалит эту операцию из стандартного режима Domainprep, и администратору придется указывать специальный ключ, чтобы выполнить синхронизацию.

После успешного завершения Domainprep будет создан контейнер Windows 2003 Update в CN=DomainUpdates,CN=System,DC=rootdomain, DC=company,DC=com. Этот контейнер отличается от контейнера, генерируемого командой Forestprep. По таким контейнерам можно отследить изменения, сделанные Domainprep в домене.

Внутренние механизмы Domainprep

Domainprep вносит изменения в логическую структуру AD и повышает уровень безопасности (добавляет ACE) некоторых объектов. Кроме того, команда более эффективно управляет дескрипторами безопасности (Security Descriptor, SD — структура AD, содержащая списки управления доступом, ACL), чем Windows 2000, перемещая уникальные дескрипторы из объектов в таблицу и заменяя дескрипторы в каждом объекте ссылкой на таблицу. В результате сокращается база данных и значительно ускоряются такие операции, как предоставление административной группе права доступа Write к организационной единице (OU), без увеличения базы данных, как в Windows 2000. Освобожденное пространство будет внутренним для базы данных; оно используется для хранения объектов, добавляемых в AD. Однако размер файла ntds.dit не уменьшится, пока не будет выполнена дефрагментация в автономном режиме с помощью утилиты Ntdsutil.

Domainprep производит изменения внутри AD, поэтому если обновленный утилитой DC успешно протестирован на совместимость с зависящими от AD приложениями, то к операциям Domainprep не обязательно применять карантин. Если принято решение использовать карантин, то при его организации следует учитывать размеры домена, в котором выполняется Adprep, а не всего леса.

Некоторые особенности применения Adprep

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

Кроме того, я рекомендую внимательно следить за составом группы Schema Admins, поместив ее в раздел Restricted Groups выбираемого по умолчанию GPO домена. Эта мера гарантирует, что любые несанкционированные изменения в составе группы будут отменены (и зарегистрированы, если активизирована функция аудита) в течение пяти минут. Стать членом этой группы можно с помощью групповой политики.

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

Если мастера операций расположены на контроллерах домена в сайте второго этапа карантина, то следует переместить их до начала модернизации. Таким образом удастся снизить влияние возможной отмены сделанных изменений на работу домена.

С помощью утилиты Repadmin (из пакета Wibdows 2000 Support Tools) можно блокировать репликацию. Реализовать данный метод проще, чем двухэтапный карантин, но лучше организовать карантин, так как при этом обеспечивается более полное тестирование. Следующая команда Repadmin на DC блокирует исходящую репликацию:

repadmin /options +disable_outbound_repl

To enable replication again, change +disable to -disable
.

Adprep — простой по виду процесс, который необходимо выполнить перед модернизацией контроллеров домена Windows 2000 до уровня Windows 2003. Не следует недооценивать необходимые для этой операции ресурсы, особенно в крупной компании со средствами контроля изменений и множеством DC. Предварительное планирование позволит без проблем сделать первый шаг к Windows 2003.


Шон Дьюби — редактор журнала Windows & .NET Magazine, старший системный инженер компании Intel, специализирующийся на проектировании корпоративных сетей на базе Windows 2000. С ним можно связаться по электронной почте по адресу: spdeuby@winnetmag.com