Text
                    для Windows Server 2005
и Windows 2000
ДЛЯ ПРОФЕССИОНАЛОВ
O’REILLY®
С^ППТЕР
Робби Аллен
Предисловие Гила Керкпатрика

Active Directory Cookbook for Windows Server2003 & Windows 2000 Robbie Allen Foreword by Gil Kirkpatrick O’REILLY* Beijing • Cambridge • Farnham • Koln • Paris • Sebastopol • Taipei • Tokyo
Active Directory. Сборник рецептов для Windows Server2003 и Windows 2000 ДЛЯ ПРОФЕССИОНАЛОВ Робби Аллен Предисловие Гила Керкпатрика ПИТЕР* Москва • Санкт-Петербург - Нижний Новгород • Воронеж Ростов-на-Дону • Екатеринбург • Самара Киев • Харьков • Минск 2004
ББК 32.973.23-018 УДК 681.3.06 А50 Аллен Р. А50 Active Directory. Сборник рецептов. Для профессионалов. — СПб.: Питер, Киев: Издательская группа BHV, 2004. — 590 с.: ил. ISBN 5-469-00113-Х В книге содержится несколько сотен подробнейших инструкций но выполнению как типичных, так и сравнительно редко встающих перед администраторами Active Directory задач. Здесь представлены решения, связанные с использованием LDAP — базового интерфейсного протокола Active Directory, — управлением репликацией, обеспечением эффективного взаимодействия со службой доменных имен DNS, настройкой групповой политики, у 1равлением схемой Active Director) и т. д. Каждый предлагаемый рецепт сопровождается подробными пояснениями, так что его легко адаптировал ь для решения других, аналогичных проблем. Книга предназначена для администраторов Active Directory, а также для программистов, работающих с этой службой каталогов. Она поможет разрешить практически любые затруднения, которые могут возникнуть при эксплуатации Active Directory в Windows Server 2003 и Windows 2000. ББК 32.973.23-018 УДК 681.3.06 Права на издание получены по соглашению с O'Re I / Все права защищены Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки связанные с использованием книги. ISBN 596004648 (англ.) ISBN 5-469-00113-Х © 2003 O'Reilly & Associates, Inc. © ЗАО Издательский дом «Питер», 2004
Краткое содержание Предисловие......................................................17 Введение.........................................................20 Глава 1. Общие рекомендации......................................25 Глава 2. Леса и домены, доверительные отношения..................37 Глава 3. Контроллеры домена, глобальные каталоги и роли..........77 Глава 4. Объекты и операции над ними............................117 Глава 5. Подразделения..........................................168 Глава 6. Пользователи...........................................184 Глава 7. Группы.................................................238 Глава 8. Компьютеры.............................................254 Глава 9. Объекты групповой политики.............................281 Глава 10. Схема Active Directory................................322 Глава 11. Топология сети........................................360 Глава 12. Репликация............................................404 Глава 13. Система доменных имен.................................421 Глава 14. Защита и аутентификация...............................450 Глава 15. Протоколирование, мониторинг и квоты..............475 Глава 16. Архивирование и восстановление каталога, удаленные объекты...............................................507 Глава 17. Разделы приложений....................................533 Глава 18. Взаимодействие и интеграция...........................553 Приложение. Список инструментальных средств.....................570 Алфавитный указатель............................................582
Содержание Предисловие...................................................... 17 Введение.............................................................20 Читательская аудитория..........................................21 Содержание книги................................................21 Используемые в книге соглашения............................... 23 Обратная связь..................................................23 Благодарности...................................................23 От издателя перевода............................................24 Глава 1. Общие рекомендации........................................ 25 1.0. Структура книги...............................................25 1.1. Где искать используемые в книге средства......................26 1.2. Знакомство с LDIF.............................................28 1.3. Программирование..............................................29 1.4. Заменяемый текст..............................................33 1.5. Дополнительные источники информации...........................33 Глава 2. Леса и домены, доверительные отношения......................37 2.0. Введение......................................................37 2.1. Создание леса.................................................41 2.2. Удаление леса.................................................42 2.3. Создание домена...............................................43 2.4. Удаление домена............................................. 44 2.5. Удаление домена, у которого отсутствуют контроллеры...........45 2.6. Поиск доменов в лесу..........................................47 2.7. Определение NetBIOS-имени домена..............................48 2.8. Переименование домена.........................................49 2.9. Изменение режима работы домена.............................. 50 2.10. Подготовка домена или леса к переводу в режим Windows Server 2003 с помощью программы adprep............................................53 2.11. Как убедиться в успешном выполнении команды adprep.............54 2.12. Проверка готовности контроллера домена Windows 2000 к переходу на Windows Server 2003.....................................56
Содержание 7 2.14. Повышение функционального уровня леса до Windows Server 2003........59 2.15. Установка доверительных отношений между доменами Windows NT и Active Directory......................................................61 2.16. Создание транзитивного доверия между двумя лесами Active Directory..63 2.17. Создание сокращенного доверия между двумя доменами Active Directory.65 2.18. Установка доверия к сфере Kerberos..................................66 2.19. Просмотр доверительных отношений домена.............................67 2.20. Проверка доверительного отношения...................................70 2.21. Переустановка доверительного отношения..............................72 2.22. Удаление доверительного отношения...................................74 2.23. Использование фильтрации SID........................................75 2.24. Поиск в домене повторяющихся кодов безопасности.....................76 Глава 3. Контроллеры домена, глобальные каталоги и роли...................77 3.0. Введение...........................................................77 3.1. Повышение роли сервера до роли контроллера домена..................79 3.2. Повышение роли сервера до роли контроллера домена с использованием копии содержимого каталога...........................80 3.3. Понижение роли контроллера домена..................................81 3.4. Автоматизация процессов создания контроллера домена и понижения его роли ..................................................82 3.5. Разрешение проблем, связанных с созданием контроллера домена и понижением его роли..................................................84 3.6. Удаление контроллера домена, понижение роли которого выполнено неудачно.................................................. 85 3.7. Переименование контроллера домена..................................88 3.8. Получение списка контроллеров домена для указанного домена.........89 3.9. Поиск ближайшего контроллера домена................................90 3.10. Поиск сайта контроллера домена......................................91 3.11. Перемещение контроллера домена в другой сайт........................93 3.12. Получение сведений о службах, предоставляемых контроллером домена...95 3.13. Конфигурирование контроллера домена для использования внешнего источника времени..............................................96 3.14. Определение числа попыток входа в систему на контроллере домена.....98 3.15. Использование ключа /3GB для увеличения объема кэша LSASS...........98 3.16. Удаление объектов DLT...............................................99 3.17. Включение и отключение глобального каталога........................100 3.18. Подтверждение факта успешного включения глобального каталога........102 3.19. Поиск серверов глобального каталога в лесу.........................102 3.20. Поиск контроллеров домена или серверов глобального каталога, входящих в состав сайта................................................104 3.21. Поиск контроллеров домена и серверов глобального каталога через DNS.106
8 Содержание 3.23. Отключение требования доступности сервера глобального каталога при входе в домен Windows 2000........................................108 3.24. Отключение требования доступности сервера глобального каталога при входе в домен Windows Server 2003.................................110 3.25. Поиск хозяев операций...........................................110 3.26. Передача роли FSMO..............................................113 3.27. Назначение роли FSMO........................................ 115 3.28. Поиск эмулятора PDC через службу DNS............................116 Глава 4. Объекты и операции над ними.............................. .117 4.0. Введение...................................................... 117 4.1. Получение сведений об объекте RootDSE...........................118 4.2. Просмотр значений атрибутов объекта.............................121 4.3. Использование управляющих объектов LDAP.........................124 4.4. Использование быстрого и параллельного связывания...............128 4.5. Поиск объектов в домене.........................................130 4.6. Поиск в глобальном каталоге.....................................132 4.7. Поиск большого количества объектов............................ 133 4.8. Поиск по значениям составных атрибутов..........................135 4.9. Поиск с помощью поразрядного фильтра.......................... 137 4.10. Создание объекта................................................140 4.11. Изменение значений атрибутов объекта........................... 142 4.12. Изменение значения атрибута, содержащего битовые флаги..........144 4.13. Динамическое связывание пользовательских классов................146 4.14. Создание динамического объекта..................................147 4.15. Обновление динамического объекта................................149 4,16. Изменение задаваемого по умолчанию времени жизни динамических объектов............................................. 150 4.17. Перемещение объекта в другое подразделение или контейнер........153 4.18. Перемещение объекта в другой домен..............................154 4.19. Переименование объекта..........................................155 4.20. Удаление объекта.............................................. 157 4.21. Удаление контейнера с дочерними объектами.......................159 4.22. Просмотр времени создания и последнего изменения объекта........160 4.23. Изменение используемой по умолчанию политики запросов LDAP......161 4.24. Экспорт объектов в файл LDIF....................................164 4.25. Импорт объектов из файла LDIF...................................165 4.26. Экспорт объектов в CSV-файл.....................................166 4.27. Импорт объектов из CSV-файла.................................. 166 Глава 5. Подразделения........................................ .....168 5.0. Введение..................................................... .168 5.1. Создание подразделения..........................................169 5.2. Просмотр списка контейнеров заданного домена....................170
Содержание 9 5.3. Просмотр списка объектов заданного подразделения..................172 5.4. Удаление объектов из подразделения................................173 5.5. Удаление подразделения.......................................... 174 5.6. Перемещение объектов между подразделениями........................175 5.7. Перемещение подразделения.........................................177 5.8. Определение количества дочерних объектов в подразделении..........178 5.9. Делегирование функций управления подразделением...................179 5.10. Предоставление разрешения на создание подразделений в контейнерах.180 5.11. Связывание объекта групповой политики с контейнером...............181 Глава 6. Пользователи.......................................... 184 6.0. Введение........................................................ 184 6.1. Создание учетной записи пользователя..............................186 6.2. Создание большого числа учетных записей пользователей.............187 6.3. Создание объекта inetOrgPerson.................................. 189 6.4. Одновременная установка значения атрибута для нескольких пользователей..........................................191 6.5. Перемещение учетной записи пользователя...........................192 6.6. Изменение имени пользователя......................................193 6.7. Копирование учетной записи пользователя...........................195 6.8. Разблокирование учетной записи пользователя.......................197 6.9. Поиск заблокированных учетных записей пользователей...............198 6.10. Разрешение проблем, связанных с блокировкой учетных записей.......199 6.11. Просмотр политик блокировки учетных записей в домене и управления паролями...................................................200 6.12. Включение и отключение учетной записи пользователя................204 6.13. Поиск отключенных учетных записей пользователей...................205 6.14. Просмотр информации о членстве пользователя в группах.............207 6.15. Изменение основной группы пользователя............................208 6.16. Включение пользователя во все группы, членом которых является другой пол ьзовател ь...................................................210 6.17. Определение пароля пользователя...................................212 6.18. Установка пароля пользователя средствами LDAP................. ..213 6.19. Установка пароля пользователя средствами Kerberos.................214 6.20. Запрет на изменение пароля пользователем..........................215 6.21. Смена пароля пользователем при следующем входе в систему..........216 6.22. Снятие ограничений на срок действия пароля........................217 6.23. Поиск учетных записей пользователей, чьи пароли скоро станут недействительными.......................................................219 6.24. Установка параметров учетной записи пользователя.............. 222 6.25. Установка срока действия учетной записи...........................225 6.26. Поиск учетных записей, срок действия которых скоро истечет........226 6.27. Определение времени последнего входа пользователя в систему.......228
10 Содержание 6.28. Поиск учетных записей пользователей, не входивших в систему в течение определенного времени.......................................230 6.29. Установка параметров пользовательского профиля................ 232 6.30. Получение списка объектов, принадлежащих указанному пользователю.233 6.31. Изменение выводимого имени пользователя.........................234 6.32. Создание UPN-суффикса для леса..................................236 Глава 7. Группы................................................... .238 7.0. Введение........................................................238 7.1. Создание группы.................................................239 7.2. Просмотр списка непосредственных членов группы..................241 7.3. Просмотр списка косвенных членов группы.........................242 7.4. Добавление и удаление членов группы.............................243 7.5. Перемещение группы................................... .....245 7.6. Изменение области действия и типа группы........................245 7.7. Делегирование управления членством в группе.....................247 7.8. Определение имени основной группы пользователя..................249 7.9. Кэширование информации о членстве в универсальных группах.......251 Глава 8. Компьютеры.......................................... 254 8.0. Введение...................................................... 254 8.1. Создание объекта computer................................... 255 8.2. Создание объекта computer для конкретного пользователя или для группы....................................... .256 8.3. Присоединение компьютера к домену...............................262 8.4. Перемещение объекта computer.................................. 264 8.5. Переименование компьютера.......................................266 8.6. Тестирование защищенного канала компьютера......................268 8.7. Переустановка учетной записи компьютера.........................269 8.8. Поиск неактивных или неиспользуемых компьютеров.................270 8.9. Изменение максимального количества компьютеров, которые пользователь может присоединить к домену.....................273 8.10. Поиск учетных записей компьютеров, работающих под управлением определенной операционной системы.....................275 8.11. Ссылка на контейнер, используемый по умолчанию для хранения объектов computer........................................277 8.12. Замена используемого по умолчанию контейнера объектов computer...279 Глава 9. Объекты групповой политики........................... .......281 9.0. Введение.................................................... 281 9.1. Поиск объекта групповой политики в домене.......................283 9.2. Создание объекта групповой политики.............................284 9.3. Копирование объекта групповой политики........................ 285 9.4. Удаление объекта групповой политики.............................288 9.5. Просмотр установок объекта групповой политики................. 290
Содержание 11 9.6. Изменение установок объекта групповой политики....................292 9.7. Импорт установок объекта групповой политики.......................293 9.8. Включение сценариев в объект групповой политики...................296 9.9. Установка приложений с использованием объекта групповой политики..297 9.10. Отключение установок пользователя или компьютера в объекте групповой политики...........................................298 9.11. Вывод списка связей объекта групповой политики....................300 9.12. Создание связи объекта групповой политики с областью управления...302 9.13. Блокирование наследования групповой политики для подразделения....304 9.14. Фильтрация объектов, на которые распространяется действие объекта групповой политики..............................................306 9.15. Создание фильтра WMI..............................................308 9.16. Связывание фильтра WMI с объектом групповой политики..............310 9.17. Создание резервной копии объекта групповой политики...............312 9.18. Восстановление объекта групповой политики.........................315 9.19. Эмуляция результирующей политики................................ 317 9.20. Просмотр результирующей политики..................................318 9.21. Обновление групповых политик компьютера...........................319 9.22. Восстановление политики, применяемой по умолчанию.................320 Глава 10. Схема Active Directory....................................... 322 10.0. Введение..........................................................322 10.1. Регистрация оснастки Active Directory Schema......................325 10.2. Разрешение на изменение схемы................................... 326 10.3. Получение OID для нового класса или атрибута......................327 10.4. Генерация GUID для нового класса или атрибута.....................328 10.5. Расширение схемы................................................ 330 10.6. Документирование расширений схемы.................................331 10.7. Добавление нового атрибута........................................331 10.8. Просмотр свойств атрибута.........................................336 10.9. Добавление нового класса..........................................337 10.10. Просмотр атрибутов класса.........................................339 10.11. Индексирование атрибута...........................................340 10.12. Выбор атрибутов, копируемых вместе с учетной записью пользователя.342 10.13. Выбор атрибутов, по которым будет выполняться ANR-поиск...........343 10.14. Добавление или удаление атрибута из глобального каталога .........346 10.15. Поиск нереплицируемых и вычисляемых атрибутов.....................348 10.16. Поиск связанных атрибутов.........................................350 10.17. Поиск структурных, абстрактных и особых классов, а также классов типа 88............................................... 351 10.18. Поиск атрибутов класса.......................................... 353 10.19. Изменение параметров безопасности класса..........................354 10.20. Деактивизация классов и атрибутов.................................355
12 Содержание 10.21. Переопределение классов и атрибутов..............................356 10.22. Перезагрузка схемы...............................................357 Глава 11. Топология сети............................................ 360 11.0. Введение.........................................................360 11.1. Создание сайта................................................. 364 11.2. Вывод списка сайтов..............................................366 11.3. Удаление сайта................................................. 367 11.4. Создание подсети.................................................368 11.5. Вывод списка подсетей............................................369 11.6. Поиск подсетей, не связанных с сайтом............................370 11.7. Создание связи сайтов............................................372 11.8. Поиск связей указанного сайта....................................374 11.9. Изменение набора сайтов, соединенных посредством указанной связи.....375 11.10. Изменение стоимости связи сайтов........................... ....377 11.11. Отключение расписаний и транзитивности связей.................. 378 11.12. Создание моста связей сайтов................................... 380 11.13. Поиск серверов-плацдармов........................................381 11.14. Выбор для сайта предпочтительного сервера-плацдарма..............383 11.15. Вывод списка серверов............................................384 11.16. Перемещение контроллера домена в другой сайт................... 385 11.17. Распространение области действия контроллера домена на несколько сайтов................................................... 387 11.18. Просмотр списка сайтов, на которые распространяется область действия контроллера домена..........'...........................388 11.19. Ограничение области действия контроллера домена................ 389 11.20. Поиск сайта клиента..............................................390 11.21. Связывание клиента с конкретным сайтом...........................391 11.22. Создание объекта connection........................................392 11.23. Вывод списка объектов connection для указанного сервера..........393 11.24. Распределение нагрузки между серверами-плацдармами.................394 11.25. Поиск генератора межсайтовой топологии для указанного сайта......395 11.26. Передача роли генератора межсайтовой топологии другому контроллеру домена..............................................396 11.27. Запуск средства проверки согласованности знаний..................398 11.28. Контроль функционирования средства проверки согласованности знаний.399 11.29. Отключение средства проверки согласованности знаний для указанного сайта.................................................... 400 11.30. Изменение периода работы средства проверки согласованности знаний..402 Глава 12. Репликация.................................................. 404 12.0. Введение.........................................................404 12.1. Проверка синхронизации двух контроллеров домена..................404 12.2. Просмотр сведений о репликации для нескольких контроллеров домена..405
Содержание 13 12.3. Просмотр нереплицированных изменений в каталогах двух контроллеров домена..............................................406 12.4. Принудительная репликация с одного контроллера домена на другой.409 12.5. Изменение периода внутрисайтовой репликации.....................411 12.6. Изменение периода межсайтовой репликации........................412 12.7. Отключение режима сжатия трафика репликации между сайтами.......413 12.8. Выявление неполадок, связанных с репликацией.................. 414 12.9. Включение режима расширенного протоколирования событий репликации ....415 12.10. Установка режима строгой или слабой согласованности репликации..415 12.11. Поиск конфликтующих объектов....................................417 12.12. Просмотр метаданных объекта................................... 419 Глава 13. Система доменных имен..................................... .421 13.0. Введение........................................................421 13.1. Создание зоны прямого просмотра.................................422 13.2. Создание зоны обратного просмотра............................. 424 13.3. Просмотр зон на сервере...................... ,................425 13.4. Преобразование обычной зоны DNS в зону, интегрированную с Active Directory............................................ 427 13.5. Перемещение зон, интегрированных с Active Directory, в раздел приложений............................................... 428 13.6. Делегирование управления зоной........................... .....430 13.7. Создание и удаление записей ресурсов.......................... 431 13.8. Поиск записей ресурсов........................................ 434 13.9. Изменение конфигурации сервера DNS..............................435 13.10. Выполнение очистки с целью удаления старых записей ресурсов.....436 13.11. Очистка кэша DNS............................................ ..439 13.12. Проверка возможности регистрации записей ресурсов контроллером домена....................................................440 13.13. Регистрация записей ресурсов контроллера домена.................442 13.14. Отключение режима динамической регистрации записей ресурсов контроллером домена ...................................................442 13.15. Запрет на динамическую регистрацию записей ресурсов определенных типов.....................................................444 13.16. Удаление записей ресурсов контроллера домена....................447 13.17. Использование в именах компьютеров суффикса домена, отличного от имени домена Active Directory........................... 447 Глава 14. Защита и аутентификация.................................. 450 14.0. Введение...................................................... 450 14.1. Включение SSL/TLS...............................................451 14.2. Шифрование трафика LDAP с помощью SSL или TLS и использование цифровых подписей.....................................................452 14.3. Разрешение анонимного доступа по протоколу LDAP.................454 14.4. Запрет на выполнение запросов LDAP от определенных клиентов.....456
14 Содержание 14.5. Использование мастера делегирования управления...................457 14.6. Настройка мастера делегирования управления..................... 458 14.7. Просмотр списка контроля доступа объекта.........................460 14.8. Настройка редактора ACL..........................................462 14.9. Просмотр действующих разрешений на доступ к объекту..............463 14.10. Изменение списка контроля доступа объекта........................464 14.11. Изменение используемого по умолчанию списка контроля доступа, связанного с классом объектов в схеме..................................465 14.12. Сравнение ACL объекта с используемым по умолчанию списком контроля доступа его класса............................................466 14.13. Переустановка списка контроля доступа объекта....................466 14.14, Запрет на сохранение хэш-значений паролей........................467 14.15. Включение режима List Object Access..............................468 14.16. Изменение списка контроля доступа для администраторов............470 14.17. Просмотр и удаление билетов Kerberos.............................471 14.18. Совместное использование протоколов Kerberos и UDP...............472 14.19. Настройка параметров протокола Kerberos..........................473 Глава 15. Протоколирование, мониторинг и квоты..........................475 15.0. Введение....;....................................................475 15.1. Расширенное протоколирование операций программы dcpromo..........477 15.2. Повышение уровня диагностического протоколирования...............478 15.3. Протоколирование процесса NetLogon...............................480 15.4. Клиентское протоколирование процесса обработки объектов групповой политики....................................................481 15.5. Протоколирование системы Kerberos................................483 15.6. Отладочное протоколирование сервера DNS..........................484 15.7. Просмотр статистики производительности сервера DNS...............487 15.8. Протоколирование неэффективных и дорогостоящих запросов LDAP.....489 15.9. Просмотр статистики запросов LDAP с использованием управляющего объекта STATS.........................................................492 15.10. Мониторинг Active Directory с применением программы perfmon....,.493 15.11. Использование журналов трассировки программы perfmon для мониторинга работы Active Directory.................................496 15.12. Аудит доступа к каталогу...........................................498 15.13. Определение квоты.............................................. 500 15.14. Поиск объектов quota, связанных с участником системы безопасности.501 15.15. Изменение весового коэффициента захороненных объектов по отношению к квоте....................................................502 15.16. Определение квоты для участников системы безопасности из указанного раздела................................................ 504 15.17. Определение использованной части квоты......................... 505
Содержание 15 Глава 16. Архивирование и восстановление каталога, удаленные объекты............................................... ....507 16.0. Введение..................................................... 507 16.1. Архивирование данных Active Directory..........................509 16.2. Перезапуск контроллера домена в режиме восстановления службы каталогов......................................................511 16.3. Переустановка пароля администратора для режима восстановления службы каталогов......................................................512 16.4. Выполнение неавторизированного восстановления..................513 16.5. Авторизированное восстановление объекта или поддерева..........515 16.6. Полное авторизированное восстановление.........................516 16.7. Проверка целостности DIT-файла............................... 516 16.8. Перемещение DIT-файла........................................ 517 16.9. Исправление или восстановление DIT-файла.......................518 16.10. Дефрагментация базы данных без отключения служб на контроллере домена............................................... 519 16.11. Определение объема свободного пространства в DIT-файле.........521 16.12. Выполнение дефрагментации с отключением служб на контроллере домена.................................................522 16.13. Изменение периода сбора мусора.................................524 16.14. Протоколирование операции по удалению захороненных объектов....525 16.15. Определение размера базы данных Active Directory...............526 16.16. Поиск удаленных объектов.......................................527 16.17. Восстановление удаленных объектов..............................529 16.18. Изменение времени захоронения объектов....................... 531 Глава 17. Разделы приложений........................................ 533 17.0. Введение..................................................... 533 17.1. Создание и удаление раздела приложений.........................534 17.2. Поиск разделов приложений в лесу............................ 536 17.3. Добавление и удаление сервера репликации.......................538 17.4. Поиск серверов репликации раздела приложений...................540 17.5. Поиск разделов приложений, хранящихся на заданном сервере......542 17.6. Проверка на сервере настроек раздела приложений................544 17.7. Определение времени задержки уведомления о репликации ....... 545 17.8. Назначение домена ссылок дескрипторов безопасности для раздела приложений...............................................547 17.9. Делегирование функций управления разделом приложений...........549 Глава 18. Взаимодействие и интеграция............................. 553 18.0. Введение..................................................... 553 18.1. Доступ к Active Directory с платформы, отличной от Windows.....553 18.2. Программирование в .NET........................................554 18.3. Программирование на DSML.......................................556
16 Содержание 18.4. Программирование на Perl.............................. 557 18.5. Программирование на Java.................................. 559 18.6. Программирование на Python......................................560 18.7. Интеграция с МГГ Kerberos.......................................561 18.8. Интеграция с Samba..............................................562 18.9. Интеграция с Apache......................................... 563 18.10. Замена службы NIS............................................. 564 18.11. Использование BIND вместо DNS..................... ............565 18.12. Авторизация сервера Microsoft DHCP.......................... 566 18.13. Использование VMWare для тестирования Active Directory..........568 Приложение. Список инструментальных средств.......................... 570 Алфавитный указатель.......................................... .....582
Предисловие Пятнадцать лет, начиная с «года локальной сети», который, если я не ошибаюсь, наступил сначала в 1983, затем в 1984,1985 и, наконец, в 1988 году, я ждал насту- пления «года каталога». Но я пишу эти строки в такое время, когда редко в какой сети предприятия не функционирует служба каталогов. Правда, пока я терпели- во дожидался появления каталога у парадной двери, он проскользнул через чер- ный ход. Я проспал самое главное. На самом деле «год каталога» никогда не наступал и не наступит. Подобно телевидению, факсимильной связи, локальным сетям, сотовой телефонии и Ин- тернету службы каталогов произвели очередной переворот в информационных и коммуникационных технологиях, но никто не сможет сказать, когда именно он произошел. Это как глобальное потепление: «Смотри-ка, зима кончается, а снега еще и не было!» Компьютерная индустрия ассимилировала очередную технологию, облегчающую использование разбросанных по сети ресурсов, сглаживающую пе- реходы и подключения, ускоряющую процесс вычисления. Основное назначение каталогов — обеспечить возможность создавать большие и сложные сети, которые способны «не рассыпаться» под собственной тяжестью. Первая коммерческая сетевая операционная система со встроенной службой ка- талогов, Banyan VINES, оказалась на редкость удачной. В те времена, когда боль- шинство руководителей отделов информационных технологий предприятий лишь смутно осознавали, что с появлением локальных сетей для рабочих групп могут потерять смысл все их стратегии, основанные на использовании миникомпьютеров и мэйнфреймов, лишь немногие, наиболее дальновидные руководители смотрели в будущее и принимали решения о создании глобальных сетей персональных ком- пьютеров с централизованным управлением, основанных на распределенной и ре- плицируемой службе каталогов StreetTalk от Banyan. VINES и StreetTalk позволяли значительно сократить затраты на управление распределенными сетями предприятий. Сетевая операционная система VINES обеспечивала доступ к файлам, возможность печатать и обмениваться информацией с использованием обыкновенного серверного аппаратного обеспечения. Служба каталогов StreetTalk дополнила возможности VINES надежной защитой, распре- деленной системой именования и аутентификации, действовавшими на уровне всей сети. Кроме того, она была интегрирована с системой электронной почты, в результате чего стала «идеалом простоты и масштабируемости». Администраторы VINES могли наслаждаться всеми этими возможностями при исключительно низких затратах на обслуживание. Для того чтобы ввести в эксплуатацию новый сервер VINES со службами каталогов и электронной почты, нужно было всего
18 Предисловие лишь установить операционную систему (27 дискет!), настроить сетевую плату и присвоить серверу имя. Инструментальных средств для разрешения проблем практически не существовало, потому что и проблем не было. Ну а если таковые все же возникали, устранить их было очень просто. StreetTalk приблизила прин- цип работы с VINES к определяемому понятием «установить и забыть» в той сте- пени, какой в сетевом мире еще не существовало. Собственно говоря, именно та- кой и полагалось быть настоящей службе каталогов. Однако спустя 5 лет после выхода StreetTalk десятилетнее лидерство Banyan на рынке корпоративных сетевых технологий завершилось — отчасти из-за не- удачной маркетинговой политики компании, отчасти из-за появления конкури- рующего продукта от Novell — системы NDS, теперь называемой eDirectory, а от- части из-за отвратительной поддержки дистрибьюторами, которую можно даже назвать вредительской. Крах Banyan как производителя сетевой операционной системы был неизбежен. В последние годы рынок служб каталогов для сетевых операционных систем принадлежит компаниям Novell и Microsoft. Продукт eDirectory, выпускаемый первой компанией, хорош во многих отношениях, но при необходимости постро- ить систему масштаба предприятия или сеть на базе Windows преимущество сис- темы Active Directory, разработанной специалистами Microsoft, неоспоримо. И вот теперь я стал большим приверженцем Microsoft Active Directory — за- мечательного, хотя и довольно сложного программного обеспечения, которое прекрасно функционирует, масштабируется для систем любых размеров и обес- печивает эффективную интеграцию компьютеров, работающих под управлением более ранних операционных систем Windows, в частности Windows NT 4.0 и Win- dows 98. Считаю, что у Microsoft еще не было столь надежного программного продукта, как Active Directory, в особенности ее версия 1.0. Было бы очень удиви- тельно услышать о предприятии, на котором не смогли внедрить данную систему. Однако такое сложное и высокопроизводительное программное обеспечение требует наличия у администраторов большого объема знаний. Если сетью VINES можно было управлять, как «фольксвагеном» шестидесятых: тяни-толкай, вле- во-вправо, то Active Directory скорее похожа на реактивный самолет: приборная доска со множеством индикаторов и кнопок, и если вы не знаете, зачем все они нужны, рискуете оставить после себя лишь дымящийся кратер в земле. Профессиональному администратору Active Directory необходимо иметь хотя бы общее представление о множестве разнообразных технологий, включая DNS, WINS, Kerberos, LDAP, и, конечно же, о самой операционной системе Windows. Кроме того, он должен уметь выполнять более сотни разных задач и пользоваться тремя десятками различных утилит. Хотя Active Directory существенно упроща- ет управление большой сетью, так как принимает на себя значительную часть ад- министративных функций, для того чтобы стать настоящим администратором, недостаточно прочитать несколько книг и прослушать специальные курсы — нуж- ны опыт, знание множества деталей и нюансов Active Directory и связанных с ней технологий. Такова история Active Directory. Робби Аллен написал замечательную книгу, в которой изложены рекомендации по выполнению более трехсот задач, практи- чески неизбежно встающих перед администратором на той или иной стадии экс- плуатации службы каталогов — что-то вроде контрольного списка профессио-
Предисловие 19 нального пилота Active Directory. Формулируя каждую проблему, он привел базовые сведения, пошаговые инструкции по ее преодолению и ссылки на доку- менты с более подробной информацией, имеющиеся на сайте Microsoft. Если вам понадобится что-то сделать в Active Directory, Робби Аллен предложит наиболее простой и быстрый способ. Я знаю Робби уже несколько лет как одного из наиболее блестящих доклад- чиков на конференциях специалистов в области служб каталогов, проводимой компанией NetPro (Directory Experts Conference), а также как автора многих статей из рассылки activedir.org Тони Мюррея. В этом человеке сочетаются такие редкие качества, как глубокие знания принципов и особенностей работы Active Direc- tory, понимание того, что нужно делать для успешного внедрения и поддержки данной системы, свойственная администраторам UNIX тяга к автоматизации при помощи сценариев всего, что можно автоматизировать. Поэтому Робби не только объясняет, как выполнить ту или иную административную задачу, но еще и предла- гает готовые сценарии для ее автоматизации с помощью VBScript, Perl, пакетных файлов и утилит с интерфейсом типа командной строки. Книга, обладающая перечисленными качествами, конечно же, вызывает вос- хищение. Сборник инструкций по решению типичных административных задач был бы полезен и сам по себе, но Робби проделал огромную работу по их автома- тизации. Тем самым он помог нам приблизиться к желанной цели — созданию сети, которой присущи, с одной стороны, производительность и мощь Windows и Active Directory, а с другой — простота администрирования, какой мы не виде- ли со времен VINES и StreetTalk. Ведь это чудесное сочетание! Гил Киркпатрик, директор по информационным технологиям компании NetPro
Введение Когда я в 1998 году присоединился к программе совместной разработки Microsoft Windows 2000 (Microsoft Windows 2000 Joint Development Program, JDP), сведений об Active Directory было очень мало. Книг и документов, которые могли бы помочь первым администраторам Active Directory, катастрофически не хватало на протя- жении довольно длительного периода, даже после выпуска Windows 2000. А те немногочисленные источники, которые все же удавалось раздобыть, содержали неполные, а зачастую и ошибочные данные, так что разработчикам приходилось действовать традиционным образом — методом проб и ошибок. Однако уже спустя два года после первого выпуска Active Directory ситуация в корне изменилась. По этой теме вышло около 50 книг, Microsoft внесла исправ- ления в документацию на сайте MSDN (http://msdn.mlcrosoft.com) й на сайте про- дукта (http://www.microsoft.com/ad/). Сейчас там содержится огромное количество разнообразных документов, многие из которых по сути являются мини-учебниками. Появились и другие сайты с информацией об Active Directory. Компания Microsoft значительно повысила уровень собственной документации в операционной сис- теме Windows Server 2003. Обширные сведения об Active Directory теперь имеются прямо на компьютере, работающем под управлением Windows Server 2003, — в виде центра справки и поддержки (Help and Support Center), доступ к которому осу- ществляется из меню Start (Пуск). Вы спрашиваете, зачем же при таком обилии информации было писать еще одну книгу об Active Directory? Летом 2002 года я в поиске информации, необходимой для написания одного сценария, просматривал сборник рецептов по языку Perl, выпущенный издатель- ством O’Reilly. Найдя подробные инструкции, я понял, что и администратору системы Active Directory, по своей природе ориентированной на выполнение определенного набора четко сформулированных задач, необходима такая книга — сборник рецептов. После проведения небольшого исследования стало ясно, что существуют книги, посвященные буквально каждому аспекту самого этого продукта и его эксплуатации (вводные книги, пособия по созданию каталогов, переносу с других платформ, программированию, различные справочники), но нет ни одной, ориентированной на конкретные задачи, то есть книги в том формате, в каком из- даются сборники рецептов O’Reilly. Основываясь на собственном опыте, многочасовых исследованиях, результа- тах работы в течение нескольких лет в группах новостей и подписках по Active Directory, я подобрал 325 рецептов выполнения практических задач, с которыми сталкиваются администраторы Active Directory в повседневной работе. Надеюсь, что подобно книге рецептов по Perl, которая заняла достойное место на полках
Введение 21 многих специалистов — приверженцев этого языка — и до сих пор неплохо прода- ется, моя книга рецептов послужит хорошим дополнением к библиотеке админист- ратора Active Directory и разработчика сопутствующих или взаимодействующих с ней приложений. Читательская аудитория Как и многие другие сборники рецептов, выпущенные издательством O’Reilly, эта книга является справочником, к которому можно обращаться при выполне- нии текущих задач. Очень надеюсь, что она будет полезна всем, кто занимается внедрением, администрированием и автоматизацией Active Directory. Благодаря обилию кода книга особенно ценна для программистов, которым необходима от- правная точка для создания программ. Те администраторы, которые не имеют большого опыта написания собственного кода, тоже смогут пользоваться приве- денными здесь сценариями на языках VBScript и Perl и даже расширять их по мере необходимости. Сборник рецептов, который вы держите в руках, удачно дополняется еще од- ной книгой автора — вторым изданием Active Directory (O’Reilly), где приведено подробное описание базовых концепций службы каталогов, принципов разработки ее инфраструктуры и автоматизации административных задач с использованием ADSI (Active Directory Service Interfaces — интерфейсы службы Active Directory) и WMI (Windows Management Instrumentation — инфраструктура управления Windows). Уверен, эти две книги вместе с дополнительными источниками, пере- численными в главе 1, помогут вам ответить на любой вопрос, который может возникнуть в процессе эксплуатации Active Directory. Содержание книги Книга состоит из 18 глав, в которых последовательно рассматриваются основные компоненты каталога и важнейшие функции Active Directory, и приложения с пе- речнем всех упоминаемых инструментальных средств. Глава 1, «Общие рекомендации», содержит базовые сведения, необходимые читателям для эффективного использования предлагаемых рецептов. В ней рас- сказывается, где найти упоминаемые в книге инструментальные средства, приве- дены советы по использованию сценариев VBScript и Perl, а также по самостоя- тельной их доработке, перечислены источники дополнительной информации. О принципах создания и удаления лесов и доменов, о возможности измене- ния режимов и уровней их функционирования, о создании доверительных отно- шений разных типов и выполнении иных задач, связанных с администрированием доверительных отношений, рассказывается в главе 2, «Леса и домены, довери- тельные отношения». А в главе 3, имеющей название «Контроллеры домена, гло- бальные каталоги и роли», представлены инструкции, которыми следует руковод- ствоваться при повышении и понижении роли сервера, поиске контроллеров до- мена, обеспечении поддержки глобального каталога, а также даны рекомендации, касающиеся управления ролями FSMO.
22 Введение В главе 4, «Ооъекты и операции над ними», дается представление о методах поиска информации в Active Directory, создания, изменения и удаления объектов, а также рассказывается об использовании объектов LDAP (Lightweight Directory Access Protocol — основной протокол доступа для Active Directory), импорте и экспорте данных LDAP в форматах LDIF и CSV. Из главы 5, «Подразделения», читатель узнает о принципах создания, перемещения и удаления подразделений, об управлении содержащимися в них объектами. Глава 6, «Пользователи», посвящена такой интересной теме, как управление объектами, представляющими пользователей, в частности их созданию, переиме- нованию, перемещению, изменению паролей, блокировке учетных записей, изме- нению атрибутов учетных записей и поиску пользователей по заданному критерию (например, пользователей, у которых скоро истечет срок действия паролей). Инструкции по созданию групп, изменению их типов и управлению членст- вом в группах представлены в главе 7, получившей название «Группы». О том, как можно создавать объекты, представляющие компьютеры, присоединять компью- теры к доменам, переустанавливать их учетные записи, искать компьютеры по за- данным критериям (например, неактивные в течение указанного числа дней), речь идет в главе 8, имеющей название «Компьютеры». Материал главы 9, «Объекты групповой политики», охватывает вопросы создания, изменения, связывания, ко- пирования, импорта, резервного копирования, восстановления и удаления объек- тов групповой политики с использованием соответствующей консоли и програм- мных сценариев. Темой главы 10, «Схема Active Directory», является администрирование схе- мы, включающее такие процедуры, как генерирование идентификаторов объек- тов (OID) и глобально уникальных идентификаторов (GUID), расширение схе- мы с использованием LDIF-файлов и поиск атрибутов или классов по заданным критериям (в частности, поиск всех индексированных атрибутов). В главе 11, «Топология сети», освещены вопросы управления сайтами и под- сетями, а также связями сайтов и подключениями. Ознакомившись с главой 12, «Репликация», читатель узнает, как запускать и отключать средство проверки со- гласованности знаний (Knowledge Consistency Checker, КСС), как запрашивать метаданные, инициировать репликацию и находить изменения, еще не реплици- рованные на другие контроллеры домена. Материал, изложенный в главе 13, «Система доменных имен», будет полезен читателю в первую очередь при создании зон и записей ресурсов, изменении кон- фигурации серверов DNS, выполнении запросов к службе DNS (Domain Name System — система доменных имен), а также при динамической регистрации записей ресурсов контроллерами домена. Глава 14, «Защита и аутентификация», содер- жит инструкции по делегированию управления, просмотру и изменению разре- шений, определению действующих разрешений и управлению билетами систе- мы Kerberos. В главе 15, «Протоколирование, мониторинг и квоты», рассказывается, как включить аудит, провести диагностический мониторинг работы систем и служб DNS, NetLogon и Kerberos, проанализировать GPO (Ggroup Policy Object — объект групповой политики), собрать статистику о выполнении запросов LDAP, как управ- лять квотами на создание объектов.
Введение 23 Глава 16, «Архивирование и восстановление каталога, удаленные объекты», посвящена таким сервисным процедурам, как создание резервных копий ката- лога Active Directory, выполнение авторизированного и неавторизированного восстановления, проверка целостности DIT-файла, выполнение его дефрагмента- ции в рабочем режиме и в режиме восстановления службы каталога. Кроме того, здесь речь идет об удаленных объектах Active Directory, в частности об их поиске и восстановлении. В главе 17, «Разделы приложений», основное внимание уделяется принципам создания разделов приложений и управления таковыми. Наконец, в главе 18, по- лучившей название «Взаимодействие и интеграция», рассматриваются вопросы интеграции Active Directory с другими приложениями, различными службами и языками программирования. Используемые в книге соглашения Для того чтобы облегчить восприятие излагаемого материала, названия команд меню и других элементов интерфейса, а также имена файлов, консолей ММС, разделов реестра, каталогов и URL выделены специальным шрифтом. Команды, вводимые с клавиатуры, и программный код представлены моноширинным шрифтом. Встречающиеся в тексте новые термины выделены курсивом. В книге используются врезки «ПРИМЕЧАНИЕ» и «ВНИМАНИЕ», создан- ные с целью сконцентрировать внимание читателей на наиболее важных вопро- сах и положениях. Обратная связь Приведенная в книге информация была тщательно проверена и, конечно, протес- тирована не только автором, но и сотрудниками издательства O’Reilly. Но все же ошибки неизбежны, и мы просим вас сообщать о любой обнаруженной неточно- сти или опечатке. Постараемся исправить их в будущих изданиях книги. Для книги создана веб-страница, где представлены перечень допущенных оши- бок, примеры кода, разного рода дополнительная информация. Адрес этой стра- ницы: http: www .orei lly.com/cata log/activedckbk. Примеры кода имеются и на сайте автора: http://www.rallenhome.com/books/ad- cookbook/code.html. Благодарности В издательстве O’Reilly работают замечательные люди, с которыми очень приятно было сотрудничать. Я хочу поблагодарить Роберта Дэна (Robert Denn) за по- мощь, оказанную им при работе над начальным вариантом книги, а Энди Орама (Andy Oram) — за его общий критический анализ материала.
24 Введение Мне посчастливилось сотрудничать с группой блестящих технических обо- зревателей, настоящих экспертов по Active Directory. Назову их поименно. Рик Кингслэн (Rick Kingslan, rkingsla@cox.net) — ведущий системный инженер Microsoft Windows Server. Если вы когда-либо обращались с вопросами в группы новостей или форумы по Active Directory, вполне вероятно, что в поиске ответа принимал участие и Рик. Он способен решить любую проблему, связанную с этим продуктом, и я не раз обращался к нему за советами. Гил Киркпатрик (Gil Kirkpatrick, gilk@netpro.com) — исполнительный вице-пре- зидент и директор по информационным технологиям компании NetPro (http:// www.netpro.com/), автор книги Active Directory Programming, выпущенной издатель- ством MacMillan. В совершенстве овладев навыками работы с Active Directory, Гил нередко помогал мне решать самые сложные проблемы. Тони Мюррей (Tony Murray, tony@activedir.org) — создатель сайта со списком рассылки ActiveDir.org, считающегося одним из лучших дискуссионных форумов по Active Directory. Мириады вопросов, поступающих на этот сайт, послужили для меня толчком к созданию настоящей книги. Своими комментариями и пред- ложениями Тони оказал мне неоценимую помощь в работе. Тодд Майрик (Todd Myrick, myrickt@mail.nih.gov) — человек, который благода- ря своей работе в правительственной организации имеет уникальный взгляд на Active Directory. Он предложил несколько идей, которые могли исходить только от столь творческой личности. Джо Ричардс (Joe Richards, joe@joeware.net) - создатель сайта http://www.joe- ware.net/> где содержится множество необходимых администратору Active Direc- tory инструментальных средств, таких как adfind, unlock и т. д. Он один из самых опытных администраторов и программистов Active Directory, с которыми мне посчастливилось встречаться. Джо довольно часто приходится выполнять опи- санные в этой книге задачи, поэтому оказанная им помощь была очень ценной и по-настоящему профессиональной. Кэвин Салливан (Kevin Sullivan, ksullivan@aelita.com) — руководитель проекта Enterprise Directory Management в компании Aelita. Он имеет большой опыт работы с Active Directory, часто принимает участие в посвященных ей дискуссионных форумах. Кэвин внес множество предложений и уточнений по этой книге. В завершение хочу поблагодарить свою жену Джэнет. Ее любовь, поддержка и сияющая улыбка постоянно напоминают мне о том, какой я счастливец. А что касается рецептов, то уж не мне с ней тягаться! От издателя перевода Свои замечания, предложения, вопросы отправляйте по адресу электронной поч- ты comp@piter.com (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение о книге! Подробную информацию о книгах издательств «Питер» и «Издательская груп- па BHV» вы найдете на сайтах www.piter.com и www.bhv.kiev.ua
Общие рекомендации 1.0. Структура книги Если вам уже встречались выпускаемые издательством O’Reilly сборники рецеп- тов по таким популярным темам, как Perl, Java, DNS и BIND, то структура настоя- щей книги и способ изложения материала вам знакомы. Книга состоит из 18 глав, в которых предложены рецепты для выполнения конкретных задач, связанных с работой в системе Active Directory. Каждый рецепт представлен четырьмя час- тями: «Проблема», «Решение», «Комментарий» и «Смотрите также». В первой части коротко формулируется суть рассматриваемой проблемы, во второй приво- дятся пошаговые инструкции по ее решению, в третьей более подробно поясня- ются и сама проблема, и методы ее решения, а в четвертой части перечисляются дополнительные источники информации по данной теме: номера других рецеп- тов из этой же книги, номера документов MS КВ (Microsoft Knowledge Base — база знаний Microsoft), расположенной по адресу http .'//support. microsoft.com/, а также документов MSDN (Microsoft Developers Network — документация для разработчиков, использующих продукты Microsoft), которые вы найдете по адресу http ://msdn. microsoft. com. Три способа выполнения каждой задачи Когда автор только приступил к работе над этой книгой, перед ним встал вопрос: как быть с тем фактом, что практически каждая операция в Active Directory вы- полняется с использованием различных средств. Вы наверняка знакомы с деви- зом Perl: «Это можно сделать несколькими способами!». Данный девиз применим и к Active Directory: почти все связанные с ней задачи выполняются как мини- мум тремя способами: с помощью одной из утилит с графическим пользователь- ским интерфейсом, скажем ADSI Edit либо LDP, или соответствующей оснастки ММС (Microsoft Management Console — консоль управления Microsoft); с исполь- зованием одной из утилит с интерфейсом типа командной строки, которых так мно- го в комплекте Active Directory (например: dsadd, dsmod, dsrm, dsquery, dsget, nltest, netdom или 1 di fde), и, наконец, программным путем — с помощью сценария, напи- санного на таком популярном языке, как VBScript или Perl. Выбор метода зависит от предпочтений администратора и от ситуации, в ко- торой возникла проблема. Поэтому в каждом рецепте предлагается три варианта решения — с помощью графического, командного и программного интерфейсов. Вариантов может быть меньше, если решения определенного типа не существует.
26 Глава 1. Общие рекомендации Для решений, основанных на графическом пользовательском интерфейсе и ин- терфейсе типа командной строки, вполне подходят стандартные средства, доступ- ные каждому администратору. Конечно, существуют и другие средства, но данный сборник рецептов составлялся с учетом того, что администратор не должен тра- тить время на их розыск и установку. В программных решениях используется преимущественно язык VBScript, опять-таки по причине его доступности для администраторов Windows-систем, а также из-за того, что программировать на нем при условии использования про- граммного интерфейса ADSI (Active Directory Service Interface — интерфейс служ- бы Active Directory) и системы WSH (Windows Script Host — система для выпол- нения сценариев Windows) довольно просто. Программистам, предпочитающим работать с другими языками, в том числе с Visual Basic, Perl и J Script, легко будет перевести на них представленный здесь код. Одним из недостатков языка VBScript является то, что он не предназначен для выполнения сложных задач. В тех случаях, когда решить проблему с его по- мощью трудно, в рецептах используется язык Perl. Если же вы предпочитаете все сценарии писать на Perl, обратитесь на веб-страницу книги, где для каждого рецеп- та имеется эквивалентный сценарий на этом языке. Для загрузки любого сценария обращайтесь по адресу http://www.rallenhome.com/books/adcookbook/code.html. В настоящее время существуют две версии Active Directory. Первая из них предназначалась для Windows 2000, а вместе с Windows Server 2003 вышла вто- рая версия, существенно измененная и усовершенствованная. Настоящая книга в боль- шей мере ориентирована на последнюю версию Active Directory. Преобладающая часть предлагаемых в ней решений применима и к Windows 2000, причем даже не требует каких-либо изменений. В тех случаях, когда это не так, в рецепте указы- вается, для какой операционной системы предназначено конкретное решение. В Windows Server 2003 появились новые утилиты с интерфейсом типа команд- ной строки, большинство из которых не могут работать в Windows 2000. Однако управлять Active Directory для Windows 2000 с помощью этих средств можно — для этого их необходимо запустить на удаленном компьютере, работающем под управлением Windows ХР или Windows Server 2003. 1.1. Где искать используемые в книге средства Большинство упоминаемых в этой книге программ с графическим интерфейсом или интерфейсом типа командной строки входят в состав операционной системы при стандартной ее инсталляции, в состав пакета Resource Kit или в набор утилит Support Tools. Вам следует знать, что и Windows 2000 Server Resource Kit, и Win- dows Server 2003 Resource Kit являются ценными источниками информации и содержат множество средств, помогающих администраторам в решении разно- образных повседневных задач. Подробная информация о них имеется на сайте http ://www. microsoft.com/windows/reskits/.
1.1. Где искать используемые в книге средства 27 Пакет Windows 2000 Support Tools и аналогичный ему пакет Windows Support Tools для Windows Server 2003 содержат множество утилит, которые обязательно нужно освоить администратору Active Directory. Средство установки (Microsoft Installer, MSI) для обоих пакетов можно найти в каталоге \support\tools на ком- пакт-диске Windows 2000 Server или Windows Server 2003. Полный список упо- минаемых в книге инструментальных средств с указанием их местоположения и рецептов, в которых они используются, приведен в приложении. Выполнение команд и программ от имени определенного пользователя Наилучшим подходом к управлению Active Directory является создание отдель- ных учетных записей с расширенными разрешениями, используя которые адми- нистраторы могут выполнять специализированные управленческие задачи. В то же время у администраторов должны быть и учетные записи рядовых пользова- телей, предназначенные для доступа к другим ресурсам сетевой операционной системы, что поможет предотвратить внесение случайных изменений в Active Directory. В таком случае для выполнения административных задач необходимо будет либо войти в систему с применением учетной записи администратора, либо, используя административные средства, задать альтернативные имя и па- роль пользователя. Следует отметить, что альтернативные имя и пароль пользователя задаются несколькими способами. В частности, это можно сделать с помощью ряда утилит. Если же утилита не предоставляет возможности задать имя пользователя и пароль для выполнения конкретной задачи, воспользуйтесь командой runas. Ниже пока- зано, как запустить утилиту enumprop из пакета Resource Kit от имени админист- ратора домена га 11 encorp. сот: > runas /user:administrator@rallencorp.сопи /netonly "enumprop \"LDAP://del/derailencorp,ск^сот'/'" Для запуска консоли ММС от имени администратора укажите ее имя в команде runas следующим образом: > runas /user:administrator@rallencorp.com /netonly "mmc" В результате будет запущена пустая консоль ММС, из которой несложно соз- дать консоль для любой оснастки, установленной на локальном компьютере. ПРИМЕЧАНИЕ----------------------------------------------------------------------- Ключ /netonly необходим в тех случаях, когда пользователь, от имени которого вы выполняете дан- ную команду, не имеет права входа на локальный компьютер. Существует еще одна возможность — запуск консолей ММС от имени другого пользователя. Найдите в меню Start (Пуск) соответствующую команду и, удерживая нажатой клавишу Shift, щелкните на ней правой кнопкой мыши. Выберите в кон- текстном меню команду Run As (Запуск от имени), и вам будет предложено ввести имя и пароль пользователя, от лица которого вы хотите запустить программу.
28 Глава 1. Общие рекомендации Выполнение задачи на определенном контроллере домена В большинстве предлагаемых решений не указывается конкретный контроллер домена и применяется бессерверное связывание, при котором может использо- ваться любой доступный контроллер домена. Под связыванием подразумевается процесс установки соответствия между именем пользователя, вошедшего в систе- му и выполняющего в ней те или иные действия, и его учетной записью, в кото- рой определены его разрешения. Кроме того, связыванием также называют полу- чение идентификатора объекта по его имени, позволяющего выполнять над этим объектом те или иные операции. В обоих случаях связывание должен производить определенный контроллер домена. При бессерверном связывании регистрацию пользователя в системе и последующие его запросы на доступ к каталогу выполняет любой доступный контроллер домена. Однако бывают ситуации, когда необходимо использовать лишь указанный контроллер. Бессерверное связывание работает при условии, что для леса Active Directory настроена служба DNS и клиент может вы- полнять запросы к ней. Если же Active Directory используется независимо от DNS и не имеет с ней связи, контроллер домена нужно указывать. 1.2. Знакомство с LDIF Даже с появлением новых средств для Windows Server 2003 поддержка возмож- ности изменения данных в Active Directory с использованием интерфейса типа командной строки осталась очень слабой. Утилита dsmod может модифицировать атрибуты объектов, но только из ограниченного набора классов. Однако интерфейс типа командной строки не очень подходит для работы с объек- тами, например для изменения их многозначных атрибутов. Команда, в которой задано более одного-двух значений, получается очень длинной. В таком случае гораздо проще пользоваться редактором с графическим интерфейсом, например ADSI Edit В то же время работать с указанным средством довольно неудобно, если речь идет о внесении большого числа изменений или многократном выполнении одних и тех же операций. В подобных ситуациях сам собой напрашивается вопрос: нельзя ли описать изменения, которые необходимо внести в каталог, в отдельном файле в удобном текстовом формате, отредактировать и проверить это описание, а затем передать его Active Directory для внесения изменений в каталог? Такая возможность существует. Для ее реализации разработан стандартный формат LDIF (LDAP Data Interchange Format — формат обмена данными LDAP), определенный в документе RFC 2849. Он позволяет описывать операции добав- ления, изменения и удаления данных каталога в текстовой форме, сохраняя эту информацию в файле, откуда ее можно импортировать в каталог с помощью соот- ветствующих средств. Поддержка функций импорта и экспорта в формате LDIF для Active Direc- tory появилась еще в Windows 2000 в виде утилиты 1 di fde. LDIF-файл состоит из блоков записей, каждая из которых определяет операцию добавления, изменения или удаления объекта. В первой строке записи указано отличительное имя объекта,
1.3. Программирование 29 во второй — тип изменения (add, modi fy или del ete). Если выполняется добавле- ние объекта, последующие записи блока содержат значения устанавливаемых ат- рибутов (по одному в строке). Для того чтобы удалить объект, никаких атрибутов задавать не нужно. Если же выполняется модификация объекта, блок должен содер- жать еще как минимум три записи. В первой из них указывается тип модифика- ции: add (установка еще не заданного атрибута или добавление нового значения в многозначный атрибут), repl асе (замена существующего значения) или del ete (удаление значения). Далее следуют символ двоеточия и значение атрибута. На- пример, для того чтобы заменить текущее значение атрибута sn значением Smith, нужно написать следующую спецификацию операции в формате LDIF: dn: cn=jsmi th,cn=users.dc=ral1encorp.dc=com changetype: modify replace: sn sn: Smith За блоком модификации должна следовать строка, содержащая единствен- ный символ — знак минус (-). Далее можно описать другие операции модифи- кации, и после каждой из них должна следовать строка со знаком минус. Ниже приведен полный текст файла LDIF, предназначенного для добавления в каталог объекта user с именем jsmith и последующего изменения значений его атрибутов givenName и sn: dn: cn=jsmith,cn=users.dc=ral1encorp.dc=com changetype: add objectclass: user samaccountname: jsmith sn: JSmith useraccountcontrol: 512 dn: cn=jsmi th,cn=users.dc=ra11 encorp,dc=com changetype: modify add: givenName givenName: Jim replace: sn sn: Smith Как с помощью утилиты 1 di fde выполнить импорт информации из LDIF-фай- лов и ее экспорт в файлы этого формата, подробно рассказывается в рецептах 4.24 и 4.25 (глава 4). 1.3. Программирование Предлагаемые в данной книге сценарии на языке VBScript намеренно сделаны предельно короткими. Поскольку это не учебник по программированию, здесь не приводятся подробные инструкции по использованию, скажем, ADSI или WMI. Приведенные в рецептах сценарии не содержат ничего липшего, напротив, их можно расширять и модифицировать в соответствии с собственными потребностями.
30 Глава 1. Общие рекомендации Бессерверное связывание В книге не приведены инструкции по подключению к конкретному контроллеру домена, так как в большинстве случаев используется бессерверное связывание. На языке VBScript бессерверное связывание с объектом RootDSE описывается сле- дующим образом: set objRootDSE = GetObject!"LDAP://RootDSE") Этот код запрашивает ссылку на объект RootDSE у того контроллера домена, на котором проходил аутентификацию текущий пользователь. Если нужно точно указать домен, задайте его имя в параметре метода GetObject: set objRootDSE = GetObject!"LDAP://apac.rallencorp.com/RootDSE") Аналогичным образом в этом параметре можно указать имя конкретного кон- троллера домена: set objRootDSE = GetObject!"LDAP://dcl/RootOSE”) Следовательно, в зависимости от конфигурации окружения и от того, к како- му лесу направляется запрос, вам может потребоваться (а может и не потребо- ваться) задать в сценарии имя конкретного домена или сервера. Выполнение сценариев от имени другого пользователя Нередко возникает необходимость выполнить сценарий от имени другого поль- зователя (точнее, другой учетной записи, которая принадлежит тому же пользо- вателю, но имеет расширенный набор прав). Это можно сделать с помощью упо- минаемой выше команды runas, но лучше воспользоваться службой Scheduled Tasks (Запланированные задания), позволяющей выполнять сценарий от имени поль- зователя, который был указан вами при создании задания. Существует и третья возможность — жестко закодировать имя и пароль пользователя в сценарии. Оче- видно, что это не самое удачное решение, поскольку файл сценария могут про- смотреть другие пользователи. Тем не менее в некоторых случаях такое решение оказывается оптимальным, особенно при разработке сценариев, предназначенных для выполнения операций в нескольких лесах. Ниже показано, как это сделать с помощью ADSI и ADO. При использовании ADSI имя и пароль пользователя можно задать в вызове метода lADsOpenDSObject:: OpenDSObject. Любое решение из числа приведенных в этой книге легко модифицировать таким образом, чтобы в нем выполнялась аутенти- фикация пользователя. Например, следующий код выводит описание заданного домена: set objDomain = GetObject("LDAP://dc=apac.dc=rallencorp,dc=com") WScript.Echo "Description: " & objDomain.Get("descript!on") Для того чтобы выполнить аутентификацию, используя метод OpenDSObject, нужно изменить в этом фрагменте кода первую строку и добавить еще одну: set objLDAP = GetObject("LDAP:") set objDomain “ objLDAP.OpenDSObject! "LDAP://dc=apac,dc=ral1encorp,dc=com". "adm1nistrator@apac.rallencorp.com",
1.3. Программирование 31 "MyPassword”. _ 0) WScript.Echo "Description; " & objDomain.Get("description") Так же просто осуществляется аутентификация и с помощью ADO. Рассмотрим следующий пример, в котором выполняется запрос на выборку всех объектов computer из домена apac.rallencorp.com: strBase = "<LDAP://dc=apac.dc=rallencorp.dc=com>;" strFilter = ‘'(&(objectclass=computer)(objectcategory=computer));" strAttrs = "cn;" strScope = "subtree" set objConn = CreateObjectCADODB.Connection") objConn.Provider = "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope) objRS.MoveFirst while Not objRS.EOF Wscript.Echo objRS.Fields(O).Value objRS.MoveNext wend Добавив две выделенные полужирным шрифтом строки, аутентификацию можно произвести с использованием учетной записи administrator: strBaseDN = "<LDAP://dc=apac.dc=rallencorp,dc=com>;" strFilter » "(&(objectclass=computer)(objectcategory=computer));" strAttrs = ”cn;" strScope = "subtree" set objConn = CreateObjectCADODB.Connect!on") objConn.Provider = "ADsDSOObject" objConn.Properties("User ID") = "administrator@apac.rallencorp.com” objConn.Properties("Password”) = "MyPassword" objConn.Open "Active Directory Provider" set objRS = objConn.Execute(strBaseDN & strFilter & strAttrs & strScope) objRS.MoveFirst while Not objRS.EOF Wscript.Echo objRS.Fiel ds(0).Value objRS.MoveNext wend Для выполнения аутентификации при помощи ADO нужно задать значения свойств User ID и Password ADO-объекта connection. В качестве идентификатора пользователя в данном примере применяется UPN-имя администратора. ADSI и ADO позволяют использовать имена в формате UPN, имена стиля NT 4.0 (на- пример: APAC\Admi ni strator) или отличительные имена пользователей. Определение переменных и обработка ошибок Важной частью любого сценария являются инструкции, предназначенные для обработки ошибок. Такие инструкции позволяют своевременно выявить возник- шую при выполнении той или иной части сценария ошибку и предпринять соот- ветствующие действия, не прекращая его работы. В данной книге большинство программных решений не содержит кода обработки ошибок, предопределенных
32 Глава 1. Общие рекомендации переменных или, предположим, кода, освобождающего занимаемую переменными память. Предлагаемые сценарии не предназначены для обучения программирова- нию, поэтому к ним предъявляются особые требования. Такие сценарии должны быть короткими и не могут содержать дополнительный код, который бы их силь- но загромождал. Поэтому их нельзя считать надежными и устойчивыми програм- мами, способными корректно работать при любых обстоятельствах. Это скорее заготовки, которые позволяют быстро выполнить типичную задачу в стандарт- ном окружении и на основе которых при желании можно написать собственный, более гибкий и надежный, код. Обработка ошибок в VBScript выполняется очень просто. Текст сценария на- чинается со строки On Error Resume Next Она указывает интерпретатору, что в случае возникновения ошибки выпол- нение сценария нужно продолжать. Если сценарий не содержит такой инструк- ции, его выполнение прекращается при первой же ошибке. При наличии инст- рукции On Error Resume Next далее в сценарии должен располагаться программный код, в котором осуществляется проверка объекта Err на наличие ошибок. Такой код должен следовать за любым фрагментом сценария, где выполняются дейст- вия, способные привести к ошибкам. Вот простейший пример: On Error Resume Next set objDomain = GetObjectCLDAP://dc=ra11encorp,dc=com”) if Err.Number <> 0 then Wscrlpt.Echo "При попытке получить объект домена произошла ошибка: " & Err.Description Wscript.Quit end if Двумя важнейшими свойствами объекта Err являются Number, ненулевое зна- чение которого указывает на наличие ошибки, и Description, содержащее тексто- вое сообщение об ошибке. Теперь перейдем к управлению переменными. Желательно в начало каждого сценария помещать следующую строку: Option Explicit Установление этой директивы означает, что каждая используемая в сценарии переменная должна быть объявлена — в противном случае при выполнении сце- нария будет сгенерировано исключение. Переменные в VBScript объявляются с помощью ключевого слова Dim. Завершив работу с переменной, следует присво- ить ей значение Nothing, чтобы вернуть системе связанные с ней ресурсы. Кроме того, эта мера помогает предотвратить случайное повторное использование пере- менной со старым значением. В следующем примере продемонстрировано, как дополнить приведенный выше сценарий, выводящий имя домена, кодом обработ- ки ошибок и управления переменными: Option Explicit On Error Resume Next Dim objDomain set objDomain = GetObjectC"LDAP://cn=users.dc=rallencorp.dc=com") if Err.Number <> 0 then Wscrlpt.Echo "При попытке получить объект домена произошла ошибка: " & Err.Description
1.5. Дополнительные источники информации 33 Wscri pt.Qui t end if Dim strDescr strDescr == objDomain.Get("description") if Err.Number <> 0 then Wscript.Echo "При попытке получить описание домена произошла ошибка: * & Err.Description Wscript.Quit end if WScript.Echo "Description: " & strDescr objDomain = Nothing strDescr = Nothing 1.4. Заменяемый текст Книга содержит множество примеров решения поставленных задач, и в большин- стве из них, особенно в решениях, реализуемых с помощью командной строки и языков сценариев, используются имена доменов, лесов, подразделений, пользо- вателей и т. п. Вместо вымышленных имен в качестве значений этих параметров используется заменяемый текст. Его легко распознать, поскольку он выделен курсивом и заключен в угловые скобки (<>). Описание наиболее часто используе- мых обозначений приведено ниже: О <0И_домена> — отличительное имя домена (например: dc=amer,dc=rallencorp, dc=com); О <корневое_ОИ_леса> — отличительное имя корневого домена леса (например: dc=ral1encorp,dc=com); О <ОМ$-имя_домена> — полное DNS-имя домена (например: amer.raHencorp.com); О ОМ5-имя_леса> — полное DNS-имя корневого домена леса (например: railen- corp . com); О <имя_контроллера_домена> — краткое или полное имя хоста контроллера домена в DNS (например: dc01.rallencorp.com); О <ОИ_пользователя> — отличительное имя пользователя (например: cn=admini- strator,cn=users,dc=ral1encorp,dc=com); О <0И_группы> — отличительное имя группы (например: cnOomai n Admi ns, cn=users. dc=rallencorp, dc=com); О <имя_компьютера> — краткое имя хоста компьютера в DNS (например: г а 11 еп-хр). 1.5. Дополнительные источники информации Следует отметить, что для администрирования Active Directory требуется огром- ный объем знаний. За несколько лет эксплуатации продукта специалистами накоп- лен определенный опыт, позволяющий решать самые разнообразные проблемы
34 Глава 1. Общие рекомендации и эффективно использовать его возможности, организована информационная под- держка для администраторов и разработчиков в самых разных формах. Данная книга содержит достаточный объем информации, необходимой для выполнения большинства задач и проблем, связанных с обслуживанием Active Directory, хотя, конечно, не претендует на роль исчерпывающего руководства. В этом разделе описаны и классифицированы важнейшие источники информации, которые могут быть вам полезны. Утилиты с интерфейсом командной строки Если у вас возникнут вопросы по поводу полного синтаксиса либо применения той или иной команды, первым делом обратитесь к ее собственной справке. Боль- шинство утилит с интерфейсом типа командной строки поддерживают ключ /?, указывающий, что вам нужна справочная информация. Например: > dsquery /? Microsoft Knowledge Base На веб-сайте службы поддержки Microsoft вы найдете самую разнообразную ин- формацию, в том числе упоминаемый выше набор статей, называемый базой зна- ний Microsoft — MS КВ. В книге имеется множество ссылок на эти статьи. Для того чтобы получить полный текст той или иной статьи MS КВ, нужно подклю- читься к сайту http://support.microsoft.com/default.aspx и выполнить поиск статьи по ее номеру. Добавив номер статьи в конец URL http://support.microsoft.com/?kbid=, вы сможете открыть ее непосредственно. Microsoft Developers Network Огромный объем информации об Active Directory и некоторых ее программных интерфейсах содержит справочная система для разработчиков, использующих тех- нологии Microsoft — MSDN. Во многих рецептах данной книги даются ссылки на статьи MSDN, хотя указать конкретную страницу этой справочной системы не так просто, как страницу статьи MS КВ. У статей MSDN нет номеров, а указывать URL нет смысла, поскольку таковые могут меняться. Поэтому в книге указаны за- головки страниц, по которым можно выполнять их поиск на сайте http://msdn.micro- soft.com/library/. Сайты Ниже приведен список веб-сайтов, с помощью которых вы сможете получить до- полнительные сведения об Active Directory и список утилит, способных упростить работу с системой. О Домашняя страница Microsoft Active Directory (http://www.microsoft.com/ad/). Это начальная точка для поиска информации об Active Directory, предостав- ляемой компанией Microsoft. Здесь содержатся ссылки на статьи, примеры и программные компоненты.
1.5. Дополнительные источники информации 35 О Веб-презентации Microsoft (http://support.microsoft.com/default.aspx?scid=fh;EN- DS; pwebcst). Загружаемые по требованию технические аудио- и видеопрезен- тации для различных продуктов Microsoft. По указанному адресу имеется не- сколько связанных с Active Directory презентаций, которые посвящены восста- новлению после сбоя, обновлению до Windows Server 2003 Active Directory, а также инструментальным средствам Active Directory. О LabMice Active Directory (http://www.labmice.net/ActiveDirectory/default.htm). Веб- сайт, где содержится большой набор ссылок на данные об Active Directory. Кроме того, на нем имеются ссылки на статьи MS КВ, официальные докумен- ты, на другие веб-сайты. О Персональная страница Робби Аллена (http://www.rallenhome.com/). Сайт авто- ра с информацией о написанных им книгах об Active Directory и ссылках для загрузки приведенного в них программного кода (включая примеры из на- стоящей книги). Списки рассылки Подписавшись на указанные списки рассылки, вы будете получать статьи, кото- рые помогут вам в изучении Active Directory и работе с ней. О ActiveDir (http://www.activedir.org/). Здесь отвечают на самые сложные вопросы по Active Directory. Владелец этого списка рассылки Тони Мюррей (Топу Murray) не оставляет без внимания ни одной важной темы. Список очень попу- лярен, и редкий вопрос остается без ответа. Довольно часто в его работе при- нимают участие менеджеры продукта Active Directory из Microsoft, разъясняю- щие самые трудные вопросы. Поэтому на список стоит подписаться каждому серьезному администратору Active Directory. О 15 Seconds (http://15seconds.com/focus/ADSI.htm). Подписку на данный список рассылки необходимо оформить в первую очередь разработчикам программ- ного обеспечения. Здесь очень быстро отвечают на задаваемые вопросы. Группы новостей Самую свежую информацию, касающуюся системы Active Directory, в частно- сти ее структуры и средств администрирования, вы найдете по указанным ниже ссылкам. О mlcrosoft.pubiic.win2000.active_dlrectory — группа новостей, где на вопросы поль- зователей отвечают несколько специалистов по Active Directory. О microsoft.public.win2000.dns — еще один прекрасный ресурс, где можно задать вопросы о DNS, на которые в других источниках не удалось найти ответ; впол- не вероятно, что кто-либо в этой группе сможет вам помочь. О microsoft.public.adsi.general — в этой весьма популярной группе новостей мож- но задать вопросы по использованию ADSL При возникновении любого вопроса поиск подходящей группы новостей можно начать с помощью поисковой машины Google (http://groups.google.com/).
36 Глава 1. Общие рекомендации Книги Традиционными источниками информации, максимально полными и разнооб- разными, являются книги. Перечисленные ниже издания дополняют документа- цию, представленную в пакете Resource Kit. О Active Directory, второе издание, авторы Робби Аллен (Robbie Allen) и Али- стер Лоув-Норрис (Alistair Lowe-Norris), издательство O'Reilly — хороший учебник по Active Directory общего характера. В частности, в этом издании описаны нововведения Windows Server 2003, рассказано, как разрабатывают- ся каталоги Active Directory, как выполняется обновление до Windows Ser- ver 2003, затронута тема автоматизации Active Directory. О Managing Enterprise Active Directory Services, авторы Робби Аллен (Robbie Allen) и Ричард Пакетт (Richard Puckett), издательство Addison-Wesley - прекрасный ресурс для всех, кому приходится поддерживать крупномасштабные системы. В книге перечислены преимущества автоматизации работы с Active Directory в больших системах и приведено более 300 сценариев, написанных на языках Perl и VBScript. О Active Directory Programming, автор Гил Киркпатрик (Gil Kirkpatrick), изда- тельство MacMillan — замечательная книга для всех, кого интересует про- граммирование с использованием ADSI и LDAP. Ее автор является довольно известным специалистом в этой области. Журналы По данным ссылкам вы сможете найти специальную литературу, касающуюся проблем, с которыми приходится сталкиваться в процессе администрирования Active Directory. О Windows & .NET Magazine (http://www.winnetmag.com/) - ежемесячник для системных администраторов, ориентированный на продукты Microsoft Прак- тически в каждом номере этого журнала имеются статьи, посвященные Active Directory. О Windows Scripting Solutions (http://www.winscriptingsolutions.com/) - полезный ежемесячник, в котором обсуждаются сценарии, используемые при автоматиза- ции работы с различными продуктами Microsoft, включая и Active Directory.
2 Леса и домены, доверительные отношения 2.0. Введение Для неспециалиста название этой главы может показаться странной смесью не- связанных между собой терминов. Однако опытный администратор Active Directory понимает, что речь идет о фундаментальных и, пожалуй, наиболее важных кон- цепциях системы. Лесом называется набор доменов, доменом — иерархический набор объектов (файлов, папок, пользователей, групп, принтеров, компьютеров и т. д.), который может быть реплицирован на несколько серверов, выполняющих роль контроллеров домена, а доверительным отношением, или доверием, — согла- шение между двумя доменами, обеспечивающее пользователям, группам и ком- пьютерам безопасный доступ к ресурсам любого домена Имена доменов Active Directory составляют пространства имен службы DNS (Domain Name Service — система доменных имен). Домены из одного пространст- ва имен DNS считаются принадлежащими к одному дереву. Например, домены атег rallencorp.com, етеа railencorp сот и rallencorp.com входят в состав дерева до- менов rallencorp.com. Как правило, в системе имеется одно дерево доменов, но в некоторых случаях, например в сетях крупных корпораций-конгломератов, со- стоящих из нескольких отдельных компаний, их может быть больше. Обычно в подобных случаях в каждой компании используются свои идентификаторы и собственное пространство имен. Поэтому на примере конгломерата компаний Удобно рассматривать взаимосвязи между лесами, доменами, деревьями доменов и доверительными отношениями. Предположим, что каждая компания желает, чтобы имя принадлежащего ей домена Active Directory основывалось на ее названии. В таком случае домены можно организовать двумя способами: либо создать единый лес, в состав которого войдут деревья доменов разных компаний, либо создать несколько лесов Выби- рая любое из этих решений, следует учитывать, что все домены одного леса дове- ряют друг другу, тогда как разные леса по умолчанию друг другу не доверяют. А без таких доверительных отношений пользователи из одного леса не имеют доступа к ресурсам другого. Так что, если вы хотите, чтобы пользователи могли работать с ресурсами всей корпорации, лучше создать единый лес, разместив объекты компаний в отдельных деревьях доменов. Между корневыми доменами
38 Глава 2. Леса и домены, доверительные отношения каждого дерева устанавливаются транзитивные доверительные отношения, и по- этому доверие распространяется на все домены леса, независимо от уровней их вложенности. Пример подобных отношений для трех деревьев доменов в лесу rallencorp.com показан на рис. 2.1. Лес rallencorp com Рис. 2.1. Лес с несколькими деревьями доменов Если выбрать альтернативное решение и создать несколько лесов Active Di- rectory Windows 2000, тогда для построения модели, в которой все домены будут связаны двусторонними доверительными отношениями, необходимо определить индивидуальные отношения доверия между доменами этих лесов. В Windows Server 2003 служба Active Directory поддерживает новый тип доверительного отношения, называемый доверием лесов, — транзитивноедоверительное отношение между двумя корневыми доменами лесов, согласно которому доверительные от- ношения устанавливаются между всеми доменами обоих лесов. Принимая решение о том, какое количество лесов, доменов и деревьев следу- ет создать для конкретной системы, нужно учитывать ряд обстоятельств. В дан- ной главе описаны способы решения типичных задач, связанных с лесами, доме- нами и доверительными отношениями. Но прежде всего мы рассмотрим сами эти организационные элементы и принцип их представления в Active Directory. Анатомия домена В Active Directory домены представлены объектами domainDNS. Имя такого объекта соответствует полному (уточненному) DNS-имени домена. Например, объект, представляющий домен amer.rallencorp.com, должен иметь имя dc^amer.dc-ral- 1 encorp,dc=*com. Список важнейших атрибутов объекта domainDNS приведен в табл. 2.1 Таблица 2.1. Атрибуты объекта domainDNS Атрибут Описание de Относительное отличительное имя домена (например, amer) fSMORoleOwner Отличительное имя объекта NTDS Settings (параметры NTDS) контроллера домена, который в этом домене выполняет роль эмулятора основного контроллера домена. См. также рецепт 3.25 (глава 3)
2.0. Введение 39 Атрибут Описание gPLink Список объектов групповой политики, связанных с данным доменом. По умолчанию содержит ссылку на объект групповой политики системы безопасности домена lockoutDuration Целое 64-битовое число, представляющее время, в течение которого учетная запись будет оставаться заблокированной и по истечении которого она будет автоматически разблокирована. См. также рецепт 6.11 (глава 6) 1ockoutObservati onW1ndow Целое 64-битовое число, представляющее время, прошедшее от момента неудачной попытки регистрации в системе до момента установки счетчика попыток регистрации в 0. См также рецепт 6.11 (глава 6) lockoutThreshold Количество неудачных попыток регистрации, после выполнения которых учетная запись будет заблокирована. См. также рецепт 6.11 (глава 6) masteredBy Список объектов NTDS Settings (Параметры NTDS) контроллеров домена, входящих в состав данного домена maxPwdAge Целое 64-битовое число, определяющее максимальное число дней использования пароля, по прошествии которого таковой необходимо будет сменить. См. также рецепт 6.11 (глава 6) minPwdAge Целое 64-битовое число, определяющее минимальное число дней использования пароля, по прошествии которого таковой необходимо будет сменить. См. также рецепт 6.11 (глава 6) minPwdLength Минимальное число символов в пароле. См также рецепт 611 (глава 6) msDS-Behavour-Version Число, определяющее уровень функциональности домена. Этот атрибут появился в Windows Server 2003. См. также рецепт 2.13 ms-OS-Mach1neAccountQuota Количество учегных записей компьютера, которые пользователь, не являющийся администратором, может присоединить к домену См также рецепт 8 9 (глава 8) nTMixedDomain Число, задающее режим работы домена См. также рецепт 2.9 pwdHistoryLength Число паролей пользователя, которые следует сохранять, чтобы запретить ему использовать один из применявшихся последними паролей pwdProperties Набор битовых флагов, которые представляют параметры управления паролями в домене, определяющие сложность пароля и способ хранения паролей с обратимым шифрованием. См. также рецепт 6.11 (глава 6) subRefs Составной атрибут, содержащий список вложенных контекстов именования и разделов приложений wellKnownObjects GUID (Globally Unique Identifier — глобально уникальный идентификатор) общеизвестных объектов, таких как используемый по умолчанию контейнер компьютеров
40 Глава 2. Леса и домены, доверительные отношения В Active Directory каждый домен определяет некоторый контекст именования и ему соответствует определенный раздел каталога Active Directory. В контейне- ре Partitions в разделе конфигурации домены представлены объектами crossRef. Относительным отличительным именем объекта crossRef служит NetBIOS-имя домена, которое определяется атрибутом netBIOSName объекта домена. Так, для до- мена amer.rallencorp.com из приведенного выше примера (когда именем леса яв- ляется rallencorp.com) местонахождение соответствующего объекта crossRef должно быть таким: cn=amer.cn=Partit ons.cn=Configuration.dc=rallencorp.dc-com. Список наи- более важных атрибутов объекта crossRef приведен в табл. 2.2. Таблица 2.2. Атрибуты объекта crossRef Атрибут Описание СП Относительное отличительное имя объекта. Для домена это NetBIOS-имя домена dnsRoot Относительное отличительное имя объекта. Для домена это NetBIOS-имя домена nCName netBIOSName trustParent Полное DNS-имя домена Отличительное имя соответствующего объекта demainDNS NetBIOS-имя объекта crossRef, представляющего роди-i ельский домен (если таковой имеется) Анатомия доверительного отношения Доверительные отношения в Active Directory представлены объектами trusted- Domain, хранящимися в контейнере System домена, с которым связаны эти отноше- ния. Важнейшие атрибуты объекта trustedDomain описаны в табл. 2.3. Таблица 2.3. Атрибуты объекта trustedDomain Атрибут Описание СП Относительное отличительное имя доверительного отношения. Им является имя доверенного домена. Для домена Windows NT это имя NetBIOS, для домена Active Directory — имя DNS trustDirection Набор битовых флагов, определяющих, является отношение деактивированным, исходящим, входящим или двусторонним (двунаправленным). См. также рецепты 2.19 и 2.20 trustType Тип отношения: с доменом более низкого уровня (NT4) более высокого уровня (Windows 2000 и выше) или Kerberos. См также рецепт 219 trustAttribates Набор свойств, которые могут быть установлены для данного отношения См, также рецепт 2.19 trustPartner Имя объекта, с которым устанавливается доверительное отношение. См. также рецепт 2.19 С каждым доверительным отношением связан хранящийся в контейнере Users объект user, в котором содержится пароль данного отношения Относительное
2.1. Создание леса 41 отличительное имя данного объекта user совпадает со значением атрибута сп со- ответствующего объекта trustedDomain с добавленным в конец символом «$». Анатомия леса Лес — это логическая структура, состоящая из набора доменов, контекстов кон фигурации и схемы, а также разделов приложений Леса в Active Directory рас- сматриваются как первичные области защиты. Иными словами, если требуется ограничить доступ к определенному домену, чтобы администраторы других до- менов не могли с ним работать, следует создать для него отдельный лес. Если это го не сделать, то есть включить указанный домен в один лес с другими доменами, транзитивные отношения между всеми доменами леса обеспечат членам группы Domai n Admins доступ к этому домену. Леса в Active Directory в отличие от доменов и доверительных отношений не представлены контейнерами или какими-либо другими объектами. Лес включает как минимум три контекста именования и пред- ставлен тремя разделами каталога: корневым доменом леса, разделом конфигура- ции и разделом схемы. Контейнер Partitions в контексте конфигурации содержит полный список подразделений, связанных с данным лесом. Эти подразделения могут быть следующих типов. О Контекст конфигурации. Содержит данные, относящиеся ко всем доменам и потому реплицированные на каждый контроллер домена в данном лесу. В частности, это может быть информация о топологии сайта, список подраз • делений, сведения об опубликованных сервисах, спецификации отображения и расширенные права. О Контекст схемы. Включает объекты, определяющие способы структуризации данных и их хранения в Active Directory. Объекты classSchema в контексте схемы представляют определения классов объектов Объекты attributeschema содержат информацию о том, какие данные могут храниться в каждом из классов. Кон- текст схемы реплицируется на все контроллеры домена в лесу. О Контекст домена. Как уже было отмечено выше, домен — это контекст име- нования объектов, таких как пользователи, группы и компьютеры. О Разделы приложений. Настраиваемые разделы, которые могут находиться в лю- бом домене леса и реплицироваться на контроллер любого домена. В Win- dows 2000 разделы приложений не поддерживаются. 2.1. Создание леса Проблема Требуется создать новый лес путем создания нового корневого домена леса. Решение С помощью графического пользовательского интерфейса Запустите из командной строки или окна, открываемого с помощью команды Start ► Run (Пуск ► Выполнить), программу dcpromo.
42 Глава 2. Леса и домены, доверительные отношения На контроллере домена, работающем под управлением Windows 2000, ваши дальнейшие действия должны быть такими. 1. Установите переключатель в положение Domain controller for a new domain (Кон- троллер домена для нового домена) и щелкните на кнопке Next (Далее). 2. Установите переключатель в положение Create a new domain tree (Создать новое дерево домена) и щелкните на кнопке Next (Далее) 3. Установите переключатель в положение Create a new forest of domain trees (Соз- дать новый лес деревьев домена) и щелкните на кнопке Next (Далее). 4. Следуйте дальнейшим указаниям мастера На контроллере домена, работающем под управлением Windows Server 2003, необходимо выполнить следующие действия. 1. Установите переключатель в положение Domain controller for a new domain (Кон- троллер домена в новом домене) и щелкните на кнопке Next (Далее). 2. Установите переключатель в положение Domain in a new forest (Новый домен в новом лесу) и щелкните на кнопке Next (Далее). 3. Следуйте дальнейшим указаниям мастера. С помощью интерфейса командной строки Программа dcpromo может быть выполнена и в автоматическом (пакетном) режиме. Подробнее об этом рассказано в рецепте 3.4 (глава 3). Комментарий Для того чтобы создать лес, необходимо сначала создать его корневой домен, для чего, в свою очередь, должна быть выполнена программа dcpromo, позволяющая назначить контроллером нового домена компьютер, который работает под управ- лением Windows 2000 или Windows Server 2003. Названная программа реализована в виде мастера и предлагает вам ответить на несколько вопросов о лесе и домене, для которых заданный сервер должен стать контроллером По завершении своей работы программа dcpromo предлагает перезагрузить компьютер для завершения процесса. Смотрите также В рецепте 2.3 рассказывается о создании домена, в рецепте 3.1 (глава 3) — о на- значении контроллера домена, в рецепте 3.4 (глава 3) — об автоматизации про- цесса назначения контроллера домена. Рекомендуем ознакомиться с документом MS КВ 238369 (HOW ТО: Promote and Demote Domain Controllers in Windows 2000). .2. Удаление леса Проблема Необходимо удалить лес, который более не потребуется, и входящие в его состав домены.
2.3. Создание домена 43 Решение Для того чтобы удалить лес, нужно переназначить контроллеры его доменов, вы- полнив на каждом из них программу dcpromo. Когда эта программа запускается на компьютере, который уже является котроллером домена, она предлагает назначить данный компьютер рядовым сервером. После того как такая операция будет вы- полнена и в зависимости от текущих настроек окружения, вам, возможно, потре- буется удалить записи WINS (Windows Internet Name Service — сервис имен Ин- тернета для Windows) и DNS, связанные с доменами и их контроллерами, если только они не будут удалены автоматически. С помощью следующих команд мож- но определить, все ли записи успешно удалены: > netsh wins server \\<имя_сервера_Н1Н5> show name <ОР5-имя_леса> 1c > nslookup ONS-имя-Контроллера_ронена> > nslookup -type-SRV _ldap._tcp.dc. jnsdcs <Ж-имя_леса> > nslookup <DNS-HMB_neca> Кроме того, нужно будет удалить все доверительные отношения, установленные для данного леса (см рецепт 2.22). Подробнее о понижении роли контроллера до- мена рассказывается в рецепте 3.3 (глава 3). Комментарий Описанный выше способ удаления леса считается самым удобным. Того же ре- зультата можно добиться и методом «грубой силы», просто переустановив опера- ционную систему на всех контроллерах домена леса. Разумеется, так поступать не следует — разве что в экспериментальной системе. Учтите, что при использова- нии второго способа контроллеры домена «знают» об удалении леса и до переуста- новки их операционных систем будут выдавать ошибки Кроме того, вам придется обеспечить удаление с серверов DNS записей ресурсов DNS, созданных контрол- лерами доменов, поскольку сами контроллеры доменов этого сделать не смогут. Смотрите также Из рецепта 2.19 вы узнаете, как просмотреть информацию о доверительных отно- шениях заданного домена, из рецепта 2.22 — об удалении этих отношений, а из рецепта 3.3 (глава 3) — о способах понижения роли контроллера домена. 2.3. Создание домена Проблема Требуется создать новый домен — корневой домен нового дерева или просто оче- редной домен существующего дерева. Решение С помощью графического пользовательского интерфейса Запустите программу dcpromo из командной строки или диалогового окна, открывае- мого командой Start ► Run (Пуск ► Выполнить). На контроллере домена, работающем
44 Глава 2. Леса и домены, доверительные отношения под управлением Windows 2000, установите переключатель Domain controller for а new domain (Контроллер домена для нового домена) и щелкните на кнопке Next (Далее). Вам будет предложено создать либо новое дерево доменов, либо дочерний домен существующего дерева. Причем новое дерево должно быть создано в функ- ционирующем лесу. На контроллере домена, работающем под управлением Windows Server 2003, установите переключатель Domain controller for a new domain (Контроллер домена в новом домене), а затем выберите одну из трех установок: Domain in a new forest (Новый домен в новом лесу), Child domain in an existing domain tree (Новый дочерний домен в существующем доменном дереве) или Domain tree in an existing forest (Новое доменное дерево в существующем лесу). С помощью интерфейса командной строки Программа dcpromo может выполняться и в пакетном режиме. Более подробно об этом можно узнать из рецепта 3.4 (глава 3). Комментарий Программа dcpromo предоставляет два способа создания нового домена: путем до- бавления его в существующее дерево или же путем создания нового дерева. Пер- вая возможность предназначена для ситуации, когда нужно создать поддомен су- ществующего домена, а вторая — для создания первого домена в лесу или домена вне пространства имен корневого домена леса. С каждым новым доменом увеличивается стоимость поддержки Active Directory за счет времени, затрачиваемого на настройку и поддержку этого домена и выде- ленных для него контроллеров домена Поэтому, проектируя лес Active Directory, постарайтесь минимизировать количество входящих в его состав доменов. Смотрите также В рецепте 3.1 (глава 3) рассказывается о повышении роли компьютера до роли контроллера домена, в рецепте 3.4 (глава 3) — о способах автоматизации этой за- дачи. Прочитайте документы MS КВ 238369 (HOW ТО: Promote and Demote Do- main Controllers in Windows 2000) и MS KB 255248 (HOW TO: Create a Child Domain in Active Directory and Delegate the DNS Namespace to the Child Domain). 2.4. Удаление домена Проблема Требуется удалить домен из леса (возможно, в процессе тестирования конфигу- рации или при сокращении количества доменов в лесу). Решение Для того чтобы удалить домен, нужно сначала понизить роль всех его контроллеров, поочередно запустив на каждом из них программу dcpromo и выполнив указания мастера. Во время удаления последнего из доменов следует установить флажок
2.5. Удаление домена, у которого отсутствуют контроллеры 45 This server is the last domain controller in the domain (Этот сервер — последний кон- троллер домена в данном домене), с тем чтобы удалить все связанные с доменом объекты. Если по какой-либо причине вы не установите указанный флажок, уда- ление объектов придется выполнить вручную, как это делается в рецепте 2.5. ПРИМЕЧАНИЕ------------------------------------------------------------- Если удаляемый домен имеет вложенные домены, их следует удалить в первую очередь. После удаления всех контроллеров домена и в зависимости от конфигурации среды нужно будет удалить записи WINS и DNS, связанные с контроллерами доме- нов и доменами, — в том случае, если они не были автоматически удалены в процес- се понижения роли контроллеров домена. Далее приведена процедура, которая по- может вам определить, все ли записи успешно удалены: > netsh wins server \\<имя сервера_WINS> show name <ОМ>-иня_леса> 1c > nslookup <0№-иня_контроллерау]омена> > nslookup -type-SRV _ldap._tcp.dc._msdcs.<OWS-^_леса> > nslookup <СК5-иня_леса> Кроме того, вам следует удалить все доверительные отношения, установлен- ные для данного домена (см. рецепт 2.22). Подробнее о понижении роли контрол- лера домена рассказывается в рецепте 3.3 (глава 3). Комментарий Описанный в рецепте 2.2 способ удаления леса методом «грубой силы» не годится для удаления домена. При его использовании в лесу сохраняются все объекты, связанные с этим доменом, и в журнале событий появляются сообщения об ошибках репликации. Смотрите также В рецепте 2.19 рассказывается о том, как просмотреть информацию о доверитель- ных отношениях домена, в рецепте 2.22 — об удалении доверительного отношения, а в рецепте 3.3 (глава 3) — о понижении роли контроллера домена. Рекомендуем обратиться к документу MS КВ 238369 (HOW TO: Promote and Demote Domain Controllers in Windows 2000) и к документу MS KB 255229 (Dcpromo Demotion of Last Domain Controller in Child Domain Does Not Succeed). 2.5. Удаление домена, у которого отсутствуют контроллеры Проблема Необходимо удалить домен, у которого не осталось ни одного котроллера из-за того, что при понижении роли последнего контроллера не был установлен флажок This server is the last domain controller in the domain (Этот сервер — последний кон- троллер домена в данном домене), либо домен был принудительно удален, либо понижение роли последнего контроллера было выполнено некорректно.
46 Глава 2. Леса и домены, доверительные отношения Решение С помощью интерфейса командной строки Следующие команды программы ntdsutil (в коде они выделены полужирным шрифтом) удаляют домен emea railencorp com из леса rallencorp.com. Замените <иня_контроллерд_домена> именем хоста Domain Naming Flexible Single Master Ope- rations (Одиночный гибкий хозяин операций именования доменов), с которым связан данный лес. >ntdsutil “meta clean" "s о t" conn "con to server <имя^онтроллерд_ромена>” q q metadata cleanup: "s о t" “11st domains" Found 4 domain(s) 0 - DC-rellencorp,Dc-com 1 - DC-amer,DC-rellencorp,Dc-com 2 - DC-emea DC-rellencorp.Dc-com 3 - Dc-apac.DC-rellencorp,Dc-com select operation target:sei domain 2 No carrent site Domain - DC-emea.DC-rellencorp.Dc-com No current server No carrent Naming Context Select operation target: q Metadata cleanup: remove sei domain В результате вы получите сообщение с информацией о том, успешно ли про- изведено удаление. Комментарий Удаление домена, у которого не осталось ни одного контроллера, производится в два этапа: сначала удаляется объект, представляющий данный домен (то есть dc-amea.dc-ra11encorp.dc-com), а затем — все его дочерние объекты и связанного с ним объекта crossRef из контейнера Partitions. При использовании программы ntdsuti 1 нужно указать хозяина именования домена, поскольку именно этот сервер отвечает за создание и удаление доменов. В приведенном выше решении использовались сокращенные имена параметров. Если ввести их полностью, команды будут выглядеть так: >ntdsutil "meta cleanup" "select operation target" connections “connect to server <иня_контроллера_доменд> quit quit metadata cleanup "select operation target" "list domains" Found 4 domain(s) 0 - DC-rellencorp,Dc=com 1 - DC-amer.DC-rellencorp,Dc-com 2 - DC-emea.DC-rellencorp.Dc-com 3 - Dc-apac.DC-rellencorp,Dc-com select operation target select domain 2 No carrent site Domain - DC-emea.DC-rellencorp.Dc-com No current server No carrent Naming Context Select operation target: q Metadata cleanup: remove selected domain
2.6. Поиск доменов в лесу 47 Смотрите также В рецепте 3.6 (глава 3) рассказывается о том, как удалить контроллер домена, по- нижение роли которого произведено некорректно. Кроме того, рекомендуем оз- накомиться с документами MS КВ 230306 (HOW TO: Remove Orphaned Domains from Active Directory), MS KB 251307 (HOW TO: Remove Orphaned Domains from Active Directory Without Demoting the Domain Controllers) и MS KB 255229 (Dcpro- mo Demotion of Last Domain Controller in Child Domain Does Not Succeed). 2.6. Поиск доменов в лесу Проблема Требуется вывести в Active Directory список всех доменов заданного леса. Решение С помощью графического пользовательского интерфейса Откройте оснастку Active Directory Domains and Trusts (Active Directory — домены и доверие). На левой панели будет выведен список доменов используемого по умолчанию леса. С помощью интерфейса командной строки >itdsuti1 "d пГ "sei of tsr" c "co t s <иня_контроллера_ромена>" q ’1 d" q q q С помощью сценария VBScript ' Этот код возвращает список доменов леса. ' в котором зарегистрирован пользователь, выполняющий сценарий set objRootDSE - GetObject("LDAP://RootDSE") strADsPath - ”<GC://" & objRootDSE Get("rootOomainNamingContext") & strFilter - "(objectcategory-domainONS):" strAttrs - "name:” strScope - "SubTree" set objConn - CreateObjectC'ADODB.Connection") objConn Provider - ’ADsOSOObject" objConn Open "Active Directory Provider’ set objRS - objConn Execute(strADsPath & strFilter & strAttrs & strScope) objRS MoveFirst while Not objRS EOF Wscript.Echo objRS Fields(0).Value objRS.MoveNext wend Комментарий К решению с помощью графического пользовательского интерфейса Если нужно просмотреть список доменов другого леса (не того, в котором вы заре- гистрировались при входе в систему), на левой панели щелкните правой кнопкой
Глава 2. Леса и домены, доверительные отношения мыши на элементе Active Directory Domains and Trusts (Active Directory - домены и до- верие) и выберите команду Connect to Domain Controller (Подключение к контролле- ру домена). Введите в поле Domain (Домен) имя леса, структуру которого хотите просмотреть, а затем на левой панели разверните ветвь, соответствующую корне- вому домену леса, чтобы увидеть его поддомены. К решению с помощью интерфейса командной строки При запуске программы ntdsuti 1 использовались сокращенные имена параметров. Если ввести их полностью, команда будет выглядеть так’: > ntdsutil "domain management" "select operation target" connections д "connect to server <имя_контроллера_ронена>" quit "List domains” quit quit quit К решению с помощью сценария VBScript Данное решение основано на выполнении с помощью ADO запроса на поиск в глобальном каталоге объектов domai nDNS. В качестве контекста именования, где должен быть произведен поиск, задается контекст домена. Запрос возвращает список всех доменов леса. Чтобы получить список доменов другого леса, нужно в первой строке кода за- дать имя этого леса. Например, посредством следующей строки задается поиск в каталоге леса othercorp.com: set objRootDSE - GetObjectf"LDAP://othercorp.com/" & "RootDSE") Смотрите также В рецепте 3.8 (глава 3) рассказывается о том, как получить список контроллеров домена для определенного домена. .7. Определение NetBIOS-имени домена Проблема Требуется узнать NetBIOS-имя домена. Хотя главным средством разрешения имен теперь является DNS, NetBIOS-имя домена по-прежнему имеет важное значение, особенно для клиентов, которые используют для именования службу NetBIOS (а не DNS). Решение С помощью графического пользовательского интерфейса Откройте оснастку Active Directory Domains and Trusts (Active Directory — домены и доверие). На левой панели отметьте интересующий вас домен, щелкните на нем правой кнопкой мыши и выберите в открывшемся меню команду Properties (Свой- ства). В поле Domain name (pre-Windows 2000) (Имя домена (для версий операцион- ных систем до Windows 2000)) будет указано NetBIOS-имя домена. 1 Код, разбитый на строки с помощью знака Л, следует вводить в одну строку
2.8. Переименование домена 49 С помощью интерфейса командной строки > dsquery * cnepartitions?cn“Conf1guration.<KopHeeoe_0Hj7eca> -filter "(&(jbjectcategory“crossref)(dnsroot“<WS-flHfl_роненд>')(netbiosname-*))" -attr netbiosname С помощью сценария VBScript * Этот код выводит NetBIOS-имя заданного домена • ..... SCRIPT CONFIGURATION ..... strDomain - "ONS-иня_/юмена>' ’ Наприиер: amer.rallencorp com ‘ ..... END CONFIGURATION ....—- set objRootDSE - GetObject("LDAP://" & strDomain & “/RootDSE") strADsPath - “<LDAP://" & strDomain & “/cn-Part1t1ons.“ & _ objRootDSE.Get(“configurat1onNamingContext") & strFilter - "(&(objectcategory-Crossref)" & _ "(dnsRoot-" & strDomain & n)(netBIOSName-*)):" strAttrs - "netbiosname:" strScope - "Onelevel" set objConn - CreateObjectCADODB.Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS - objConn.Execute(strADsPath & strFilter & strAttrs & strScope) objRS.MoveFirst WScrlpt Echo "NetBIOS name for “ & strDomain & " 1s " & objRS.F1elds(0).Value Комментарий В каждом домене имеется объект crossRef, используемый Active Directory для пе- ренаправления запросов. Перенаправление запроса клиента происходит в том случае, когда в домене сервера каталога отсутствует объект, указанный в этом за- просе. NetBIOS-имя домена хранится в объекте crossRef контейнера Partitions раздела конфигурации. Каждый объект crossRef имеет атрибут dnsRoot, в котором содержится полное DNS-имя домена, и атрибут netBIOSName, где указано его Net- BIOS-имя. 2.8. Переименование домена Проблема Требуется переименовать домен в целях реорганизации или по юридическим при- чинам. Переименование домена — это сложный процесс, выполнять который ре- комендуется только в случае крайней необходимости. Помните, что изменение имени домена отразится на всех его компонентах и связанных с ним службах (DNS и репликации), объектах групповой политики, распределенной файловой системе и службе сертификации. Кроме того, после переименования домена при- дется выполнить перезагрузку всех его контроллеров и рядовых компьютеров.
50 Глава 2. Леса и домены, доверительные отношения Решение В Windows 2000 возможность непосредственной поддержки переименования до- мена отсутствует. Однако имеется обходной путь для доменов смешанного типа — преобразовать данный домен и все его дочерние домены в домены Windows NT. Для этого придется понизить роль всех контроллеров домена Windows 2000, со- хранив роли контроллеров домена Windows NT. В дальнейшем можно будет снова создать контроллеры домена Windows 2000 и при настройке Active Directory задать новое имя домена. Правда, этот способ (более подробно он описан в документе MS КВ 292541) не всегда приемлем. Если лес создан исключительно на базе контроллеров домена Windows Ser- ver 2003 и имеет соответствующий функциональный уровень (уровень леса Win- dows Server 2003), домен проще переименовать. В этом случае можно воспользо- ваться стандартным средством переименования rendom.exe, подробно описанным в документе, который вы найдете по адресу: http://www.microsoft.com/windowsser- ver2003/ downloads/domainname.mspx. Комментарий Процесс переименования домена может потребовать внесения существенных из- менений в структуру доменной модели. В системе предусмотрены три способа переименования: О назначение домену нового имени без изменения его местоположения в дереве доменов; О изменение местоположения домена в пределах дерева; О создание нового дерева доменов на основе переименованного домена. Изменение местоположения корневого домена леса не допускается, однако пе- реименовать его можно. Существует еще одно важное ограничение: невозможно переименовать ни один домен леса, в котором установлен Exchange 2000. В сле- дующую версию пакета обновлений (Service Pack) для Exchange Server 2003 пред- полагается включить средство поддержки переименования доменов. Подробнее об этом и ряде других ограничений рассказывается в документе, расположенном по указанному выше адресу. Смотрите также Процесс переименования домена описан в документе MS КВ 292541 (HOW ТО: Rename the DNS Name of a Windows 2000 Domain). .9. Изменение режима работы домена Проблема Предположим, что домен Windows 2000 Active Directory функционирует в сме- шанном режиме либо что домен Windows Server 2003 функционирует в основном режиме Windows 2000. В первом случае требуется перевести его в основной ре- жим Windows 2000, а во втором — в режим Windows Server 2003. После установки
2.9. Изменение режима работы домена 51 домена, Windows 2000 или Windows Server 2003, желательно как можно скорее перевести его в основной режим, для того чтобы получить доступ ко всем воз- можностям системы, отсутствующим при работе в смешанном режиме. Решение С помощью графического пользовательского интерфейса На контроллере домена, работающем под управлением Windows 2000, ваши дей- ствия должны быть такими. 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory - домены и доверие). 2. Найдите на левой панели домен, режим работы которого хотите изменить. 3. Щелкните правой кнопкой мыши на имени нужного домена и выберите в от- крывшемся контекстном меню команду Properties (Свойства). Текущий режим работы домена отобразится в поле Domain Operation Mode (Текущий режим ра- боты домена). 4. Перейдите на вкладку General (Общие) и щелкните сначала на кнопке Change Mode (Сменить режим), а затем — на кнопке Yes (Да). На контроллере домена, который работает под управлением Windows Server 2003, выполните действия, перечисленные ниже. 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory — домены и доверие). 2. В дереве консоли щелкните правой кнопкой мыши на домене, режим работы которого необходимо изменить, и выберите команду Raise Domain Functional Level (Изменение режима работы домена). 3. Выберите режим Windows 2000 (основной режим) или Windows Server 2003 и щелкните на кнопке Change Mode (Изменить). С помощью интерфейса командной строки Для того чтобы узнать, в каком режиме работает домен в данный момент, введите команду: > dsquery * <0И_домена> -scope base -attr ntMixedDomain В качестве альтернативного решения можно использовать команду: > enumprop /ATTR.ntMixedDomain "LDAP:l/<ОИ_домеиа>п Для смены режима на основной создайте файл change_domain_mode.ldf с таким содержимым: dn: <0И_домена> changetype: modify replace: ntMixedDomain ntMixedDomain: 0 Затем выполните команду Id1 fde, для того чтобы импортировать информа- цию из LDIF-файла: > Idifde -1 -f change_domain_mode.ldf
52 Глава 2. Леса и домены, доверительные отношения С помощью сценария VBScript ' Данный код изменяет режим работы указанного домена на основной • ----- SCRIPT CONFIGURATION - strDomain - "<$№-имя_донена>" ' Например: amer.rallencorp.com 1 -----END CONFIGURATION ...... set objDomain - GetObject("LDAP:/7” & strDomain) if objDomain.GetCnTMixedDomain") > 0 Then Wscript.Echo "Changing mode to native..." objDomain.Put ''nTMixedDomain". 0 objDomain.SetInfo el se Wscript.Echo "Already a native mode domain" end if Комментарий Режим функционирования домена ограничивает возможность выбора операци- онной системы, под управлением которой работают контроллеры домена. Так, в случае использования смешанного режима контроллеры домена могут работать под управлением Windows 2000 или Windows NT. Однако если установлен основной режим Windows 2000, допускается использование Windows 2000 (и Windows Ser- ver 2003), а если установлен режим Windows Server 2003 — только этой операци- онной системы. Между смешанным режимом и основным режимом Windows 2000 имеется несколько важных отличий В частности, смешанный режим налагает на домен следующие ограничения: О домен не может содержать универсальные группы зашиты; О не допускается изменение типа или области действия групп домена; О домен не должен содержать вложенные группы (за исключением глобальных групп в локальных группах домена); О вносимые в учетные записи изменения, которые направляются резервным контроллерам домена, в том числе изменяемые пароли, должны проходить через эмулятор основного контроллера домена; О домен не может использовать журнал кодов безопасности (SID); О домен не может полностью использовать свойство транзитивности отношений. Изменив режим работы домена на основной, вернуть его прежний режим не- возможно. По умолчанию домены функционируют в смешанном режиме, даже если все их контроллеры управляются операционной системой Windows 2000 или Windows Server 2003. Режим работы домена задается в атрибуте ntMixed- Domain объекта-домена (например: dc=amer.dc-rallencorp,dc”com). Значение 0 этого атрибута соответствует основному режиму Windows 2000, а значение 1 — сме- шанному. Более подробно о режимах работы доменов Windows Server 2003 рас- сказывается в рецептах 2.13 и 2.14.
2.10. Подготовка домена или леса к переводу в режим Windows Server 2003 53 Смотрите также Из рецепта 2.13 вы узнаете, как повысить уровень функциональности домена, а из рецепта 2.14 — как повысить уровень функциональности леса. Прочтите до- кумент MS КВ 186153 (Modes Supported by Windows 2000 Domain Controllers). 2.10. Подготовка домена или леса к переводу в режим Windows Server 2003 с помощью программы adprep Проблема На существующие контроллеры домена Active Directory, работающие под управ- лением Windows 2000, нужно установить операционную систему Windows Ser- ver 2003. Но сначала с помощью средства adprep следует расширить схему, добавив в каталог Active Directory несколько объектов, необходимых для представления новых функций и расширений. Решение На хозяине схемы выполните от имени учетной записи, входящей в состав групп Enterprise Admins и Schema Admins, следующую команду: > adprep /forestprep После того как обновления, определяемые ключом /forestprep, будут репли- цированы на весь лес (см. рецепт 2.11), на хозяине инфраструктуры каждого домена выполните от имени учетной записи, входящей в состав группы Domain Admins, та- кую команду: > adprep /domainprep Если обновления, определяемые ключом /forestprep, не реплицированы как минимум на хозяев инфраструктуры каждого домена, при выполнении второй из указанных выше команд произойдет ошибка. В этом случае для решения возникших проблем в первую очередь нужно просмотреть файлы журнала, расположенные в каталоге %SystemRoot%\System32\Debug\Adprep\Logs. ПРИМЕЧАНИЕ------------------------------------------------------------ Программа adprep находится на компакт-диске Windows Server 2003 в папке \I386. Для работы она использует несколько файлов из данного каталога, поэтому ее нельзя просто скопировать на сер- вер. Запустить программу можно либо с компакт-диска, либо с жесткого диска сервера, предвари- тельно скопировав весь ее каталог. Комментарий Команда adprep подготавливает лес и домены Windows 2000 к переходу на Win- dows Server 2003. Но прежде чем установить на каком-либо контроллере домена
54 Глава 2. Леса и домены, доверительные отношения новую операционную систему или подключить к существующему лесу либо домену новые контроллеры домена, работающие под управлением Windows Server 2003, необходимо выполнить эту программу с ключами /forestprep и /domalnprep. Следует отметить, что команда adprep выполняет примерно ту же функцию, что и команды setup /forestprep и setup /domainprep сервера Exchange 2000, подго- тавливающие лес и домены Active Directory к его установке. Так, команда adprep /forestprep расширяет схему и модифицирует некоторые дескрипторы защиты, поэтому она должна выполняться на хозяине схемы и от имени учетной записи, входящей в группы Enterprise Admins и Schema Admins. Кроме того, команды adprep /forestprep и adprep /domalnprep добавляют в каталог леса объекты, многие из ко- торых необходимы для использования новых функций, поддерживаемых служ- бой Active Directory, функциональный уровень которой соответствует Windows Server 2003. Если до выполнения команды adprep в данном лесу было установлено програм- мное обеспечение Exchange 2000 или Services For Unix 2 0, необходимо разрешить конфликты текущей схемы с расширениями схемы, устанавливаемыми програм- мой adprep. Указанные вопросы совместимости и некоторые другие, подобные им, подробно рассмотрены в документах MS КВ 325379 и MS КВ 314649 Смотрите также В рецепте 211 рассказывается о том, как определить, успешно ли завершено выпол- нение команды adprep. Советуем ознакомиться с документами MS КВ 314649 (Win- dows Server 2003 ADPREP Command Causes Mangled Attributes in Windows 2000 Forest That Contain Exchange 2000 Servers) и MS KB 325379 (How to Upgrade Windows 2000 Domain Controllers to Windows Server 2003). .11. Как убедиться в успешном выполнении команды adprep Проблема Требуется определить, успешно ли программа adprep, описанная в рецепте 2.10, подготовила домен или лес Windows 2000 к переходу на Windows Server 2003 Решение Для того чтобы узнать, успешно ли завершено выполнение команды adprep /do- mainprep, проверьте, существует ли домен cn=Windows2003Update.cn“DomainUpdates. лг-System. <0И_домена> (здесь <0И_ромена> — отличительное имя домена) Аналогичным образом, чтобы убедиться в успешном завершении выполнения команды adprep /forestprep, нужно проверить, существует ли корневой домен леса cn-W1ndows2003- Update.cn=ForestUpdates.cn=Configuratlon,<корневое_ОИ_леса> (здесь<корневое_ОИ_леса> — отличительное имя корневого домена леса).
2.11. Как убедиться в успешном выполнении команды adprep 55 Комментарий Как рассказывалось в рецепте 2.10, утилита adprep предназначена для подготовки леса Windows 2000 к переходу на Windows Server 2003. Одним из ее достоинств является то, что информацию о ходе своей работы она хранит в Active Directory Когда она вызывается с параметром /domainprep, создается контейнер с отличи- тельным именем cn»Doma i nllpdates. cn-Doma 1 nUpdates, cn=System, <0И_домена> и дочерними контейнерами cooperations и cn=Windows2003Update. Завершив свою основную рабогу (расширение схемы), программа adprep создаст указывающий на это объект в кон- тейнере cn«0perat1ons. Каждый объект в данном контейнере представляет одну из операций adprep. При выполнении программы с ключом /domalnprep создается 52 та- ких объекта. По завершении всех операций будет создан объект cnraW1ndows2003- Update, поэтому наличие данного объекта может считаться признаком успешного завершения работы программы adprep. Содержимое контейнера cooperations, созданного командой adprep /domalnprep, показано на рис. 2.2. Рис. 2.2. Контейнер cn=Operations после выполнения программы adprep с ключом /domainprep После выполнения программы adprep с ключом /forestprep создается контей- нер с отличительным именем cn“ForestUpdates.cn»Configurat1on.<KopneB е_0И_леса>. В нем, как и в предыдущем случае, содержится дочерний контейнер cnOperatlons, который включает 36 объектов, представляющих операции. По завершении работы программа создает объект cn“Windows2003Update. Содержимое контейнера coopera- tions, созданного командой adprep /forestprep, представлено на рис 2 3.
58 Глава 2. Леса и домены, доверительные отношения Для повышения уровня функциональности домена до Windows Server 2003 создайте файл raise_dornain_funcjevel.ldf с указанным содержимым: dn: <0И_доненд> changetype: modify replace: msDS-Behavior-Version msDS-Behavior-Version: 2 Затем выполните команду Idifde, с тем чтобы импортировать информацию из файла LDIF- > Idifde -1 -f raise__domain_func_level.Idf С помощью сценария VBScript ' Данный код переводит заданный домен ' на функциональный уровнень Windows Server 2003 ----- SCRIPT CONFIGURATION ----- strDomain - <1Ж5-имя_домена>" ' Например: amer.rallencorp.com ' ..... END CONFIGURATION -------- set objDomain - GetObjectC"LDAP.//" & strDomain) objDomain.GetInfo if objDomain.GetC'msDS-Behavior-Version") о 2 then Wscrlpt.Echo "Changing domain to Windows Server 2003 functional level..." objDomain.Put "msDS-Behavior-Version". 2 objDomain.SetInfo else Wscript.Echo ''Domain already at Windows Server 2003 functional level ' end if Комментарий В Windows Server 2003 Active Directory вместо понятия «режим работы домена», использовавшегося в Windows 2000, стали применять понятие «функциональный уровень домена», отражающее тот факт, что на более высоком уровне доступны функции, не поддерживаемые на низших уровнях. При этом в Windows Ser- ver 2003 существуют функциональные уровни дохмена и функциональные уровни леса, тогда как режимы работы в Windows 2000 относились только к доменам. Те- кущий функциональный уровень домена задается в атрибуте msDS-Behavior-Version объекта denialnDNS (например, dc=amer,dc=ra 11 encorp.dc-com). В табл. 2.4 функцио- нальные уровни домена перечислены с указанием соответствующих им значений атрибута msDS-Behavior-Version и версий операционных систем, которые могут ис- пользоваться па контроллерах доменов Таблица 2.4. Функциональные уровни домена Windows Server 2003 Функциональный уровень Значение атрибута msDS-Behavior-Version Поддерживаемые операционные системы Windows 2000 0 Windows 2000 Windows NT (в смешанном режиме) Windows Server 2003
2.14. Повышение функционального уровня леса до Windows Server 2003 59 Функциональный уровень Значение атрибута msDS-Behavior-Version Поддерживаемые операционные системы Windows Server 2003 1 Windows NT 4.0 (промежуточный) Windows Server 2003 Windows Server 2003 2 Windows Server 2003 На функциональном уровне Windows 2000 домен может работать в смешанном или в основном режиме Windows 2000 (см. рецепт 2.9) На каждом из последова- тельных уровней доступны дополнительные функции Windows Server 2003 Active Directory. ПРИМЕЧАНИЕ------------------------------------------------------------ Одним из преимуществ выполнения данной задачи при помощи графического пользовательского интерфейса является возможность сохранить выходной журнал с информацией о произошедших ошибках Смотрите также В рецепте 2.9 рассказывается об изменении режима работы домена, в рецепте 2.10 — о подготовке леса при помощи программы adprep, а в рецепте 2.14 — 0 повышении функционального уровня леса. Обратите внимание на документ MS КВ 322692 (HOW ТО: Raise Domain and Forest Functional Levels in Windows Server 2003). 2.14. Повышение функционального уровня леса до Windows Server 2003 Проблема Требуется повысить уровень функциональности леса до Windows Server 2003. После создания нового домена Windows Server 2003 или обновления домена Windows 2000 следует как можно быстрее выполнить данную процедуру, чтобы получить доступ к новым функциям и возможностям Windows Server 2003 Active Directory. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory - домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на компоненте Active Direc- tory Domains and Trusts (Active Directory — домены и доверие) и выберите коман- ду Raise Forest Functional Level (Изменение режима работы леса) 3. В открывшемся окне выберите режим Windows Server 2003 и щелкните на кноп- ке ОК (Изменить). Через несколько секунд на экране появится сообщение о том, успешно ли вы- полнена заданная операция.
60 Глава 2. Леса и домены, доверительные отношения С помощью интерфейса командной строки Для того чтобы узнать, какой уровень функциональности является текущим, нужно выполнить команду > dsquery * <корневое_ОИ_леса> -scope base -attr msDS-8ehavior-Version В качестве альтернативного решения можно использовать команду > enumprop /ATTR.msDS-Behavior-Verslon "LDAP://<корневое_ОИ_леса>" Для повышения уровня функциональности леса до Windows Server 2003 соз- дайте файл raise_forest_func level.ldf: dn: cn=pa rt i t1ons.cn-configurat1on,<корневое_ОИ_леса> changetype: modify replace: msDS-Behavior-Version msDS-Behavlor-Version: 2 Выполните команду Idifde, чтобы импортировать внесенное изменение: > Idifde -i -f raise_forest_func_level.Idf С помощью сценария VBScript ' Данный код переводит лес. в которой зарегистрирован выполняющий ' сценарий пользователь, на функциональный уровнень Windows Server 2003 set objRootDSE = GetObject( "LDAP-.//RootDSE") set objDomain - GetObject("LDAP //cn-partitions." & _ objRootDSE.Get("conflgurationNamingContext") ) 1f objDomain.Get("msDS-Behavior-Version") о 2 then Wscript.Echo "Attempting to change forest to " & _ "Windows Server 2003 functional level...” objDomain.Put "msDS-Behavior-Version". 2 objDornain.SetInfo else Wscript.Echo “Forest already at Windows Server 2003 functional level" end if Комментарий Функциональные уровни леса Windows Server 2003 подобны функциональным уровням домена, и информация, содержащаяся в табл. 2.4, применима также к лесам, с тем лишь различием, что список поддерживаемых операционных систем отно- сится не к одному домену, а ко всем доменам леса. Поэтому если хотя бы один из доменов леса работает на функциональном уровне Windows 2000, функциональ- ный уровень леса нельзя поднять выше Windows 2000. При попытке сделать это вы получите сообщение об ошибке, в котором будет сказано о невозможности за- вершения операции. После того как функциональный уровень всех доменов леса будет повышен до Windows Server 2003, можно будет поднять и функциональ- ный уровень леса. Вы спрашиваете, для чего понадобилось вводить две разные операции — по- вышение функционального уровня домена и повышение функционального уровня теса? Главная причина заключается в появлении новых функций Windows Ser- 2003 Active Directory. Одни из них относятся к домену и могут использоваться
2.15. Установка доверительны^о'тношёний 61 при условии, что на соответствующем функциональном уровне работает только домен, тогда как другие требуют, чтобы на уровне Windows Server 2003 работал весь лес. Функциональный уровень леса задается в атрибуте msDS-Behavior-Version кон- тейнера Partitions, который хранится в разделе конфигурации. Например, в лесу rallencorp com этот атрибут будет принадлежать объекту cn”partitions.cn-confi- guration,dc=raHencorp,dcecom. Копия значения атрибута msDS-Behavior-Version со- держится также в атрибуте forestFunctionality объекта RootDSE, благодаря чему функциональный уровень леса можно узнать, опросив данный объект. ПРИМЕЧАНИЕ-------------------------------------------------------------------- Одним из преимуществ повышения функционального уровня леса при помощи графического пользо- вательского интерфейса является возможность сохранить выходной журнал с информацией о про- изошедших ошибках. Смотрите также В рецепте 2 9 рассказывается об изменении режима работы домена, в рецепте 210 — о подготовке леса при помощи программы adprep, в рецепте 2.13 — о повышении функционального уровня домена. Прочтите и документ MS КВ 322692 (HOW ТО: Raise Domain and Forest Functional Levels in Windows Server 2003). 2.15. Установка доверительных отношений между доменами Windows NT и Active Directory Проблема Требуется установить одностороннее или двустороннее нетранзитивное доверитель- ное отношение между доменом Active Directory и доменом Windows NT. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory - домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на узле домена, с которым требуется установить доверительное отношение, и выберите в открывшемся контекстном меню команду Propertes (Свойства) 3. Откройте вкладку Trusts (Доверия) и щелкните на кнопке New Trust (Создать доверие). 4. Когда будет запущен мастер создания нового доверия, щелкните в его первом окне на кнопке Next (Далее). 5. На странице Trust name (Имя доверия) введите NetBIOS-имя домена Win- dows NT, а затем щелкните на кнопке Next (Далее).
62 Глава 2. Леса и домены, доверительные отношения 6. Если NetBIOS-имя домена Windows NT будет успешно разрешено, откроется страница Trust direction (Направление доверия). Выберите нужное направление доверия: Two-way (Двустороннее), One-way incoming (Одностороннее: входящее) или One-way outgoing (Одностороннее: исходящее). Щелкните на кнопке Next (Далее). 7. Если выбрано двустороннее или одностороннее исходящее доверие, укажите область действия аутентификации (весь домен или отдельные его области) и щелкните на кнопке Next (Далее). 8 Введите, а затем повторите пароль для нового доверия и щелкните на кнопке Next (Далее). 9. Дважды щелкните на кнопке Next (Далее), и работа с мастером будет завершена. С помощью интерфейса командной строки > netdom trust <имя_доменд_НТ4> /domain <имя_доменд_АО> /ADD [/UserD: <имя_домена_АО>\ШЗзег /PasswordD:*] C/UserO: :<имяуюменауГГ4>\КТ4и$ег /PasswordD:*] [/7WOWAY] Например, для создания отношения доверия, связывающего домен RALLEN- CORP NT4 (NT 4) с доменом RALLENCORP (Active Directory), нужно выполнить такую команду: > netdom trust RALLENCORF NT4 /domain:RALLENCORP /ADD /UserD: .RALLENCORPXadministrator /PasswordD:* /UserO :RALLENC0RP_NT4\administrator /PasswordO-* Отношение доверия можно сделать двунаправленным, то есть двусторонним, для чего к приведенной выше команде следует добавить ключ /TwoWay. Комментарий При переходе из окружения Windows NT в Active Directory часто устанавливают доверительные отношения с доменами ресурсов или доменами, которые являют- ся низкоуровневыми хозяевами учетных записей. Это дает возможность пользова- телям Active Directory обращаться к ресурсам доменов Windows NT, не указывая другое имя и пароль. Поскольку Windows NT не поддерживает транзитивных до- верительных отношений, вам остается только создать нетранзитивное доверие. Следовательно, придется по отдельности определять отношения между доменом Windows NT и каждым доменом Active Directory, включающим пользователей, которым требуется предоставить доступ к ресурсам Windows NT. Смотрите также Документы MS КВ 306733 (HOW ТО: Create a Trust Between a Windows 2000 Domain and a Windows NT 4.0 Domain), MS KB 308195 (HOW TO: Establish Trusts with a Windows NT-Based Domain in Windows 2000), MS KB 309682 (HOW TO Set up a One-Way Non-Transitive Trust in Windows 2000 ), MS KB 325874 (HOW TO: Establish Trusts with a Windows NT-Based Domain in Windows Server 2003) и MS KB 816301 (HOW TO: Create an External Trust in Windows Server 2003).
2.16. Создание транзитивного доверия ме>йду двумя лесами Active Directory 6Э 2.16. Создание транзитивного доверия между двумя лесами Active Directory Проблема Требуется создать транзитивное доверительное отношение между двумя лесами Active Directory. Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Domains and Trusts (Active Directory — домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на корневом домене леса и выберите в открывшемся контекстном меню команду Propertes (Свойства). 3. Откройте вкладку Trusts (Доверия) и щелкните на кнопке New Trust (Создать доверие). 4. Когда будет запущен мастер создания нового доверия, щелкните в его первом окне на кнопке Next (Далее) 5 На странице Trust name (Имя доверия) введите DNS-имя леса Active Direc- tory, а затем щелкните на кнопке Next (Далее). 6. На странице Trust type (Тип доверия) установите переключатель в положение Forest trust (Доверие леса), щелкните на кнопке Next (Далее), после чего следуйте указаниям мастера. С помощью интерфейса командной строки > netdom trust <Ж-имя_леса1> /Domain-<Ж-имя_1еса2> /Twoway /Transitive /ADD [UserD:<администратор_песа2> /PasswordD *] [UserO.<администратор_леса1> /PasswordD:*] Например, для создания двустороннего доверительного отношения, которое связывало бы лес га 11 encorp com с лесом othercorp com (Active Directory), нужно выполнить такую команду: > netdom trust rallencorp.com /Domain:othercorp.com /Twoway /Transitive /ADD [UserD: administrator@othercorp.com /PasswordD:*] [UserO. administrator@rellencorp.com /PasswordD *] Комментарий В Windows Server 2003 появился новый тип доверия, названный доверием лесов. Ранее, в Windows 2000, для того чтобы создать окружение, в котором два леса полностью доверяют друг другу, приходилось устанавливать отдельные внешние двусторонние доверительные отношения между каждой парой доменов этих лесов. Так, если в каждом из лесов имелось по три домена, требовалось девять отдель- ных отношений (рис. 2 4). 1 Задача может быть выполнена лишь при условии, что оба леса будут работать на функциональном уровне Windows Server 2003.
64 Глава 2. Леса и домены, доверительные отношения Рис. 2.4. Доверительные отношения, необходимые для создания полного доверия между двумя лесами Windows 2000 При установлении новой формы доверия — доверия лесов — достаточно опре- делить единственное однонаправленное или двунаправленное транзитивное дове- рие, которое будет автоматически распространяться на все домены обоих лесов (рис. 2.5). Такой тип доверия может быть полезным, например, в тех случаях, ко- гда после слияния двух компаний их пользователям нужно предоставить доступ ко всем ресурсам объединенной сети. Для создания доверия лесов в каждом из них нужно будет использовать учетную запись из группы Enterprise Admins. Двунаправленное доверие лесов ◄---------------------------------- Рис. 2.5. Доверительное отношение для создания полного доверия между двумя лесами Windows Server 2003
2.17. Создание сокращенного доверия между двумя доменами Active Directory 65 2.17. Создание сокращенного доверия между двумя доменами Active Directory Требуется создать транзитивное доверительное отношение между двумя доменами Active Directory, входящими в состав одного или разных лесов Сокращенные до- верительные отношения упрощают аутентификацию между двумя доменами леса. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory — домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на узле домена, с которым требуется установить доверительное отношение, и выберите в открывшемся контекстном меню команду Properties (Свойства). 3. Перейдите на вкладку Trusts (Доверия) и щелкните на кнопке New Trust (Создать доверие). 4. Когда будет запущен мастер создания нового доверия, щелкните в его первом окне на кнопке Next (Далее). 5. На странице Trust name (Имя доверия) введите DNS-имя домена Active Direc- tory, а затем щелкните на кнопке Next (Далее). 6. Если введенное вами DNS-имя домена будет успешно разрешено, откроется страница Trust direction (Направление доверия). Установите переключатель в поло- жение Two-way (Двустороннее) и щелкните на кнопке Next (Далее). 7. На странице свойств исходящего доверия выберите ресурсы, подлежащие ау- тентификации, и щелкните на кнопке Next (Далее). 8. Введите и повторите пароль для нового доверия, после чего щелкните на кноп- ке Next (Далее). 9. Дважды щелкните на кнопке Next (Далее), и работа с мастером будет завершена. С помощью интерфейса командной строки > netdom trust ONS-имя_ромена1> /Domain:ОЫ5-иня_ромена2> /Twoway /ADD [/UserD:<администратор_домена2> /PasswordD:*] ии$ег$:<администратор_ромена1> /PasswordD:*] Например, при необходимости создать сокращенное доверие, связывающее домен етеа.railencorp com с доменом арас.railencorp.com, выполните команду: > netdom trust emea.rallencorp.com /Domain:apac.rallencorp.com /Twoway /ADD [/UserD:administrator@apac.railencorp com /PasswordD *] [/UserO adm1nistrator@emea.rallencorp.com /PasswordD *] Комментарий Рассмотрим лес, показанный на рис. 2.6. В нем имеется одно дерево, которое со- стоит из пяти доменов. Для того чтобы домен 5 мог обрабатывать аутентифика- ционные запросы, предназначаемые домену 3, каждый запрос должен проходить по следующему пути: от домена 3 к домену 2, затем к домену 1, к домену 4 и, наконец,
66 Глава 2. Леса и домены, доверительные отношения к домену 5. Как видите, путь довольно длинный, и чтобы сократить его до единст- венного перехода от домена 3 к домену 5, нужно создать сокращенное доверие. Для этого вы должны быть членом группы Domain Admins в обоих доменах либо членом группы Enterprise Admins. Лес А Рис 2.6. Сокращенное доверие 2.18. Установка доверия к сфере Kerberos Проблема Требуется создать в Active Directory доверительное отношение к сфере Kerberos. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory — домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на узле домена, с которым требуется установить доверительное отношение, и выберите в открывшемся контекстном меню команду Properties (Свойства) 3. Откройте вкладку Trusts (Доверия) и щелкните на кнопке New Trust (Создать доверие). 4. Когда будет запущен мастер создания нового доверия, щелкните в его первом окне на кнопке Next (Далее). 5. На странице Trust name (Имя доверия) введите имя сферы Kerberos и щелкните на кнопке Next (Далее).
2.19. Просмотр доверительных отношений домена 67 6. На странице Trust type (Тип доверия) выберите переключатель Realm Trust (От- ношение доверия со сферой) и щелкните на кнопке Next (Далее). 7. Выберите доверие Transitive (Транзитивное) либо Nontransitive (Нетранзитивное) и щелкните на кнопке Next (Далее). 8. На странице Trust direction (Направление доверия) выберите переключатель Two-way (Двустороннее), One-way incoming (Одностороннее: входящее) или One-way outgoing (Одностороннее: исходящее), после чего щелкните на кнопке Next (Далее). 9. Введите и повторите пароль для нового доверия, после чего щелкните на кноп- ке Next (Далее). 10. Щелкните сначала на кнопке Next (Далее), а затем — на кнопке Finish (Готово). С помощью интерфейса командной строки > netdom trust <0Р5-иня_добавляемого_обьента> /Domain.<Ж-иняуферы_кегЬего5> [Realm /ADD /Password!:<пароль довериям] EUse г0:<администратор_донена> /PasswordO:*] Параметр <пароль_роверия> должен соответствовать паролю со стороны Kerberos. Например, для создания доверительного отношения со сферой, связывающего домен rallencorp com и сферу kerb.rallencorp.com, нужно выполнить следующую команду: > netdom trust rallencorp.com /Domain-.kerb.rallencorp.com /Realm /ADD /PasswordT:MyKerbRealmPassword /UserO:admi ni strator@ral1encorp.com /PasswordO:* Комментарий Доверие к сфере Kerberos может быть создано между доменом Active Directory и не-Windows сферой Kerberos V5. Оно позволит клиентам из данной сферы обра- щаться к ресурсам Active Directory и, наоборот, ресурсам Active Directory к кли- ентам сферы. Более подробно о взаимодействии между MIT Kerberos и Active Directory рассказывается в рецепте 18.7 (глава 18). Смотрите также Документы MS КВ 260123 (Information on the Transitivity of a Kerberos Realm Trust) и MS KB 266080 (Answers to Frequently Asked Kerberos Questions). 2.19. Просмотр доверительных отношений домена Проблема Требуется просмотреть список доверительных отношений заданного домена.
68 Глава 2. Леса и домены, доверительные отношения Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory — домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на узле домена, довери- тельные отношения которого вы хотите просмотреть, и выберите в открыв- шемся контекстном меню команду Properties (Свойства). 3. Откройте вкладку Trusts (Доверия) и щелкните на кнопке New Trust (Создать доверие). С помощью интерфейса командной строки > netdom query trust /Domain:ОН5-имя_домена> С помощью сценария VBScript ’ Этот код выводит список доверительных отношений для заданного донена. • ----- SCRIPT CONFIGURATION ----- strDomain - "ONS-hmb_ромена>" ' Например: rallencorp.com ' -----END CONFIGURATION--------— ' Константы, представляющие направление отношения (взяты из NTSecAPI.h) set objTrustDirectionHash - CreateObjectCScripting.DIctionary") objTrustDirectionHash.Add "DIRECTION_DISABLED". 0 ObjTrustDirectionHash.Add "DIRECTIONJNBOUND", 1 objTrustDirectionHash.Add "DIRECTIONjDUTBOUND", 2 objTrustDirectionHash.Add "DIRECTION_BIDIRECTIONAL". 3 * Константы, представляющие тип отношения (взяты из файла NTSecAPI.h) set objTrustTypeHash - CreateObject("Scripting.Dictionary") ObjTrustTypeHash.Add "TYPE_DOWNLEVEL". 1 ObjTrustTypeHash.Add "TYPEJJPLEVEL". 2 ObjTrustTypeHash.Add "TYPE.MIT", 3 ObjTrustTypeHash.Add "TYPE_DCE". 4 Константы, представляющие атрибуты отношения (взяты из файла NTSecAPI.h) set objTrustAttrHash - CreateObject("Script!ng.Dictionary") objTrustAttrHash.Add "ATTRIBUTESJOTTRANSITIVE". 1 ObjTrustAttrHash.Add "ATTR1BUTES_UPLEVEL_ONLY". 2 ObjTrustAttrHash.Add "ATTRIBUTES_QUARANTINED_DOMAIN". 4 ObjTrustAttrHash.Add "ATTRIBUTES_FOREST_TRANSITIVE”. 8 ObjTrustAttrHash.Add "ATTRIBUTES_CROSS_ORGANIZATION". 16 ObjTrustAttrHash.Add "ATTRIBUTES_WITHIN_FOREST". 32 ObjTrustAttrHash.Add "ATTRIBUTES_TREAT_AS_EXTERNAL”, 64 set objRootDSE - GetObject("LDAP://" & strDomain & "/RootDSE") set objTrusts - GetObject("LDAP://cn-System.” & _ objRootDSE.Get("defaultNamingContext") ) objTrusts.Filter - ArrayCtrustedDomain") Wscript.Echo "Trusts for " & strDomain & for each objTrust in objTrusts
2.19. Просмотр доверительных отношений домена 69 for each strFlag In objTrustDirectionHash.Keys if objTrustDirectionHash(strFlag) - objTrust.GetCtrustDirection") then strTrustlnfo - strTrustlnfo & strFlag & “ " end If next for each strFlag In objTrustTypeHash.Keys if objTrustTypeHash(strFlag) - objTrust.Get("trustType") then strTrustlnfo - strTrustlnfo & strFlag & “ " end If next for each strFlag In objTrustAttrHash.Keys 1f objTrustAttrHash!strFlag) = objTrust.Get("trustAttr1butes“) then strTrustlnfo - strTrustlnfo & strFlag & " " end If next WScript.Echo " * & objTrust.GetCtrustPartner’’) & " : " & strTrustlnfo strTrustlnfo “ "" next Комментарий К решению с помощью графического пользовательского интерфейса Для того чтобы просмотреть свойства конкретного отношения, нужно сначала щелкнуть на нем, а затем — на кнопке Свойства. К решению с помощью интерфейса командной строки Если требуется просмотреть только непосредственно заданные отношения, мож- но воспользоваться ключом /Di rect. Однако если вы его не укажете, будут выве- дены и косвенные отношения, возникающие благодаря наличию транзитивных отношений. К решению с помощью сценария VBScript В данном сценарии используются объекты Dictionary (словарь), облегчающие со- поставление числовых значений с атрибутами, такими как TrustType и TrustDi- rection. Объект Dictionary в VBScript аналогичен хэш-таблице и ассоциативному массиву, используемым в других языках программирования. Его метод Add при- нимает в качестве параметров ключ и значение и добавляет их в словарь. Метод Keys возвращает ключи словаря в виде семейства. Для получения доступа к зна- чению, хранящемуся в словаре, достаточно задать этому объекту имя ключа, на- пример: ObjDictionary(strKey). Существует еще один способ получения информации о довериях программным путем — через Trustmon WMI Provider, который является новым средством Win- dows Server 2003. Пример его использования приведен в рецепте 2.20.
70 Глава 2. Леса и домены, доверительные отношения Смотрите также В рецепте 2.0 описаны атрибуты объекта trustedDotsIn, а в рецепте 2.20 — еще один способ получения информации о доверии программным путем. Ознакомьтесь с документами MS КВ 228477 (HOW ТО: Determine Trust Relationship Configu- rations) и MSDN: TRUSTED DOMAIN_INFORMATION_EX. 2.20. Проверка доверительного отношения Проблема Требуется проверить, правильно ли работает доверительное отношение. Это первое, что следует сделать, если пользователи сообщают о неудачной аутентификации удаленным доменом. Решение С помощью графического пользовательского интерфейса На контроллере домена, работающем под управлением Windows 2000, вам необ- ходимо выполнить следующие действия. 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory — домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на узле домена, отношение которого вы хотите проверить, и выберите команду Properties (Свойства). 3. Откройте вкладку Trusts (Доверия) и в списке Domains trusted by this domain (outgoing trusts) (Домены, которым доверяет этот домен) или Domains that trusts this domain (incoming trusts) (Домены, которые доверяют этому домену) укажи- те второй домен, участвующий в отношении. 4. Щелкните сначала на кнопке Edit (Изменить), а затем — на кнопке Verify (Про- верить/восстановить). На контроллере домена, работающем под управлением Windows Server 2003, ваши действия должны быть такими. 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory — домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на узле домена, отношение которого вы хотите проверить, и выберите в открывшемся контекстном меню команду Properties (Свойства). 3. Откройте вкладку Trusts (Доверия) и в списке Domains trusted by this domain (outgoing trusts) (Домены, которым доверяет этот домен) или Domains that trusts this domain (Incoming trusts) (Домены, которые доверяют этому домену) укажи- те второй домен, участвующий в отношении. 4. Щелкните сначала на кнопке Properties (Свойства), а затем — на кнопке Vali- date (Проверить).
2.20. Проверка доверительного отношения 71 С помощью интерфейса командной строки > netdom trust <домен1уоверительного_отношения> /Domain:<домен2_доверительного_огношения> /Verify /verbose [/UserO: доверенный_домен> /PasswordD:*] [/UserD: заверяющий_домен> /PasswordD:*] С помощью сценария VBScript ' Следующий код выводит список всех доверительных отношений ’ для указанного домена, используя cpeflCTeoTrustmon WMI Provider. ’ Trustmon WMI Provider поддерживается только в Windows Server 2003. • SCRIPT CONFIGURATION ------- strDomain - "<Ж-иня_ромена>я ' Например: amer.rallencorp.com • ENO CONFIGURATION .......... set objWMI - GetObjectCwinmgmts.-W" & strDomain & _ "\root\MicrosoftActi veDi rectory") set objTrusts - objWMI.ExecQuery("Select * from Microsoft_DomainTrustStatus") for each objTrust in objTrusts Wscript.Echo objTrust.TrustedDomain Wscrlpt.Echo “ TrustedAttrlbutes: " & objTrust.TrustAttributes Wscrlpt.Echo " TrustedDCNaroe: " & objTrust.TrustedOCName Wscrlpt.Echo " TrustedDirection: H & objTrust.TrustDirection Wscrlpt.Echo " TrustlsOk: " & objTrust.TrustlsOK Wscrlpt.Echo " TrustStatus: “ & objTrust.TrustStatus Wscrlpt.Echo “ TrustStatusString: ” & objTrust.TrustStatusString Wscrlpt.Echo Wscrlpt.Echo " TrustType: " n & objTrust.TrustType next Данный код показывает, как вывести список неработающих отношений. Это можно сделать с помощью запроса WQL со следующим условием: ’ TrustlsOk - False * SCRIPT CONFIGURATION ....... strDomain - "<DNS-HHa_ромена>" ' Например: amer.rallencorp.com ’ ------ END CONFIGURATION --------- set objWMI = GetObject("winmgmts:\\" & strDomain & _ “\root\Mi crosoftActi veDi rectory”) set objTrusts - objWMI.ExecQueryC select * *' & " from Microsoft_DomainTrustStatus " & " where TrustlsOk - False ”) if objTrusts.Count - 0 then Wscrlpt.Echo "There are no trust failures" else WScript.Echo “Trust Failures:" for each objTrust in objTrusts Wscrlpt.Echo " " & objTrust.TrustedDomain objTrust.TrustStatusString Wscrlpt.Echo "" next end if
72 Глава 2. Леса и домены, доверительные отношения Комментарий Для проверки доверительного отношения нужно убедиться в наличии связи между двумя доменами и выяснить, синхронизированы ли их общие секретные значения отношения. К решению с помощью графического пользовательского интерфейса Окна оснастки Active Directory Domains and Trusts (Active Directory - домены и до- верие) в операционных системах Windows 2000 и Windows Server 2003 несколько различаются. В частности, кнопка Verify (Проверить/восстановитъ) в Windows Server 2003 получила название Validate (Проверить). К решению с помощью интерфейса командной строки Если нужно проверить отношение со сферой Kerberos, вызовите команду netdom с ключом /Kerberos. К решению с помощью сценария VBScript Удобный интерфейс для опроса и проверки отношений предоставляет средство Trustmon WMI Provider, которое появилось только в Windows Server 2003 Оно входит в набор инструментов WMI (Windows Management Instrumentation — ин- фраструктура управления Windows), одним из преимуществ использования ко- торого для доступа к подобным данным является возможность выполнения сложных запросов на языке WQL (WMI Query Language — язык запросов WMI), что позволяет получать сведения об отношениях с заданными свойствами. WQL — это подмножество языка SQL, широко применяемого для выполнения запросов к базам данных. В решении с помощью VBScript язык WQL используется для по- лучения списка всех проблемных отношений. Запрос можно расширить, включив в него дополнительные критерии, например направление и тип отношения Смотрите также Документ MSDN: Trustmon Provider. 2.21. Переустановка доверительного отношения Проблема Предположим, вы выяснили, что доверительное отношение не работает. Следова- тельно, его нужно переустановить, чтобы пользователи снова могли выполнять через него аутентификацию. Возможно, вам потребуется сменить пароль довери- тельного отношения
2.21. Переустановка доверительного отношения 73 Решение С помощью графического пользовательского интерфейса Следуйте указаниям, приведенным в рецепте 2.20. Возможность переустановить отношение будет предоставлена вам только в том случае, если проверка отношения покажет, что оно не работает. С помощью интерфейса командной строки > netdom trust <доверяющий_домен> /Сота1п:<доверенный_донен> /Reset /verbose [/UserO: <администратор_доверяюшего_донена> /PasswordO:*] [/UserO: <администратор_доверенного_донена> /PasswordD:*] С помощью сценария VBScript Данный код переустанавливает указанное отношение ’ ----- SCRIPT CONFIGURATION -- ' Присвойте константе DNS- или NetBIOS-имя домена Windows 2000 домена ' Windows NT либо сферы Kerberos, для которых нужно переустановить отношение strTrustName - "<проверяемое_отношение>л * Присвойте константе DNS-имя доверенного или доверяющего домена strDomain - "<доверяющий_ронен>" ’ -----END CONFIGURATION -.....- ’ Включите опцию SC RESET на время перебора доверий set objTrustProv - GetObject("winmgmts:\\" & strDomain 8 _ n\ root\Mi crosoftActi veDi rectory: Mi crosof t_T rustProvideM?") objTrustProv.TrustCheckLevel - 3 * Перебирать co включённой опцией SC_RESET objTrustProv.Put_ Запросите информацию о доверии и выведите ее на экран set objWMI - Get0bject("w1nmgmts.\\" & strDomain & _ "\root\M1crosoftActiveDirectory") set objTrusts - objWMI.ExecQuery("Select * " 8 " from Microsoft_DomaInTrustStatus " _ & " where TrustedDomain » 8 strTrustName & ) for each objTrust in objTrusts Wscript.Echo objTrust TrustedDomain Wscript Echo " TrustedAttributes: " 8 objTrust.TrustAttributes Wscript Echo " TrustedDCName: " 8 objTrust.TrustedOCName Wscript.Echo " TrustedOirection: " 8 objTrust.TrustDirection Wscript.Echo " TrustlsOk: " 8 objTrust.TrustlsOK Wscript.Echo ” Truststatus: " 8 objTrust.Truststatus Wscript.Echo " TrustStatusString: " 8 objTrust.TrustStatusString Wscript.Echo " TrustType: " 8 objTrust.TrustType Wscript.Echo "" next Комментарий В ходе переустановки доверительного отношения производится синхронизация общих паролей доверия. Для этой цели используются первичные контроллеры обоих доменов, поэтому они должны быть доступны. К решению с помощью интерфейса командной строки Если вы переустанавливаете доверие к сфере Kerberos, вызовите команду netdom с ключом /PasswordT.
74 Глава 2. Леса и домены, доверительные отношения Смотрите также В рецепте 2.20 рассказывается о том, как проверить доверительное отношение. 2.22. Удаление доверительного отношения Проблема Необходимо удалить доверительное отношение. Обычно эту операцию выполняют, когда доступ к некоторому удаленному домену более не требуется либо когда этот домен удаляется совсем. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory - домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на-узле домена, довери- тельное отношение которого вы хотите удалить, и выберите в открывшемся контекстном меню команду Properties (Свойства). 3. Откройте вкладку Trusts (Доверия) и в списке Domains trusted by this domain (outgoing trusts) (Домены, которым доверяет этот домен) или Domains that trusts this domain (Incoming trusts) (Домены, которые доверяют этому домену) выбери- те второй домен, участвующий в отношении, после чего щелкните на кнопке Remove (Удалить). С помощью интерфейса командной строки > netdom trust <доверяющий_ромен> /Domain:<доверяемый_домен> /Remove /verbose [/UserO: <пользователь_доверяю1цего_донена> /PasswordD;*] [/UserO: <пользователь_доверяемого_домена> /PasswordD:*] С помощью сценария VBScript Этот код удаляет доверительное отношение заданного домена * ---- SCRIPT CONFIGURATION .- Присвойте константе DNS- или NetBIOS-имя домена Windows 2000. домена Windows NT либо сферы Kerberos константе, для которых нужно удалить отношение strTrustName » "<имя^оверия>" Присвойте константе ONS-имя доверенного или доверяющего домена strDomain - "ONS-имя_ромена>' ' ---- END CONFIGURATION ------ set objRootDSE ~ GetObject!"LDAP://" & strDomain & "/RootDSE") set objTrust « GetObject("LDAP;//cn°System." & _ objRootDSE.GetCdefaultNamingContext") ) - objTrust.Delete "trustedOomain". "cn-“ & strTrustName set objTrustUser - 6et0bject("L0AP://cn-Users." & _ objRootDSE.Get!"defaultNami ngContext") ) objTrustUser.Delete "trustedDomain". "cn-" & strTrustName & WScript.Echo "Successfully deleted trust for " & strTrustName
2.23. Использование фильтрации SID 75 Комментарий Доверительные отношения хранятся в Active Directory в виде двух объектов: trustedDomain в контейнере System и user в контейнере users. Оба объекта удаляют- ся в результате удаления отношения С помощью пользовательского интерфейса и интерфейса командной строки это можно сделать за один шаг, тогда как сцена- рий на языке VBScript должен явно удалить оба объекта При этом все решения, за исключением решения на основе пользовательского интерфейса в Windows Server 2003, позволяют удалить отношение только с одной стороны. Если вторым участником доверительного отношения является отдаленный домен Active Di- rectory или домен Windows NT 4.0, то удалить отношение нужно и в нем 2.23. Использование фильтрации SID Проблема Требуется активизировать для заданного доверительного отношения фильтрацию кодов безопасности (Security Identifier, SID). Это позволит защитить доверительное отношение от взлома кодов безопасности хакерами. Решение С помощью интерфейса командной строки > netdom trust <доверяющий_донен> /Domain доверенный_домен> /Quarantine Yes [/UserO: <администратор_доверяюиего_донена> /PasswordO:*] [/UserO <адмнннстра-гор_до8еренного_ромена> /PasswordO *] Комментарий Использование журнала кодов безопасности открывает брешь в защите, о чем до- вольно подробно рассказывается в документе MS КВ 289243. Администратор до- веренного домена может модифицировать журнал кодов безопасности для кон- кретного пользователя, расширив его привилегии в доверяющем домене. Риск этого относительно невелик, поскольку подобрать код защиты довольно сложно. Более того, чтобы воспрепятствовать этому, можно активизировать фильтрацию кодов защиты для конкретного отношения доверия. Когда она включена, входящие запросы проверки подлинности, поступающие от участников системы безопасности в доверенном домене, могут содержать только коды SID участников системы безопасности доверенного домена Коды SID из других доверяющих доменов не принимаются. Фильтрация кодов SID повышает уровень защиты домена, но пре- пятствует использованию журнала кодов безопасности, что может привести к определенным проблемам, связанным с доверительными отношениями. Смотрите также Документ MS КВ 289243 (MS02 001: Forged SID Could Result in Elevated Pri- vileges in Windows 2000).
76 Глава 2. Леса и домены, доверительные отношени 2.24. Поиск в домене повторяющихся кодов безопасности Проблема Требуется найти в заданном домене все повторяющиеся коды защиты. Вообще-то, таких кодов быть не должно, но иногда, и в частности после удаления роли хозяина RID (Relative Identifier — относительный идентификатор), они появляются. Решение С помощью интерфейса командной строки > Ntdsutil "sec асе man" "со to se <лня_контроллера_долена>" "check dup sid" q q В ответ будет выведено следующее сообщение Duplicate SID check completed successfully Check dupsid.log for any duplicates Файл журнала dupsid.log вы найдете в том же каталоге, из которого запустили программу ntdsutl 1. Для удаления объектов с повторяющимися кодами можно воспользоваться командой > Ntdsutil "sec асе man" “со to se <иня_контроллера_донена>" "clean dup sid" q q Она сгенерирует такое сообщение: Duplicate SID cleanup completed successfully. Check dupsid.log for any duplicates Комментарий Все участники системы безопасности в Active Directory имеют коды SID, исполь- зуемые для однозначной идентификации объекта. Такой код состоит из двух частей: RID и идентификатора домена. Каждому контроллеру домена выделяется пул идентификаторов RID из общего пула хозяина операций домена Когда создается новый участник системы безопасности (пользователь, группа или компьютер), контроллер домена берет из своего пула очередной идентификатор, чтобы сгене- рировать SID новой учетной записи. В редких случаях, например в результате удаления роли хозяина RID, при выделении пулов RID может произойти накладка, что приведет к дублированию SID Такое дублирование является довольно серьезной проблемой, поскольку за- частую приводит к тому что пользователь, группа и компьютер получают доступ к ресурсам, которые для них должны быть недоступны. Смотрите также Документ MS КВ 315062 (HOW ТО: Find and Clean Up Duplicate Security Identi- fiers with Ntdsutil in Windows 2000).
3 Контроллеры домена, глобальные каталоги и роли 3.0. Введение Контроллерами домена называются серверы, которые управляют доменами Active Directory, хранят относящуюся к ним информацию и предоставляют клиентам сервисы аутентификации и каталога. Каждый такой контроллер связан с одним доменом, но может хранить частичные, доступные только для чтения копии объек- тов из других доменов леса, при условии, что он назначен глобальным сервером ка- талога. Каждый контроллер домена поддерживает два раздела каталога — конфигу- рации и схемы, которые реплицируются на все контроллеры домена в его лесу. Управление каталогом Active Directory централизовано лишь отчасти Так, обновления могут вноситься на любом контроллере домена, но отдельные опера- ции должны производиться только на одном, назначенном для этой цели, серве- ре, поскольку их параллельное выполнение недопустимо Если два контроллера домена внесут в схему конфликтующие обновления, возникнут очень серьезные проблемы, вплоть до потери данных Поэтому в Active Directory определено по- нятие роли хозяина операции, или роли FSMO (Flexible Single Master Operations — одиночный гибкий хозяин операций). Каждая роль назначается только одному контроллеру домена, который называется ее владельцем и выполняет связанные с ней задачи. Подробнее о ролях хозяев операций будет рассказано в рецепте 3.25. Анатомия контроллера домена Каждый контроллер домена представлен в Active Directory несколькими объекта- ми, важнейшими из которых являются computer и nTDSDSA Объект computer позво- ляет контроллеру домена быть участником системы безопасности подобно любому другому компьютеру в Active Directory. По умолчанию такой объект находится в контейнере Domai n Control 1 ers корневого раздела домена. Вы можете перемес- тить его в другое подразделение, но только при условии, что хорошо знаете, к че- му это приведет. Важнейшие атрибуты объекта computer, представляющего кон- троллер домена, перечислены в табл 3 1.
78 Глава 3. Контроллеры домена, глобальные каталоги и роли Таблица 3.1. Атрибуты объекта computer, представляющего контроллер домена Атрибут Описание dnsHostName msDS-Addi ti onalDnsHostName Полное DNS-имя контроллера домена Старое DNS-имя переименованного контроллера домена msDS-Add1ti onalSamAccountName Старое NetBIOS-имя переименованного контроллера домена operatlngSystem Текстовое описание операционной системы, под управлением которой работает контроллер домена operati ngSystemHotF1x В настоящее время не используется; в будущем в этом атрибуте, вероятно, будут задаваться установленные обновления operatingSystemServicePack Версия пакета Service pack, установленного на контроллер домена operati ngSystemVers i on Номер версии операционной системы, под управлением которой работает контроллер домена sAMAccountName NetBIOS-имя контроллера домена serverReferenceBL Отличительное имя объекта server, представляющего данный контроллер домена и находящегося в контейнере Sites (Сайты) раздела конфигурации servi cePri nci pal Name Список имен участников службы Service Principal Names (SPN), поддерживаемый данным контроллером домена Контроллеры домена представлены еще несколькими объектами, находящи- мися в контейнере Sites (Сайты) разделф конфигурации. Этот контейнер пред- назначен для хранения объектов, представляющих информацию о топологии сай- та, в том числе объектов site, subnet, sitelink и server. Топология сайта — это набор физических соединений между образующими его компьютерами. Инфор- мация о ней необходима, в частности, для обеспечения эффективной репликации данных Active Directory. Подробнее об этом рассказывается в главе 11. На каждом контроллере домена имеется объект nTDSDSA, подчиненный объек- ту server, который представляет данный контроллер. Например, если контроллер домена DC1 является частью сайта RTP, местоположение объекта nTDSDSA будет сле- дующим: cn-NTDS Settings.cn-DCl.cn-RTP.cn-Si tes,cn-Confi gurat1on,dc-ra11encorp.dc=com Наиболее важные атрибуты объекта nTDSDSA перечислены в табл. 3.2. Таблица 3.2. Атрибуты объекта nTDSDSA контроллера домена Атрибут Описание hasMasterNCs Список отличительных имен из тех контекстов именования, за которые отвечает данный контроллер домена. Имена разделов приложений в него не входят
3.1. Повышение роли сервера до роли контроллера домена 79 Атрибут Описание hasPartialReplIcaNCs Список отличительных имен из тех контекстов именования, частичные копии которых имеются на данном контроллере домена msDS-HasDoma1nNCs Отличительное имя домена, за который отвечает данный контроллер домена. Этот атрибут появился только в Windows Server 2003 msDS-HasDomalnNCs Список отличительных имен из тех контекстов именования (домена, конфигурации и схемы) и тех разделов приложений, за которые отвечает данный контроллер домена. Этот атрибут появился только в Windows Server 2003 options Если установлен младший бит этого атрибута, на данном контроллере домена хранится копия глобального каталога 3.1. Повышение роли сервера до роли контроллера домена Проблема Требуется повысить роль сервера до роли контроллера домена. Эта операция обыч- но выполняется либо при создании домена в лесу Active Directoiy, либо при до- бавлении в домен дополнительных контроллеров для распределения между ними нагрузки и повышения отказоустойчивости системы. Решение Запустите программу dcpromo.exe либо из командной строки, либо из окна, от- крываемого при помощи команды Start ► Run (Пуск ► Выполнить). Затем ответьте на вопросы мастера, касающиеся леса и домена, где будет функционировать опре- деляемый вами контроллер. Комментарий Повышение роли сервера до роли контроллера домена — это процесс, в ходе кото- рого на данный сервер возлагаются определенные функции управления указанным Доменом Active Directory. Программа dcpromo.exe реализована в виде мастера — последовательности окон, или страниц, предназначенной для ввода информации о лесе и домене, где будет функционировать новый контроллер. Она позволяет выполнить следующие действия: О создать новый лес и сделать сервер контроллером его корневого домена (см. ре- цепт 2.1 в главе 2); О создать в указанном вами лесу новый домен (дочерний по отношению к суще- ствующему домену или корневой домен нового дерева) и сделать сервер его контроллером (см. рецепт 2.3 в главе 2); О сделать сервер одним из контроллеров существующего домена.
80 Глава 3. Контроллеры домена, глобальные каталоги и роли Смотрите также В рецепте 2.1 рассказывается о создании нового леса, а в рецепте 2.3 — о создании нового домена. Ознакомьтесь с документом MS КВ 238369 (HOW ТО Promote and Demote Domain Controllers in Windows 2000). 3.2. Повышение роли сервера до роли контроллера домена с использованием копии содержимого каталога Проблема Требуется превратить сервер в контроллер домена, используя в качестве источ- ника содержимого его каталога (Directory Contents, DIT) резервную копию ката- лога другого домена. Это избавит от необходимости реплицировать по сети все содержимое каталога. Решение1 1. Создайте резервную копию на контроллере того домена, куда должен войти новый контроллер. Операция выполняется с помощью утилиты MS Backup, запускаемой посредством команды Start ► Programs ► Accessories ► System Tools ► Backup (Пуск ► Программы ► Стандартные ► Служебные ► Архивация данных) 2. Восстановите (также с помощью утилиты MS Backup) резервную копию дан- ных состояния системы на новом сервере. Обратите внимание на тот факт, что восстановление файлов должно производиться в новое, а не в исходное место. 3. Запустите программу dcpromo с ключом /adv из командной строки или из окна, открываемого при помощи команды Start ► Run (Пуск ► Выполнить): > dcpromo /adv 4. На странице Domain Controller Туре (Тип контроллера домена) выберите пере- ключатель Additional Domain Controller for an existing domain (Добавочный кон- троллер домена в существующем домене) и щелкните на кнопке Next (Далее). 5. На странице Copy Domain Information (Копирование данных домена) выберите переключатель From these restored backup files (С помощью восстановленных архивных файлов), укажите расположение восстановленных файлов, после чего щелкните на кнопке Next (Далее). 6. На следующей странице введите имя пользователя, пароль и имя домена для учетной записи пользователя, входящего в группу Domain Admins (Администра- 1 Выполнить эту задачу можно при условии, что сервер, который станет контроллером домена, будет работать под управлением Windows Server 2003
3.3. Понижение роли контроллера домена 81 торы домена) того домена, в котором будет работать новый контроллер, а за- тем щелкните на кнопке Next (Далее). 7. Выберите папки, в которых будут храниться файлы базы данных и журнала Active Directory, после чего щелкните на кнопке Next (Далее). 8. Укажите, где будет располагаться папка SYSVOL, и щелкните на кнопке Next (Далее) 9. На странице Restore Mode password (Пароль администратора для режима вос- становления) введите и подтвердите пароль, который необходимо назначить данной учетной записи администратора сервера, затем щелкните на кнопке Next (Далее). 10. Еще раз щелкните на кнопке Next (Далее), и операция будет начата. Комментарий Возможность создания контроллера домена с использованием резервной копии информации другого контроллера этого же домена появилась лишь в Windows Server 2003. В Windows 2000 новый контроллер домена должен был реплициро- вать всю эту информацию по сети. В тех организациях, где либо DIT-файл слиш- ком велик, либо сеть работает медленно или с перебоями, репликация всего со- держимого каталога по сети затруднена, и процесс повышения роли сервера до роли контроллера домена может быть весьма длительным. Теперь же, с появле- нием в Windows Server 2003 новой возможности, описанной в этом рецепте, дан- ная задача выполняется быстро, хотя и требует последующего восстановления каталога со съемного носителя (компакт-диска или магнитной ленты), куда запи- сана его резервная копия. ПРИМЕЧАНИЕ------------------------------------------------------------- Используемые вами файлы должны быть созданы не более чем за 60 дней до выполнения описан- ной операции. Если резервные файлы будут созданы ранее, у вас могут возникнуть проблемы, обу- словленные появлением уже удаленных объектов. Дело в том, что время жизни захороненных (то есть удаленных из каталога, но еще не уничтоженных) объектов по умолчанию составляет имен- но 60 дней, Смотрите также В рецепте 16.1 рассказывается, как создать резервную копию содержимого ката- лога Active Directory. Рекомендуем просмотреть также документ MS КВ 240363 (HOW ТО: Use the Backup Program to Back Up and Restore the System State in Windows 2000). 3.3. Понижение роли контроллера домена Проблема Требуется превратить контроллер домена в рядовой сервер, например при условии, что он более не используется, или когда производятся архитектурные изменения.
82 Глава 3. Контроллеры домена, глобальные каталоги и роли Решение С помощью графического пользовательского интерфейса 1. Запустите из командной строки или окна, открываемого при помощи коман- ды Start ► Run (Пуск ► Выполнить), программу dcpromo.exe 2 На первой странице мастера щелкните на кнопке Next (Далее). 3. Если сервер является последним контроллером в домене, установите флажок This server is the last domain controller in the domain (Сервер является последним контроллером в домене) 4. Щелкните на кнопке Next (Далее). 5. Введите и подтвердите пароль локальной учетной записи администратора 6 Дважды щелкните на кнопке Next (Далее). Комментарий Прежде чем понизить роль контроллера домена, не забудьте назначить все роли хозяев операций другим серверам; в противном случае они будут переданы кон- троллерам домена произвольным образом, что может не подойти для вашей сис- темы. Кроме того, если на сервере хранится глобальный каталог, убедитесь, что в лесу, управляющем загрузкой, имеются другие серверы глобального каталога. Перед удалением контроллера домена или его переустановкой обязательно нуж- но понизить его роль — в таком случае из каталога Active Directory будут автома- тически удалены и все связанные с ним объекты, а с серверов DNS — записи о ре- сурсах. Но если процедуру понижения роли контроллера домена по каким-либо причинам не удастся успешно завершить или если у вас из-за отказа аппаратного обеспечения вовсе не будет возможности выполнить ее, придется произвести не- обходимые действия вручную. Как это делается, вы узнаете из рецепта 3.6. Смотрите также В рецепте 3.6 рассказывается о том, как вручную удалить контроллер домена, в рецепте 3.17 — об отключении глобального каталога, а в рецепте 3 26 - о пере- даче ролей хозяев операций. Прочтите документы MS КВ 238369 (HOW ТО: Promote and Demote Domain Controllers in Windows 2000) и MS KB 307304 (HOW TO: Remove Active Directory with the Dcpromo Tool in Windows 2000). 3.4. Автоматизация процессов создания контроллера домена и понижения его роли Проблема Требуется автоматизировать процесс назначения сервера контроллером домена или, наоборот, понижения роли контроллера домена до роли рядового сервера
3.4. Автоматизация процессов создания контроллера домена 83 Процесс повышения роли можно включить в процедуру установки операционной системы сервера, добавив в файлы ответа соответствующие конфигурационные строки Решение Автоматизировать процесс повышения роли контроллера домена можно двумя способами- задав необходимые настройки при автоматической установке систе- мы сервера или вручную запустив программу dcpromo после установки системы. Программа dcpromo в качестве параметра может принимать файл ответов, в кото- рый включаются строки, позволяющие конфигурировать сервер как контроллер домена. Для этого ее нужно запустить с ключом /answer: > dcpromo /answer:<-путь_к_файлу_ответов> Если требуется запустить указанную программу в составе автоматизирован- ной процедуры инсталляции системы, в файл установки нужно добавить раздел [GUIRunOnce], из которого эта программа вызывается. Повышение роли сервера до роли контроллера домена может выполняться только после завершения установки системы и входа пользователя в нее Поэто- му вызов программы dcpromo должен производиться не где-либо, а именно в раз- деле [GUIRunOnce]. Приведем пример: [GUIRunOnce] dcpromo /answer:XsystemrcotS\system32\$w1nnt$.1nf" Раздел ответов программы dcpromo начинается с подразделения [DCInstal 1 ]. Вот пример файла ответов, используемого для добавления контроллера домена в су- ществующий домен леса rallencorp.com: [Deinstall] UserName-administrator Password-Ral1encorpAdmi nPassword UserOomai n-ra11encorp.com OatabasePath-XsystemrootXXntds LogPath-XsystemrootS\ntds SYSVOLPath-SsystemrootSX sysvol SafeModeAdminPassword-DSrestoreModePassword Criti cal Repli cati cnOnly-no ReplicaOrNewDomain-Replica ReplicaDomainDNSName-ral1encorp com RebootOnSuccess-yes CreateOrJoin-Join Комментарий Полный список установок из раздела [DCInstal 1 ] для Windows Server 2003 приве- ден в файле справки ref.chm, который вы найдете в архиве \support\toois\deploy.cab, хранящемся на компакт-диске Windows Server 2003. Установки для Windows 2000 имеются в файле unattend.doc, который находится в архиве \support\tools\deploy.cab на компакт-диске Windows 2000.
84 Глава 3. Контроллеры домена, глобальные каталоги и роли Смотрите также Документы MS КВ 224390 (How to Automate Windows 2000 Setup and Domain Controller Setup) и MS KB 223757 (Unattended Promotion and Demotion of Win- dows 2000 Domain Controllers). 3.5. Разрешение проблем, связанных с созданием контроллера домена и понижением его роли Проблема При создании контроллера домена или в результате понижения его роли возникли проблемы, и вы должны найти выход из создавшейся ситуации. Решение Наилучшим источником информации о задачах, связанных с созданием контрол- лера домена и понижением его роли, являются файлы Dcpromo.log и Dcpromoui.log, которые находятся на сервере в папке 0/oSystemRoot%\Debug В первый из них за- писываются все данные, вводимые в ходе вашей работы с программой dcpromo, а также информация, выводимая этой программой Второй файл содержит более подробные сведения — описание абсолютно всех действий и событий, связанных с работой программы dcpromo. Кроме того, в Windows Server 2003 утилита dcdlag поддерживает два новых теста, помогающих разрешить проблемы, связанные с ролью контроллера домена. В ходе проведения первого из них, называемого dcpromo, утилита сообщает обо всем, что могло помешать процессу создания контроллера домена. В ходе проведе- ния второго теста, Register InDNS, она проверяет, может ли сервер зарегистрировать записи в DNS. Вот пример выполнения обоих тестов для домена rallencorp.com: > dcdiag /test.-dcpromo /DnsDcmain:rallencorp.com /ReplicaDC /test RegisterlnDNS Комментарий В большинстве случаев уровень детализации сведений, имеющихся в журнале Dcpromoui.log, достаточен для выявления любых проблем, но при необходимости его можно еще повысить Для того чтобы протоколирование проводилось с наи- высшей степенью детализации, поддерживаемой системой, найдите в разделе реестра HKLM\Software\Mlcrosoft\Wlndows\CurrentVersion\Admin параметр Debug и присвойте ему значение FF0003. Если вы желаете убедиться в правильности ус- тановки параметра маски, запустите тест dcpromo еще раз и найдите в журнале Dcpromoui.log элемент logging mask. Дополнительная информация о различных установках протоколирования содержится в документе MS КВ 221254. Если все ваши попытки разрешить возникшую проблему завершились неуда- чей, попробуйте воспользоваться программой netmon (Network Monitor, в русской
3.6. Удаление контроллера домена 85 версии Windows — Сетевой монитор Microsoft), с помощью которой можно про- следить за генерируемым системой сетевым трафиком и возвращаемыми ошиб- ками. Эти сведения помогут выяснить, к каким серверам обращается тест dcpromo и не истекает ли время тайм-аута раньше, чем текущий сервер успевает получить ответы на свои запросы. Смотрите также Документы MS КВ 221254 (Registry Settings for Event Detail m the Dcpromoui.log File) и MS KB 260371 (HOW TO: Remove Data in Active Directory After an Un- successful Domain Controller Demotion). 3.6. Удаление контроллера домена, понижение роли которого выполнено неудачно Проблема Попытка понизить роль контроллера домена оказалась неудачной, а возможно, вы вообще не смогли ее предпринять из-за отказа аппаратного или программного обеспечения сервера. Поэтому удаление контроллера домена из Active Directory нужно произвести вручную. Решение Прежде всего нужно запустить утилиту ntdsutl 1 (здесь <имя_конгроллера_домена> — это имя контроллера домена, находящегося в том же домене, что и удаляемый контроллер): > ntdsutil "meta clean" conn "co to ser <имя^онтроллера_домена>" q "s о t" "1 d" Found 2 domain(s) 0 - DOrallencorp.DOcom 1 - dc-amea.OC-rallencorp.DC-com Выберите домен того контроллера, который вы собираетесь удалить В нашем примере это emea.rallencorp.com: select operation target: sei domain 1 Теперь выведите список сайтов и выберите тот из них, в состав которого входит контроллер домена: select operation target: list sites Found 4 site(s) 0 - CN-Default-First-Site-Name. CN-Sites.CN-Configuration DC-rallencorp.DC=com 1 - CN-^Sitel.CN-Sites.CN-Configuration.DC-Tallencorp.DC-com 2 - CN4tySite2.CN-Sites.CN=*Configuration,DC-rallencorp.DC-com
86 Глава 3. Контроллеры домена, глобальные каталоги и роли 3 - CN44yS1te3.CN-Sires,CN-Configuration.DC=ra11encorp.DC-com select operation target: sei site 1 Далее укажите сервер, который собираетесь удалить (в данном случае это сервер О, или сервер DC5): select operation target: list servers for domain in site Found 4 server(s) 0 - CN-DC5.CN-Servers.CN-MySi tel.CN-Sites.CN=Conf1gurati on.DC-ral 1encorp.DC-com 1 - CN-DC9.CN-Servers CN-MySitel.CN-Sites.CN=Configurati on.DC=ral1encorp,DC-com select operation target: sei server 0 Введите команду quit, и вы снова вернетесь в меню metadata cleanup: select operation target: quit metadata cleanup: Наконец, удалите сервер: metadata cleanup: remove selected server В ответ программа должна вывести сообщение о том, что удаление контролле- ра завершено Если же вместо этого вы получите сообщение об ошибке, проверь- те, существует ли соответствующий данному серверу объект nTDSDSA, содержащий объекты CN=NTDSSetti ngs,CN=DC5.CN-Servers.CN=MySitel,CN=Sites.CN=Configuration.DC= railencorp,DC=com). Если таковой отсутствует, не исключено, что программа dcpromo его уже удалила, и потребуется некоторое время на репликацию изменений. Однако если он все еще присутствует, попробуйте повторно выполнить программу ntdsuti 1, а если это не поможет, удалите данный объект, а также его родительский объект (то есть CN=DC5) вручную Для уничтожения всех «следов» контроллера домена, удаленного из Active Directory, нужно сделать следующее. 1 Удалите из DNS запись CNAME для имени <GUID>._msdcs.<HMfl_Kopnfl_DNS>, где <GUID> — значение атрибута ObjectGUID объекта nTDSDSA данного сервера. Если функция сборки мусора не включена, вам придется вручную удалить все со- ответствующие этому объекту записи SRV. Удалите все существующие записи А и PTR, относящиеся к данному серверу. При использовании службы Microsoft DNS эти действия можно выполнить при помощи оснастки DNS. 2. Удалите объект computer, представляющий данный сервер (OU-Domain Control- 1 ers, <ОИ_домена>). Это можно сделать с помощью оснастки Active Directory Users and Computers (Active Directory — пользователи и компьютеры). 3. Удалите объект FRS Member (CN=Domain System Volume (SYSVOL share).CN-file re- plication service,CN=system.<0Wj7Owewa>). Это можно сделать с использованием оснастки Active Directory Users and Computers (Active Directory — пользователи и компьютеры), выбрав из меню View (Вид) команду Advanced Features (Допол- нительные компоненты), чтобы отобразить контейнер System (Система). Комментарий Удаление контроллера домена вручную — задача непростая, и прибегать к этому способу следует лишь в особых случаях. Если требуется быстро заменить сервер,
3.6. Удаление контроллера домена 87 лучше всего назначить ему другое имя, чтобы никогда не путать новый сервер со старым. Когда удаляемый контроллер является последним в домене, необходимо вручную удалить и домен из леса. О том, как это можно сделать, рассказывается в рецепте 2.5. Ниже приведено несколько дополнительных рекомендаций относительно по- нижения роли контроллера домена. О Отмените назначение всех имеющихся у контроллера домена ролей хозяина операций. О Если контроллер домена содержит глобальный каталог, убедитесь, что в со- ставе сайта имеется еще один сервер глобального каталога О Если контроллер домена является сервером DNS, убедитесь в наличии еще одного сервера DNS. О Если контроллер домена является хозяином RID, убедитесь в отсутствии по- вторяющихся идентификаторов SID (см. рецепт 2.24). О Проверьте, имеются ли на контроллере домена разделы приложений, и если это так, сделайте сервером реплик этих разделов другой сервер (см. рецепт 17.5). Если компьютер, который был контроллером домена и вручную лишен вами этого статуса, по-прежнему остается подключенным к сети, подумайте над воз- можностью переустановки его операционной системы во избежание потенциаль- ных конфликтов из-за его попыток снова интегрироваться в Active Directory. Если переустановка неприемлема, попробуйте выполнить описанные ниже дей- ствия, чтобы сервер перестал идентифицировать себя как контроллера домена. 1. В системном реестре откройте раздел HKLM\System\CurrentControlSet\Control и замените значение LanmanNT параметра Productoptions значением ServerNT. 2. Перезагрузите сервер. 3. Удалите каталог NTDS В качестве альтернативы, если сервер работает под управлением Windows Server 2003 либо Windows 2000 SP4 (или более поздней ее версии), можно выпол- нить из командной строки команду dcpromo /forceremoval, с тем чтобы принуди- тельно удалить Active Directory с сервера. Более подробно об этом рассказывает- ся в документе MS КВ 332199. Смотрите также В рецепте 2.5 рассказывается об удалении домена, у которого отсутствуют контрол- леры, а в рецепте 3.27 — об удалении ролей хозяина операций. Кроме того, озна- комьтесь с документами MS КВ 216498 (HOW ТО: Remove Data in Active Direc- tory After an Unsuccessful Domain Controller Demotion) и MS KB 332199 (Using the DCPROMO /FORCEREMOVAL Command to Force the Demotion of Active Directory Domain Controllers).
88 Глава 3. Контроллеры домена, глобальные каталоги и роли 3.7. Переименование контроллера домена Проблема Требуется переименовать контроллер домена. Решение Windows 2000 Active Directory Для того чтобы переименовать контроллер домена, нужно сначала понизить его роль до роли рядового сервера. После переименования его роль нужно будет снова повысить. Windows Server 2003 Active Directory > netdom computername <текущее_имя> /Мй:<новое_имя> > netdom computername <текушее_иня> /МакеРптагу:<ноаое_и«я> Комментарий В Windows 2000 отсутствуют встроенные средства переименования контроллера домена, поэтому его сначала нужно превратить в обычный сервер, а после пере- именования снова сделать контроллером домена. Но прежде чем понижать роль сервера, нужно отменить назначенные ему роли хозяина операций В качестве альтернативы можно предоставить программе dcpromo возможность передать эти роли другим серверам по ее собственному усмотрению, но потом нужно будет вы- яснить, каким серверам она их передала. Аналогичным образом, если контроллер домена является сервером глобального каталога, нужно обеспечить наличие друго- го сервера глобального каталога, который сможет заменить данный контроллер в этой роли. В Windows Server 2003 была введена новая возможность — непосредственное переименование контроллера домена. Она реализована как одна из функций ути- литы netdom, позволяющей определить для компьютера Active Directory альтерна- тивное имя. Добавив новое имя, то есть переименовав компьютер, можно сделать та- ковой главным. Старое имя также будет храниться — до тех пор, пока вы его не удалите, воспользовавшись командой netdom computername <текушее_имя> /Remove <имя>. Перед удалением старого имени нужно перезагрузить сервер. Старые имена хра- нятся в атрибутах msDS-Addltl опа IDnsHostName и msDS-AdditlonalSamAccountName объекта computer контроллера домена. Смотрите также Документы MS КВ 296592 (How to Rename a Windows 2000 Domain Controller), MS KB 325354 (HOW TO: Use the Netdom.exe Utility to Rename a Computer in Windows Server 2003), MS KB 316826 (You Must Rename the SYSVOL Member Object to Rename a Windows Server 2003 Domain Controller) и MS KB 95242 (Cannot Change Computer Name of a Domain Controller).
3.8. Получение списка контроллеров домена для указанного домена 89 !.8. Получение списка контроллеров домена для указанного домена Проблема Требуется просмотреть список контроллеров домена, входящих в состав заданного домена. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Подключитесь к интересующему вас домену. 3. Щелкните на контейнере Domain Controllers (Контроллеры домена), и список всех контроллеров домена будет выведен в правой части окна оснастки. С помощью интерфейса командной строки > netdom query de /Domain.<DNS имя_домена> С помощью сценария VBScript Этот код выводит список контроллеров заданного домена ' ----- SCRIPT CONFIGURATION . strDomain - ’<С№-иня_домена>" ' Например: emea.rallencorp.com ' .... END CONFIGURATION ---- set objRootDSE = GetObject!"LDAP://" & strDomain & "/RootDSE") set objDomain - GetObject!"LDAP://" & objRootDSE.GetCdefaultNamingContext")) strHasteredBy - objDomain.GetEx(”masteredBy”) for each strNTDSDN in strHasteredBy set objNTDS - GetObject!"LDAP://" & strNTDSDN) set objServer - GetObjectlobjNTDS.Parent) Wscri pt.echo objServer.Get!"dNSHostName") next Комментарий Существует несколько способов вывода списка контроллеров заданного домена. При использовании графического пользовательского интерфейса просто выводится список объектов computer в контейнере Domain Controllers (Контроллеры домена) Когда в домен добавляется новый контроллер, соответствующий объект computer перемещается из корневого раздела домена в контейнер Domain Controllers. Однако администратор может переместить объекты computer в другие подразделения, так что данная проверка не гарантирует точности результата. В решениях с использованием командной строки и VBScript применяется иной подход — считывается значение атрибута masteredBy объекта, представляю- щего домен (например. dc=amea, dc=rall encorp, dc=com). В указанном атрибуте хра- нится список отличительных имен объектов nTDSDSA всех контроллеров данного
90 Глава 3. Контроллеры домена, глобальные каталоги и роли домена. У объекта, который является родительским по отношению к объекту nTDSDSA (он представляет сервер, выступающий в роли контроллера домена), есть атри- бут DNSHostName, содержащий полное DNS-имя сервера. У описанной задачи имеется еще одно решение, приведенное в рецепте 3.21. Смотрите также В рецепте 3.21 рассказывается о том, как с помощью DNS запросить список кон- троллеров заданного домена. 3.9. Поиск ближайшего контроллера домена Проблема Требуется найти ближайший контроллер заданного домена. Решение С помощью интерфейса командной строки > nltest /dsgetdc ONS имя_донена> [/site-<имя_сайта>] [/server;<имя_клиента>] С помощью сценария VBScript Этот код VBScript находит ближайший контроллер домена ’ к которому относится компьютер, выполняющий данный сценарий. ' ---- SCRIPT CONFIGURATION . strDomain = "<ОНЗ-имя_донена>" ’ Например: emea.rallencorp.com 1 ---- ENO CONFIGURATION ---- set objladsTools - CreateObjectC’IADsTools DCFunctions") objladsTools DsGetDcName( Cstr(strDomain) ) Wscript.Echo “DC: ” & objIadsTools.DCName Wscript.Echo "DC Site ” & objladsTools.DCSiteName Wscript.Echo "Client Site- " & objladsTools ClientSiteName Комментарий О том, как клиент находит ближайший контроллер домена, рассказывается в до- кументах MS КВ 247811 и MS КВ 314861. Эту операцию выполняет процесс, на- зываемый локатором контроллеров домена (DC locator) Для определения того, в каком сайте находится данный клиент, оп использует информацию о топологии сайта из Active Directory. После идентификации сайта клиента указанный процесс находит контроллер домена из того же сайта или контроллер, сфера действия ко- торого распространяется на этот сайт Метод DsGetDcName, входящий в состав интерфейса прикладного программиро- вания Microsoft Directory Services, предназначен для поиска контроллеров домена, но, к сожалению, не может применяться непосредственно в сценарии, написан- ном, в частности, на языке VBScript Используемый в приведенном выше реше- нии интерфейс lADsTools представляет собой оболочку для метода DsGetDcName.
3.10. Поиск сайта контроллера домена 91 Команда nltest /dsgetdc также является оболочкой для метода DsGetDcName — это удобное средство поиска оптимального контроллера домена для заданного клиента К решению с помощью интерфейса командной строки Программа nltest поможет вам получить имя ближайшего контроллера домена, выполняющего заданную функцию, в частности сервера глобального катало- га — ключ /GC, сервера времени - ключ /TIMESERV, KDC (Kerberos Domain Control- ler — центр распространения ключей Kerberos) — ключ /КОС или PDC (Primary Domain Controller — основной контроллер домена) — ключ /PDC. Для получения полного списка функций и соответствующих им ключей программы воспользуй- тесь командой nltest /?. К решению с помощью сценария VBScript Подобно утилите nltest, метод DsGetDcName способен вернуть имя ближайшего контроллера домена, выполняющего заданную функцию Для этого сначала нуж- но вызвать метод SetDsGetDcNameFlags, принимающий в качестве значения разде- ленную запятыми строку со следующими флагами: DS_FORCE_REDISCOVERY DS_DIRECTORY_SERVICE REQUIRED DS_DIRECTOR't_SERVlCE~PREFERRED DS_GC_SERVER_REQUIRED DS_PDC_REQUIRED DS_IP_REQUIRED DS_KDC REQUIRED DS_TIMESERV_REQUIREO DS_WRITABLE_REQUIREO DS_GOOD_TIMESERV_PREF ERRED DS_AVOID_SELF DS_IS_FLAT_NAME DSIS DNS_NAME RETURNJ)NS_NAME DS_RETURN_FLAT_NAME Смотрите также За дополнительной информацией об интерфейсе IADsTool s рекомендуем обратить- ся к документу loadTools.doc из пакета Support Tools. Ознакомьтесь с документами MS КВ 247811 (How Domain Controllers Аге Located in Windows), MS KB 314861 (How Domain Controllers Are Located in Windows XP), MSDN DsGetDcName и MSDN. MicrosoftDNS. 3.10. Поиск сайта контроллера домена Проблема Требуется выяснить, к какому сайту в Active Directory принадлежит определен- ный контроллер домена.
92 Глава 3. Контроллеры домена, глобальные каталоги и роли Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP и выберите команду Connection ► Connect (Подключение ► Подключиться). 2. В поле Server (Сервер) введите имя домена или контроллера домена либо ос- тавьте данное поле пустым — в таком случае связь устанавливается с исполь- зованием произвольного сервера 3. В поле Port (Порт) введите значение 389. 4. Щелкните на кнопке ОК. 5. Выберите команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя 7. Щелкните на кнопке ОК. 8. Выберите команду Browse ► Search (Поиск ► Найти) 9. В поле BaseDN (Отличительное имя базы) введите отличительное имя контей- нера Sites (Сайты), например’ cn-sites,cn=configuration.dc=rallencorp,dc=con. 10. В области Scope (Область поиска) установите переключатель в положение Subtree (Поддерево). И. В поле Filter (Фильтр) введите следующую спецификацию фильтра: (&(object- category=server) (.б^оз1№те=<имя_контроллера__домена>)). 12. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки > nltest /dsgetsite /server:<имя_контроллера_домена> С помощью сценария VBScript ' Этот код выводит имя сайта, в состав которого входит указанный контроллер домена ’ ---- SCRIPT CONFIGURATION -- strDC - ',<иня_контроллера_донена>" ' Например: del rallencorp.com ' ---- END CONFIGURATION ----- set objRootDSE - GetObjectC"LDAP://’ & strDC & "/RootDSE") set objNTDS - GetObjectC"LDAP://" & objRootDSE.Get("dsServiceName”)) set objSite - GetObject(GetObject(GetObject(objNTDS.Parent).Parent).Parent) WScrlpt.Echo objSite.Get(“cn") Комментарий В топологии сайта контроллер домена представлен объектом server и дочерним объектом nTDSDSA. Любой сервер должен иметь объект server, а контроллеры до- мена отличаются от других серверов именно наличием объекта nTDSDSA. Часто по- следний объект используется в Active Directory для ссылки на контроллер домена. Например, атрибут fSMORol eOwner объекта domainDNS содержит отличительное имя объекта nTDSDSA контроллера домена, которому назначена роль эмулятора PDC.
3.11. Перемещение контроллера домена в другой сайт 93 К решению с помощью интерфейса командной строки Команда nl test /dsgetsi te является оболочкой для метода DsGetDcName. К решению с помощью сценария VBScript Поскольку в VBScript метод DsGetDcName нельзя вызывать непосредственно, мы используем обходной путь. Запросив объект RootDSE целевого сервера, получаем значение атрибута dsServiceName. В нем содержится отличительное имя объекта domainDNS контроллера домена, например: cn-NTDS Settings.cn»dcl,cn=MySite.cn=Si- tes.cn=Confi guration.dc=rallencorp,dc-com. Далее, трижды вызвав метод Parent, по- лучаем объект cn=MySite.cn°Sites.cn=Conf1gurati on.dc=ral1encorp,dc=com. Смотрите также Документ MSDN: DsGetDcName. 3.11. Перемещение контроллера домена в другой сайт Задача Требуется переместить контроллер домена в другой сайт. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. На левой панели окна оснастки откройте контейнер Site (Сайт), содержащий контроллер домена, который вы хотите переместить 3. Откройте контейнер Servers (Серверы) 4. Щелкните правой кнопкой мыши на контроллере домена и выберите команду Move (Переместить). 5. В диалоговом окне Move Server (Перемещение сервера) выберите сайт, куда требуется переместить контроллер, и щелкните на кнопке ОК. ПРИМЕЧАНИЕ---------------------------------------------------------------- В версии оснастки Active Directory Sites and Services (Active Directory — сайть и службы) для Windows Server 2003 перемещение объектов можно выполнять путем их перетаскивания. С помощью интерфейса командной строки > dsmove "<ОИ_сервера>" -newparent "'<ОИ_нового_контейнера_сереера>“ С помощью сценария VBScript Этот код перемещает контроллер домена в другой сайт ’ -. SCRIPT CONFIGURATION - strDCName - "<имя_контроллера_домена>" ' Например: dc2
94 Глава 3. Контроллеры домена, глобальные каталоги и роли strCurrentSite - ’<иня_текущего_сайта>" ' Например: Default-First-Site-Name strNewSite - "<иня_нового_сайта>" ' Например: Raleigh • ----- END CONFIGURATION ------- strConfigDN - GetObject("LDAP;//RootDSE") Get("confIgurationNamingContext") strServerDN - "LDAP.//cn-" & strDCName & ".cn-servers.cn-'1 & _ strCurrentSite & ".on-sites,” & strConfigDN strNewParentDN - "LDAP //cn-servers.cn-'1 & strNewSite & ".cn-sites." & _ strConfigDN set objCont - GetObject(strNewParentDN) objCont KoveHere strServerDN. "cn-" & strDCName WScript Echo "Successfully moved " & strDCName & " to " & strNewSite Комментарий При создании нового контроллера домена в разделы каталога, отражающие топо- логию сайта, добавляются соответствующие этому контроллеру объекты server и nTDSDSA. Средства КСС (Knowledge Consistency Checker — средство проверки согласованности знаний) и ITG (Intersite Topology Generator — генератор меж- сайтовой топологии) используют эти объекты для определения серверов, с кото- рыми контроллер доменов должен обмениваться репликами. Контроллер домена считается связанным с сайтом, в подсети которого он на- ходится физически. В случае отсутствия объекта subnet с диапазоном адресов, включающим IP-адрес контроллера домена, объект server добавляется в каталог сайта Default-First-Site-Name. Если контроллер домена находится в другом сайте, этот объект следует переместить вручную. Перед тем как повышать роль сервера до роли контроллера домена, желательно обеспечить наличие объекта subnet, со- ответствующего подсети, в которой находится этот сервер. Тогда объект server не придется перемещать вручную. ПРИМЕЧАНИЕ---------------------------------------------------------------------------— При перемещении объекта server помните, что его следует поместить в контейнер Servers (Серве- ры), а не в корневой каталог сайта. К решению с помощью интерфейса командной строки >for /F "usebackq" Xi In ('dsquery server -name "<имя_контроллера_донена>”') do dsmove -newparent "cn-Servers.cn-Default-First-Site-Name.cn-Sites.cn-Configuration.<ОИ_леса>" Xi Рассмотрим используемую в коде составную команду for, определенную в фай- ле cmd.exe, по частям Первая часть команды содержит параметр ZF "usebackq", который позволяет ей в цикле обработать выходные данные другой команды: for /F "usebackq" Xi in Следующая часть команды for определяет данные, подлежащие цикличе- ской обработке В нашем случае эти данные предоставляет команда dsquery, ко- торая возвращает отличительное имя объекта server, соответствующего серверу <имя_контроллера_домена>: ('dsquery server -name "<им я контроллера_домена>"’)
3.12. Получение сведений о службах, предоставляемых контроллером домена 95 Третья часть выполняет заданную команду, то есть команду dsmove для обра- ботки каждого из результатов, возвращенных командой dsquery. Поскольку име- ется только один результат, команда выполняется один раз do dsmove -newparent "cn-Servers.cn=Default-First- Site-Name.cn=Si tes.cn-Conf1guration.<?И_леса>" Xi К решению с помощью сценария VBScript Как и в предыдущем случае, необходимо указать, в состав какого сайта входит пе- ремещаемый сервер. При желании имя текущего сайта можно запросить про- граммным путем, как это сделано в рецепте 3.10. Смотрите также В рецепте 3 10 речь идет о том, как можно выяснить имя сайта, в состав которого входит заданный контроллер домена, а в рецепте 4.17 — о перемещении объектов между контейнерами. 3.12. Получение сведений о службах, предоставляемых контроллером домена Проблема Требуется узнать, какие службы предоставляет в наше распоряжение заданный контроллер домена. Решение Список служб, предоставляемых контроллером домена, выводит команда > dcdiag /v /з-.<имя_контроллера_донена> /test:advertising Аналогичную информацию можно получить с помощью утилиты nl test: > nltest /server:<имя_контроллера_ромена> /dsgetdc<имя_домена> Комментарий Команда dcdiag /test:advertising является оболочкой для метода DsGetDcName. Этот метод возвращает структуру DOMAIN_CONTROLLER_ INFO, где содержится список служб предоставляемых контроллером домена. Возможные элементы указанной струк- туры перечислены в табл. 3.3. Таблица 3.3. Флаги DOMAIN_CONTROLLER_INFO Значение Описание DS_DS_FI_AG Сервер каталога домена DS_GC_FLAG Сервер глобального каталога леса продолжение^
96 Глава 3. Контроллеры домена, глобальные каталоги и роли Таблица 3.3 (продолжение) Значение Описание DS_KDC_FLAG DS_POC_FLAG DS_TIMESERV_FLAG DS_WRITABLE_FLAG Центр распространения ключей Kerberos домена Основной контроллер домена Сервер времени домена Служба каталога с поддержкой обновления Смотрите также Документы MSDN: DsGetDcName и MSDN: DOMAIN_CONTROLLER_INFO. 3.13. Конфигурирование контроллера домена для использования внешнего источника времени Проблема Требуется установить для контроллера домена надежный источник времени. Решение С помощью интерфейса командной строки > net time /зе1^р <иня_или_1Р_сервера_вренени> > net stop w32time > net start w32t1me С помощью сценария VBScript Замените <имя_эмулятора_РОО DNS-икенем эмулятора PDC и <иня_или_1Р_сервера_времени> DNS-именен или 1Р-адресон ' надежного источника времени 1 ----- SCRIPT CONFIGURATION --- strPDC -= "<имя-Эмулятора-POO” ' Например: dc01.rallencorp.com strTimeServer = "<иня_илИ-1Р_сервера-8ремени>" ' Например: ntp01.rallencorp.com ' ----- END CONFIGURATION ------" strTimeServerReg - "SYSTEM\CurrentControlSet\Services\W32T1me\Parameters" const HKLM - &H80000002 set objReg - GetObject("winmgmts:\\" & strPOC & "\root\default:StdRegProv”) objReg.GetStnngValue HKLM. strTimeServerReg. "ntpserver", strCurrentServer WScript.Echo "Current Value: " & strCurrentServer objReg SetStringValue HKLM. strTimeServerReg. "ntpserver". strTimeServer objReg.SetStringValue HKLM. strTimeServerReg. "type". "NTP" strCurrentServer - objReg.GetStringValue HKLM. strTimeServerReg. "ntpserver". strCurrentServer WScript Echo "New Value: " & strCurrentServer ’ Перезапуск службы времени
3.13. Конфигурирование контроллера домена 97 set objServlce - GetObjectCwinmgmts://" & strPDC & _ ”/root/сimv2.Win32_Servi ce- W32Time'") WScript.Echo "Stopping " & objService.Name bjService StopServiceO Wscript.Sleep 2000 ' Пауза в 2 с. чтобы дать службе времени возможность остановиться WScnpt.Echo "Starting " & objService.Name objServi ce.StartServi ce() Комментарий Надежный источник времени, который будет использоваться эмулятором PDC, нужно назначить только для корневого домена леса. Все остальные контроллеры домена, каждый в пределах своего домена, могут синхронизировать время либо с этим сервером, либо с основным контроллером домена (или выделенным серве ром времени). Список внешних серверов времени представлен параметром W32Tirne Service в разделе реестра HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\ ntpserver. Если вы хотите, чтобы контроллер домена, скажем PDC, использовал внешний источник времени, нужно установить соответствующие значения двух параметров реестра: ntpserver и type. По умолчанию значением параметра type контроллера домена является NT5DS, в соответствии с которым поиск источника времени будет производиться в иерархии доменов Active Directory Такое его поведение можно изменить, с тем чтобы контроллер домена использовал в качестве источника вре- мени компьютер, не являющийся контроллером домена. Для этого параметру type нужно присвоить значение NTP. В решении с использованием командной строки применение ключа /setsntp приводит к автоматическому присваиванию параметру type значения NTP. В решении на основе VBScript значение этого параметра уста- навливается программным путем. После установки сервера времени служба W32Time должна быть перезапущена, для того чтобы изменения вступили в силу. Проверить правильность настройки сервера позволяет команда > net time /querysntp Поскольку эмулятор основного контроллера домена является источником време- ни для других контроллеров, следует убедиться, что он предоставляет им службу времени. Это можно сделать так: > nltest /server;<имя_контроллера_ронена> /dsgetdc:<ЖЗ-икя_домена> /TIMESERV Смотрите также Документы MS КВ 216734 (How to Configure an Authoritative Time Server in Windows 2000), MS KB 224799 (Basic Operation of the Windows Time Service), MS KB 223184 (Registry Entries for the W32Time Service), MS KB MSDN: StdRegProv и MSDN: Win32_Service.
98 Глава 3. Контроллеры домена, глобальные каталоги и роли 3.14. Определение числа попыток входа в систему на контроллере домена Проблема Требуется определить количество попыток входа в систему, которые производят- ся на указанном контроллере домена. Решение Это можно выяснить с помощью запроса, возвращающего количество обработанных попыток войти в систему: > nltest /server:<иня_контроллера_аомена> /LOGONQUERY Комментарий Команда nltest /LCGONGUERY является оболочкой метода I_NetLogcnControl2. Она позволяет определить, сколько запросов на вход в систему было обработано за- данным сервером. Просмотр результатов ее работы за определенный период вре- мени и сравнение их с результатами, полученными на другом сервере из того же домена, дает возможность выявить серверы, загруженные значительно больше или меньше остальных. Смотрите также Документ MSDN. I NetLogonControl2 3.15. Использование ключа /3GB для увеличения объема кэша LSASS Проблема На контроллерах домена имеется более 1 Гбайт памяти, и нужно добавить ключ /3GB, с тем чтобы процесс LSASS мог использовать больше памяти. Решение На контроллере домена отредактируйте файл boot.ini, добавив в него ключ /3GB: [boot loader] timeout-30 default-multi(0)disk(0)rdisk(0)partition(2)\WIND0WS [operating systems] multi(0)disk(0)rdisk(0)partition(2)\WIND0WS°"W1ndows Server 2003" /3GB Перезагрузите компьютер.
3.16. Удаление объектов DLT 99 ПРИМЕЧАНИЕ-------------------------------------------------------- В Windows Server 2003, для того чтобы отредактировать файл boot.ini, необходимо в Control Panel (Панель управления) открыть приложение System (Система), щелкнуть на элементе Startup and Recovery (Запуск и восстановление), а затем — на кнопке Edit (Изменить). Сделать то же самое в Windows 2000 несколько сложнее. Активизируйте окно программы Explorer (Проводник), выберите команду Tools ► Folder Options (Сервис ► Свойства папки) и откройте вкладку Вид (Вид). Снимите флажок Hide protected operating system files (Recommended) (Скрывать защи- щенные системные файлы (рекомендуется)) и установите переключатель Show hidden files and folders (Показывать скрытые файлы и папки). Затем в корневом каталоге раздела операционной системы (скорее всего, на диске С:) найдите файл bootJni и отредактируйте его с помощью тексто- вого редактора. Комментарий Когда мы говорим о 32- или 64-разрядном компьютере, то подразумеваем, что он поддерживает адреса памяти соответствующей длины (то есть 32 или 64 бита). На основе этого значения нетрудно вычислить общий объем памяти (виртуаль- ной и реальной), которая может использоваться системой. Начиная с Windows NT, Microsoft разделяет всю память системы на две части: 2 Гбайт отводятся для при- ложений и 2 Гбайт для ядра операционной системы (общий объем 32-разрядного адресного пространства составляет 232, то есть 4 Гбайт). Администраторы нередко находят целесообразным выделять приложениям больше памяти, чем ядру. Вот почему Microsoft предусмотрен ключ /3GB, при использовании которого приложе- ниям выделяется 3 Гбайт памяти, а ядру — 1 Гбайт. Смотрите также Документы MS КВ 99743 (Purpose of the BOOT.INI File in Windows 2000 or Win- dows NT), MS KB 291988 (A Description of the 4 GB RAM Tuning Feature and the Physical Address Extension Switch), а также MS KB 308356 (Memory Usage by the Lsass.exe Process on Windows 2000 Server-Based Domain Controllers). 3.16. Удаление объектов DLT Проблема Нужно убедиться, что служба DLT (Distributed Link Tracking — отслеживание распределенных ссылок) отключена и все объекты DLT удалены из Active Direc- tory. Указанная служба применяется для отслеживания ссылок на файлы в разде- лах NTFS. Если файл, на который имеется ссылка, удаляется или перемещается, с помощью службы DLT Windows находит его при открытии ссылки. Сотруд- ники большинства организаций даже не подозревают о существовании данной службы, которая может создавать в Active Directory тысячи объектов. Поэтому, если она не используется, ее рекомендуется отключать. Решение Если на контроллере домена, работавшем под управлением Windows 2000, уста- новить Windows Server 2003, служба DLT будет автоматически остановлена и от- ключена. При инсталляции Windows Server 2003 на «чистый» компьютер эта служба тоже устанавливается, но не активизируется. Однако в Windows 2000
100 Глава 3. Контроллеры домена, глобальные каталоги и роли указанная служба активизируется по умолчанию, а следовательно, если она не нужна, желательно отключить ее на всех контроллерах домена. Затем нужно удалить из Active Directory все ее объекты (linkTrackVolEntry и UnkTrackOMTEntry). Поскольку объектов DLT может быть сотни и тысячи, этот процесс нуждается в автоматизации. Сценарий, который содержится в документе MS КВ 315229 (dltpurge.vbs), удаляет все объекты, созданные за указанный пери- од. Приведем пример его запуска для контроллера del домена га 11 encorp . сот: > cscript dltpurge.vbs -s del -d dc-rallencorp.dc-com Комментарий Служба DLT состоит из двух компонентов: клиентского и серверного. Сервер- ный компонент работает на контроллерах домена, клиентский может выполняться только в операционной системе Windows 2000 или более поздних ее версиях. Серверная служба хранит в Active Directory данные в виде объектов linkTrack- Vol Entry и 1 inkTrackOMTEntry, которые используются для отслеживания имен и ме- стоположения файлов из разделов NTFS В контейнере cn=ObjectMoveTabl е. cn=Fi - leLincks.cn=System,<WjjcweHa> находятся объекты linkTrackVolEntry, представляющие тома NTFS на компьютерах домена. Со временем количество объектов DLT может существенно увеличиться. И хо- тя они занимают сравнительно немного места, если вы не пользуетесь данной службой, нет никакого смысла в их хранении. В таком случае службу лучше от- ключить и удалить все ее объекты. Удалив большое количество объектов, вы мо- жете посмотреть, сколько места удалось высвободить на дисках контроллеров до- мена, выполнив дефрагментацию их пространства Подробнее об этом рассказано в рецепте 6.12 (глава 6). Смотрите также Документы MS КВ 232122 (Performing Offline Defragmentation of the Active Di- rectory Database), MS KB 312403 (Distributed Link Tracking on Windows-Based Domain Controllers) и MS KB 315229 (Text Version of Dltpurge.vbs for Microsoft Knowledge Base Article Q312403). 3.17. Включение и отключение глобального каталога Проблема Требуется включить либо отключить глобальный каталог на заданном сервере. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы).
3.17. Включение и отключение глобального каталога 101 2 Найдите объект NTDS Settings (Параметры NTDS), входящий в состав объекта server контроллера домена, для которого требуется включить или отключить глобальный каталог. 3. Щелкните правой кнопкой мыши на объекте NTDS Settings (Параметры NTDS) и выберите в открывшемся контекстном меню команду Properties (Свойства). 4. На вкладке General (Общие) открывшегося окна свойств установите флажок Global Catalog (Глобальный каталог), чтобы включить глобальный каталог, или снимите указанный флажок, чтобы его отключить. 5 Щелкните на кнопке ОК. С помощью интерфейса командной строки В приведенной ниже команде <ОИ_объекта_5егуег> — это отличительное имя объекта server контроллера домена, а не объекта nTDSDSA: > dsmod server ',<0M_o6beKTd_server>'' -isgc yes|no Например, следующая команда активизирует глобальный каталог на контрол- лере домена del, входящем в состав сайта Raleigh: > dsmod serverJ "cn=dcl.cn=Servers.cn=Ralelgh,cnDSites.cn-Configyration.dc=ra11encorp.dc-com" -isgc yes С помощью сценария VBScript * Этот код включает или отключает ’ глобальный каталог на заданном контроллере домена • ----- SCRIPT CONFIGURATION .... strDC - г'<имя_нонтроллера_домена>’' ' Например: dc01.rallencorp.com strGCEnable -”1 ' 1 = включить. О = выключить ’ -----END CONFIGURATION -....... set objRootDSE - GetObject("ЮАР.//" & strDC & "/RootDSE") objNTDS » GetObjectC'LDAP://" & strDC & & objRootDSE.Get("dSServi ceName")) objNTDS.Put "options". strGCEnable objNTDS SetInfo Комментарий Первый контроллер домена в лесу по умолчанию становится сервером глобаль- ного каталога. Если вы хотите, чтобы данную функцию выполняли еще несколько контроллеров домена, нужно включить ее на этих контроллерах. Глобальный ка- талог на контроллере домена оказывается включенным, когда младший бит атри- бута options объекта nTDSDSA, входящего в состав объекта server контроллера домена, установлен в 1. Отличительным именем этого объекта для контроллера del, вхо- дящего в состав сайта Default-First-Site-Name, является cn=NTOS Settings.cn=DCl.cn=- Default-First-Site-Name.cn-SItes.cn“Configuration,dcmrallencorp,dc=com. После включения глобального каталога может пройти некоторое время, преж- де чем домен начнет исполнять указанную функцию. Длительность этого перио- да зависит от количества данных, которые потребуется реплицировать, а также от типа соединения между партнерами данного контроллера домена по репликации. По завершении репликации в журнале службы каталога должна появиться от- метка о событии 1119. С этого момента станет возможным направлять LDAP-за- просы сервера глобального каталога, используя порт 3268
102 Глава 3. Контроллеры домена, глобальные каталоги и роли Смотрите также В рецепте 3.18 рассказывается о том, как убедиться в успешной активизации гло- бального каталога. Рекомендуем обратиться и к документу MS КВ 313994 (HOW ТО: Create or Move a Global Catalog in Windows 2000). 3.18. Подтверждение факта успешного включения глобального каталога Проблема Нужно убедиться в том, что заданный контроллер домена выполняет функцию сервера глобального каталога. После того как вы включите эту функцию на кон- троллере домена, потребуется некоторое время (его продолжительность будет за- висеть от величины леса) для репликации на него доступных только для чтения разделов каталога Active Directory. Решение Запросите из объекта RootDSE значение атрибута i sGl obal Catal ogReady. Результат TRUE означает, что контроллер домена является сервером глобального каталога, а результат FALSE означает обратное, то есть что контроллер домена не является сервером глобального каталога. Подробнее о выполнении запросов к объекту RootDSE рассказано в рецепте 4.1. Комментарий После того как сервер завершит репликацию глобального каталога, атрибуту IsGlobalCatalogReady объекта RootDSE будет присвоено значение TRUE. Еще один способ убедиться в том, что контроллер домена помечен по меньшей мере как глобальный каталог, заключается в проверке того, установлен ли атрибут opti ons объекта nTDSDSA контроллера домена в значение 1. Заметьте: это вовсе не означает, что контроллер принимает запросы как сервер глобального каталога. В последнем можно убедиться, выполнив запрос, указанный в данном разделе, или непосред- ственно обратившись к порту глобального каталога 3268. Смотрите также В рецепте 4.1 (глава 4) речь идет о выполнении запросов к объекту RootDSE 3.19. Поиск серверов глобального каталога в лесу Проблема Требуется получить список серверов глобального каталога, имеющихся в составе определенного леса.
3.19. Поиск серверов глобального каталога в лесу 103 Решение С помощью графического пользовательского интерфейса 1. Запустите утилиту LDP и выполните команду Connection ► Connect (Подклю- чение > Подключиться). 2. В поле Server (Сервер) укажите имя контроллера домена 3. В поле Port (Порт) введите значение 389. 4. Щелкните на кнопке ОК. 5. Выберите команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя. 7. Щелкните на кнопке ОК 8. Выберите команду Browse ► Search (Поиск ► Найти). 9. В поле BaseDN (Отличительное имя базы) введите отличительное имя кон- тейнера Sites (Сайты), скажем cn-sites.cn-configuration dc=rallencorp.dc=com. 10. В области Scope (Область поиска) установите переключатель в положение Subtree (Поддерево). И. В поле Filter (Фильтр) введите следующую спецификацию фильтра: (&(object- category-ntdsdsa)(options-1)). 12. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки > dsquery server -forest -isgs С помощью сценария VBScript Этот код выводит для заданного леса список серверов глобального каталога ’ ----- SCRIPT CONFIGURATION --- strForestName * "<DNS-mmb лесд>“ ' Например: rallencorp.com ’ -.... END CONFIGURATION ------ set objRootDSE - GetObjectCLDAP://" & strForestName & ”/" & "RootDSE") strADsPath e "<LDAP://" & objRootDSE.Get!"configurationNamingContext") & StrFilter - "(&(objectcategory-ntdsdsa)(options"l));" strAttrs - "distlnguishedname;” strScope - "SubTree" set objConn - CreateObjectCADODB. Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS - objConn.Execute!strADsPath & strFilter & strAttrs & strScope) ObjRS.MoveFirst while not objRS.EOF set objNTDS - GetObjectC’LDAP;//" & objRS.Fields(O).Value) set objServer - GetObject! objNTDS.Parent ) Wscript Echo objServer.GetCdNSHostName") objRS.MoveNext wend
104 Глава 3. Контроллеры домена, глобальные каталоги и роли Комментарий Для того чтобы получить список серверов глобального каталога, входящих в со- став заданного леса нужно опросить объекты nTDSDSA, в которых младший бит ат- рибута options равен 1 при условии, что объект является сервером глобального каталога. Объект nTDSDSA находится в контейнере Sites (Сайты) раздела конфигу- рации, где он представлен как объект NTDS Settings (Параметры NTDS). Смотрите также В рецепте 3.18 рассказывается о том, как определить, завершена ли активизация глобального каталога. 3.20. Поиск контроллеров домена или серверов глобального каталога, входящих в состав сайта Проблема Необходимо получить список контроллеров домена или серверов глобального каталога, входящих в состав указанного сайта. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Перейдите на сайт, содержащий контроллер домена. 3. Откройте контейнер Servers (Серверы). 4. Для того чтобы найти серверы глобального каталога, откройте поочередно каждый контроллер домена, щелкните правой кнопкой мыши на его объекте NTDS Settings (Параметры NTDS) и выберите в появившемся контекстном ме- ню команду Properties (Свойства). Напротив свойства Global Catalog (Глобаль- ный каталог) каждого сервера глобального каталога должен быть установ- лен флажок. С помощью интерфейса командной строки Приведенная ниже команда возвращает список контроллеров домена, входящих в состав заданного сайта: > dsquery server -site <имя_сайта> Чтобы получить список серверов лишь глобального каталога, эту же команду следует выполнить с ключом -1sgc: > dsquery server -site <имя_сайта> -1sgc
3.20. Поиск контроллеров домена или серверов глобального каталога 105 С помощью сценария VBScript ' Данный код выводит список контроллеров домена, входящих в состав 1 заданного сайта, а затем - список серверов глобального каталога того же сайта ------ SCRIPT CONFIGURATION ------ strSite - "<имя_сайта>" ' Например Default-First-Site-Name strForest - "<DNS-mhb леса>" ' Например, rallencorp.com • ------ END CONFIGURATION --------- set objRootDSE - GetObjectC’LDAP://" & strForest & ''/RootDSE") strADsPath - "<LDAP://cn*=servers.cn-" & strSite & ".cn-sites." & objRootDSE.GetCconfiguratlonNamlngContext") & strFIlter - ''(objectcategory=ntdsdsa):" strAttrs - "distinguishedName:" strScope - "SubTree" WScript Echo "Domain controllers in * & strSite & set objConn - CreateObjectCADODB Connection") objConn.Provider - "ADsDSOObject" objConn Open “Active Directory Provider" set objRS - objConn.Execute(strADsPath & strFIlter & strAttrs & strScope) objRS.MoveFirst while not objRS.EOF Set objNTDS - GetObject("LDAP://" & objRS.Fields(O).Value) Set objServer GetObjectC objNTDS.Parent ) Wscrlpt.Echo " " & objServer.GetCdNSHostName") objRS.MoveNext wend Фильтр для отбора серверов глобального каталога strFIlter - "(&(objectcategory-ntdsdsa)(options=l));" WScript.Echo WScript Echo "Global Catalogs 1n " & strSite & set objRS - objConn.ExecuteCstrAOsPath & strFIlter & strAttrs & strScope) objRS.MoveFirst while not objRS.EOF set objNTDS = GetObjectC"LDAP://" & objRS.Fields(O).Value) set objServer - GetObjectC objNTDS.Parent ) Wscrlpt.Echo ” " & objServer.GetCdNSHostName") objRS.MoveNext wend Комментарий Каждому контроллеру домена соответствует объект server, находящийся в кон- тейнере Servers (Серверы) того сайта, в состав которого входит контроллер (в частности, cn^dcl.cn-Servers cn=MySite.cn-Sites.cn°Configuraticn.dc-rallencorp. dc»com). Так как в данном контейнере имеются объекты server, представляющие все серверы сайта, а не только контроллеры домена, последние отличаются нали- чием у объекта server дочернего объекта nTDSDSA (то есть cn-NTDS Settings.cn-dcl. cn»Servers. cn“MySi te. cn=Si tes, cn-Confi gurati on. dc-ral 1 encorp, d=com). Выполнив за- прос на поиск таких объектов nTDSDSA, можно получить список контроллеров домена, входящих в состав сайта. Для поиска серверов глобального каталога используется
106 Глава 3. Контроллеры домена, глобальные каталоги и роли такой же запрос, правда, в условии отбора указывается, что младший бит атрибу- та options объекта nTDSDSA должен быть равен 1. 3.21. Поиск контроллеров домена и серверов глобального каталога через DNS Проблема Требуется получить список контроллеров домена или серверов глобального ката- лога, используя для этой цели службу DNS. Решение Контроллеры домена и серверы глобального каталога представлены в DNS запи- сями SVR. Эти записи можно запросить с помощью утилиты nlslookup, воспользо- вавшись, как в следующем примере, установкой type=SVR: > nlslookup Default Server: dns01.rallencorp.com Address: 10.1 2 3 > set type-SVR Затем для получения списка всех контроллеров заданного домена нужно будет выполнить такой запрос: > _ldap._tcp.<WS-JWfl_ромена> Чтобы получить список серверов глобального каталога, следует выполнить аналогичный запрос, основанный на имени леса (поскольку серверы глобального каталога действуют на уровне леса, а не домена) > _ldap _tcp.<DNS-HHBjieca> Кроме того, вы можете получить список контроллеров домена или серверов глобального каталога, входящих в состав определенного сайта или таких, сфера действия которых распространяется на данный сайт’ > _ldap._tcp <имя_сайта>,_sites <О№-имя_ромена> > _ldap._tcp <^_caiiTa>._sites.<DNS-n^jieca> Подробнее о том, как получить список сайтов, на которые распространяется сфера действия контроллера домена рассказывается в рецепте 118 (глава 11). Комментарий Одно из преимуществ службы Active Directory перед ее предшественницей из Windows NT заключается в том, что для разрешения имен в ней используется служба DNS. Active Directory применяет DNS для поиска серверов которые вы- полняют заданную функцию, и в частности для поиска контроллеров домена, серверов глобального каталога, эмуляторов PDC и KDC. Кроме того, Active Di- rectory оперирует хранящейся в ее каталоге информацией о топологии сайта,
3.22. Изменение ссылки на контроллер домена 107 формируя при этом для контроллеров доменов записи DNS, связанные с кон- кретными сайтами. Процесс поиска контроллеров домена на основе информации из DNS направ- ляет полученные от клиентов запросы на подключение наиболее подходящим серверам. Использование службы DNS облегчает разрешение проблем, связанных с поиском клиентами контроллеров домена. Если известно, на каком сайте нахо- дится клиент, с помощью всего нескольких запросов к DNS можно определить, на каком контроллере домена должна выполняться его аутентификация. Доступ к записям о ресурсах, регистрируемых контроллерами домена в DNS, может быть ограничен, поэтому запросы к данной службе иногда возвращают не- полный список контроллеров домена. Подробнее об этом вы узнаете из рецеп- тов 13.14 и 13.15 (глава 13). Смотрите также Как с помощью службы DNS найти эмулятор PDC, рассказывается в рецепте 3.28. Ознакомьтесь с документом MS КВ 267855 (Problems with Many Domain Control- lers with Active Directory Integrated DNS Zones). 3.22. Изменение ссылки на контроллер домена Проблема Нужно сделать так, чтобы заданный контроллер домена использовался для вы- полнения запросов клиентов не столь часто или не использовался вовсе (напри- мер, в том случае, если он перегружен запросами приложений) Решение Существует возможность изменить значение поля Priority или Weight в SRV-за- писях ресурсов путем внесения изменений в системный реестр. Запустите на контроллере домена программу regedit или regedit32 и найдите раздел реестра HKLM\System\CurrentControlSet\Services\Netlogon\Parameters. Для того чтобы задать значение поля Priority, добавьте в указанный раздел параметр LdapSrvPriority ти- па REG DWORD, а для того чтобы задать значение поля Weight — параметр того же ти- па LdapSrv Wei ght. В результате этих действий файл %SystemRoot%\System32\Con- fig\netlogon.dns должен быть обновлен, причем обновления информации службы DNS необходимо отправить на сервер DNS в течение часа. Для ускорения про- цесса можете перезапустить службу NetLogon. Комментарий Каждый контроллер домена регистрирует несколько записей SVR, используемых локатором контроллеров домена на клиентских компьютерах для поиска ближай- шего контроллера. В записи SVR имеются два поля, на основании значений которых клиент может определить, какой сервер лучше использовать, если имеется не- сколько таких возможностей. В первом из них. Priority, содержится информация
108 Глава 3. Контроллеры домена, глобальные каталоги и роли о приоритете сервера, то есть определяется, является ли подключение к данно- му серверу более предпочтительным, нежели подключение к другим серверам. При наличии двух доступных серверов клиент всегда подключается к тому из них, чей приоритет выше (у которого меньше значение поля Priority). Например, если контроллер домена DC1 имеет приоритет 5, а контроллер DC2 - приоритет 10, и если оба они доступны использоваться будет первый. Поле Weight (Весовой коэффициент) предназначено для определения време- ни использования клиентами данного сервера. Чтобы его вычислить, нужно раз- делить значение поля Weight на сумму его значений у всех серверов с тем же при- оритетом. Если, скажем, у серверов DC1, DC2 и DC3 поле Weight имеет значения 1, 2 и 3 соответственно, то к первому из них нужно подключаться один раз из каждых шести (1/3+2+1), ко второму — два раза (2/3+2+1), а к третьему — три раза из шести (3/3+2+1). Вот пример записей SVR с указанными значениями c:\>nlslookup -type-SVR _ldap._tcp.dc._msdcs.rallencorp.com Server: dns01.ral1encorp.com Address: 171.70.168.183 _ldap._tcp.dc._msdcs.rallencorp.com SRV service location: priority - 0 weight - 1 port - 389 svr hostname - dcl.rallencorp.com _ldap._tcp.dc._msdcs rallencorp.com SRV service location: priority ° 0 weight - 2 port - 389 svr hostname - dc2.rallencorp.com _ldap._tcp.dc._msdcs.rallencorp.com SRV service location: priority = 0 weight - 3 port - 389 svr hostname - dc3.rallencorp.com В определенных ситуациях такая возможность может вам очень пригодиться. Предположим, что сервер является основным контроллером домена, а следователь- но, получает больше данных от клиентов. Обнаружив, что его нагрузка слишком велика, можно снизить его приоритет или весовой коэффициент в соответствую- щей записи SVR. В таком случае обращения к серверу будет производиться не столь часто. Присвоив полю Priority достаточно высокое значение, можно вооб- ще запретить использование сервера, пока работает еще хотя бы один контроллер домена. А с помощью поля Weight можно задать частоту использования сервера. 3.23. Отключение требования доступности сервера глобального каталога при входе в домен Windows 2000 Проблема Необходимо отключить требование доступности сервера глобального каталога при входе пользователя в домен Windows 2000.
3.23. Отключение требования доступности сервера глобального каталога 109 Решение С помощью графического пользовательского интерфейса 1. Активизируйте редактор системного реестра (regedit). 2. На левой панели откройте раздел HKEY_LOCKAU_MACHINE\SYSTEM\CurrentControl- Set\Control. 3. Щелкните правой кнопкой мыши на разделе Lsa и выберите команду New ► Key (Создать ► Строковый параметр). 4. Задайте для нового параметра имя IgnoreGCFai lures и нажмите клавишу Enter. 5. Перезагрузите сервер. С помощью интерфейса командной строки > reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\IgnoreGCFailures /ve > shutdown /r С помощью сценария VBScript ' Этот код добавляет в реестр параметр IgnoreGCFaiIres и перезагружает компьютер strLSA - "HKLM\SYSTEM\CurrentcontrolSet\Control\LSA\IgnoreGCFailures\” Set objWSHShell - WScript CreateObject(”WScr1pt Shell") obJWSHShell.RegWrlte strLSA. ““ WScript.Echo “Successfully created key" WScript.Echo “Rebooting server..." objWSHShel1.Run "shutdown exe /r" Комментарий В Windows 2000 при каждой попытке входа в систему должно производиться подключение к серверу глобального каталога. Если этот сервер недоступен, поль- зователю будет отказано в регистрации. (Исключение составляет ситуация, когда соединение с сетью отсутствует и выполняется вход в систему с использованием кэшированных данных.) Подключение к серверу глобального каталога осуществ- ляется с целью получения сведений об универсальных группах, в которые может входить определенный пользователь. Выполняя аутентификацию пользователя, контроллер домена запрашивает такие сведения у сервера глобального каталога (Подробнее об этом рассказывается в рецепте 7.9 (глава 7).) Если у вас на уда- ленных сайтах имеются контроллеры домена, не являющиеся серверами глобаль- ного каталога, может возникнуть ситуация, когда пользователям будет отказано во входе в сеть из-за сбоя в сетевом соединении с ближайшим сервером глобаль- ного каталога. В Windows Server 2003 Active Directory имеется приемлемый обходной путь (см. рецепт 3.24), но в Windows 2000 единственная возможность решить описанную выше проблему — указать контроллерам домена на необходимость игнорировать неудачные попытки получить информацию от сервера глобального каталога. Для этого на тех контроллерах домена, к которым должно относиться это указание, в раздел HKLM\SYSTEM\CurrentControlSet\Control\LSA\IgnoreGCFallures\ реестра нужно Добавить ключ IgnoreGCFai 1 res Однако следует иметь в виду, что при использова- нии универсальных групп объектов такое действие станет источником проблем, поскольку маркеры доступа пользователей, вошедших в систему, когда сервер
110 Глава 3. Контроллеры домена, глобальные каталоги и роли глобального каталога был недоступен, не содержат разрешений, заданных для гло- бальных групп, в которые входят эти пользователи. Тем не менее данная возмож- ность полезна для поддержки вспомогательных сайтов, в составе которых нет серверов глобального каталога. Смотрите также В рецепте 3.24 рассказывается о том, как отключить требование доступности сер- вера глобального каталога в Windows Server 2003, а в рецепте 7.9 — о включении функции кэширования универсальных групп. Советуем просмотреть документ MS КВ 216970 (Global Catalog Server Requirement for User and Computer Logon), а также документ MS KB 241789 (How to Disable the Requirement that a Global Catalog Server Be Available to Validate User Logons). 3.24. Отключение требования доступности сервера глобального каталога при входе в домен Windows Server 2003 Проблема Требуется отключить требование доступности сервера глобального каталога при входе пользователя в домен Windows Server 2003. Решение1 Обратившись к рецепту 7.9 (глава 7), можно получить информацию о включении функции кэширования универсальных групп, избавляющем от необходимости подключаться к серверу глобального каталога при регистрации пользователя в системе. 3.25. Поиск хозяев операций Проблема Требуется выяснить, какие контроллеры домена выполняют каждую из ролей FSMO (то есть являются хозяевами операций каждого типа). Решение С помощью графического пользовательского интерфейса Для того чтобы определить хозяина схемы, необходимо выполнить перечисленные на следующей странице действия. 1 Данный рецепт можно и пользовать лишь при условии, что функциональный уровень леса соответ- ствует Windows Server 2003.
3.25. Поиск хозяев операций 111 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели щелкните правой кнопкой мыши на элементе Active Directory Schema (Схема Active Directory) и выберите в контекстном меню команду Ope- rations Master (Хозяин операций). Хозяин именования домена определяется следующим образом. 1. Откройте оснастку Active Directory Domains and Trusts (Active Directory — доме- ны и доверие). 2. На левой панели щелкните правой кнопкой мыши на элементе Active Directory Domains and Trusts (Active Directory — домены и доверие) и выберите в контек- стном меню команду Operations Master (Хозяин операций). А для того чтобы определить хозяина RID, эмулятор PDC и хозяина инфра- структуры, следует выполнить такие действия. 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Убедитесь, что вы зарегистрировались в нужном домене. 3. На левой панели щелкните правой кнопкой мыши на элементе Active Directory Schema (Схема Active Directory) и выберите в контекстном меню команду Ope- rations Master (Хозяин операций). Откроется диалоговое окно, в котором для каждой из трех ролей имеется отдельная вкладка, где указывается, какие кон- троллеры домена выполняют эту роль. С помощью интерфейса командной строки Опустив в приведенной далее команде параметр /Domain <0№-иня_домена>, вы смо- жете опросить домен, в котором в данный момент зарегистрированы: > netdom query fsmo /Domain ONS-имя_домена> В Windows Server 2003 эта команда почему-то возвращает ошибку «The para- meter is incorrect». Пока она не исправлена, можно пользоваться приведенной ниже командой dsquery server, задавая в параметре <роль> одно из следующих зна- чений: schema, name, infr, pdc или rid. > dsquery server -hasfsmo <роль> С помощью сценария VBScript Этот код выводит для заданного домена имена владельцев ролей FSMO. ’ ----- SCRIPT CONFIGURATION ---- strDomain - донена>" ' Например: emea.rallencorp.com ’ ----- END CONFIGURATION ....... set objRootDSE - GetObjectC"LDAP://” & strDomain & "/RootDSE") strDomainDN - objRootDSE.Get(“defaultNamingContext") strSchemaDN я objRootDSE.GetC’schemaNaniingCcntext") strConfigDN - objRootDSE.Get("configurationNamingContext") ' Эмулятор PDC set objPDCFsmo - GetObjectC'LDAP://" & strDomainDN) Wscrlpt.Echo "PDC Emulator: " & objPDCFsmo.fsmoroleowner
112 Глава 3. Контроллеры домена, глобальные каталоги и роли ' Хозя/ih RID set objRIDFsiro - GetObject("LDAP://cn-RID Managers.on-system," & strDomainDN) Wscript.Echo "RID Master: " & objRIDFsmo.fsmoroleowner ’ Хозяин схемы set objSchemaFsmo - GetObjectCLDAP://" & strSchemaDN) Wscript.Echo "Schema Master: " & objSchemaFsmo fsmoroleowner • Хозяин инфраструктуры set objInfraFsmo - GetObject("LDAP://cn-Infrastructure." & strDomainDN) Wscript.Echo "Infrastructure Master: " & obj I nfraFstno. fsmorol eowner ’ Хозяин именования домена set objDNFsmo - Get0bject("LDAP://cn-Part1t1ons." & strConflgDN) Wscript.Echo "Domain Naming Master: ’ & objDNFsmo.fsmoroleowner Комментарий Некоторые операции, в том числе обновление схемы, нельзя выполнять парал- лельно на нескольких контроллерах домена. Поэтому для каждого типа подоб- ных операций выделяется определенный контроллер домена, который называется хозяином операций или владельцем роли FSMO (Flexible Single Master Operations — одиночный гибкий хозяин операций). Существует пять ролей FSMO Каждая из них относится либо к целому лесу либо к заданному домену. Отличительное имя контроллера домена, выполняюще- го определенную роль, хранится в атрибуте fSMORol eOwner объектов Active Directory, к которым относится эта роль Список ролей FSMO приведен в табл. 3 4. Таблица 3.4. Роли FSMO Роль Описание Объект, которому принадлежит атрибут fSMORoleOwner Область действия Хозяин схемы Выполняет обновление схемы cn-Schema, cn-Conf1guration. <ОИ_леса> Лес Хозяин именования домена Производит добавление, удаление и переименование доменов cn-Partitions. cn-Conf1guration. <0И_леса> Лес Хозяин и нфраструкту ры Поддерживает ссылки на объекты в других доменах cn-Infrastructure. <0И_ромена> Домен Хозяин RID Выделяет пулы идентификаторов RID для контроллеров домена cn-RidManager$. cn-System. <0И_рсмена> Домен Эмулятор PDC Действует как основной браузер Windows NT и как основной контроллер домена для клиентов низшего уровня и резервных контроллеров домена. Эта роль называется также хозяином эмулятора PDC <0И_ронена> Домен
3.26. Передача роли FSMO 113 К решению с помощью сценария VBScript Если вы хотите получить DNS-имя каждого хозяина операций, то запросите ро- дительский объект для объекта nTDSDSA и считайте значение его атрибута dNSHost- Name, подобно тому, как это делается в рецепте 3.8. Например, код для получения DNS-имени хозяина схемы будет таким: set objSchemaFsmo - GetObjectCLDAP:// cn-Schema.cn-Configuration." & strForestDN) set objSchemaFsmoNTDS - GetObjectCLDAP://" & objSchemaFsmo.fsmoroleowner) set objSchemaFsmoServer - GetObjectCobjSchemaFsmoNTDS.Parent) Wscript.Echo "Schema Master: " & objSchemaFsmo.Get("DNSHostName“) Смотрите также Документы MS KB 223346 (FSMO Placement and Optimization on Windows 2000 Domain Controllers), MS KB 197132 (Windows 2000 Active Directory FSMO Roles), MS KB 234790 (HOW TO: Find Servers That Hold Flexible Single Master Operations Roles) и MS KB 324801 (HOW TO: View and Transfer FSMO Roles in Windows Server 2003). 3.26. Передача роли FSMO Проблема Требуется передать роль FSMO другому контроллеру домена. Необходимость в этой операции может возникнуть, например, в случае отключения текущего вла- дельца этой роли на время технического обслуживания. Решение С помощью графического пользовательского интерфейса 1. Следуйте указаниям, приведенным в рецепте 3.25, но, прежде чем выполнить команду Operations Master (Хозяева операций), укажите контроллер домена, которому хотите передать роль, воспользовавшись для этой цели командой контекстного меню того же компонента Connect to Domain Controller (Подклю- чение к контроллеру домена). 2. Щелкните на кнопке Change (Изменить). 3. Дважды щелкните на кнопке ОК, и вы увидите сообщение о том, успешно ли произведена передача роли. С помощью интерфейса командной строки Следующая команда передаст роль эмулятора PDC контроллеру домена <новый~ владелец_роли>. В разделе комментария будет рассказано, как передать другие роли. * ntdsutll roles conn "со t s <новый_владелец_ролк>"' q "transfer PDC" q q С помощью сценария VBScript Этот код передает роль эмулятора PDC Emulator заданному контроллеру домена Ниже рассказано.как передаются другие роли.
114 Глава 3. Контроллеры домена, глобальные каталоги и роли • SCRIPT CONFIGURATION ---- strNewOwner = "<новый владелец_роли>" ' Напринер: dc2.rallencorp.com • end CONFIGURATION ------- Set objRootDSE - GetObject!"LOAP://" 8 strNewOwner & “/RootDSE") objRootDSE.Put "becomePDC". 1 objRootDSE.SetInfo Комментарий Первому контроллеру домена в новом лесу автоматически назначаются две роли FSMO уровня леса, а именно хозяина схемы и хозяина именования домена. Пер- вый контроллер домена в новом домене получает три оставшиеся роли. Вполне вероятно, что рано или поздно вы захотите передать какие-либо из этих ролей другим контроллерам домена. Кроме того, выключая контроллер домена, выпол- няющий одну из ролей, нужно сначала передать эту роль другому контроллеру. Во время проведения обновлений, для выполнения которых достаточно быстро перезагрузить контроллер, этого можно не делать, но если контроллер отключа- ется на продолжительное время, указанная операция является обязательной. При назначении контроллеров домена на определенные роли следует учиты- вать, насколько активно они будут использоваться. Например, обращения к эму- лятору PDC производятся довольно часто, тогда как хозяин схемы требуется только при модификации схемы. Если же владелец роли окажется недоступным или вый- дет из строя до того, как вы успеете передать его роль другому контроллеру доме- на, данную роль можно непосредственно назначить любому контроллеру (см. ре- цепт 3.27). К решению с помощью интерфейса командной строки Любую роль можно передать с помощью утилиты ntdsutil — точно так же, как роль эмулятора PDC в приведенном выше решении. Для этого достаточно заме- нить содержимое параметра "transfer PDC" одним из следующих значений: "transfer domain naming master" "transfer infrastructure master" "transfer RID master" "transfer schema master” К решению с помощью сценария VBScript Роли FSMO можно передавать программным путем, для чего нужно установить атрибут Ьесоте<роль> объекта RootDSE контроллера домена, которому передается роль Вот список атрибутов, соответствующих пяти ролям FSMO: О becomeDomainMaster — хозяин домена; О becomelnfrastructureMaster — хозяин инфраструктуры; О becomePDCMaster — эмулятор PDC; О becomeRidMaster — хозяин RID; О becomeSchemaMaster — хозяин схемы.
3.27. Назначение роли FSMO 115 Смотрите также Ознакомившись с рецептом 3.25, вы узнаете, как получить список владельцев ро- лей FSMO, а ознакомившись с рецептом 3.27 — как назначить роль контроллеру домена. Кроме того, прочтите документы MS КВ 223787 (Flexible Single Master Operation Transfer and Seizure Process), MS KB 255504 (Using Ntdsutil.exe to Seize or Transfer FSMO Roles to a Domain Controller) и MS KB 324801 (HOW TO' View and Transfer FSMO Roles in Windows Server 2003). 3.27. Назначение роли FSMO Проблема Требуется назначить контроллеру домена определенную роль FSMO, поскольку ее предыдущий владелец не функционирует. Решение С помощью интерфейса командной строки Следующая команда назначит роль эмулятора PDC контроллеру домена <новый_ владелец _роли>: > ntdsutil roles conn "со t s <новый_владелец_роли>" q "seize PDC” q q Другие роли FSMO назначаются с помощью этой же команды, только вместо параметра "seize PDC" для них задается одно из следующих значений: "seize domain naming master" “seize Infrastructure master" "seize RID master" "seize schema master" С помощью сценария VBScript Назначение ролей FSMO редко производится программным путем, хотя это и возможно. Установите атрибут fSMORol eOwner объекта, к которому относится на- значаемая роль, как в рецепте 3.25, присвоив ему отличительное имя объекта nTDSDSA нового владельца роли. Комментарий Назначение ролей FSMO должно выполняться лишь в редких случаях — когда текущий владелец роли вышел из строя или недоступен. Эта операция чревата потерей данных. Предположим, что вы расширили схему и сразу после этого хо- зяин схемы вышел из строя. Только что добавленные расширения, возможно, еще не реплицированы на другие серверы, и тогда после назначения хозяином схемы другого контроллера домена придется повторить расширение схемы. Аналогич- ная проблема возникает при выходе из строя хозяина RID, если пулы RID были выделены, но не реплицированы. Дополнительная информация по данному во- просу содержится в рецепте 2.24 (глава 2).
116 Глава 3. Контроллеры домена, глобальные каталоги и роли Смотрите также В рецепте 3.25 рассказывается, как получить список владельцев ролей FSMO, а в рецепте 3.26 — как передать роль другому контроллеру домена. Обратите вни- мание на документы MS КВ 223787 (Flexible Single Master Operation Transfer and Seizure Process) и MS KB 255504 (Using Ntdsutil.exe to Seize or Transfer FSMO Roles to a Domain Controller). 3.28. Поиск эмулятора PDC через службу DNS Проблема Требуется найти эмулятор PDC заданного домена, используя при этом службу DNS. Решение С помощью интерфейса командной строки > nslookup -type-SVR _ldap._tcp.pdc,_ms<5sc.ONS-иня_ромена> Комментарий Единственной ролью, для которой в DNS хранится имя контроллера домена, яв- ляется роль эмулятора PDC. Подобно многим другим записям DNS, имеющим отношение к Active Directory, она представлена в виде записи SVR в разделе _ldap _tcp.pdc _msdsc <0№-иня_донена>, где <0№-иня_донена> — это домен, в кото- ром находится основной контроллер. Смотрите также В рецепте 3.21 рассказывается о том, как можно найти контроллеры домена через службу DNS.
4 Объекты и операции над ними 4.0. Введение Служба каталогов Active Directory основана на протоколе LDAP (Lightweight Directory Access Protocol — основной протокол доступа для Active Directory) и поддерживает спецификацию LDAP версии 4, определенную в документе RFC 2251 В ее состав входит набор удобных инструментальных средств и утилит, которые позволяют оператору выполнять операции, задаваемые указанным протоколом В данной главе будут рассмотрены некоторые базовые задачи, связанные с при- менением протокола LDAP, а также ряд других вопросов, включая поиск объек- тов в Active Directoiy и выполнение различных операций над ними. Анатомия объекта Схема Active Directory содержит иерархию классов — своего рода шаблонов или типов, на основе которых создаются объекты каталога Эти классы поддерживают наследование, что позволяет повторно использовать их определения На вершине дерева наследования располагается класс, от которого происходят все остальные классы схемы. Список атрибутов данного класса, имеющихся у всех объектов Ac- tive Directory, приведен в табл. 4.1. Таблица 4.1. Общие атрибуты объектов Active Directory Атрибут Описание СП Относительное отличительное имя объекта (Relative Distinguished Name. RDN). Имеется у большинства классов createTimestamp Время создания объекта. См. также рецепт 4.22 description Атрибут, содержащий набор значений. Может использоваться в качестве универсального поля для хранения описания объекта di splayName Имя, под которым объект представлен в интерфейсе средств администрирования, называемое выводимым именем distinguishedName Отличительное имя (Distinguished Name, DN) объекта modifyTimestamp Время последней модификации объекта. См рецепт 4 22 продолжение^
118 Глава 4. Объекты и операции над.ними Таблица 4.1 (продолжение) Атрибут Описание name Относительное отличительное имя объекта. Значение этого атрибута совпадает со значением атрибута имени (то есть сп, ou, de и т. п.) nTSecur 1tyDescri ptor objectcategory Присвоенный объекту дескриптор безопасности Используется в качестве средства группировки объектов, имеющих сходное назначение objectCl ass Список классов, от которых был произведен класс данного объекта objectGUID Глобально уникальный идентификатор (Globally Unique Identifier, GUID) объекта uSNChanged Последовательный номер обновления (Update Sequence Number, USN), присвоенный локальным сервером объекту уже после его последнего обновления (возможно, с учетом операции создания) uSNCreated USN, присвоенный объекту при его создании 4.1. Получение сведений об объекте RootDSE Проблема Требуется просмотреть атрибуты объекта RootDSE. Это позволит получить базо- вую информацию о лесе, домене или контроллере домена. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выберите команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя домена или контроллера домена либо ос- тавьте данное поле пустым — в таком случае связь устанавливается с исполь- зованием произвольного сервера. 4. В поле Port (Порт) введите значение 389. 5. Щелкните на кнопке ОК, и содержимое объекта RootDSE будет отображено на правой панели окна программы LDP. С помощью интерфейса командной строки > enumprop "LDAP://RootDSE" С помощью сценария на языке VBScript ‘ Этот код выводит значения атрибутов RootDSE set objRootDSE - GetObjectCLDAP://RootDSE")
4.1. Получение сведений об объекте RootDSE 119 objRootDSE.Getlnfo for i - О to objRootDSE.PropertyCount - 1 set strProp - objRootDSE.Item(i) WScript.Echo strProp.Name & " " for each strPropval in strProp.Values WScript.Echo" "8 strPropval .CaselgnoreString next next Комментарий Первоначально объект RootDSE был определен в документе RFC 2251 как часть спецификации LDAP версии 3. Поэтому его имя отсутствует в пространстве имен Active Directory. Каждый контроллер домена самостоятельно поддерживает этот искусственный объект Доступ к объекту RootDSE может осуществляться анонимно, поэтому ни в одном из трех приведенных решений имя и пароль пользователя не упоминаются. В ре- шениях на основе командной строки и VBScript используется бессерверное под- ключение к объекту RootDSE. В таких случаях для поиска контроллера домена в том домене, где вы зарегистрированы, применяется локатор контроллеров домена. При использовании программы LDP вы достигнете того же эффекта, если просто не зададите имя сервера в диалоговом окне Connect (Подключение). Объект RootDSE служит основой переносимых приложений для работы с Ac- tive Directory. Кроме всего прочего, он предоставляет механизм программного определения отличительных имен различных контекстов именования, благодаря чему отпадает необходимость в жестком кодировании их в сценариях и програм- мах. Ниже приведен пример выполнения программы LDP на контроллере доме- на, работающем под управлением Windows Server 2003: Id - ldap_open("dc01". 389); Established connection to dcOl. Retrieving base DSA information ... Result <0>: (null) Matched DNs: Getting 1 entries: » On; 1> currentTime: 05/26/2003 15:29:42 Pacific Standard Time Pacific Daylight Time; 1> subschemaSubentry:CN-Aggregate,CN-Schema,CN-Configuration,DC-ral1encorp.DC-com: 1> dsServiceName: CN-NTDS Settings,CN-DC0l.CN-Servers.CN-Default-F1rst-Site-Name.CN=Sites.CN-Configuration.DC-rallenco rp.DC-com; 5> namingContexts; DC-ral1encorp,DC-com; CN-Configuration.DC-rallencorp,DC-com: CN-Schema.CN-Configuration,DC-rallencorp.DC-com; DC=DomainOnsZones.DC-ra11encorp,DC-com; DC-ForestDnsZones.DC-ral1encorp,DC-com: 1> defaultNamingContext: DC-rallencorp.DC-com; 1> schemaNamingContext; CN-Schema.CN-Configuration,DC-ral1encorp.DC-com; 1> configurati ojnNami ngContext: CN-Configuration.DC-ra11encorp.DC-com;
120 Глава 4. Объекты и операции над нмми 1> rootDomainNamingContext: DC-rallencorp.DC-com. 21> supportedControl: 1.2 840.113556 1.4.319; 1 2 840.113556.1.4 801; 1.2.840.113556.1.4.473; 1 2.840.113556.1.4.528: 1.2.840.113556.1.4.417; 1.2.840.113556 1.4.619: 1.2.840.113556.1.4.841; 1.2.840.113556.1.4.529; 1,2.840.113556.1.4.805. 1 2.840 113556 1 4.521 1.2.840.113556.1.4.970; 1 2.840.113556.1.4.1338; 1.2 840.113556.1.4 474 1.2.840.113556.1 4 1339; 1.2.840.113556.1.4.1340: 1.2.840.113556.1.4.1413; 2 16.840.1 113730.3.4.9; 2 16.840.1.113730.3 4.10. 1 2 840 113556.1 4 1504 1.2.840.113556 1 4 1852; 1.2.840.113556.1 4.802; 2> supportedLDAPVersion: 3: 2: 12> supportedLDAPPolicies: MaxPoolThreads; MaxDatagramRecv; MaxReceiveBuffer; InitRecvTimeout; MaxConnections. MaxConnIdleTime; MaxPageSize; MaxQueryDuration; MaxTempTabl eSize; MaxResultSetSize; MaxNotificationPerConn; MaxValRange; 1> highestComrmttedUSN: 53242: 4> supportedSASLMechanisms: GSSAPI; GSS-SPNEGO. EXTERNAL. DIGEST-MD5; 1> dnsHostName: dc01.rallencorp.com- 1> IdapServIceName: railencorp.com.dc01$@RALLENC0RP.C0M. 1» serverName CNOCOl ,CN=Servers.CN^Default-First-Site-Name CN=Sites CN=Configuration DC-ral1encorp.DC-com; 3> supportedCapabiTitles: 1.2.840.113556.1.4.800; 1 2 840.113556.1.4.1670; 1.2.840.113556.1 4.1791; 1> isSynchronized: TRUE; 1> IsGlobalCatalogReady: TRUE; 1> domainFunctionality: 0 - ( DS_BEHAVI0R_WIN2000 ): 1> forestFunctionality: 0 •» ( DS_BEHAVIOR_WIN2000 ); 1> domainControllerFunctionallty: 2 ° ( DS_BEHAVIOR_WIN2003 ): К решению с помощью сценария на языке VBScript Приведенный выше код считывает и выводит значения всех атрибутов объекта RootDSE. Однако на практике обычно требуется только один или несколько атри- бутов, и в таких случаях можно использовать метод Get или GetEx, как в следую- щем примере: strDefaultNC - objRootDSE.Get("defaultNamingContext") Or if want to get an object based on the distinguished name (DN) of one of the naming contexts, you can call GetObject using an ADsPath; set objUser - GetObject(“LDAP7/cn-adm1nistrator.cn-users." & _ objRootDSE GetC'defaultNamngContext") )
4.2. Просмотр значений атрибутов объекта 121 Смотрите также Документы RFC 2251, MS КВ 219005 (Windows 2000: LDAPv3 RootDSE), MSDN: lADsPropertyEntry, MSDN: LADsPropertyValue, MSDN. IADs. Get и MSDN: IADs..GetEx. 4.2. Просмотр значений атрибутов объекта Проблема Требуется просмотреть значения одного или нескольких атрибутов объекта Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP 2 Выберите команду Connection ► Connect (Подключение ► Подключиться). 3 В поле Server (Сервер) введите имя домена или контроллера домена либо ос- тавьте данное поле пустым — в таком случае связь устанавливается с исполь- зованием произвольного сервера 4. В поле Port (Порт) введите значение 389 5. Щелкните на кнопке ОК. 6. Выберите команду Connection ► Bind (Подключение ► Связать) 7. Введите имя и пароль пользователя. 8. Щелкните на кнопке ОК 9. Выберите команду View ► Tree (Вид ► Дерево). 10 В поле BaseDN (Отличительное имя базы) введите отличительное имя объекта, атрибуты которого хотите просмотреть. 11. В области Scope (Область поиска) установите переключатель в положение Base (База). 12 Щелкните на кнопке ОК. С помощью интерфейса командной строки > dsquery * "<ОИ_рбъектд>“ -scope base -attr * В Windows 2000 используйте такую команду: > enurpprop "ЮАР.//<ОИ_обьекта>" С помощью сценария на языке VBScript Этот код выводит значения всех атрибутов заданного объекта ' -.. SCRIPT CONFIGURATION - strObjectDN - "<0И объектд>" ’ Например: cn-jsmith.cn-users.dc-rallencorp.dc-com * -.. END CONFIGURATION ----
122 Глава 4. Объекты и операции над ними DisplayAttributes("LDAP://" & strObjectDN) Function DisplayAttribates( strObjectADsPath ) set objObject - GetObject(strObjectADsPath) objObject Getlnfo ’ Объявляется объект типа dictionary и заполняется ’ значениями из перечисления ADSTYPEENUM set dicADsType - CreateObjectI"Scripting.Dictionary") dicADsType.Add 0. "INVALID" dicADsType.Add 1. "DN STRING" dicADsType.Add 2. "CASE EXACT STRING" dicADsType.Add 3. "CASEJGNORE STRING" dicADsType.Add 4. "PRINTABLE STRING" dicADsType.Add 5. "NUMERIC_STRING“ dicADsType.Add 6, "BOOLEAN" dicADsType.Add 7. "INTEGER" dicADsType.Add 8. "OCTET_STRING" dicADsType.Add 9. "UTC TIME" dicADsType.Add 10. "LARGE INTEGER" dicADsType Add 11. "PROV SPECIFIC" dicADsType.Add 12. "OBJECT CLASS dicADsType Add 13. "CASEIGNORE LIST" dicADsType.Add 14. "OCTET LIST dicADsType.Add 15. "PATH”- dicADsType Add 16. "POSTALADDRESS" dicADsType.Add 17. "TIMESTAMP" dicADsType.Add 18. "BACKLINK" dicADsType Add 19. "TYPEDNAME' dicADsType.Add 20. “HOLD" dicADsType Add 21. "NETADDRESS" dicADsType Add 22. "REPLICAPOINTER" dicADsType.Add 23. "FAXNUMBER" dicADsType.Add 24. "EMAIL" dicADsType Add 25. "NT_SECURITY DESCRIPTOR" dicADsType.Add 26. "UNKNOWN" dicADsType.Add 27. "DN WITH_BINARY" dicADsType.Add 28. "DN_WITH_STRING" for intlndex - 0 To (objObject.PropertyCount - 1) set objPropEntry - objObject.Item(Intlndex) for Each objPropValue In objPropEntry.Vaiues value - "" if (dicAOsType(objPropValue.ADsType) - "DN_STRING") then value - objPropValue.DNStnng el self (dicADsType(objPropValue ADsType) - 'CASE_EXACT_STRING") then value - objPropValue.CaseExactStHng elself (dicADsType(objPropValue.ADsType) - "CASE_IGNORE_STRING") then value - objPropValue.CaselgnoreString elself (dicADsType(objPropValue ADsType) - "PRINTABLE_STRING") then value - objPropValue Printab)eString
4.2. Просмотр значений атрибутов объекта 123 elself (d1cADsType(objPropValue.ADsType) - "NUMERIC_STRING") then value - objPropValue.NumericString elself (d1cADsType(objPropValue.ADsType) - "BOOLEAN") then value - CStrlobjPropValue.Boolean) elself (dicADsType(objPropValue.ADsType) - "INTEGER") tnen value - objPropValue.Integer elself (dicADsType(objPropValue.ADsType) - “LARGEJNTEGER”) then set objLargelnt - objPropValue.Largelnteger value - objLargelnt.HighPart * 2A32 + objLargelnt.LowPart elself (d1cADsType(objPropValue.ADsType) - "UTCJIME") then value - objPropValue.UTCTime else value - "<" & dicADsType.ItemCobjPropEntry.ADsType) & ”>" end if WScript.Echo objPropEntry.Name & “ : ’ & value next next End Function Комментарий Объекты в Active Directory состоят из наборов атрибутов. Атрибут может пред- ставлять собой одно или несколько значений и относится к одному из типов дан- ных, определенных в схеме Active Directory Полный список типов данных атри- бутов объектов приведен в рецепте 10.7 (глава 10). К решению с помощью графического пользовательского интерфейса Утилита LDP позволяет задать список возвращаемых ею атрибутов в поле Attribu- tes (Атрибуты) диалогового окна, открываемого в ответ на выполнение команды Options ► Search (Параметры ► Поиск). При необходимости включить в резуль- таты поиска все атрибуты введите символ звездочки (*). Если же требуется неко- торое их подмножество, перечислите нужные атрибуты, разделив их символом точки с запятой (.) К решению с помощью интерфейса командной строки Посредством параметра -attr команды dsquery вводится разделенный пробелами список атрибутов, значения которых требуется просмотреть. Символ * обозначает все атрибуты. В команде ENUMprop список атрибутов, разделенных запятыми, должен вводить- ся после ключа /attr. Ниже дан пример команды, которая возвращает только атри- буты name и whenCreated: > enumprop /ATTR;name.whenCreated "Т0АР://<0И_обьекга>"
124 Глава 4. Объекты и операции над ними К решению с помощью сценария на языке VBScript Функция Di spl ayAttri butes выводит список значений атрибутов заданного объекта. Посредством функции GetObject объявленная переменная связывается с этим объектом, после чего локальный кэш свойств в результате применения метода IADs::Getlnfo заполняется значениями атрибутов объекта. Чтобы вывести значение очередного свойства, нужно знать его тип (синтаксис) Метод ADsType возвращает целочисленное значение из перечисления ADSTYPEENUM, указывающее тип заданного свойства (например, BOOLEAN), после чего на основании полученного результата вызывается соответствующий ему метод (предположим, bool еап), который и вы- водит значение свойства на экран Если бы анализ типа свойства не выполнялся и для вывода любых значений использовался, скажем, метод CaselgnoreString, то при работе с байтовой строкой (то есть с двоичными данными) была бы сгенери- рована ошибка, поскольку представления CaselgnoreString для этого типа данных не существует Значения из перечисления ADSTYPEENUM в рассматриваемом здесь решении хра- нятся в виде объекта-словаря Script!ng.Dictionary, который представляет собой на- бор пар ключ-значение. В указанном объекте ключом словаря служит целочислен- ная константа из числа представленных в ADSTYPEENUM, а значением — текстовое имя этой константы. Перебор свойств осуществляется с помощью объектов IADs - PropertyList и lADsPropertyEntry, экземпляры которых создает метод lADsProperty- List: :Item. Функция 01 spl ayAttri butes используется и в других решениях приведенных в этой книге, — при необходимости вывести атрибуты заданного объекта. Смотрите также Документы MSDN: lADsPropertyEntry, MSDN. lADsPropertyList, MSDN. ADS- TYPEENUM и MSDN: IADs:: Getlnfo. 4.3. Использование управляющих объектов LDAP Проблема При выполнении операции LDAP необходимо воспользоваться одним из управ- ляющих объектов LDAP. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выберите команду Options ► Controls (Параметры ► Управляющие объекты). 3. В версии LDP для Windows Server 2003 выберите из списка Load Predefined (Загрузка существующего объекта) управляющий объект, который хотели бы использовать. Его имя будет автоматически добавлено в список Active Controls
4.3. Использование управляющих объектов LDAP 125 (Активные объекты) В версии LDP для Windows 2000 введите в поле Object Identifier (Идентификатор объекта) идентификатор управляющего объекта (Object Identifier, О ID). 4 В поле Value (Значение) введите значение управляющего объекта. 5 В поле Control Туре (Тип объекта) выберите тип управляющего объекта — кли- ентский либо серверный. 6. Если этот управляющий объект является критическим, установите флажок Critical (Критический). 7. Щелкните на кнопке Check-in (Подтверждение). 8. Щелкните на кнопке ОК. 9. Активизируйте операцию службы LDAP (например, поиск), в которой будет использоваться выбранный управляющий объект. В открывшемся в результате перечисленных действий диалоговом окне, прежде чем начать операцию, уста- новите флажок Extended (Расширенный). С помощью сценария на языке VBScript Ни один из интерфейсов автоматизации службы Active Directory (Active Directory Service Interface, ADSI) не обеспечивает непосредственной поддержки управляю- щих объектов LDAP, поэтому методы таких объектов нельзя вызывать с помощью сценариев, написанных на языке VBScript. Однако многие из них, например объект, предназначенный для поиска с постраничной выдачей результатов, или объект для удаления поддерева, имеют оболочки в виде методов ADSI, которые можно использовать в сценариях на языке VBScript. Для выполнения операций LDAP с использованием управляющих объектов подойдет любой API на базе указанного протокола, например модули Net.:LDAP языка Perl. Комментарий Использование управляющих объектов LDAP (LDAP controls) определено в вер- сии 3 спецификации LDAP как способ расширения возможностей данной техно- логии без нарушения лежащего в ее основе протокола. Уже реализовано доволь- но большое количество таких объектов. Одни из них используются при поиске информации в каталоге (в том числе при постраничном поиске и поиске удален- ных объектов, а также в запросах на основе значений атрибутов), другие необхо- димы для выполнения различных операций, связанных с модификацией катало- га, в частности для перемещения объектов между доменами, удаления деревьев и изменения разрешений. Управляющие объекты можно помечать как критические. При выполнении запроса помеченный таким образом объект подлежит обязатель- ной обработке; в противном случае сервер должен вернуть сообщение об ошибке. Если неподдерживаемый сервером управляющий объект не помечен как крити- ческий, сервер может проигнорировать его и обработать запрос. Полный список управляющих объектов, поддерживаемых Active Directory, приведен в табл. 4.2.
126 Глава 4. Объекты и операции над ними Таблица 4.2. Управляющие объекты LDAP, поддерживаемые Active Directory Имя OID Описание Paged Results 1.2.840.113556.1.4.319 Указывает серверу на необходимость возвращать результаты поиска постранично Cross Domain Move 1.2.840.113556.1.4.521 Используется для перемещения объектов между доменами DIRSYNC 1.2.840.113556.1.4.841 Предназначен для поиска объектов, измененных в течение заданного периода времени Domain Scope 1.2 840.113556.1.4.1339 Запрещает серверу осуществлять перенаправление запроса при его обработке Extended DN 1.2.840.113556.1.4.529 Возвращает отличительное имя объекта, а также его GUID и SID (для участников системы безопасности) Laz> Commit 1.2.840 113556.1 4 619 Указывает серверу на необходимость сообщать об успешном выполнении запроса после записи изменений, производимых в каталоге, в память, но до их записи на диск. Это значительно ускоряет обработку запросов на внесение большого количества изменений Change Notification 1.2.840.113556.1 4.528 Используется клиентами при регистрации для получения уведомлений об изменениях в каталоге Permissive Modify 1.2.840.113556.1.4.1413 Позволяет повторно добавить определенное значение атрибута или удалить атрибут, не имеющий значения (по умолчанию попытка выполнить указанные операции завершается выводом сообщения об ошибке) SD Flags 1.2.840.113556.1.4.801 Используется при передаче серверу флагов для управления определенными параметрами защиты Search Options 1.2.840.113556.1.4.1340 Используется при передаче серверу флагов для управления определенными параметрами поиска Show Deleted Objects 1.2.840.113556 1 4.417 Указывает серверу на необходимость вернуть данные удаленных объектов, соответствующих определенному критерию
4.3. Использование управляющих-объектов LDAP 127 Имя OID Описание Server-side Sort Request 1.2.840.113556.1.4.473 Предписывает серверу отсортировать результаты поиска Server-side Sort Response 1.2.840.113556.1.4.474 Сервер возвращает этот управляющий объект в ответ на запрос сортировки Tree Delete 1.2 840.113556.1.4.805 Предназначен для удаления части дерева каталога, включая все дочерние объекты Verify Name 1.2.840.113556.1.4 1338 Позволяет указать конкретный сервер глобального каталога для проверки атрибутов, используемых при выполнении операций добавления и модификации VLV Request 2.16.840.1.113730.3 4.9 Позволяет запросить представление результатов поиска в виде виртуального списка. Является нововведением Windows Server 2003 VLV Response 2.16.840.1.113730.3.4.10 Содержит ответ от сервера, у которого запрашивалось представление результатов поиска в виде виртуального списка. Является нововведением Windows Server 2003 Attribute Scoped Query 1.2.840.113556.1.4 1504 Указывает что запрос должен быть основан на атрибуте. Является нововведением Windows Server 2003. См. пример в рецепте 4.8 Search Stats 1.2.840.113556 1.4 970 Позволяет получить статистическую информацию о запросе L0AP. См. пример в рецепте 15.9 Incremental Multi value Retrieval 1.2.840.113556.1.4.802 Применяется для получения части значений составного атрибута (вместо всех его значений за один раз) Является нововведением Windows Server 2003 Смотрите также В спецификации RFC 2251 (Lightweight Directory Access Protocol (v3)) приведе- но описание управляющих объектов LDAP. Кроме того, просмотрите документы MSDN: Extended Controls и MSDN: Using Controls.
128 Глава 4. Объекты и операции над ними 4.4. Использование быстрого и параллельного связывания Проблема Требуется выполнить связывание LDAP методом параллельного либо быстрого связывания К параллельному связыванию обычно прибегают в тех случаях, когда необходимо аутентифицировать множество пользователей, которые не нуждаются в непосредственном доступе к каталогу, или когда доступ к каталогу осуществля- ется с применением другой учетной записи. Решение1 С помощью графического пользовательского интерфейса Параллельное связывание осуществляется следующим образом. 1. Запустите служебную программу LDP. 2. Выполните команду Connection > Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя домена или контроллера домена либо ос- тавьте данное поле пустым — в таком случае связь устанавливается с исполь- зованием произвольного сервера. 4. В поле Port (Порт) введите значение 389. 5. Щелкните на кнопке ОК. 6. Выполните команду Options ► Connection Options (Параметры ► Параметры под- ключения). 7 Из списка Option Name (Имя параметра) выберите значение LDAP_OPT_FAST_CON- CURRENT_BIND. о. Щелкните на кнопке Set (Установить). 9. Выполните команду Connection ► Bind (Подключение ► Связать). 10. Введите имя и пароль пользователя. 11. Щелкните на кнопке ОК. Комментарий При параллельном связывании, осуществляемом в процессе аутентификации, в отличие от обыкновенного связывания, маркер безопасности не генерируется и система не проверяет, в какие группы входит пользователь Единственная про- верка, которая при этом производится, — это подтверждение пароля. Следова- тельно, параллельное связывание выполняется гораздо быстрее, чем обычное. Применить его можно лишь при условии, что после подключения к контроллеру 1 Описанные в этом рецепте действия можно выполнить только па контроллере домена Windows Server 2003.
4(4; ИспользоВЧшифбыстрого и параллельного связывания 129 домена, но до попытки связаться, должен быть установлен параметр session. В та- ком случае все последующие попытки связаться через данное подключение будут осуществляться в параллельном режиме. У метода параллельного связывания есть несколько недостатков. Во-первых, становится невозможным использование электронных подписей и шифрования, поэтому все данные передаются по сети незашифрованными. Во-вторых, посколь- ку для пользователя не генерируется маркер безопасности, доступ к каталогу осу- ществляется анонимно, с ограничениями, задаваемыми для участника системы безопасности ANONYMOUS LOGON. Существует еще один, введенный в Windows 2000, тип связывания, который называется быстрым. Процедура его осуществления отличается от описанной выше. Быстрое связывание реализовано в ADSI. Суть его заключается в том, что при связывании объекта его атрибут objectCl ass не запрашивается, а потому специфи- ческие для его класса интерфейсы IADs остаются недоступными. Например, в слу- чае быстрого связывания объекта user оказываются доступными только базовые интерфейсы IADs, но не ADsUser. Приведем полный список интерфейсов, с помощью которых можно работать с объектом, полученным путем быстрого связывания: IADs, lADsContainer, IDirectoryObject, IDirectorySearch, lADsPropertyList, lADsObject- Options, ISupportErrorlnfo и lADsDeleteOps Для быстрого связывания используется интерфейс lADsOpenDSObject: :OpenDS Object. Если для дочернего объекта, чей родительский объект был получен с по- мощью быстрого связывания, вызвать интерфейс lADsContainer GetObject, будет произведено такое же быстрое связывание. В отличие от параллельного связыва- ния, быстрое связывание ADSI не накладывает ограничений на возможности ау- тентифицированного пользователя. Однако в случае его применения специфиче- ские для объектов данного класса интерфейсы IADs становятся недоступными, а проверка существования объекта при вызове OpenDSObject не производится. Быстрое связывание ADSI особенно полезно при необходимости обновить множество объектов, которые наверняка существуют, причем для осуществления обновлений не требуются IADs-интерфейсы, специфические для объектов данного типа. (Возможно, наличие таких объектов предварительно проверяется посредством ADO-запроса, возвращающего список их отличительных имен.) Тогда вместо двух контактов по сети для каждой операции связывания объекта осуществляется только один. Вот пример программного кода, демонстрирующего принцип применения метода быстрого связывания ADSI: const ADS_FAST_BIND - 32 set objLDAP - GetObjectC"LDAP.") set objUser - objLDAP.OpenDSObject("LDAP-//<ObjectDN>". "<UserUPN>”. _ "<tlserPassword>". ADS_FAST_BIND) Смотрите также Документы MSDN: Using Concurrent Binding и MSDN: ADS_AUTHENTICA- TION_ENUM.
130 Глава 4. ОбъедтыЛ операции надчйими 4.5. Поиск объектов в домене Проблема Требуется найти в домене объекты, соответствующие определенному критерию. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2 Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя домена или контроллера домена либо ос- тавьте данное поле пустым — в таком случае связь устанавливается с исполь- зованием произвольного сервера. 4. В поле Port (Порт) введите значение 389. 5. Щелкните на кнопке ОК. 6. Выберите команду Connection ► Bind (Подключение ► Связать) 7 Введите имя и пароль пользователя 8. Щелкните на кнопке ОК. 9. Выберите команду Browse ► Search (Поиск ► Найти). 10. В поле BaseDN (Отличительное имя базы) введите отличительное имя объекта, с которого должен быть начат поиск. 11. В области Scope (Область поиска) выберите подходящую область поиска. 12. В поле Filter (Фильтр) укажите спецификацию фильтра LDAP. 13. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки > dsquery * <0И_базы> -scope <область_поиска> -filter “<фильтр>'‘ -attr "<список_атрибутов>" С помощью сценария на языке VBScript Этот код находит объекты по заданному критерию. ‘ ----- SCRIPT CONFIGURATION ------- strBase - "<LDAP://<ОИ_базы»;" ' Начальная точка поиска strFilter - "<фильтр>;“ ' Допустимый фильтр LDAP strAttrs - "<список_атрибутов>:" ' Разделенный запятыми список strScope - "<область_поиска>" ' Subtree Onelevel или Base 1 END CONFIGURATION ........ set objConn » CreateObjectC’ADODB.Connection”) objConn.Provider » "ADsDSOObject” objConn.Open "Active Directory Provider" set objRS - objConn.Execute(strBase & strFilter & strAttrs & strScope) objRS.MoveFirst While Not objRS.EOF Wscript.Echo objRS.F1elds(0).Value objRS.MoveNext Wend
131 Комментарий Используя большинство средств, с помощью которых осуществляется поиск ин- формации в Active Directory, необходимо хотя бы в общих чертах понимать, как выполняется поиск LDAP на основе заданных базового имени, области поиска и фильтров. Эти механизмы поиска довольно подробно описаны в спецификациях RFC 2251 и 2254. Базовое отличительное имя указывает, с какой точки каталога должен быть начат поиск, область поиска определяет, какую часть дерева катало- га он должен охватить, а фильтр представляет собой строку в префиксной нота- ции, содержащую набор пар «атрибут = значение». Определены три области поиска: база (base), один уровень (onelevel или one) и поддерево (subtree или sub). Первый из них включает только базовое отличи- тельное имя, второй — объекты, расположенные непосредственно под ним, а тре- тий — все поддерево, находящееся ниже базового отличительного имени. Синтаксис, используемый для определения фильтра, довольно прост и функ- ционален, позволяет задавать как элементарные, так и достаточно сложные за- просы. Вот пример фильтра, соответствующего всем объектам, представляющим пользователей: (&(objectcl ass’user) (objectcategory-Person)). За дополнительной информацией о фильтрах рекомендуем обратиться к документу RFC 2254. К решению с помощью графического пользовательского интерфейса Для того чтобы задать список атрибутов искомых объектов, выполните действия, описанные в рецепте 4.2 для решения с применением графического пользова- тельского интерфейса. К решению с помощью интерфейса командной строки Строка <слисок_дтрибутов> должна содержать разделенный пробелами список воз- вращаемых атрибутов. Если оставить ее пустой, будут возвращены все атрибуты, имеющие значения. К решению с помощью сценария на языке VBScript В данном решении при выполнении поиска используются ADO-объекты. Вначале в результате выполнения трех следующих строк кода создается объект connection: set objConn - CreateObjectC'ADODB Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" Затем вызывается метод Execute, который возвращает объект типа ResultSet. Для перебора строк последнего используются методы MoveFi rst и MoveNext. О том, как с помощью ADO задаются дополнительные параметры поиска, и в частности размер страницы, вы узнаете из рецепта 4.7. Смотрите также В рецепте 4.2 рассказано, как просмотреть атрибуты объекта, а в рецепте 4.7 — как установить дополнительные характеристики ADO. Кроме того, ознакомьтесь с документами RFC 2251 (Lightweight Directory Access Protocol (v3)), RFC 2254 (Lightweight Directory Access Protocol (v3)) и MSDN: Searching with ActiveX
132 Глава 4. Объекты и операции над ними Data Objects (ADO). Инструкции относительно выполнения запросов при помо- щи LDAP вы найдете по адресу: http://www.microsoft.eom/windows2000/techinfo/ho- witworks/activedirectory/ldap.asp. 4.6. Поиск в глобальном каталоге Проблема Необходимо с использованием глобального каталога Active Directory выполнить поиск во всем лесу. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выберите команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) укажите имя сервера глобального каталога. 4. В поле Port (Порт) введите значение 3268. 5. Щелкните на кнопке ОК. 6. Выберите команду Connection ► Bind (Подключение ► Связать) 7. Введите имя и пароль пользователя. 8. Щелкните на кнопке ОК. 9. Выполните команду Browse ► Search (Поиск ► Найти) 10. В поле BaseDN (Отличительное имя базы) введите отличительное имя объекта, с которого должен быть начат поиск. И. В области Scope (Область поиска) выберите область поиска. 12. В поле Filter (Фильтр) введите спецификацию фильтра LDAP. 13. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки > dsquery * <0И_базы> -gc -scope <область_поиска> -filter "<фильтр>" -attr "<список_атрибу тов>" С помощью сценария на языке VBScript Этот код осуществляет поиск в глобальном каталоге * ---- SCRIPT CONFIGURATION . strBase - "<6С://<Ш_базы>>;н strFilter - "<фильтр>;“ strAttrs - '<слисок_атрибу тов>;" strScope - "<область_поиска>" ‘ ... END CONFIGURATION ---- set objConn - CreateObjectCADODB Connection”) objConn Provider - "ADsDSOObject" objConn.Open "Active Directory Provider"
4.7. Поиск большого количества объектов 133 set objRS objConn.Execute(strBase & strFilter & strAttrs & strScope) objRS MoveFirst while Not objRS EOF Wscript.Echo objRS.Fiel ds(0).Value objRS.MoveNext wend Комментарий Глобальный каталог обеспечивает возможность поиска по всему лесу. При обычном LDAP-поиске через порт 389 выполняется просмотр только определенного разде- ла Active Directory — домена, конфигурации, схемы или приложений, причем толь- ко в одном домене. Если же в лесу несколько доменов, просмотреть их все таким образом нельзя. Глобальный каталог содержит подмножество атрибутов всех объектов леса, за исключением объектов из разделов приложений Его можно представить как подмножество всех четырех объединенных разделов каталога Active Directory. Если в результате поиска вам не удалось получить значения каких-то атрибутов, значит, эти атрибуты не включены в глобальный каталог. О том, как это сделать, рассказывается в рецепте 10.14 (глава 10). К решению с помощью графического пользовательского интерфейса Единственным отличием данного решения от предложенного в рецепте 4.5 явля- ется замена порта стандартным портом глобального каталога 3268. К решению с помощью интерфейса командной строки Единственным отличием данного решения от предложенного в рецепте 4.5 явля- ется добавление флага -дс. К решению с помощью сценария на языке VBScript От предложенного в рецепте 4.5 это решение отличается лишь значением пере- менной strBase — в данном случае ей присваивается значение GC:программный иден- тификатор: strBase - "<GC://<0И_бдзы»;“ Смотрите также О поиске объектов в Active Directory рассказывается в рецептах 4.5,4.7 и в доку- менте MSDN: Searching with ActiveX Data Objects (ADO). 4.7. Поиск большого количества объектов Проблема В результате выполнения операции поиска возвращается всего 1000 объектов, то- гда как согласно заданному вами критерию их количество должно быть намного большим.
134 Глава 4. Объекты и операции над ними Решение Вы могли заметить, что, выполняя операции поиска, контроллеры домена возвра- щают не более 1000 объектов. Это ограничение введено с целью регулирования количества ресурсов, затрачиваемых контроллером домена на обработку одного запроса, однако его можно обойти, задав параметр постраничной выдачи резуль- татов поиска. Представленные ниже решения аналогичны используемым в ре- цепте 4.5, с тем лишь отличием, что в них задается указанный параметр. С помощью графического пользовательского интерфейса 1. Выполните действия, описанные в рецепте 4.5, но прежде чем щелкнуть на кнопке ОК, чтобы начать поиск, щелкните на кнопке Options (Параметры). 2. В поле Timeout (s) (Тайм-аут (с)) введите значение тайм-аута, например 10. 3. В поле Page size (Размер страницы) укажите количество объектов, составляющее страницу, например 1000. 4. Из списка Search Call Туре (Тип поиска) выберите Paged (Страничный). 5. Щелкните на кнопке ОК. Теперь после каждого щелчка на кнопке Run (Вы- полнить) будет выводиться очередная порция результирующих данных, пока вы не просмотрите их все. С помощью интерфейса командной строки > dsquery * <0И_базы> -limit 0 -scope <область_поиска> -filter "<фильтр>" -attr “<список_атрибутов>" С помощью сценария на языке VBScript Этот код выполняет поиск с постраничный получением результатов ' ....- SCRIPT CONFIGURATION ... strBase - "<С0№://<0И_базь/>>:" strFilter - ’‘<фильтр>;я strAttrs = "<список_атрибу тов>;" strScope • "<область поиска>~ ' .... END CONFIGURATION ------ set objConn - CreateObjectC'ADCDB.Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider’ set objComm - CreateObjectC'ADODB.Command") objComm.ActiveConnection - objConn objComm.Properties("Page Size") - 1000 objComm.CommandText » strBase & strFilter & strAttrs & strScope set objRS - objComm.Execute objRS.MoveFirst while Not objRS.EOF Wscript.Echo objRS.Fi el ds(0).Vaiue objRS.MoveNext wend Комментарий Поиск с постраничной выдачей результатов реализован с использбванием управ- ляющего объекта LDAP. Такие объекты определены в спецификации RFC 2251, а объект pagedResul tsControl, с помощью которого выполняется поиск с постра- ничной выдачей результатов, — в документе RFC 2696. Управляющие объекты
4.8. Поиск по значениям составных атрибутов 135 представляют собой расширения LDAP, не встроенные непосредственно в протокол, и поэтому не все поставщики служб каталогов обеспечивают их полную поддержку. ПРИМЕЧАНИЕ------------------------------------------------------- Модифицировав политику запросов LDAP, в Active Directory можно изменить размер страницы, уста- новленный по умолчанию. Более подробную информацию по данному вопросу вы сможете найти в рецепте 4.23. Если потребуется выполнить поиск сотен тысяч объектов, имейте в виду, что даже при постраничном возврате результатов вы получите от Active Directory не более 262 144 объектов. Это значение определено в политике запросов LDAP и подобно максимальному размеру страницы может быть изменено (см. рецепт 4.23). К решению с помощью графического пользовательского интерфейса При использовании программы LDP для вывода большого количества объектов следует иметь в виду, что по умолчанию на правой панели отображается только 2048 строк. Их число можно изменить — достаточно лишь выбрать команду Opti- ons ► General (Параметры ► Общие) и в области Buffer Size (Размер буфера) ввести в поле Line Value (Число строк) большее значение. К решению с помощью интерфейса командной строки Единственным отличием этого решения от предлагаемого в рецепте 4.5 является использование параметра - limit 0. Если данный параметр установлен в 0, вклю- чается постраничный возврат результатов, но если он вовсе не задан, команда dsquery возвращает максимум 100 объектов. К решению с помощью сценария на языке VBScript Чтобы получить возможность выполнять посредством ADO поиск с постраничным выводом результатов, нужно создать экземпляр ADO-объекта Command. Он позво- ляет установить разнообразные свойства запроса, включая максимальный размер результирующего набора строк, ограничение по времени и размер страницы. Полный список свойств запроса вы найдете в справочной системе MSDN. Смотрите также В рецепте 4.5 речь идет о выполнении поиска объектов, в рецепте 4.23 — о просмотре заданной по умолчанию политики LDAP. Кроме того, ознакомьтесь с докумен- тами RFC 2251 (Lightweight Directory Access Protocol (v3)), RFC 2696 (LDAP Control Extension for Simple Paged Results Manipulation) и MSDN: Searching with ActiveX Data Objects (ADO). 4.8. Поиск по значениям составных атрибутов Проблема Требуется запросить из каталога значения составных атрибутов заданных объектов. В данном рецепте показано, как сделать это за один запрос, тогда как описанный выше метод требует выполнения нескольких запросов.
136 Глава 4. Объекты и операции над ними Решение1 С помощью графического пользовательского интерфейса 1. Выполнив действия, описанные в рецепте 4.3, выберите управляющий объект LDAP. 2. Затем выберите объект Attribute Scoped Query (заметьте, что в программе LDP для Windows Server 2003 объекты можно выбирать по именам). В программе LDP для Windows 2000 задайте OID объекта — 1.2.840.113556 1.4 1504. 3. В поле Value (Значение) введите имя составного атрибута (например, member). 4. Щелкните на кнопке Check in (Подтверждение). 5. Щелкните на кнопке ОК. 6. Выполните команду Browse ► Search (Поиск ► Найти). 7. В поле BaseDN (Отличительное имя базы) введите отличительное имя объекта, содержащего требуемый атрибут. 8. Активизируйте переключатель Base (База) в области Scope (Область поиска), 9. В поле Filter (Фильтр) введите спецификацию фильтра LDAP для отбора объек- тов, входящих в состав заданного атрибута. 10. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки На момент выхода этой книги ни одна из команд не поддерживала поиск составных атрибутов. С помощью сценария на языке VBScript На момент выхода этой книги поиск составных атрибутов не поддерживался ни в ADSI, ни в ADO, ни в VBScript. При выполнении поиска посредством ADO для установки параметров можно использовать свойство ADSI Flags объекта Connection, но задать значения атрибутов для отбора объектов невозможно. Комментарий Если при работе с объектом group вам потребуется найти заданное подмножество членов группы, выделив его по значениям определенных атрибутов, или же извлечь для каждого из членов подмножество атрибутов, сделать это будет непросто. Придется сначала посредством запроса получить полный список членов группы, а затем с помощью отдельных запросов извлечь требуемое подмножество атрибу- тов для каждого интересующего вас члена группы. В Windows Server 2003 появи- лась возможность выполнения данной задачи (то есть получения подмножества объектов или подмножества их атрибутов) с применением единственного запроса. Рассмотрим параметры поиска LDAP, используемые в таких запросах. 1 Данный рецепт можно использовать при условии, что функциональный уровень леса соответствует Windows Server 2003.
4.9. Поиск с помощью поразрядного фильтра 137 О Value (Значение) — значение управляющего объекта Attribute Scoped Query (составной атрибут, который содержит отличительные имена искомых объек- тов, например атрибут member). О Base DN (Отличительное имя базы) — отличительное имя объекта, содержаще- го составной атрибут (в частности, cn=Doma1n Admlns.cn“users.dc=rallencorp, dc-com). О Scope (Область поиска) — этому параметру присваивается значение Base. О Filter (Фильтр) — фильтр для отбора объектов, заданных в первом параметре. Например, фильтр (&(objectclass=user)(objectcategory-Person)) соответствует всем объектам user, которые имеются в составе объекта, заданного в парамет- ре Base ON. Использовать можно и любые другие атрибуты объектов. А фильтр (&(objectcl ass-user)(objectcategory-Person) (department-Sal es)) соответствует всем объектам user, у которых атрибут department имеет значение "Sales". О Attributes (Атрибуты) — список возвращаемых атрибутов тех объектов, которые соответствуют заданному критерию отбора. Смотрите также Документы MSDN: Performing an Attribute Scoped Query и MSDN: Searching with ActiveX Data Objects (ADO). 4.9. Поиск с помощью поразрядного фильтра Проблема Необходимо при помощи поразрядного фильтра найти атрибут, содержащий за- данный битовый флаг. Решение С помощью графического пользовательского интерфейса 1. Следуя указаниям, приведенным в рецепте 4.5, задайте параметры поиска нужных объектов. 2. В поле Filter (Фильтр) введите выражение с поразрядным сравнением, подоб- ное следующему, предназначенному для поиска всех универсальных групп: (&(objectcl ass-group)(objectCategory-group)(groupType:1.2 840,113556.1.4.804:=8)) 3. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки Приведенный ниже запрос, в котором используется фильтр 0R, возвращает список универсальных групп: > dsquery * cn-users.dc-rallencorp,dc-com -scope subtree -attr "name" -filterj "(&(objectclass-group)(objectCategory-group)(groupType:1.2.840.113556.1.4.804:-8) )"
138 Глава 4. Объекты и операции над ними Следующий запрос предназначен для поиска отключенных учетных записей пользователей с применением поразрядного фильтра AND: > dsquery * cn-users.dc«rallencorp.dc-com -attr name -scope subtree -filter "(&(objectclass-user)(objectcategory=person)(useraccountcontrol:1.2.840.113556.1.4. J 803.-514))" С помощью сценария на языке VBScript ' Следующий код возвращает все отключенные учетные записи пользователей strBase - "<LDAP: Псп-users.dc=ra 11 encorp, dc-com>;" strFilter - ”(&(objectclass-!user)(objectcategory=person)" & _ ’(useraccountcontrol:1.2.840.113556.1.4.803:-514));“ strAttrs - "name;" strScope - "subtree" set objConn - CreateObjectC'ADODB.Connect!on") objConn.Provider - "ADsDSOObject" objConn Open "Active Directory Provider" set objRS - objConn.Execute(strBase & strFilter & strAttrs & strScope) objRS.MoveFirst while Not objRS.EOF Wscript.Echo objRS.F i elds(0).Va 1 ue objRS.MoveNext wend Комментарий В Active Directory часто используются атрибуты, содержащие битовые флаги, что позволяет объединить в одном атрибуте несколько свойств объекта Например, атрибут groupType объекта group представляет собой набор битовых флагов, опре- деляющих область действия и тип группы. Атрибут userAccountControl объектов user и computer содержит множество свойств, включая состояние учетной записи (включена или отключена), признаки ее блокировки, наличия пароля, аутенти- фикации при помощи смарт-карты и т. д У объекта attributeschema имеются атрибуты searchFlags и systemFlags, которые определяют, был ли атрибут сформи- рован, проиндексирован и включен в каталог службы ANR (Ambiguous Name Re- solution — разрешение неоднозначных имен). При поиске объектов по значениям подобных атрибутов следует использо- вать побитовые фильтры. Существует два типа таких фильтров: в одном из них применяется логическая операция AND, а в другом — OR. В фильтре эти операции реализованы в виде так называемого правила соответствия. Правило соответст- вия указывает серверу LDAP (в данном случае контроллеру домена), как нужно интерпретировать компоненты фильтра. Например: (userAccountControl•1 2 840.113556.1.4 803:-514) Правило соответствия имеет следующий формат: (.имя_дтрибута:ОЮ-правила_соотвегствия -значение). Как уже упоминалось выше, существует два правила соответствия с различ- ными идентификаторами OID. Логической операции AND соответствует OID 1.2.840.113556.1.4.803, а операции OR - OID 1.2.840.113556.1,4 804. Оба иденти- фикатора указывают серверу, как следует интерпретировать выражение фильтра.
4.9. Поиск с помощью поразрядного фильтра 139 Фильтр OR возвращает значение TRUE, если совпадают хотя бы один бит атрибута и значения а фильтр AND — если совпадают все биты атрибута и значения. Рассмотрим такой пример. Для создания учетной записи рядового пользователя нужно присвоить атрибуту userAccountControl значение 514. Это число — резуль- тат сложения флага обычной учетной записи 512 с флагом «отключена», то есть 2 (512 + 2 - 514). Если использовать следующее выражение фильтрации на основе операции OR со значение 514: (useraccountcontrol:! 2 840.113556.1.4.804:-514) будут возвращены все учетные записи обычных пользователей (флаг 512), а так- же отключенные учетные записи (флаг 2). В число последних входят не только от- ключенные записи пользователей, но и отключенные записи компьютеров, по- скольку и у тех и у других присутствует флаг 2. Одним из преимуществ поразрядных правил соответствия является то, что они позволяют объединить в одном фильтре несколько операций сравнения Так, приведенное выше выражение фильтрации можно было бы записать следующим образом: (|(useraccountcontrol:1.2.840.113556.1.4.804:-2) (useraccountcontrol:1.2.840.113556.1.4.804:-512)) Как и в предыдущем случае, этот фильтр служит для отбора объектов, у кото- рых атрибут userAccountControl содержит флаг 2 либо 512 (или оба флага) Операция OR действует аналогичным образом, но требует соответствия всех битов сравниваемых значений. Если в предыдущем примере применить ее вместо операции OR: (useraccountcontrol:1.2 840.113556.1.4.803 =514) будет возвращен только список отключенных учетных записей пользователей, но не компьютеров. Тот же фильтр можно составить из двух выражений сравнения, воспользовавшись оператором &: (&(useraccountcontrol:1.2.840.113556.1.4.803:-2) (useraccountcontrol:1.2 840.113556.1.4.803.-512)) Важно отметить, что при сравнении однобитовых значений поразрядные опе- рации AND и OR возвращают один и тот же результат. Следовательно, для нахожде- ния всех учетных записей обычных пользователей нужно отобрать объекты, в ко- торых установлен только флаг 512, что можно выполнить с помощью любого из следующих фильтров: (useraccountcontrol 1.2.840.113556.1.4.803:-512) (useraccountcontrol 1.2.840.113556.1.4.804 -512) Смотрите также Документы MSDN: Enumerating Groups by Scope or Type in a Domain, MSDN. Determining Which Properties Are Non-Replicated, Constructed, Global Catalog, and Indexed и MS KB 305144 (How to Use the UserAccountControl Flags to Manipulate User Account Properties).
Глава 4. Объекты и операции над ними 4.10. Создание объекта Проблема Требуется создать в каталоге Active Directory новый объект. Решение Каждое из приведенных ниже решений демонстрируется на примере добавления в каталог объекта user, представляющего пользователя. Модифицируйте эти при- меры, указав класс и атрибуты, которые хотите создать. С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Если имя контекста именования, который вы хотите просмотреть, не выведено на экран, щелкните правой кнопкой мыши на элементе ADSI Edit, расположен- ном на правой панели и в открывшемся контекстном меню выберите команду Connect to (Подключиться к). Укажите, в каком контексте именования — кон- тейнере или подразделении — находится объект. Если нужно ввести другое имя пользователя и пароль, щелкните на кнопке Advanced (Дополнительно). 3. На левой панели откройте контейнер или подразделение, куда следует добавить объект. Затем щелкните на нем правой кнопкой мыши и в открывшемся кон- текстном меню выберите команду New ► Object (Создать ► Объект). 4. В списке Select a Class (Выберите класс) отметьте элемент user. 5. В поле сп (обычное имя) введите j smi th и щелкните на кнопке Next (Далее). 6. В поле sAMAccountName (имя учетной записи SAM) введите jsmith и щелкните на кнопке Next (Далее). 7. Щелкните на кнопке More Attributes (Дополнительные атрибуты), чтобы вве- сти дополнительные атрибуты. 8. Щелкните на кнопке Finish (Готово). С помощью интерфейса командной строки Создайте LDIF-файл с именем create_object.ldf и следующим содержимым: dn: cn-jsmith.cn-users.dc-ra11encorp.dc-com changetype: add objectclass: user samaccountname: jsmith Затем выполните команду: > Idifde -v -1 -f create_object.ldf Если потребуется добавить несколько объектов, можете воспользоваться утили- той dsadd. Чтобы ознакомиться с ее синтаксисом, запустите утилиту так: dsadd /?. С помощью сценария на языке VBScript set objUsersCont - GetObject(LDAP://cn-users.dc-rallencorp.dc-com”) set objUser - objUsersCont.Create("user", "CN-jsmith") objUser.Put "sAKAccountName". "jsmith" ’ mandatory attribute objUser.Setinfo
4.10. Создание объекта 141 Комментарий Для создания объекта в Active Directory необходимо задать класс объекта, относи- тельное отличительное имя (RDN) и другие обязательные атрибуты, значения которых система не устанавливает автоматически. Часть атрибутов, в том числе objectGUID, instanceType и objectcategory, Active Directory устанавливает сама. В нашем примере классом объекта, как вы понимаете, является user, отличи- тельным именем — jsmith, а единственным необходимым атрибутом, который нуж- но установить, — sAMAccountName. Следует отметить, что в исходном состоянии наш новый объект user нельзя будет использовать, поскольку по умолчанию он отключен и не имеет пароля, но в данном случае для нас это неважно. К решению с помощью графического пользовательского интерфейса Для создания объекта в рассматриваемом нами примере могут использоваться и другие средства, в частности оснастка Active Directory Users and Computers (Active Directory — пользователи и компьютеры), но мы выбрали универсальный редак- тор объектов ADSI Edit. Единственным атрибутом, который нельзя установить с помощью этого ре- дактора, является пароль (unicodePwd). Он хранится в двоичном представлении и не подлежит непосредственному редактированию. Чтобы задать пароль пользо- вателя при помощи пользовательского интерфейса, можно обратиться к указан- ной оснастке. К решению с помощью интерфейса командной строки Об утилите Idifde подробнее рассказано в рецепте 4.25. С помощью утилиты dsadd можно не только создать объект, но и установить его атрибуты. Однако на момент выхода настоящей книги данная утилита позволяла создать лишь несколько типов объектов: computer, contact, group, ou, quota и user. К решению с помощью сценария на языке VBScript При создании объекта первым делом следует вызвать метод GetObject, который позволяет получить ссылку на родительский контейнер объекта. После этого вы- полняется вызов метода Create, и в качестве параметров ему передаются класс но- вого объекта, а также его относительное отличительное имя. Затем с помощью метода Put устанавливается значение атрибута sAMAccountName. А в завершение из- менения сохраняются с помощью метода Set Info. Если не вызвать метод Set Info, новый объект не будет сохранен на контроллере домена. Смотрите также В рецепте 4.25 рассказывается об импортировании объектов с использованием LDIF. Кроме того, ознакомьтесь с документами MSDN: lADsContainer: GetOb- ject, MSDN: IADsContainer::Create, MSDN: IADs::Put и MSDN: IADs::SetInfo.
142 Глава 4. Объекты и операции над ними 4.11. Изменение значений атрибутов объекта Проблема Необходимо изменить значения одного или нескольких атрибутов объекта. Решение В приведенных далее вариантах устанавливается значение атрибута sn (фами- лия) объекта user, имеющего имя jsmith С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit 2. Если имя контекста именования который вы хотите просмотреть, не выведено на экран, щелкните правой кнопкой мыши на элементе ADSI Edit, расположенном на правой панели и в открывшемся контекстном меню выберите команду Con- nect to (Подключиться к) После этого укажите, в каком контексте именова- ния - контейнере или подразделении — находится объект. Если же нужно ввести другие имя пользователя и пароль, щелкните на кнопке Advanced (До- полнительно) 3 На левой панели откройте контейнер или подразделение, содержащее моди- фицируемый объект. Найдя объект, щелкните на нем правой кнопкой мыши и выберите в открывшемся контекстном меню команду Properties (Свойства) 4. Выберите для редактирования атрибут sn. 5. Введите имя Sml th и щелкните на кнопке ОК. 6 Щелкните на кнопке Apply (Применить). С помощью интерфейса командной строки Создайте LDIF-файл с именем modify_object Idf и следующим содержимым: dn: cn-jsmith,cn-users,dc-ra 11 encorp.dc*=com changetype: modify add: givenName givenName: Jim Затем выполните команду: > Idifde -v -1 -f modify_object.Idf Если потребуется модифицировать несколько объектов, воспользуйтесь ко- мандой dsmod. Чтобы ознакомиться с ее синтаксисом, запустите команду так: dsmod /?.‘ С помощью сценария на языке VBScript strObjectDN *= "cn*=jsmith. cn-users dc-rallencorp.dc-com" set objUser - GetObjectCLDAP://" & strObjectDN) objUser Put "sn". "Smith" objUser.SetInfo
4.11. Изменение значений атрибутов объекта 143 Комментарий К решению с помощью графического пользовательского интерфейса Если в родительском контейнере объекта, который вы собрались модифицировать, содержится много объектов, возможно, вы захотите создать подключение к этому объекту, что гораздо проще сделать, чем просмотреть весь контейнер. Для этого нужно щелкнуть правой кнопкой мыши на элементе ADSI Edit и в контекстном меню задать команду Connect to (Подключиться к), после чего в области Connection Point (Точка подключения) установить переключатель в положение Select or type Distinguished Name or naming context (Выберите или введите отличительное имя или контекст именования) и ввести отличительное имя объекта. К решению с помощью интерфейса командной строки Об утилите Idifde подробнее рассказано в рецепте 4.25. Утилита dsmod на момент выхода этой книги позволяла модифицировать лишь несколько типов объектов: computer, contact, group, ou, quota и user. К решению с помощью сценария на языке VBScript Если вам потребуется выполнить более сложные действия, чем обыкновенное присваивание (замена значения атрибута), воспользуйтесь вместо Put методом PutEx. Он является более гибким средством и позволяет присваивать несколько значений, удалять заданные значения и добавлять одно значение в конец другого. У метода PutEx три параметра: флаг обновления, имя атрибута и массив зна- чений. Флаги обновления определены в списке ADS_PROPERTY_OPERATION_ENl!M и опи- саны в табл. 4.3. Изменения нужно сохранить с помощью метода Set Info. Если его не вызвать, они не будут сохранены на контроллере домена. Таблица 4.3. Перечисление ADS_PROPERTY_OPERATION_ENUM Имя Значение Описание ADS_PROPERTY_CLEAR 1 Удаление всех значений атрибута ADS_PROPERTY_UPDATE 2 Замена текущих значений атрибута заданными ADS_PROPERTY_APPEND 3 Добавление заданных значений к набору существующих значений атрибута ADS_PROPERTY_DELETE 4 Удаление заданных значений атрибута В следующем примере при установке атрибута otherTel ephone по очереди ис- пользуются все четыре флага: strObjectDN - "cn«jsm1th,cn=users.dc=rallencorp.dc-com" const ADS_PROPERTY_CLEAR - 1 const ADS_PROPERTY_UPDATE - 2 const ADS PROPERTY APPEND - 3 const ADS_PROPERTY2DELETE - 4 set objUser - GetObjectCLDAP://'' & strObjectDN)
144 Глава 4. Объекты и операции над ними ' Добавление двух значений objUser.PutEx ADS PROPERTY APPEND. "otherTelephone". _ Array("555-1212". "555-1213") objUser.Setinfo * Теперь otherTelephone - 555-1212. 555-1213 ‘ Удаление одного из значений objUser.PutEx ADS_PROPERTY_DELETE. "otherTelephone". Array!"555-1213") objUser.SetInfo * Теперь otherTelephone 555-1212 * Изменение значений objUser.PutEx ADS_PROPERTY_UPDATE. "otherTelephone". Array("555-1214") objUser.Setinfo ' Теперь otherTelephone 555-1214 ’ Очистка атрибу a objUser.PutEx ADS_PROPERTY_CLEAR. "otherTelephone". vbNullString objUser.SetInfo ' Теперь otherTelephone - <nycr> Смотрите также Документы MSDN: IADs::Put, MSDN: IADs::PutEx, MSDN: IADs.;SetInfo и MSDN: ADS_PROPERTY_OPERATION_ENUM. 4.12. Изменение значения атрибута, содержащего битовые флаги Проблема Требуется изменить значение атрибута, содержащего битовый флаг. Решение С помощью сценария на языке VBScript 1 Этот код изменяет значение атрибута, содержащего битовый флаг ' .... SCRIPT CONFIGURATION ... strObject - *<ОИ_обьекта>‘' ‘ Например cn-jsm1th.cn-users dc-ra?lencorp.dc-com strAttr - "<имя атрибута>" ' Например: rallencorp-UserProperties boolEnableBit ~~<TRUE_nnn_FALSE> ' Например: FALSE 1ntB1t - <битовое значение? ' Например- 16 ‘ .... END CONFIGURATION ...... set objObject - GetObjectC’LDAP://" & strObject) IntBitsOrig - objObject Get(strAttr) IntBitsCalc - CalcBit(1ntBits0r1g, intBit, boolEnableBit) if IntBitsOrig о IntBitsCalc then objObject.Put strAttr. IntBitsCalc objObject Setinfo WScrlpt.Echo "Changed " & strAttr & " from " & IntBitsOrig & " to " & IntBitsCalc else WScrlpt.Echo “Did not need to change " & strAttr & " (" & IntBitsOrig & ")" end if Function CalcB1t(intValue. intBlt. boolEnable)
4.12. Изменение значения атрибута, содержащего битовые флаги 145 CalcBit - intValue if bool Enable - TRUE then CalcBit - intValue Or intBit else 1f IntValue And IntBit then CalcBit - intValue Xor intBit end if end if End Function Комментарий В рецепте 4.9 показано, как осуществляется поиск объектов по значениям атрибу- та, содержащего битовые флаги которые используются для объединения в одном атрибуте нескольких свойств объекта. Напомним, что поразрядная логическая операция OR применяется в тех случаях, когда требуется найти объекты, в кото- рых установлен хотя бы один из заданных флагов атрибута, а операция AND служит для поиска объектов, в которых установлены все заданные флаги. При установке флага атрибута нужно соблюдать особую осторожность, чтобы случайно не изме- нить значения других флагов. Рассмотрим пример. Компания RAllenCorp хочет хранить, разумеется в секрете, некоторую не совсем корректную информацию о своих пользователях (например возраст и комплекция пользователя, размер его ноги). Чтобы не создавать атрибуты с имена вроде rallencorp-UserHasBigFeet, из которых нетрудно догадаться об их назначении, все такие атрибуты можно зако- дировать в виде флагов в единственном атрибуте rallencorp-UserProperties. 1 - пользователь толст 2 - пользователь очень высок 4 - у пользователя большой размер ноги 8 - пользователь очень стар Дополнив схему новым атрибутом, администратор решил внести соответст- вующие данные для всех пользователей. Для этого ему достаточно объединить с помощью поразрядной операции OR значения всех четырех свойств. Так, чтобы задать для пользователя jsmith установки 4 и 8, свойству rallencorp-UserProperties объекта jsmith нужно присвоить значение 12. Пока все просто - проблема возник- нет, когда потребуется изменить это значение. Предположим, позднее выяснится, что пользователь jsmith имеет рост 2,02 м, поэтому нужно установить для него в атрибуте rallencorp-UserProperties бит 2. Если этот бит уже установлен, ничего делать не нужно, если же нет — его следует установить с помощью логической опе- рации 0R 2. Простое присваивание атрибуту rallencorp-UserProperties значения 2 не даст нужного результата, поскольку при этом будут изменены другие его биты. В сценарии на языке VBScript новое значение можно вычислить посредством функции CalcBit: IntBitsCalc - CalcB1t(1ntBitsOrig, 2, TRUE) Результат будет равен 14 (12 OR 2). Этими же рассуждениями следует руковод- ствоваться и при очистке бита, с той лишь разницей, что в данном случае будет использоваться логический оператор XOR.
146 Глава 4. Объекты и операции над ними В Active Directory определено множество атрибутов, состоящих из битовых флагов. Наиболее часто применяемыми среди них являются options (присутст- вующий в нескольких разных объектных классах) и userAccountControl класса user. Следует еще раз подчеркнуть, что при их установке требуется быть очень внима- тельным. Лучше всего использовать приведенный в данном рецепте сценарий, вычисляющий новое значение на основе исходного. Смотрите также В рецепте 4.9 рассказывается о том, как выполнить поиск с применением пораз- рядного фильтра. .13. Динамическое связывание пользовательских классов Проблема Необходимо выполнить динамическое связывание пользовательского класса с су- ществующим экземпляром объекта. Решение1 Данная проблема рассматривается на примере пользовательского класса rallen- corp-SaleslIser и объекта user с именем jsmith. С помощью графического пользовательского интерфейса 1. Выполните действия, указанные в рецепте 4.11. 2. Выберите для редактирования атрибут objectClass. 3. В поле Value to add (Добавляемое значение) введите rallencorp-SalesUser. 4. Щелкните на кнопке Add (Добавить). 5. Дважды щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем dynamically_link_dass.ldf и следующим содержимым: dn: cn-jsmith.cn-users,dc=ral1encorp.dc-com changetype: modify add: objectclass objectClass: rallencorp-SalesUser 1 Выполнение действий, описанных в этом рецепте, возможно лишь при условии, что функциональ- ный уровень леса соответствует Windows Server 2003.
4.14. Создание динамического объекта 147 после чего выполните команду: > Idifde -v -1 -f dynamically_link_class.ldf С помощью сценария на языке VBScript const ADS_PROPERTY_APPEND - 3 set objUser = GetObject("LDAP://cn-jsmith.cn-users.dc-rallencorp,dc-com") objUser.PutEx ADS_PROPERTY_APPEND."objectClass".Array("rallencorp-SalesUser") objUser.Setinfo Комментарий Динамическое связывание пользовательского класса с объектом является про- стейшим способом применения новых атрибутов без изменения определения клас- са объекта в схеме. В Windows 2000 пользовательские классы можно было связы- вать со схемой только статически. С выходом Windows Server 2003 появилась возможность динамического связывания - путем добавления имени пользователь- ского класса в атрибут objectClass существующего объекта. Динамическое связывание станет хорошим выбором, например, в том случае, когда несколько подразделений компании, поддерживающих собственные объек- ты user, захотят добавить в класс user новые атрибуты. В Windows 2000 каждому подразделению в подобной ситуации приходилось создавать в схеме собственные атрибуты и новый пользовательский класс, а затем модифицировать класс user путем включения в него нового класса. Если эту операцию выполнят 10 подраз- делений, в объектах user окажется множество новых атрибутов, преобладающая часть из которых будет применяться лишь в одном подразделении. В Windows Server 2003 атрибуты и класс можно создать для каждого подразделения, а затем динамически связать любой класс с теми объектами, для которых эти атрибуты понадобятся. При этом класс user останется без изменений. Однако следует отметить, что интенсивное применение динамического свя- зывания пользовательских классов приводит к определенным проблемам. Если в нескольких группах применяются разные пользовательские классы, трудно предсказать, какие атрибуты будет содержать конкретный объект user. В конечном счете, в каталоге окажется множество разновидностей класса user. Поэтому ис- пользование динамического связывания должно быть строго регламентировано. Смотрите также О модификации объектов рассказывается в рецепте 4.11. 4.14. Создание динамического объекта Проблема Требуется создать объект, который будет автоматически удален спустя опреде- ленное время после последнего обновления.
148 Глава 4. Объекты и операции над ними Решение1 С помощью графического пользовательского интерфейса На момент выхода этой книги ни ADSI Edit, ни LDP не позволяли создавать динами- ческие объекты. С помощью интерфейса командной строки Создайте LDIF-файл с именем create_dynamic_object.ldf и следующим содержимым: dn: ел-jsrnith.cn-users.dc-ral1encorp.dc-com changetype: add objectclass.- user objectClass: dynami cObject entryTTL: 1800 sAMAccountName: jsmith Затем выполните команду: > Idifde -v -i -f create_dynam1c_object.ldf С помощью сценария на языке VBScript ’ Этот код создает динамический объект user, имеющий время жизни 30 мин (1800 с) set objUsersCont - GetObjectCLDAP://cn-users.dc-rallencorp.dc-com") set objUser - objUsersCont.CreateCuser". "CN-jsmith") objUser.Put “objectclass", "dynamicobject" objUser.Put “entryTTL". 1800 objUser.Put "sAMAccountName", "jsmith" ’ mandatory attribute objUser.Setinfo Комментарий Возможность создания динамических объектов появилась только в Windows Ser- ver 2003. Чтобы создать такой объект, нужно в дополнение к имени его базового класса записать в атрибут objectclass значение dynamicobject. Кроме того, можно присвоить атрибуту entryTTL значение, определяющее количество секунд, по про- шествии которых он будет автоматически удален, если, конечно, вы за это время его не обновите. Этот срок называется временем жизни объекта (Time То Live, TTL). Если его не указать, будет действовать установка, заданная в атрибуте dyna- mi cObjectDefaultTTL, которая определяется на уровне домена. Значение атрибута entryTTL не может быть меньше значения атрибута dynamicObjectDefaultTTL. Более под- робно о том, как просматривать и модифицировать данные атрибуты, рассказано в рецепте 4.16. У динамических объектов имеется несколько особенностей: О статический объект нельзя превратить в динамический; объект должен быть помечен как динамический при создании; О динамические объекты нельзя создавать в контекстах именования конфигу- рации и схемы; 1 Выполнение действий, описанных в этом рецепте, возможно лишь при условии, что функциональ- ный уровень леса соответствует Windows Server 2003.
4.15. Обновление динамического объекта 14У О удаление динамического объекта не означает его захоронения — такой объект удаляется сразу; О динамические объекты, представляющие собой контейнеры, не могут содержать статических дочерних объектов. Смотрите также В рецепте 4.15 рассказывается, как выполнить обновление динамического объекта, а в рецепте 4.16 — как изменить установленные по умолчанию значения атрибу- тов этого объекта. 4.15. Обновление динамического объекта Проблема Нужно обновить динамический объект, с тем чтобы предотвратить его автомати- ческое удаление системой Active Directory. Решение Приведенные ниже решения демонстрируются на примере объекта user. Моди- фицируйте их и обновите собственный объект. С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя домена или контроллера домена либо оставь- те данное поле пустым — в таком случае связь устанавливается с использова- нием произвольного сервера. 4. В поле Port (Порт) введите значение 389. 5. Щелкните на кнопке ОК. 6. Выполните команду Connection ► Bind (Подключение ► Связать). 7. Введите имя и пароль пользователя. 8. Щелкните на кнопке ОК. 9. Выберите команду Browse ► Modify (Поиск ► Изменить). 10. В поле Dn (Отличительное имя) введите отличительное имя объекта, кото- рый вы решили обновить. 11. В поле Attribute (Атрибут) введите entryTTL. 12. В поле Values (Значения) укажите новое время жизни объекта (в секундах). 13. Из списка Operation (Операция) выберите элемент Replace (Заменить). 14. Нажмите клавишу Enter. 15. Щелкните на кнопке Run (Выполнить).
150 ьт Глава 4. Объекты и операции над ними С помощью интерфейса командной строки Создайте LDIF-файл refresh_dynam c_object.ldf со следующим содержимым: dn: сп-jsmith.cn-users.dc-ral1encorp,dc-com changetype: modify replace: entryTTL entryTTL: 1800 Затем выполните такую команду: > Idifde -v -1 -f refresh_dynamic_object.ldf С помощью сценария на языке VBScript set objUser - GetObject("LDAP.//cn-jsmith.cn=users.dc-rallencorp.dc-com") objUser.Put "entryTTL". "1800" objUser Setinfo Комментарий Время жизни объекта хранится в его атрибуте entryTTL, значение которого посто- янно уменьшается, пока не достигнет нуля, после чего объект автоматически уда- ляется. Прочитав значение этого атрибута, вы узнаете, сколько секунд осталось до момента удаления объекта Для того чтобы предотвратить удаление в указан- ный срок, достаточно просто обновить объект, то есть присвоить его атрибуту entryTTL другое значение. Обновление объекта можно производить сколько угодно раз, и пока значение его атрибута entryTTL больше нуля, объект остается в каталоге Active Directory. Смотрите также В рецепте 4.11 рассказывается о модификации объекта, а в рецепте 414 — о созда- нии динамического объекта. 4.16. Изменение задаваемого по умолчанию времени жизни динамических объектов Проблема Требуется изменить минимальное и задаваемое по умолчанию время жизни ди- намических объектов. Решение1 В приведенных ниже решениях атрибуту DynamicObjectDefaultTTL присваивается значение 172800 Изменение значения атрибута DynamicObjectMinTTL производится’ аналогичным образом. 1 Использование данного рецепта возможно лишь при условии, что функциональный уровень леса соответствует Windows Server 2003.
4.16. Изменение времени жизни динамических объектов 151 С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Если на экране отсутствует элемент, соответствующий контексту конфигура- ции, щелкните правой кнопкой мыши на элементе ADSI Edit, расположенном на правой панели, и в открывшемся контекстном меню выберите команду Connect to (Подключиться к). Укажите требуемый контекст именования; если нужно ввести другие имя пользователя и пароль, щелкните на кнопке Advan- ced (Дополнительно). 3. На левой панели разверните следующие контейнеры раздела конфигурации: Services (Службы), Windows NT, затем Directory Service (Служба каталогов). 4. Щелкните правой кнопкой мыши на контейнере cn=Directory Service и выбери- те в открывшемся контекстном меню команду Properties (Свойства). 5. Выберите для редактирования атрибут msDS-Other-Settings. 6. Щелкните на элементе Вупатгс0Ь]ес10еГаи1Гт=<время_жизни_динамических_ объекгов>, затем на кнопке Remove (Удалить). В поле Value to add (Добавляе- мое значение) должны появиться атрибут и значение. 7. Введите значение 172800. 8. Щелкните на кнопке Add (Добавить). 9. Дважды щелкните на кнопке ОК. С помощью интерфейса командной строки Следующая команда ntdsuti 1 производит подключение к контроллеру домена <иня_контроллерд_домена>, выводит текущие установки времени жизни объектов, присваивает атрибуту DynanricObjectDefaultTTL значение 172800, сохраняет измене- нця и выводит результаты: > ntdsutil "config settings" connections "connect to server <имя_коитроллерд_ромена>" q J "show values" "set DynamicObjectDefaultTTL to 172800" "commit changes" "show values" q q С помощью сценария на языке VBScript * Этот код изменяет используемые по умолучанию установки ' времени жизни для динамических объектов леса 1 ----- SCRIPT CONFIGURATION ---- strNewValue - 172800 ' Если нужно изменить значение атрибута DynamicObjectMinTTL. ' укажите его иня вместо имени DynamicObjectDefaultTTL: strTTLSetting - ’DynamicObjectDefaultTTL" ' -----END CONFIGURATION......— const ADS_PROPERTY_APPEND - 3 const ADS_PROPERTY_DELETE = 4 set objRootDSE - GetObjectC"LDAP://RootDSE") set objDS » GetObjectC"LDAP://CN-Directory Service,CN=Windows NT." & _ "CN-Services.CN-Configuration." & _ objRootDSE.Get("rootDomai nNamlngContext") for each strVal 1n objDS.Get("msDS-Other-Settings") Set objRegEx - New RegExp
152 Глава 4. Объекты и операции над ними objRegEx.Pattern - strTTLSetting & objRegEx.IgnoreCase = True Set colMatches - objRegEx.ExecuteCstrVal) For Each objMatch in colMatches Wscript.Echo "Deleting ” & strVal objDS.PutEx ADS_PROPERTY_DELETE. "msDS-Other-Settings". Array(strVal) objDS.SetInfo Next Next Wscript.Echo "Setting " & strTTLSetting & & strNewValue ObjDS.PutEx ADS_PROPERTY_APPEND. _ "msDS-Other-Settings”. ArrayCstrTTLSetting & & strNewValue) objDS.Setlnfo Комментарий Поведение динамических объектов зависит от значений двух конфигурационных параметров: О dynamicObjectDefaultTTL — устанавливаемое по умолчанию время жизни дина- мических объектов, если при их создании явно не задано другое значение ат- рибута entryTTL; О dynami cObjectMi nTTL — минимальное время жизни, которое можно задавать для таких объектов. К сожалению, эти значения хранятся не в двух отдельных дискретных атри- бутах, а в одном атрибуте msDS-Other-Settings объекта cn=D1 rectory Services. cn-Win- dows NT,cn-Configyration,<ОИ_корня_леса> в форме так называемых утверждений атрибут-значение (Attribute-Value-Assertion, AV А). Такие утверждения иногда используются в составных атрибутах Active Directory, значения которых имеют форму ммя1=значение1,имя2~значение2 и т. д. Атрибутами AVA нельзя манипулировать, как обыкновенными атрибутами. Добавляемые или заменяемые значения должны иметь тот же формат, в каком были заданы исходные значения. К решению с помощью интерфейса командной строки Утилита ntdsuti 1 может использоваться в двух режимах: интерактивном, когда ее команды задаются поочередно, и пакетном, при котором они вводятся в виде со- ставной команды. К решению с помощью сценария на языке VBScript В связи с тем, что мы имеем дело с атрибутами типа AVA, сценарий VBScript по- лучился довольно сложным. Первая операция — получение указателя на объект Active Directory — проста, но далее нам нужно поочередно просмотреть значения атрибута mSDS-Other-Settings в поисках того, которое мы хотим изменить. Оно на- чинается с Dynami cObjectDefaultTTL=. Поскольку полного значения искомого атри- бута мы не знаем, вместо обычного сравнения приходится прибегать к помощи объекта RegExp, позволяющего сравнить каждое выражение, входящее в состав атри- бута mSDS-Other-Settings, с выражением Dynami cObjectDefaultTTL-. Найдя соответ-
4.17. Перемещение объекта в другое подразделение или контейнер 153 ствие, мы удаляем данное значение, не затрагивая остальных, а затем с помощью метода PutEx добавляем новую установку. Смотрите также В рецепте 4.11 рассказывается об изменении значений атрибутов объекта. Кроме того, просмотрите документ MSDN: Regular Expression (RegExp) Object. 4.17. Перемещение объекта в другое подразделение или контейнер Проблема Требуется переместить объект в другое подразделение или контейнер. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Если имя контекста именования, который вы хотите просмотреть, не выведе- но на экран, щелкните правой кнопкой мыши на элементе ADSI Edit, располо- женном на правой панели, и в контекстном меню выберите команду Connect to (Подключиться к). Укажите, в каком контексте именования — контейнере или подразделении — находится объект; если нужно ввести другие имя пользовате- ля и пароль, щелкните на кнопке Advanced (Дополнительно). 3. На левой панели откройте нужный контейнер или подразделение, щелкните правой кнопкой мыши на объекте и в открывшемся контекстном меню выберите команду Move (Переместить). 4. Найдите новый контейнер объекта, выделите его и щелкните на кнопке ОК. С помощью интерфейса командной строки > dsmove "<0Иобьекта>” -newparent ~<ОИ_нового_контейнера>‘ С помощью сценария на языке VBScript ' Этот код перемещает объект в другое место в пределах домена ' ---- SCRIPT CONFIGURATION - strNewParentDN - "си№://<ОИ_нового_контейнера>" strObjectDN - "LDAP://cn-jsmith.<ОИ_старого_контейнера>" strObjectRDN - "cn-jsnrith" ' ---- END CONFIGURATION ---- set objCont - GetObject(strNewParentDN) objCont.MoveHere strObjectDN. strObjectRDN
154 Глава 4. Объекты и операции над ними Комментарий К решению с помощью графического пользовательского интерфейса Если родительский контейнер объекта, который вы хотите переместить, содержит много других объектов, вместо того чтобы искать объект, проще создать к нему подключение. Для этого нужно щелкнуть правой кнопкой мыши на элементе ADSI Edit и задать команду Connect to (Подключиться к), после чего в области Connection Point (Точка подключения) установить переключатель в положение Select or type Distinguished Name or naming context (Выберите или введите отличительное имя или контекст именования) и ввести отличительное имя объекта. К решению с помощью интерфейса командной строки Утилита dsmove в отличие от утилит dsadd и dsmod работает с объектами любого типа. Первым ее параметром является отличительное имя перемещаемого объекта, а вторым — отличительное имя его нового контейнера. Кроме того, воспользовав- шись ключом -s, можно указать сервер, на котором находится объект. К решению с помощью сценария на языке VBScript Принцип действия метода MoveHere не вполне очевиден, поэтому не будет лишним небольшое пояснение. Прежде всего для нового родительского контейнера необ- ходимо вызвать метод GetObject. Получив ссылку на представляющий его объект, вызываем для него метод MoveHere, задав в первом параметре значение атрибута ADsPath перемещаемого объекта, а во втором — отличительное имя этого объекта. Элемент cn-jsmith задается в параметрах метода MoveHere дважды, потому что указанный метод может использоваться не только для перемещения, но и для пе- реименования объектов (см. рецепт 4.19). Смотрите также Документы MS КВ 313066 (HOW ТО: Move Users, Groups, and Organizational Units Within a Domain in Windows 2000) и MSDN: IADsContainer::MoveHere. 4.18. Перемещение объекта в другой домен Проблема Требуется переместить объект в другой домен. Решение С помощью интерфейса командной строки > movetree /start Zs <исходный_контроллер_доиенд> /d <целевой_контроллер_домена^ /sdn л <ОИ_источника> /ddn <ОИ_прменника> В примере, представленном на следующей странице, объект cn=jsmith из доме- на amer.railencorp.com перемещается в домен emea.railencorp.com.
4.19. Переименование объекта 155 > movetree /start /s dc-amerl /d dc-emealJ /ddn cn-j smlth.cn-users.dc-amer.dc=ra11encorp.dc-comJ /sdn cn-jsmi th.cn-users.dc-emea.dc-ral1encorp.dc-com С помощью сценария на языке VBScript set objObject » GetObject("LDAP://TargetDC/TargetParentDN") objObject.MoveHere "LDAP://SourceDC/SourceDN". vbNullString В следующем примере объект cn=jsmith из домена amer.rallencorp.com переме- щается в домен emea.rallencorp.com: set objObject - GetObject(''LDAP://dc-amerl/cn-users.dc-amer.dc-ral1encorp.dc=com") objObject.MoveHere _ "LDAP://dc-emeal/cn-jsmith.cn-users.dc-emea.dc-ral1encorp.dc=com". vbNul1Stri ng Комментарий Перемещение объектов между разными доменами выполняется в соответствии с приведенными ниже правилами. О Пользователь, желающий переместить объекты, должен иметь разрешения на их изменение в родительских контейнерах обоих доменов. О Нужно явно указать целевой контроллер домена (бессерверное подключение обычно «не срабатывает»). Это связано с тем, что при выполнении данной операции используется управляющий объект LDAP Cross Domain Move (Пере- мещение между доменами). О Операция перемещения должна выполняться на хозяине RID обоих доменов. О Оба домена должны работать в основном режиме Windows 2000. О При перемещении объекта user в другой домен идентификатор этого объекта objectSID заменяется новым идентификатором (сгенерированным новым до- меном), а старый SID добавляется в атрибут sIDHi story. О Из объектов типа group можно перемещать только универсальные группы. Что- бы переместить глобальную группу или локальную группу домена, сначала нужно преобразовать таковую в универсальную. Смотрите также В рецепте 4.3 рассказывается об управляющих объектах LDAP. Ознакомьтесь с документами MS КВ 238394 (How to Use the MoveTree Utility to Move Objects Between Domains in a Single Forest) и MSDN: IADsContainer::MoveHere. 4.19. Переименование объекта Проблема Необходимо переименовать объект, не меняя его местоположения.
156 Глава 4. Объекты и операции над ними Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Если имя контекста именования, который вы хотите просмотреть, не выведено на экран, щелкните правой кнопкой мыши на элементе ADSI Edit, расположенном на правой панели, и в открывшемся контекстном меню выберите команду Con- nect to (Подключиться к). Укажите, в каком контексте именования — контей- нере или подразделении — находится объект; если нужно ввести другие имя пользователя и пароль, щелкните на кнопке Advanced (Дополнительно). 3. На левой панели откройте контейнер или подразделение, где находится иско- мый объект. Затем щелкните правой кнопкой мыши на этом объекте и в от- крывшемся контекстном меню выберите команду Rename (Переименовать). 4. Введите новое имя объекта и щелкните на кнопке ОК. С помощью интерфейса командной строки > dsnrove "<ОИ_объекта>" -newname “<новое_имя>" С помощью сценария на языке VBScript ’ Этот код выполняет переименование объекта, не меняя его местоположения 1 ----- SCRIPT CONFIGURATION ...... strCurrentParentDN - "ОИ_текущего_контейнера>" strObjectOldName - "сг]-<старое_имя>“ strObjectNewName - "сп=<«овое_имя>" ' ----- END CONFIGURATION --------- set objCont - GetObject("LDAP://" & strCurrentParentDN) objCont.MoveHere "LDAP://" & strObjectOldName & _ strCurrentParentDN, strObjectNewName ” Комментарий Прежде чем приступать к переименованию объекта, убедитесь, что ни одно прило- жение не содержит ссылок в виде его имени. Для того чтобы объекты можно было свободно переименовывать, приложения должны находить их не по именам, а по GUID — глобальным идентификаторам, которые хранятся в атрибуте objectGUID объекта и не меняются при его переименовании. К решению с помощью графического пользовательского интерфейса Если родительский контейнер объекта, который вы хотите переименовать, содержит много других объектов, вместо поиска объекта проще создать к нему подключение. Для этого нужно щелкнуть правой кнопкой мыши на элементе ADSI Edit и выбрать команду Connect to (Подключиться к), после чего в области Connection Point (Точка подключения) установить переключатель в положение Select or type Distinguished Name or naming context (Выберите или введите отличительное имя или контекст имено- вания) и указать отличительное имя объекта.
4.20. Удаление объекта 1э/ К решению с помощью интерфейса командной строки Для того чтобы переименовать объект, нужно задать два параметра: исходное отличительное имя объекта и его новое отличительное имя (-newname). Кроме того, воспользовавшись ключом -S, можно указать сервер, на котором находится объект. К решению с помощью сценария на языке VBScript Принцип использования метода MoveHere не вполне очевиден, поэтому считаем нужным дать небольшое пояснение. Прежде всего, для получения ссылки на ро- дительский контейнер объекта, необходимо вызвать метод GetObject. После этого вызывается метод MoveHere данного контейнера, и в его первом параметре задается значение атрибута ADsPath перемещаемого объекта, а во втором — новое относи- тельное отличительное имя объекта, включающее префикс (сп=). Смотрите также Документ MSDN: IADsContainer::MoveHere. 4.20. Удаление объекта Проблема Требуется удалить объект из каталога Active Directory. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Если имя контекста именования, который вы хотите просмотреть, не выведено на экран, щелкните правой кнопкой мыши на элементе ADSI Edit, расположенном на правой панели, и в открывшемся контекстном меню выберите команду Con- nect to (Подключиться к). Укажите, в каком контексте именования — контей- нере или подразделении — находится объект; если нужно ввести другие имя пользователя и пароль, щелкните на кнопке Advanced (Дополнительно). 3. На левой панели откройте контейнер или подразделение, где находится иско- мый объект, щелкните на нем правой кнопкой мыши и в открывшемся кон- текстном меню выберите команду Delete (Удалить). 4. Щелкните на кнопке Yes (Да), чтобы подтвердить необходимость выполне- ния операции. С помощью интерфейса командной строки > dsrm “<ОИ_объекта>“ С помощью сценария на языке VBScript strObjectDN - "<ОИ_объекта>“ set objUser - GetObjectC'LOAP://" & strObjectDN) objUser.DeleteObj ect(0)
158 Глава 4. Объекты и операции над ними Комментарий Из этого рецепта вы узнаете, как удалить один объект. Если требуется удалить целый контейнер или подразделение со всеми его объектами, руководствуйтесь рецептом 4.21. К решению с помощью графического пользовательского интерфейса Если родительский контейнер объекта, который вы хотите удалить, содержит много других объектов, имеет смысл создать подключение к нему, отказавшись от поиска объекта. Для этого нужно щелкнуть правой кнопкой мыши на элементе ADSI Edit и выполнить команду Connect to (Подключиться к), после чего в области Connec- tion Point (Точка подключения) активизировать переключатель Select or type Distin- guished Name or naming context (Выберите или введите отличительное имя или кон- текст именования) и указать отличительное имя объекта. К решению с помощью интерфейса командной строки Утилита ds пл может работать с объектами любого типа (в отличие от утилит dsadd и dsmod). Единственным ее обязательным параметром является отличительное имя удаляемого объекта Кроме того, вы можете задать ключ -noprompt — в таком случае утилита не станет требовать подтверждения операции, а также, воспользовавшись ключом -s, указать сервер, на котором находится объект К решению с помощью сценария на языке VBScript Синтаксис метода DeleteObject очень прост. Параметр 0 является обязательным, хотя в данный момент его значение не определено. Альтернативным и, пожалуй, более безопасным способом удаления объектов является использование метода lADsContainer::Delete. Но, решив применить его, вы должны сначала установить связь с родительским контейнером объекта, а затем вызвать метод Delete, передав ему имя класса и относительное отличительное имя удаляемого объекта Приведем пример удаления объекта user: set objCont - GetObject!"LDAP //ou-Sales.dc-rallencorp,dc-com") objCont.Delete "user", "cn-rallen' Данный способ более надежен, поскольку при его использовании вы точнее указываете, что именно подлежит удалению. Метод DeleteObject получает лишь отличительное имя объекта, так что даже обычная опечатка при вводе этого име- ни может привести к нежелательным последствиям. Смотрите также В рецепте 4.21 рассказывается, как удалить контейнер со всеми его объектами. Кроме того, ознакомьтесь с документами MS КВ 258310 (Viewing Deleted Objects in Active Directory), MSDN: lADsContainer::Delete и MSDN: IADsDeleteOps::De- leteObject.
4.21. Удаление контейнера с дочерними объектами 159 4.21. Удаление контейнера с дочерними объектами Проблема Необходимо удалить контейнер или подразделение и все содержащиеся в нем объекты. Решение С помощью графического пользовательского интерфейса Откройте редактор ADSI Edit и выполните действия, описанные в рецепте 4.20 Единственное отличие от указанного рецепта заключается в том, что программа предлагает подтвердить необходимость выполнения операции удаления дважды. С помощью интерфейса командной строки > dsrm "<ОИ_объекта>" -subtree С помощью сценария на языке VBScript Программный код, приведенный в рецепте 4.20, может удалить и контейнер со всеми входящими в него объектами. Комментарий Как видите, удаление листового узла дерева каталога, то есть отдельного объекта, выполняется практически так же, как удаление целого контейнера с входящими в него объектами. Однако фоновые действия, выполняемые для этих операций различны. Удаление объекта, у которого нет дочерних объектов, производится посредством предназначенной для этой цели операции LDAP, тогда как для удаления кон- тейнера с дочерними объектами используется управляющий объект LDAP, пред- назначенный для удаления дерева. Если эта операция выполняется с помощью средства, подобного LDP, нужно сначала указать, что в ней будет задействован управляющий объект Subtree Del ete (Удаление поддерева), идентификатор кото- рого равен 1.2 840.113556 1 4 805. С клиентской стороны LDP поддерживает и дру- гую возможность, называемую рекурсивным удалением: все содержащиеся в кон- тейнере объекты удаляются по одному Способ удаления контейнера при помощи управляющего объекта Subtree Delete более эффективен, особенно когда речь идет о больших контейнерах. Смотрите также В рецепте 4 20 рассказывается об удал.ении объектов. По данному вопросу можно обратиться и к документу MSDN IADsDeleteOps:.DeleteObject.
160 Глава 4. Объекты и операции над ними 4.22. Просмотр времени создания и последнего изменения объекта Проблема Требуется узнать, когда объект был создан или в последний раз изменен. Решение С помощью графического пользовательского интерфейса 1. Выполните действия, описанные в рецепте 4.2. 2. Затем, воспользовавшись командой Options ► Search (Параметры ► Поиск), убеди- тесь, что атрибуты createTimestamp и modifyTimestamp включены в список воз- вращаемых. С помощью интерфейса командной строки > dsquery * "<ОИ_объектд>" -attr name createTimestamp modifyTimestamp С помощью сценария на языке VBScript ‘ Этот код выводит время создания и последнего изменения заданного объекта ’ .. SCRIPT CONFIGURATION . strObjectDN - "<0И объекта*" ' ---- END CONFIGURATION --- set objEntry - GetObjectCLDAP://" & strObjectDN) Wscript.Echo "Object Name: ” & objEntry.GetC'name") Wscript.Echo " Created: " & objEntry.GetCcreateTimestamp") Wscript.Echo " Changed " & objEntry.Get("modifyTimestamp") Комментарий При создании объекта в Active Directory в его атрибуты createTI mestamp записы- вается текущее время. Аналогичным образом при изменении объекта текущее время записывается в его атрибут modifyTimestamp. Оба атрибута реплицируются, поэтому, если их значения уже реплицированы на все контроллеры домена, на любом контроллере они будут содержать время создания и время последнего об- новления объекта. Следует упомянуть еще о двух сходных атрибутах — whenCreated и whenChanged. Они тоже содержат время создания и время изменения объекта, но их значения являются локальными для контроллера домена и не реплицируются Смотрите также В рецепте 4.2 рассказывается, как просмотреть значения атрибутов объекта.
4.23. Изменение используемой по умолчанию политики запросов LDAP 161 4.23. Изменение используемой по умолчанию политики запросов LDAP Проблема Требуется просмотреть или изменить политику запросов LDAP, используемую по умолчанию. Политика запросов — это набор установок, определяющих пове- дение сервера при выполнении операции поиска (например, максимальное коли- чество возвращаемых клиенту результирующих объектов) Решение С помощью графического пользовательского интерфейса 1 . Откройте редактор ADSI Edit. 2 В разделе конфигурации откройте поочередно контейнеры Services (Серви- сы), Windows NT, Directory Service (Служба каталогов) и Query Policies (Полити- ки запросов). 3 . Перейдя в контейнер Query Policies (Политики запросов), щелкните правой кнопкой мыши на объекте Default Query Policy (Политика запросов по умол- чанию) и после этого выберите в открывшемся контекстном меню команду Properties (Свойства) 4 Дважды щелкните на атрибуте IDAPAdminLlmits. 5 Щелкните сначала на атрибуте, значение которого хотите изменить, а затем — на кнопке Remove (Удалить) 6 Измените значение в поле Value to add (Добавляемое значение) и щелкните на кнопке Add (Добавить). 7 . Дважды щелкните на кнопке ОК. С помощью интерфейса командной строки Просмотреть текущие установки можно с помощью такой команды: > ntdsutil “Idap pol" conn "cori to server <имя_контроллера_доменд>’' q "show values" А вот как параметру MaxPageSize присваивается значение 2000: > ntdsutil "Idap pol" conn "con to server <иня_контроллера_донена>’' q Idap policy: set MaxPageSize to 2000 Idap policy: Commit Changes С помощью сценария на языке VBScript Код изменяет для леса установки используемой по умолчанию политики запросов ‘ ....- SCRIPT CONFIGURATION- pol_attr - "MaxPageSize" ' Задайте имя параметра, который хотите изменить new_value - 1000 ' Задайте новое значение этого параметра ’ ---- END CONFIGURATION ---- Const ADS PROPERTY_APPEND - 3 Const ADS_PROPERTY_OELETE = 4
162 Глава 4. Объекты и операции над ними set rootDSE - GetObjectC"LDAP://RootDSE") set IdapPol - GetObjectCLDAP://cn-Default Query Policy.cn-Query-Policies," & _ "cn-Directory Service.cn-Windows NT.cn-Services." & _ rootDSE.Get("confIgurationNamlngContext") ) set regex - new regexp regex IgnoreCase - true regex.Pattern - pol_attr & for Each prop In IdapPol .GetExCldapAdonnLimits") if regex.Test(prop) then if prop - pol_attr & & new_value then WScript.Echo pol_attr & " already equal to " & new_value else IdapPol.PutEx ADS_PROPERTY_APPEND. "IDAPAdminLimits", Array( pol_attr & & new_value ) IdapPol Setinfo IdapPol.PutEx ADS_PROPERTY_DELETE. "IDAPAdminLimits". Array(prop) IdapPol.SetInfo WScript.Echo "Set " & pol_attr & " to " & newvalue end if Exit For end if next Комментарий Политика запросов LDAP — это набор установок, определяющих поведение кон- троллера домена при выполнении поиска. По умолчанию для всех контроллеров домена в лесу определена единая политика, но можно создать и дополнительные политики и применить их к отдельным контроллерам домена или сайтам (в та- ком случае все контроллеры доменов заданного вами сайта будут придерживать- ся указанной политики) Политики запросов хранятся в разделе конфигурации в виде объектов query Policy. Используемая по умолчанию политика имеет следующее имя: cn-Default Query Policy.cn-Query-Policies,cn-Directory Service.cn-Windows NT.cn-Services.<00 раздела_конфигурации>. Атрибут IDAPAdminLimits объекта queryPolicy является состав- ным и содержит значения управляющих параметров в виде пар имя-значение. Список этих параметров приведен в табл. 4.4. Таблица 4.4. Параметры политики запросов LDAP Имя Значение по умолчанию Описание MaxPoolThreads 4 Максимальное число потоков (на процесс), создаваемых контроллером домена для выполнения запроса MaxDatagramRecv 4096 Максимальное количество дейтаграмм, одновременно обрабатываемых контроллером домена MaxReceiveBuffer 10485760 Максимальный размер запроса LDAP в байтах, который может обработать сервер. Если сервер получит запрос большего размера, он закроет подключение
4.23. Изменение используемой по умолчанию политики запросов шан ХОЛ Имя Значение по умолчанию Описание InitRecvUmeout 120 Тайм-аут перед получением результатов запроса в секундах MaxConnections 5000 Максимальное число открытых подключений MaxConnldleTime 900 Максимальное время бездействия подключения в секундах MaxActiveQuerles 20 Максимальное число одновременно активных запросов MaxPageSIze 1000 Максимальный размер страницы ответа LDAP MaxQueryDuratlon 120 Максимальное время выполнения запроса контроллером домена в секундах MaxTempTableSIze 10000 Максимальный размер памяти для временного хранения данных, выделяемой в рамках одного запроса MaxResultSetSIze 262144 Максимальный размер результирующего набора данных LDAP MaxNoti f1 cat1onPerConn 5 Максимальное количество уведомлений, которые клиент может запросить для данного подключения Поскольку все эти установки хранятся в виде пар имя-значение в одном атри- буте, то есть в формате AVA, сценарий на языке VBScript, чтобы найти искомую установку, должен просмотреть все эти пары с использованием регулярного вы- ражения. Поиск осуществляется по строке <имя_параметра>~, совпадающей с на- чалом искомой строки. Подробнее о формате AVA говорится в рецепте 4.16. Изменение используемой по умолчанию политики запросов должно сопрово- ждаться тщательным тестированием. Учтите, что изменение некоторых установок может привести к неожиданному поведению приложения или контроллера домена. Вы можете создать и новую политику. Для этого в контейнере Query Policies (Политики запросов), где хранится объект, представляющий используемую по умолчанию политику, создайте новый объект queryPolicy и настройте его атрибут IDAPAdminLimits. Затем измените атрибут queryPolicyObject объекта nTDSDSA того контроллера домена, к которому хотите применить новую политику. Это можно сделать с помощью оснастки Active Directory Sites and Services (Active Directory - сайты и службы). Найдите объект nTDSDSA (cn=NTDS Settings), щелкните на нем правой кнопкой мыши и выберите из контекстного меню команду Properties (Свойства). Укажите новую политику в раскрывающемся списке Query Policy (По- литика запросов) и щелкните на кнопке ОК. Смотрите также Документ MS КВ 315071 (HOW ТО: View and Set Lightweight Directory Access Protocol Policies by Using Ntdsutil.exe in Windows 2000).
1 ! Глава 4. Объекты и операции над ними 4.24. Экспорт объектов в файл LDIF Проблема Требуется экспортировать объекты в файл формата LDIF (LDAP Data Interchange Format — формат обмена данными LDAP). Решение С помощью графического пользовательского интерфейса Ни одно из стандартных средств, разработанных Microsoft, не позволяет выпол- нить экспорт в LDIF-файл при использовании графического пользовательского интерфейса. С помощью интерфейса командной строки > Idlfde -f output.Idf -1 <список_атрибутов> -p <область_поиска> -г ’<филътр>'' -d "<0И_базы>‘' С помощью сценария на языке VBScript Для экспортирования в формат LDIF не существует интерфейсов на базе СОМ или VBScript. Работая со сценарием на языке Perl, можно воспользоваться моду- лем Net::LDAP: LDIF, в котором реализована поддержка операций чтения и за- писи LDIF-файлов. Комментарий В спецификации LDIF (RFC 2849) определен формат строго структурированных файлов для хранения элементов каталога. Созданные в нем файлы могут читаться как машиной, так и человеком. Де-факто этот формат является стандартом, опре- деляющим принцип выполнения импорта и экспорта большого количества объектов каталога. Он поддерживается практически всеми производителями каталогов, включая и Microsoft. К решению с помощью интерфейса командной строки Ключи -f и -S служат для определения имени файла и имени контроллера домена соответственно, за ключом -1 следует разделенный запятыми список атрибутов, -р определяет область поиска, -г позволяет задать для поиска фильтр, а после ключа -d указывается база поиска. Если при использовании утилиты Idifde воз- никнут проблемы, воспользуйтесь ключом -v, активизирующим режим расши- ренной справки, — это поможет выявить их источник. Смотрите также В рецепте 4.25 рассказывается, как импортировать объекты из LDIF-файла. Обра- титесь к документам RFC 2849 (The LDAP Data Interchange Format (LDIF)-Tech- nical Specification) и MS KB 237677 (Using LDIFDE to Import and Export Direc- tory Objects to Active Directory).
4.25. Импорт объектов из файла LDIF 165 4.25. Импорт объектов из файла LDIF « Проблема Необходимо импортировать объекты в Active Directory из LDIF-файла. Этот файл может содержать добавляемые объекты, изменения, которые нужно внести в су- ществующие объекты, а также команды удаления объектов. Решение С помощью интерфейса командной строки Утилита Idifde позволяет импортировать в Active Directory изменения из LDIF- файла, где хранятся данные о добавляемых, изменяемых и удаляемых объектах. Вот пример LDIF-файла, в котором содержатся команда добавления объекта user, две команды для его изменения и команда удаления: dn: cn-jsmith.cn=users,dc-ral1encorp,dc-com changetype: add objectclass: user samaccountname jsmith sn: JSnrith useraccountcontrol: 512 dn- cn-jsmith cn=users.dc-rallencorp,dc-com changetype: modify add: givenName givenName Jim replace: sn sn: Smith dn: cn-jsmi th.cn-users,dc=ra11encorp.dc-com changetype delete Вы можете создать такой файл вручную или иным способом, а затем с помо- щью команды Idifde внести заданные в нем изменения в Active Directory: > Idifde -i -f <имя_файла> Idf Комментарий Более полные сведения о формате LDIF представлены в документе RFC 2849. К решению с помощью интерфейса командной строки Для того чтобы импортировать файл с применением утилиты Idifde, нужно за- дать ключ -1, обозначающий режим импорта, и параметр -f <имя_файла> Может пригодиться и ключ -V, позволяющий выполнить операцию в режиме расширен- ной справки и получить сообщения об ошибках.
166 Глава 4. Объекты и операции над ними Смотрите также В рецепте 4.24 рассказывается об импорте файлов LDIF Прочтите документы RFC 2849 (The LDAP Data Interchange Format (LDIF)-Technical Specification) и MS KB 237677 (Using LDIFDE to Import and Export Directory Objects to Active Directory). 4.26. Экспорт объектов в CSV-файл Проблема Необходимо экспортировать объекты в файл формата CSV (Comma-Separated Values — значения, разделенные запятыми), распознаваемого текстовыми редак- торами и процессорами электронных таблиц. Решение С помощью интерфейса командной строки > csvde -f output.csv -1 <список_агрибутов> -р <область_поиска> -г "<фильтр>" -d ’'<0И_базы>" Комментарий Файл формата CSV можно просматривать, сортировать, редактировать с помощью процессора электронных таблиц, например Excel. К решению с помощью интерфейса командной строки Утилита cvsde имеет практически те же параметры, что и утилита Idifde. Ключи -f и -s служат для определения имени файла и имени контроллера домена, за ключом -1 следует разделенный запятыми список атрибутов, -р определяет область поиска (base, onelevel или subtree), -г позволяет задать для поиска фильтр, а после ключа -d указывается база поиска. Если возникнут проблемы, воспользуйтесь ключом -v, активизирующим режим расширенной справки, — это поможет выявить их источник. Смотрите также В рецепте 4.27 рассказывается об импортировании объектов из CSV-файла. 4.27. Импорт объектов из CSV-файла Проблема В Active Directory требуется импортировать объекты из CSV-файла.
4.27. Импорт объектов из CSV-файла 167 Решение С помощью интерфейса командной строки Для импорта данных с помощью утилиты csvde нужно сначала создать CSV-файл, содержащий описания добавляемых объектов. В первой строке этого файла дол- жен быть расположен разделенный запятыми список атрибутов, которые следует установить (список всегда начинается атрибутом DN). ON objectClass.cn.sn.userAccountControl.sAMAccountName.userPri ncipal Name Остальные строки содержат добавляемые данные. Если один из атрибутов устанавливать не нужно, поставьте вместо него пробел и, как обычно, запятую. Ниже приведен пример содержимого CSV-файла, из которого будут импортиро- ваны два объекта user: ON.objectClass.sn.userAccountControl.sAMAccountName.userPri nci pa1 Name 'cn-jim.cn-users,dc-ral1encorp.dc=com".user.Smith,512.jim.j1m@rallencorp.com ”cn-John.cn-users.dc-ra11encorp.dc=com".user..512.John,john@ra11encorp.com Создав такой файл, импортируйте его содержимое, выполнив команду cvsde: > csvde -1 -f <ихя_файпа>.с$у Комментарий Заметьте, что каждая строка CSV-файла, за исключением заголовка, должна со- держать значения атрибутов очередного добавляемого объекта Данный способ импорта служит только для добавления объектов; изменять их или удалять таким путем невозможно. Если у вас имеется электронная таблица, содержащая объекты, которые вы хотели бы импортировать в Active Directory, сохраните ее в виде CSV-файла и с помощью утилиты csvde выполните импорт. К решению с помощью интерфейса командной строки Для того чтобы импортировать файл с помощью утилиты csvde, нужно задать ключ -1, обозначающий режим импорта, и параметр -f <имя_файла>. Возможно, придется воспользоваться и ключом -v, позволяющим выполнять операции в ре- жиме расширенной справки и получать сообщения об ошибках. Смотрите также В рецепте 4.26 рассказывается об экспортировании объектов в формат CSV. Кроме того, ознакомьтесь с документом MS КВ 327620 (HOW ТО: Use Csvde to Import Contacts and User Objects into Active Directory).
Подразделения 5.0. Введение Службы каталогов, в основу которых положен протокол LDAP, в том числе и Ac- tive Directory, хранят данные в контейнерах, организованных в виде иерархиче- ской структуры, которая называется деревом, информации каталога (Directory In- formation Tree, DIT) Каждый контейнер может содержать другие контейнеры и узлы-листья, являющиеся конечными точками иерархии. Двумя самыми рас- пространенными типами контейнеров в Active Directory являются подразделение, или организационное подразделение (Organizational Unit, OU), и обыкновенный объект-контейнер Последний отличается от других объектов лишь тем, что в нем также могут храниться объекты. Никакими особыми свойствами он не обладает, в отличие от подразделения, которое, в частности, характеризуется тем, что мо- жет быть связано с групповой политикой. Как правило, при разработке иерархии объектов Active Directory, в особенности представляющих пользователей и ком- пьютеры, следует создавать не обычные контейнеры, а подразделения. У обычных контейнеров нет таких возможностей, какими бы не обладали подразделения. Анатомия подразделения Подразделения можно создавать в любом месте контекста именования домена. Однако по умолчанию подразделения нельзя включать в объекты-контейнеры в качестве дочерних объектов. О том, как обойти это ограничение, рассказано в рецепте 5.10. Подразделения представлены в Active Directory объектами organ! - zationalUnit, важнейшие атрибуты которых перечислены в табл. 5.1. Таблица 5.1. Атрибуты объекта organizationaiUnlt Атрибут Описание description Текстовое описание OU gPLink Список объектов групповой политики (Group Policy Object, GPO), связанных с данным подразделением. См. также рецепт 5.11 gpOptions Содержит значение 1, если наследование GPO заблокировано, и 0 в противном случае msDS-Approx-Inrned-Subordi nates Приблизительное количество дочерних объектов в подразделении. См. также рецепт 5.8
5.1. Создание подразделения Атрибут Описание managedBy Отличительное имя пользователя или группы, отвечающих за управление подразделением OU Относительное отличительное имя подразделения modlfyTImestamp Время последнего изменения подразделения createTimestamp Время создания подразделения 5.1. Создание подразделения Проблема Требуется создать в Active Directory новое подразделение. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользователи и компьютеры), выберите в контекстном меню команду Connect to Domain (Под- ключение к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели разверните родительский контейнер, в котором будет содер- жаться новое подразделение, щелкните на нем правой кнопкой мыши, а затем в открывшемся контекстном меню выберите команду New > Organizational Unit (Создать ► Подразделение). 4. Введите имя нового подразделения и щелкните на кнопке ОК. 5. Для того чтобы ввести описание подразделения, щелкните правой кнопкой мыши на имени только что созданного подразделения на левой панели и вы- берите в открывшемся контекстном меню команду Properties (Свойства) 6. Завершив ввод, щелкните на кнопке ОК. С помощью интерфейса командной строки > dsadd ou '<0И_подразделения>' -desc "<описание>' С помощью сценария на языке VBScript ’ Этот код создает подразделение 1 -.. SCRIPT CONFIGURATION - strOrgUnit - "<имя-Подразделения}' ’ Например; Tools StrOrgUnitParent - '<0И_род_контейнера>' ' Например ou-Engineering,dc-ra11encorp.dc-com strOrgUnitDescr - “<описание>" ’ Например: Tools Users • ---- end CONFIGURATION --- set objDomain - GetObject!"LDAP://" & StrOrgUnitParent)
170 Глава 5. Подразделения set objOU - objDomain.CreateCorganizatlonalUnit". "OU»" & strOrgUnit) objOU.Put "description". strOrgUnitDescr objOU Setinfo WScript.Echo "Successfully created n & objOU.Name Комментарий Подразделения предназначены для структуризации данных в Active Directory. Обычно они создаются для следующих целей О Группировка объектов. Связанные между собой данные очень часто объеди- няют в подразделения. Так, объекты user обычно хранятся в одном подразде- лении, а объекты computer — в другом (такова используемая по умолчанию конфигурация Active Directory). О Делегирование функций управления. Пожалуй, наиболее часто подразделения Active Directory создаются с целью делегирования административных полномо- чий. Active Directory позволяет предоставить пользователю или группе пользо- вателей права на выполнение определенных операций над объектами задан- ного подразделения. О Применение групповой политики. Подразделение является наименьшей еди- ницей, к которой может быть применена групповая политика. Если в органи- зации работают сотрудники, разделенные на несколько категорий с разными полномочиями, проще всего создать для каждой категории отдельное подраз- деление, определить соответствующий объект групповой политики и связать подразделение с этим объектом. О Эффективное управление видимостью объектов. Подразделения могут ис- пользоваться как механизм ограничения доступа пользователей к различным частям каталога Желательно для каждого подразделения заполнять атрибут description, что- бы при просмотре каталога было сразу видно его назначение. Кроме того, не за- будьте установить атрибут managedBy, указав группу или пользователя, который считается владельцем подразделения. Смотрите также Документ MS КВ 308194 (HOW ТО. How to Create Organizational Units in a Win- dows 2000 Domain). 5.2. Просмотр списка контейнеров заданного домена Проблема Требуется отобразить список всех контейнеров и подразделений домена, то есть просмотреть его структуру.
5.2. Просмотр списка контейнеров заданного домена Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2 Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory - пользовате- ли и компьютеры), выберите команду Connect to Domain (Подключение к доме- ну), введите имя домена и щелкните на кнопке ОК. Слева отобразится струк- тура домена. С помощью интерфейса командной строки Следующая команда выводит список всех подразделений домена, в котором заре- гистрирован выполняющий команду пользователь- > dsquery ou domainroot С помощью сценария на языке VBScript ’ Этот код рекурсивно выводит все объекты container и organizationalUnlt ’ для заданной базы. Значение второго параметра указывает, что ‘ первый уровень объектов должен выводиться без отступа. DisplayObjects "LDAP://<$fjjowew<3>‘. 1 В функци» DisplayObjects передаются значения атрибута * ADsPath объекта, дочерние объекты которого требуется просмотреть, ’ и количество пробелов отступа перед первым значением Function O1splayObjects( strADsPath. strSpace) set objObject - GetObject(strADsPath) Wscrlpt.Echo strSpace & strADsPath objObject.Filter - ArrayCcontainerVorganizationalUnit") for each objChildObject 1n objObject DisplayObjects objChlldObject.AOsPath, strSpace & " “ next End Function Комментарий К решению с помощью графического пользовательского интерфейса Если вы захотите развернуть все дочерние контейнеры и подразделения выбран- ного подразделения, придется делать это вручную, поскольку команды, которая выполнила бы подобную операцию, не существует. К решению с помощью интерфейса командной строки Для того чтобы просмотреть список всех подразделений и контейнеров домена, в котором зарегистрирован текущий пользователь, можно воспользоваться более универсальной командой dsquery: > dsquery * domainroot -filter j (I(objectcategory-contairerXobjectcategory-organizationalunit))" j -scope subtree -limit 0
т Глава 5. Подразделения К решению с помощью сценария на языке VBScript Во время прохода по домену в цикле for each вывод данных осуществляется по- странично, благодаря чему мы получаем все объекты, а не только первые 1000. Для вывода всех объектов независимо от глубины вложенности используется ре- курсивная функция 01 splayObjects. 5.3. Просмотр списка объектов заданного подразделения Проблема Требуется просмотреть список объектов, относящихся к заданному подразделению. Решение Три приведенных ниже решения предназначены для просмотра списка объектов, расположенных в заданном подразделении на верхнем уровне вложенности. О том, как просмотреть все объекты независимо от уровня их вложенности, рассказывается в разделе комментария. С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользователи и компью- теры), расположенном на левой панели, выберите команду Connect to Domain (Подключение к домену), введите имя домена и щелкните на кнопке ОК 3. На левой панели откройте подразделение, которое вы хотите просмотреть. 4. Щелкните на нем, и на правой панели будет отображено его содержимое. С помощью интерфейса командной строки > dsquery * '<0И_подразаеления>" -limit 0 -scope onelevel С помощью сценария на языке VBScript set objOU - СеЬСЬ1есЬ("ЮАР://<О^_лодразделеяия>") for each objChildObject in objOU Wscript.Echo objChildObject.Name next Комментарий К решению с помощью графического пользовательского интерфейса По умолчанию оснастка Active Directory Users and Computers (Active Directory — пользователи и компьютеры) отображает только 2000 объектов. Чтобы получить возможность просматривать большее их количество, выберите команду View ► Filter
5.4. Удаление объектов из подразделения 173 Options (Вид ► Параметры фильтра) и в поле Maximum number of items displayed per folder (Макс, число отображаемых элементов в папке) укажите, сколько элементов должно выводиться на экран. К решению с помощью интерфейса командной строки Параметр -limit 0 определяет, что утилита dsquery должна вывести все объекты подразделения. Если этот параметр не задан, она выведет 100 объектов. Однако если требуется просмотреть определенное число элементов, укажите таковое после ключа -limit. Ключ -scope onelevel указывает, что требуется вывести только дочерние объекты первого уровня, но не их вложенные объекты. Но если вы добавите в команду ключ -scope subtree, то получите возможность выводить все объекты независимо от глубины их вложенности. К решению с помощью сценария на языке VBScript Во время прохода по подразделению в цикле for each вывод данных осуществляется постранично, что позволяет указать все объекты, а не только первые 1000. Для вывода всех объектов независимо от глубины вложенности можно воспользоваться следующей рекурсивной функцией: ' Значение второго параметра указывает, что ' первый уровень объектов должен выводиться без отступа Displayobjects '‘LMP У/<ОИ_подразделения>". ' Функция Displayobjects принимает значение атрибута ' ADsPath объекта, дочерние объекты которого требуется просмотреть. ' и количество пробелов отступа перед первым значением Function D1splayObjects( strADsPath. strSpace) set objObject - GetObject(strADsPath) Wscript.Echo strSpace & strADsPath for each objChildObject 1n objObject Displayobjects objChildObject.ADsPath. strSpace & " " next End Function Этот код практически идентичен приведенному в рецепте 5.2. Единственным его отличием является отсутствие вызова метода Filter, ограничивающего типы выводимых объектов. 5.4. Удаление объектов из подразделения Проблема Требуется удалить из подразделения все объекты, не удаляя само подразделение. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если необходимо сменить домен, то щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользователи
174 Глава 5. Подразделения и компьютеры) на левой панели, выберите команду Connect to Domain (Подклю- чение к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели откройте подразделение, где содержатся объекты, которые вы хотите удалить. 4. На правой панели выделите все объекты и щелкните на кнопке панели инст- рументов Delete (Удаление). 5. Нажмите клавишу F5, и содержимое подразделения будет обновлено. Если объекты не исчезли, повторите предыдущее действие. С помощью интерфейса командной строки Для того чтобы удалить из подразделения все объекты, не удаляя само подразде- ление, воспользуйтесь командой dsrm с ключами -subtree и -exclude: > dsrm "<0И_подразделения>" -subtree -exclude С помощью сценария на языке VBScript ' Этот код удаляет из подразделения объекты, сохраняя само подразделение set objOU - GetCbject(,,LDAP://<?H_no/?pa3/?e/?eHMfl>") for each objChildObject in objOU Wscript.Echo "Deleting " & objChildObject.Name objChi1dOb j ect.DeleteObj ect(0) next Комментарий Если нужно удалить из подразделения все объекты, сохранив его само, вы можете сделать это двумя способами: либо удалить подразделение, в результате чего будут удалены и все его объекты, а затем снова его создать, либо удалить только объек- ты. Последний подход дает то преимущество, что избавляет от необходимости повторно настраивать ACL (Access Control List — список управления доступом) подразделения и связывать таковое с объектом групповой политики. Смотрите также В рецепте 5.3 рассказывается о том, как вывести список объектов заданного под- разделения, а из рецепта 5.5 вы узнаете, как удалить подразделение Кроме того, ознакомьтесь с документом MSDN: IADsDeleteOps::DeleteObject. 5.5. Удаление подразделения Проблема Требуется удалить подразделение и все входящие в него объекты. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2 Если нужно сменить домен, щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользователи и компью-
5.6. Перемещение объектов между подразделениями 175 теры), расположенной на левой панели, выберите команду Connect to Domain (Подключение к домену), введите имя домена и щелкните на кнопке ОК. 3 На левой панели откройте подразделение, которое хотите удалить, щелкните на нем правой кнопкой мыши и в появившемся контекстном меню выберите команду Delete (Удалить). 4. В открывшемся диалоговом окне подтвердите необходимость выполнить опе- рацию удаления. 5. Если подразделение содержит дочерние объекты, система еще раз попросит подтвердить заданное действие. Щелкните на кнопке Yes (Да). С помощью интерфейса командной строки Для удаления подразделения со всеми его объектами можно воспользоваться ко- мандой dsrm с ключом -subtree. Без этого ключа команда не выполнит удаление, если подразделение содержит хотя бы один объект. > dsrm "<СИ_лодраз деления^ -subtree С помощью сценария на языке VBScript ' Этот код удаляет подразделение со всеми его дочерними объектами set objOU GetObiectCLWP ://<ОИ_подраздепения>я) objOU.DeleteObject(0) Комментарий Удаление подразделения, не содержащего объектов, производится таким же об- разом, как удаление любого другого объекта. Однако если подразделение содер- жит объекты, его удаление осуществляется по-другому. Выполняющее эту опе- рацию приложение (или сценарий) должно использовать управляющий объект LDAP Tree Delete (OID: 1.2 840.113556 1.4.805), указывающий Active Directory, что требуется удалить все содержимое подразделения. Данный объект использу- ется во всех трех приведенных выше решениях, хотя пользователь этого не видит. Если же вам надобится выполнить данную операцию с помощью такой LDAP- утилиты, как LDP, нужно будет явно задать этот управляющий объект. Смотрите также В рецепте 4.3 (глава 4) речь идет об использовании управляющих объектов LDAP. Обратите внимание и на документ MSDN. IA DsDeleteOps:: DeleteObject. 5.6. Перемещение объектов между подразделениями Проблема Необходимо переместить некоторые или все объекты из одного подразделения домена в другое (возможно, в процессе его реструктуризации).
176 Глава 5. Подразделения Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользовате- ли и компьютеры), выберите команду Connect to Domain (Подключение к доме- ну), введите имя домена и щелкните на кнопке ОК. 3. На левой панели откройте нужный контейнер и выберите подразделение, где содержатся объекты, которые вы хотите переместить. 4. Выделите на правой панели объекты, подлежащие перемещению, щелкните на них правой кнопкой мыши и в открывшемся контекстном меню выберите команду Move (Переместить). 5. В открывшемся диалоговом окне найдите родительский контейнер, в кото- рый нужно переместить объекты, выделите его и щелкните па кнопке ОК. 6. Нажмите клавишу F5, и содержимое подразделения будет обновлено. Если объекты не исчезли, повторите два предыдущих действия. ПРИМЕЧАНИЕ-------------------------------------------------------------- В версии оснастки Active Directory Users and Computers (Active Directory — пользователи и компьюте- ры) для Windows Server 2003 перемещение объектов можно выполнять путем их перетаскивания. С помощью интерфейса командной строки > for /F "usebackq delims-""" XI 1п ('dsquery * “<старое_0И_подразделения>" j -scope onelevel') do dsmove -newparent “<новое_ОИ_подразделения>" X1 С помощью сценария на языке VBScript ' Этот код перемешает объекты из "старого" подразделения в "новое" ' .... SCRIPT CONFIGURATION ...- strOldOrgllnlt - “<стзрое_0И_подразделения>" ' Например: ou-Eng Tools.dc-rallencorp.dc-com strNev.OrgUnit - "<ноеое ОИ подразделения^' ' Например: ou-Tools.dc-ra11encorp.dc-com ’ ....- END CONFIGURATION"------ set objOldOU - GetObjectC"LDAP://“ & strOldOrgUnit) set objNeuOU - GetObjectC"LDAP://" & strNewOrgUnit) for each objChildObject in objOldOU Wscrlpt.Echo "Moving " & objChildObject.Name obJNewOU.MoveHere objChildObject.ADsPath, objChildObject.Name next Комментарий К решению с помощью графического пользовательского интерфейса Если нужно переместить за один раз более 2000 объектов, измените стандартную установку, определяющую количество отображаемых объектов. Как это делается, рассказывается в рецепте 5.3.
5.7. Перемещение подразделения 177 К решению с помощью интерфейса командной строки Поскольку утилита dsrnove может перемещать объекты по одному, в данном реше- нии используется команда for, в которой выполняется проход по всем дочерним объектам, возвращенным командой dsquery. Обратите внимание, что для переме- щения более 100 объектов нужно задать в команде dsquery ключ -1 Imit,а после него указать либо максимальное количество объектов, либо 0—в таком случае пере- мещаться будут все объекты. К решению с помощью сценария на языке VBScript Дополнительные сведения о методе MoveHere приведены в рецепте 4.17 (глава 4). Смотрите также Из рецепта 4.17 (глава 4) вы узнаете, как перемещать объекты, а из рецепта 5.3 — как выводить объекты, содержащиеся в заданном подразделении. Ознакомьтесь с документом MSDN: IADsContainer::MoveHere. 5.7. Перемещение подразделения Проблема Требуется переместить подразделение и все его дочерние объекты в другое место дерева каталога. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользовате- ли и компьютеры), выберите команду Connect to Domain (Подключение к доме- ну), введите имя домена и щелкните на кнопке ОК. 3. На левой панели откройте подразделение, которое хотите переместить. 4. Щелкните на нем правой кнопкой мыши и в появившемся контекстном меню выберите команду Move (Переместить). 5. Выберите для подразделения новый родительский контейнер и щелкните по- сле этого на кнопке ОК. С помощью интерфейса командной строки > dsmove "<ОИ_подразделения>" -newparent "<0И_нового_род_контейнера>" С помощью сценария на языке VBScript set objOU - Get0bject('“L0AP://<?^_HOfioro_род_контейнера>") objOU.MoveHere "LDAP:/1<ОИ_подразделения>", ,’<огносительное_0И_подразделения>"
178 Глава 5. Подразделения Комментарий Одним из достоинств Active Directory является удобство структуризации данных Перемещение подразделения, даже содержащего сложную иерархию других под- разделений и объектов, никак не отражается на дочерних объектах. Если для какого-либо приложения имеет значение местоположение опреде- ленных объектов, после их перемещения нужно заменить в этом приложении со- ответствующие ссылки. Разумеется, желательно, чтобы приложения не использо- вали отличительные имена объектов, а обращались к объектам исключительно посредством GUID. Не следует забывать и о влиянии на новое родительское подразделение унас- ледованных ACL и групповой политики Смотрите также Ознакомьтесь с документами MS КВ 313066 (HOW ТО: Move Users, Groups and Organizational Units Within a Domain in Windows 2000) и MSDN: lADsContai- nen.MoveHere. 5.8. Определение количества дочерних объектов в подразделении Проблема Требуется определить, имеются ли у подразделения дочерние объекты и сколько их. Решение1 С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выберите команду Browse ► Search (Поиск ► Найти). 3. В поле BaseDN (Отличительное имя базы) введите <ОИ_подразделения>. 4. В поле Filter (Фильтр) введите (objectclass=*). 5. Установите переключатель в области Scope (Область поиска) в позицию Base. 6. Щелкните на кнопке Options (Параметры) и в поле Attributes (Атрибуты) введите msDS-Approx-Inmed-Subordinates. 7. Щелкните на кнопке ОК, затем — на кнопке Run (Выполнить), и все результа- ты поиска будут выведены на правой панели. С помощью интерфейса командной строки > dsquery * 'ОИ_подраз деления^' -scope base -attr msDS-Approx-Immed-Subordinates 1 Для выполнения этого рецепта необходимо, чтобы функциональный уровень домена соответствовал Windows Server 2003.
5.9. Делегирование функций управления подразделением 179 С помощью сценария на языке VBScript ' Этот код выводит данные о приблизительном количестве дочерних объектов в подразделении set objOU - GetObjectCLDAP://<ОИ_подрдзделения>") objOU.GetlnfoEx Array("msDS-Approx-Irrmed-Subordinates”). 0 WScript.Echo "Number of child objects: " & _ objOU.Get("ms DS-Approx-1 nrned-Subo rdinates”) Комментарий Атрибут msDS-Approx- Immed-Subordi nates является нововведением Windows Ser- ver 2003. В нем хранится информация о приблизительном количестве дочерних объектов первого уровня, содержащихся в данном контейнере или подразделении. Заметьте, что это не точное число, при использовании больших контейнеров оно может отличаться от реального на 10 %. Благодаря этому атрибуту приложения могут быстро определить ориентировочный размер контейнера и подобрать для него подходящий способ отображения. Отметим, что атрибут msDS-Approx-Immed-Subordi nates является вычисляемым, то есть его значение не хранится в Active Directory подобно значениям других ат- рибутов. Система вычисляет его в ответ на запрос приложения. В решении на ос- нове сценария VBScript вызывается метод GetlnfoEx, поскольку некоторые вы- числяемые атрибуты, в том числе и описываемый, нельзя получить с помощью метода Getlnfo или Get. Если данную задачу нужно выполнить в Windows 2000 Server Active Directory, придется запросить объекты верхнего уровня, входящие в состав подразделения, и подсчитать их количество. Разумеется, этот метод не столь эффективен, как об- ращение к атрибуту msDS-Approx-Immed-Subordi nates в Windows Server 2003. Смотрите также Рекомендуем ознакомиться с документом MSDN: GetlnfoEx. 5.9. Делегирование функций управления подразделением Проблема Требуется делегировать разрешения на администрирование подразделения опре- деленной группе пользователей, на которую будет возложена функция управления входящими в его состав объектами. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры). 2. Если необходимо сменить домен, щелкните на элементе Active Directory Users and Computers (Active Directory — пользователи и компьютеры) на левой панели,
180 Глава 5. Подразделения выберите команду Connect to Domain (Подключение к домену), введите имя до- мена и щелкните на кнопке ОК. 3. На левой панели откройте нужное подразделение, щелкните на нем правой кнопкой мыши и выберите в контекстном меню команду Delegate Control (Де- легирование управления). 4. Пользуясь кнопкой Add (Добавить), сформируйте список пользователей и групп, которым требуется делегировать административные функции, а затем щелк- ните на кнопке Next (Далее). 5. Выберите тип разрешений, которые будут предоставлены указанным вами пользователям и группам, и щелкните на кнопке Next (Далее). 6 Щелкните на кнопке Finish (Готово). С помощью интерфейса командной строки Настройка ACL может производиться из командной строки с использованием утилиты dsacls, входящей в состав пакета Support Tools. За дополнительными сведениями по данному вопросу обратитесь к рецепту 14 10 (глава 14). Комментарий Хотя Active Directory позволяет делегировать функции администрирования под- разделения конкретному пользователю, лучше делегировать их группе. Даже если эти функции будет выполнять один пользователь, создайте для него отдельную группу и укажите ее в ACL подразделения. В таком случае в будущем при необ- ходимости заменить этого пользователя другим достаточно будет исключить его из группы и добавить в нее нового пользователя — ACL подразделения при этом изменять не придется. Смотрите также Об изменении ACL объекта вы узнаете из рецепта 14.10 (глава 14). .10. Предоставление разрешения на создание подразделений в контейнерах Проблема Требуется создать подразделение в контейнере. По умолчанию ограничения схемы Active Directory не позволяют это сделать. Решение С помощью графического пользовательского интерфейса • 1. Откройте оснастку Active Directory Schema (Схема Active Directory) как пользо- ватель, входящий в группу администраторов схемы. О применении данной осна- стки подробно рассказано в рецепте 10.1 (глава 10).
5.11. Связывание объекта групповой политики с контейнером 181 2. Откройте контейнер Oasses (Классы), щелкните правой кнопкой мыши ла классе organizational Unit и выберите в контекстном меню команду Properties (Свойства) 3. Перейдите на вкладку Relationship (Отношения) и рядом с полем Possible Superior (Возможно старший) щелкните на кнопке Add Superior (Добавить класс-кон- тейнер) в Windows Server 2003 или на кнопке Add (Добавить) в Windows 2000. 4. Выберите контейнер и щелкните на кнопке ОК 5. Щелкните на кнопке ОК еще раз. С помощью интерфейса командной строки Создайте LDIF-файл с именем oujn_container.ldf и следующим содержимым. dn. cn=organizational-unit.cn-schema.cn=configuration.<корневое_0И_лесд> changetype: modify add: possSuperiors possSuperiors: container после чего выполните команду для импортирования изменений: > Idifde -i -f ou_in_conta1ner.ldf С помощью сценария на языке VBScript ’ Код изменяет схему таким образок, чтобы в контейнерах * можно было создавать подразделения Const ADS_PROPERTY_APPEND - 3 set objRootDSE - GetObject('LDAP://RootDSE") set objOUClass = Get0bject("LDAP://cn=organ1zaticnal-unit.” & objRootDSE.Get("schemaNamingContext") ) objOUClass PutEx ADS_PROPERTY_APPEND. "possSuperiors". Array("container") objOUClass.SetInfo Комментарий Для того чтобы разрешить создание подразделений в контейнерах, нужно внести в схему небольшое изменение: сделать container одним из классов, вышестоящих по отношению к классу organizational Unit (добавив его в атрибут possSuperiors). Смотрите также В рецепте 10.1 (глава 10) рассказывается об использовании оснастки Active Direc- tory Schema (Схема Active Directory). Кроме того, можно обратиться к документу MS КВ 224377 (Configuring Different Containers to Hold Organizational Units). 5.11. Связывание объекта групповой политики с контейнером Проблема Требуется применить установки объекта групповой политики (GPO) к пользова- телям и компьютерам, входящим в состав заданного подразделения связав этот объект с подразделением.
182 Глава 5. Подразделения Решение С помощью графического пользовательского интерфейса 1. Откройте консоль управления групповой политикой (GPMC). 2. На левой панели откройте контейнер интересующего вас леса. 3. Разверните на левой панели домен и найдите в нем подразделение, с которым хотите связать объект групповой политики. 4. Щелкните правой кнопкой мыши на подразделении и в открывшемся контек- стном меню выберите команду Create and Link a GPO Неге (Создать и связать GPO), если объект групповой политики еще не создан, или команду Link ап Existing GPO (Связать существующий GPO), если он уже существует. С помощью сценария на языке VBScript ’ Этот код связывает объект групповой политики с подразделением в указанном домене ’ ..... SCRIPT CONFIGURATION ----- strDomainDN - "<ОИ_доменд>" ‘ Например: dc-ral1encorp.dc-com strGPO - ’'<mhb_GPO>" ' Например: WorkstationsGPO strOUDN - ',<0И_подразделения>'’ ' Например: ou-Workstations.dc-rallencorp.dc-com ' ----- END CONFIGURATION -------- strBaseDN - "<LDAP://cn-poHcies.cn-system.de-" & strDomainDN & strFilter - "(&(objectcategory=*grouppolicycontainer)" & _ "(objectclass-grouppolicycontainer)" & _ "(displayname-" & strGPO & "));" strAttrs - “ADsPath:" strScope - “OneLevel" set objConn - CreateObjectC'ADODB.Connection”) objConn.Provider - "ADsDSOObject” objConn.Open "Active Directory Provider" set objRS - objConn.Execute!strBaseDN & strFilter & strAttrs & strScope) 1f objRS.EOF O TRUE then ObjRS.MoveFirst end if if objRS.RecordCount = 1 then strGPOADsPath = objRS.Fields(O).Value Wscript.Echo "GPO Found: ” & strGPOADsPath el seif objRS.RecordCount - 0 then UScript.Echo "Did not founding matching GPO for: " & strGPO Wscript.Quit el seif objRS.RecordCount > 1 then WScript.Echo "More than 1 GPO found matching: " & strGPO Wscript.Quit end if set objOU - GetObjectCLDAP://" & strOUDN) on error resume next strGPLink - objOU.GetCgpLink") if Err.Number then 1f Err.Number о -2147463155 then WScript.Echo "Fatal error while retrieving gpLink attribute: " & _
5.11. Связывание объекта групповой политики с контейнером 183 Err.Description Wscript.Quit end i f end if on error goto 0 objOU.Put "gpLink". strGPLink & "[" & strGPOADsPath & ":0]" objOU.SetInfo WScrlpt.Echo “GPO successfully linked" Комментарий Ссылка на объект групповой политики, связанный с определенным подразделением, хранится в атрибуте gpLink этого подразделения. Формат данного атрибута не- сколько необычен, так что изменение его значения вручную или программным путем следует выполнять осторожно. Поскольку с подразделением может быть связано несколько GPO, то атрибут gpLink должен хранить несколько значений, но при этом он не является составным, как естественно было бы предположить. Атрибут gpLink имеет единственное значение, полученное в результате объедине- ния путем конкатенации в одной строке значений атрибута ADsPath всех объектов групповой политики. Каждое из таких значений заключено в квадратные скобки, и в конце его стоит пара символов ; 0, если связь включена, или ; 1, если связь от- ключена. Приведем возможное значение свойства gpLi nk, содержащего две связи: [LDAP:7/cn«{6491389E-C302-418C-8D9D-BB24E65E7507}.cn-poli cies.cn=system.DC=ral1encorp. DC-com:0][LDAP://cn-{6AC1786C-016F-UD2-945F-00C04fB984F9}.cn-policies.cn-systeiii. DC-ral1encorp.DC“Com;0] В рецепте 9.12 (глава 9) предложен более эффективный сценарий на языке VBScript, позволяющий связать объект групповой политики с подразделением посредством API GPMC. Смотрите также В главе 9 дана более подробная информация об использовании консоли управле- ния групповой политикой. Кроме того, обратитесь к документу MS КВ 248392 (Scripting the Addition of Group Policy Links).
0 Пользователи 6.0. Введение Учетные записи пользователей относятся к числу наиболее часто применяемых типов объектов Active Directory. В этой главе будут рассмотрены многие важные вопросы и проблемы, которые приходится решать системным администраторам, так как управление учетными записями пользователей в Windows 2000 и Windows Server 2003 осуществляется посредством Active Directory. В частности, с помо- щью данного приложения производится управление всей информацией, связан- ной с паролями, членством пользователей в группах, отключением учетных запи- сей и истечением срока их действия, а также входом пользователей в систему. Анатомия объекта user В Active Directory вся информация о пользователе содержится в его учетной за- писи, представленной объектом user. По умолчанию объекты user располагаются в контейнере cn=Users в корневом каталоге домена, хотя, разумеется, могут быть созданы и в других контейнерах и подразделениях домена. В табл. 6.1 приведен список важнейших атрибутов объекта user, но следует учесть, что этот список да- леко не полон. Таблица 6.1. Атрибуты объекта user Атрибут Описание accountExpi res Большое целое число, указывающее, когда истечет срок действия учетной записи пользователя. См. также рецепт 6.25 СП Относительное отличительное имя объекта user. Обычно это имя пользователя, которое он задает при входе в систему dlsplayName Выводимое имя пользователя, которым обычно является его полное имя (например, Иваненко Григорий Тимофеевич) givenName Имя (и отчество) пользователя homeDirectory Локальный или UNC-путь к домашнему каталогу пользователя. См. также рецепт 6.29 honieDrive Имя диска, поставленное в соответствие домашнему каталогу пользователя. См. также рецепт 6.29
6.0. Введение 185 Атрибут Описание lastLogon Время последнего входа пользователя в систему, не реплицируемое иа другие контроллеры домена lastLogonTimestamp Приблизительное время последнего входа пользователя в систему, реплицируемое на другие контроллеры домена. Этот атрибут является нововведением Windows Server 2003. См. также рецепт 6.27 managedObjects Связанный с managedBy (см. рецепт 6.30) составной атрибут, содержащий список отличительных имен объектов, которыми управляет данный пользователь lockoutTime Большое целое число, представляющее время последней блокировки пользователя. См. также рецепт 6.9 memberOf Список отличительных имен групп, в которые входит данный пользователь. См. также рецепт 6.14 objectsID SID пользователя, представленный в виде двоичной строки primaryGroupID Идентификатор основной группы пользователя. См. также рецепт 6.15 profilePath UNC-путь к папке профиля. См. также рецепт 6.29 pwdLastSet Большое целое число, являющееся временем последней установки пароля пользователя. См. также рецепт 6.23 sAMAccountName NetBIOS-имя пользователя, называемое именем учетной записи SAM. Используется для подключения к компьютерам, работающим под управлением более ранних версий операционных систем sidHistory Составной атрибут, содержащий список кодов безопасности (SID), использовавшихся для идентификации данного пользователя (так называемый журнал кодов безопасности) scriptPath Путь к сценарию входа, выполняющемуся при входе пользователя в систему. См. также рецепт 6.29 sn Фамилия пользователя tokenGroups Список SID групп данного домена, в которые входит пользователь непосредственно и косвенно, вследствие вложенности групп unicodePwd Пароль пользователя, хранящийся в виде двоичной строки. Этот атрибут нельзя запрашивать непосредственно userAccountControl Флаги учетной записи, определяющие ее состояние, параметры управления паролем и т. п. userprincipal Name Имя учетной записи пользователя в форме адреса электронной почты, которое иногда задается при входе в систему. Данная разновидность имени называется UPN (User Principal Name имя пользователя-участника системы безопасности) userworkstations Составной атрибут, содержащий список компьютеров, на которых может работать пользователь
186 Глава 6. Пользователи 6.1. Создание учетной записи пользователя Проблема Требуется создать новую учетную запись пользователя, то есть объект user. Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Users and Computeps (Active Directoiy — поль- зователи и компьютеры). 2. Если нужно сменить домен, щелкните правой кнопкой мыши на элементе Ac- tive Directory Users and Computeps (Active Directory - пользователи и компьюте- ры) на левой панели в открывшемся контекстном меню выберите команду Connect to Domain (Подключение к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели откройте родительский контейнер нового пользователя, щелкните на нем правой кнопкой мыши и в появившемся контекстном меню выберите команду New ► User (Создать ► Пользователь). 4. Введите имя, инициалы и фамилию пользователя, отредактируйте выводи- мое имя пользователя, затем укажите UPN-имя, под которым он будет вхо- дить в систему. Если пользователь для подключения к компьютерам, рабо- тающим под управлением Windows NT, Windows 98 или Windows 95, будет использовать другое имя, задайте таковое. Данное имя называется именем учетной записи SAM Завершив ввод, щелкните на кнопке Next (Далее). 5 Введите и подтвердите пароль, установите его параметры и щелкните на кноп- ке Next (Далее). 6. Щелкните на кнопке Finish (Готово). С помощью интерфейса командной строки > dsadd user "ОИ_пользователя>" -ирп <ЦРН-имя_пользователя> -fn "<имяутчество_пользователя>'' J -In "<фанилия_пользователя>“-й1$р\ау "'<отобрд)каеное_иня_пользовдтеля>‘' J -samid <5АМ-имя_пользователя>“ -pwd <лароль_пользователя> С помощью сценария на языке VBScript Данная константа взята из перечисления ADS_USER_FLAG_ENUM Const ADS_UF_NORMAL_ACCOUNT - 512 set objParent - GetObject("LDAP ://0^_род_конге»?нера>") set objUser ° objParent.CreateC'user". '‘сп-<иня_пользователя>п) objUser.Put "sAMAccountName", “<5АМ-имя_пользователя>'' objUser.Put "userPrincipalName". '‘<иР^-имя_пользователя>" objUser.Put "givenName". "<имя_отчество_пользователя>" objUser.Put "sn". "<фамилия_пользователя>" objUser.Put "dlsplayName". "<иня_отчество_лользователя> _ <фамилия_пользователя>“ ObjUser.Put "userAccountControl". ADS_UF_NORMAL_ACCOUNT objUser.Setinfo objUser .SetPassword( "<napo/7b>") ' Например: joes ' Например: joes ' Например: joes@rallencorp.com ' Например: Джо ' Например: Смит ' Например: Джо Смит
6.2. Создание большого числа учетных записей пользователей 187 objUser.AccountDisabled - FALSE objUser.Setinfo Комментарий Единственным необязательным атрибутом, устанавливаемым при создании новой учетной записи пользователя, является sAMAccountName — имя учетной записи, применяемое при взаимодействии с доменами низших уровней Для того чтобы учетная запись сразу же стала доступна пользователю, нужно ее включить, для чего следует присвоить атрибуту userAccountControl значение 512, а также задать пароль (см. рецепт 6 17) Если при входе в систему разрешено задавать UPN-имена, проверьте, установлен ли атрибут userPrincipalName. В Windows Server 2003 существует еще один способ создания учетной записи пользователя — с применением класса InetOrgPerson, описанного в рецепте 6.3 Объекты этого класса подобно объектам user, предназначены для аутентификации пользователя и ограничения доступа к ресурсам К решению с помощью графического пользовательского интерфейса Для того чтобы установить дополнительные атрибуты, дважды щелкните на соз- данной учетной записи пользователя. Откроется диалоговое окно с несколькими вкладками, на которых будут сгруппированы связанные между собой атрибуты К решению с помощью интерфейса командной строки Еще несколько атрибутов можно установить, воспользовавшись командой dsadd user. Для того чтобы получить полный список ее параметров, выполните команду dsadd user /?. К решению с помощью сценария на языке VBScript Дополнительная информация об объекте userAccountControl и флагах, которые можно для него устанавливать, приведена в рецепте 6.24. Смотрите также В рецепте 6.2 описана процедура пакетного создания учетных записей пользова телей, а в рецепте 6 3 — процедура создания учетной записи типа inetOrgPerson. Просмотрите документ MSDN: ADS_USER FLAG_ENUM 6.2. Создание большого числа учетных записей пользователей Проблема Требуется создать большое количество объектов user, которые будут использованы либо во время тестирования системы, либо при первоначальном заполнении ка- талога Active Directory сведениями о пользователях (например, сотрудниках клиентах, студентах и т. д )
188 Глава б. Пользователи Решение В приведенных далее примерах в подразделении Bulk домена railencorp.сот соз- дается 1000 учетных записей пользователей Для них задаются пароли, но ника- кие другие параметры не настраиваются Если же вы будете использовать пред- лагаемый код на практике, можете дополнить его таким образом, чтобы получить возможность заполнять требуемые атрибуты. С помощью интерфейса командной строки > for /L in (1.1.1000) do dsadd user cn=User$i,ou=bulk dc-rallencorp.dc-com pwd (JserXi С помощью сценария на языке VBScript ‘ Этот код создает большое количество учетных записей пользователей, имена ’ которых последовательно нумеруются. Например: Userl, User2. User3. .. . ‘ ----- SCRIPT CONFIGURATION ----- IntNumUsers - 1000 * Количество создаваемых учетных записей пользователей strParentON - “<0И_род_контейнерд>“ ' Например: ou-bulk.dc=emea.dc=rallencorp,dc-com •------END CONFIGURATION —......- ’ Данная константа взята из перечисления ADS_USER_FLAG_ENUM Const ADS_UF_NORMAL_ACCOUNT = 512 set objParent - GetObjectCLDAP://" & strParentDN) for 1 - 1 to intNiMJsers strUser = "User" & 1 Set objUser = objParent.Create("user", “cn-" & strUser) objUser.Put "sAMAccountName". strUser objUser.Put "userAccountControl". ADS_UF_NORMAL_ACCOUNT objUser.Setinfo objUser.SetPassword(strUser) objUser.AccountDi sabled-FALSE objUser.Setinfo Wscrlpt.Echo "Created " & strUser next WScript.Echo "" WScript.Echo "Created " & IntNumUsers & " users” Комментарий С помощью ADSI и новых DS-утитит Windows Server 2003 с интерфейсом типа командной строки можно быстро и без труда создавать сотни и тысячи учетных записей пользователей. Автор применял оба способа решения проблемы (создавая по 1000 объектов) в экспериментальном домене на однопроцессорном компьюте- ре с использованием утилиты dsadd и сценария на языке VBScript В первом слу- чае операция была завершена менее чем за 5 мин, во втором — за 1,5 мин. Оба ме- тода требуют заполнения незначительного количества атрибутов, но даже если их будет больше, все равно операции выполняются довольно быстро При необ- ходимости код можно изменить таким образом, чтобы информация извлекалась из файла или базы данных.
6.3. Создание объекта InetOrgPerson 189 Смотрите также В рецепте 6.1 рассказывается о создании отдельного объекта user. 6.3. Создание объекта inetOrgPerson Проблема Требуется создать объект класса inetOrgPerson — стандартного класса LDAP, пред- ставляющего пользователей. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Uses and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните на элементе Active Directory Uses and Computers (Active Directory — пользователи и компьютеры), выберите команду Connect to Domain (Подключение к домену), введите имя до- мена и щелкните на кнопке ОК. 3. На левой панели откройте родительский контейнер, в который вы хотели бы поместить учетную запись нового пользователя, щелкните на нем правой кнопкой мыши и в открывшемся контекстном меню выберите команду New ► InetOrg- Person (Создать ► InetOrgPerson). 4. Введите имя, инициалы и фамилию пользователя, его полное имя, затем имя, под которым он будет входить в систему. Щелкните на кнопке Next (Далее). 5. Введите и подтвердите пароль, установите его параметры и щелкните на кноп- ке Next (Далее). 6. Щелкните на кнопке Rnish (Готово). С помощью интерфейса командной строки Поскольку команда dsadd не поддерживает создание объектов inetOrgPerson, вос- пользуемся командой Idifde. Создайте LDIF-файл с именем create_.inetorgperson.ldf и таким содержимым: dn: <ОИ_пользоватепя> changetype: add objectclass: inetorgperson sAMAccountName: <нмя_пользователя> userAccountControl: 512 Замените в нем имя <0И_пользователя> отличительным именем пользователя, для которого вы хотите создать учетную запись, а имя <имя_пользователя> — учет- ным именем пользователя, после чего выполните такую команду > Idifde -1 -f create_inetorgperson.ldf
190 Глава 6. Пользователи С помощью сценария на языке VBScript ' Этот код создает объект InetOrgPerson set objParent - Get0bject("LDAP://<6W_po/?_KOwreifHepa>”) set objUser - objParent.Create("Inetorgperson". "сп-<иия_лояьзовагеяя>") • Данная константа взята из перечисления ADS_USER_FLAG_ENUM Const ADS_UF_NORKAL_ACCOUNT - 512 objUser.Put "sAMAccountName", *<иня_пользовдтеля>" objUser.Put "userPri nci pal Name”. '"^РМ-имЯ-Пользователя^ objUser.Put "givenName". '^иняутчествоуользователя^ objUser.Put "sn". "<фамилия_пользователя>" objUser.Put "displayName", “<имя_отчество_лользователя> <фанилия_пользователя>" objUser.Put "userAccountControl". ADS_UF_NORMAL_ACCOUNT objUser.Setinfo objUser.SetPassword(“<лароль>") objUser.AccountDIsabled - FALSE objUser.Setinfo Комментарий Класс inetOrgPerson определен в спецификации RFC 2798. Это наиболее удачный формат учетной записи пользователя, существующий в LDAP, и большинство производителей LDAP-продуктов его поддерживают. В первых версиях Active Directory Microsoft поддержка данного класса не была реализована, но сейчас, к счастью, существует нужная надстройка. В большинстве реализаций Active Di- rectory используется класс user, и маловероятно, что они будут переработаны. Пакет InetOrgPerson Kit для Windows 2000 можно загрузить с сайта Microsoft, расположенного по адресу http://msdn.microsoft.com/library/en-us/dnactdir/html/inet- opkitasp. Для поддержки дополнительного класса и его атрибутов придется рас- ширить схему. Правда, при этом может возникнуть конфликт с Windows Server 2003. Более подробно об использовании класса InetOrgPerson рассказано в документе MS КВ 314649. Windows Server 2003 Active Directory поддерживает класс i netOrgPerson. Те- перь для пользователей можно создавать объекты этого класса, и они будут при- меняться для аутентификации точно так же, как объекты класса user. Если вы еще не ввели Active Directory в эксплуатацию и планируете интеграцию значи- тельного количества приложений на базе LDAP, в которых используются объекты inetOrgPerson, возможно, вы предпочтете их объектам user. При этом в вашем рас- поряжении останутся те же функциональные возможности, та же информация, и даже появятся новые атрибуты. Однако следует учитывать, что некоторые сред- ства Microsoft, и в частности утилита DS, не поддерживают операций с объектами InetOrgPerson. Смотрите также В рецепте 6.1 рассказывается о создании объекта user. Ознакомьтесь с докумен- том RFC 2798 (Definition of the inetOrgPerson LDAP Object Class).
6.4. Одновременная установка атрибута для нескольких пользователей 191 6.4. Одновременная установка значения атрибута для нескольких пользователей Проблема Требуется установить значение атрибута сразу для нескольких пользователей. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, щелкните правой кнопкой мыши на элементе Ac- tive Directory Users and Computers (Active Directory - пользователи и компьюте- ры) на левой панели, затем выберите команду Connect to Domain (Подключе- ние к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели откройте родительский контейнер объектов, атрибут которых хотите изменить. 4. На правой панели выделите эти объекты, затем щелкните на них правой кноп- кой мыши и в открывшемся контекстном меню выберите команду Properties (Свойства). 5. Установите флажок атрибута или нескольких атрибутов, которые вы хотите отредактировать, и введите новые значения. 6. Щелкните на кнопке ОК. ПРИМЕЧАНИЕ------------------------------------------------------ Для выполнения этого рецепта требуется версия оснастки Active Directory — Users and Computers (Active Directory — пользователи и компьютеры) для Windows Server 2003. С помощью интерфейса командной строки Следующая команда устанавливает для каждого пользователя из указанного кон- тейнера (<0И_род_контейнера>) домашний каталог, расположенный на определенном файл-сервере (<иня_файпового_сервера>). Вместо имени пользователя ($usernameJ) в качестве имени каталога указывается значение атрибута sAMAccountName объекта user. > for /F "usebackq delims-""" Xi in (‘dsquery user "<ОИ_род_контейнера>" -limit 0 -scoped onelevel’) do dsmod user -hmdir 'У\<имя^райлового_сервера>\$и$,егпж$‘' Xi С помощью сценария на языке VBScript Этот код устанавливает для каждого пользователя из указанного контейнера начальный каталог, расположенный на определенном файл-сервере, а именем данного каталога служит значение sAMAccountName каждого пользователя. set objParent - GetObject("LDAP://<W_род_контейнера>‘) objParent.Filter - Array("user") for each objUser in objParent Wscript.Echo "Modifying “ & objUser.Get("sAMAccountName") objUser.HomeDirectory - “\\<имя_файлового_сервера>\,‘ & _ objUser.Get(“sAMAccountName") objUser.Setinfo next
192 Глава 6. Пользователи Комментарий Очень часто в процессе администрирования Active Directory возникает необхо- димость обновить значения атрибутов сразу нескольких пользователей, что может быть связано, например, с некоторыми организационными изменениями В при- веденных выше решениях показано, как изменить значение атрибута для всех объектов user из одного контейнера, но для выбора изменяемых объектов user можно использовать и иные критерии. Правда, оснастка Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры) не предоставляет такой возможности, но в Windows Ser- ver 2003 с ее помощью можно создать сохраненный запрос, который бы возвращал объекты user отобранные с учетом определенного критерия. Выполнив такой за- прос, вы сможете выделить имена найденных пользователей и изменить их атри- буты так, как описано выше. В случае, когда изменение атрибутов объектов производится с помощью ко- мандной строки, команду dsquery user можно модифицировать таким образом, чтобы она отбирала объекты нужным вам способом. Сказанное относится и к сце- нарию на языке VBScript. Он позволяет выполнить и более сложный поиск, исполь- зуя вместо метода Filter запрос ADO О том, как осуществляется поиск объектов с применением ADO, подробно рассказано в рецепте 4 5 (глава 4). 6.5. Перемещение учетной записи пользователя Проблема Необходимо переместить объект user в другой контейнер или подразделение. Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры) 2 Если нужно сменить домен, щелкните на элементе Actve Directory Users and Computers (Active Directory - пользователи и компьютеры) на левой панели, выберите команду Connect to Domain (Подключение к домену), введите имя до- мена и щелкните на кнопке ОК. 3. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти) 5. Щелкните правой кнопкой мыши на имени нужного пользователя и в от- крывшемся контекстном меню выберите команду Move (Переместить) 6 Найдите и выделите контейнер или подразделение, куда хотите переместить объект user. 7. Щелкните на кнопке ОК.
ь.о. изменение имени пользователя 1УЗ С помощью интерфейса командной строки > dsmove "<ОИ_пользо8ателя>" -newparent ”<ОИ_нового_роп_контейнера>" С помощью сценария на языке VBScript ' Этот код перемещает учетную запись пользователя из одного контейнера в другой SCRIPT CONFIGURATION ----- strUserDN - "<0И_пользователя>" ' Например: cn-rallen.cn-users.dc-raHencorp,dc-com strOUDN - ’<ОИ нового_род_контейнера>" ' Например. ou-Sales,derailencorp,dc-com END CONFIGURATION -------- Set objUser - GetObject("LDAP://" & strUserDN) Set objOU - GetObject("LDAP://" & strOUDN) objOU.MoveHere objUser.ADsPath, objUser.Name Комментарии Перемещение учетной записи пользователя из одного контейнера (или подразде- ления) в другой никак на ней не отражается Правда, иногда изменяются установ- ки безопасности или же к учетной записи применяется другой объект групповой политики — тот, который связан с ее новым родительским контейнером. Смотрите также В рецепте 4.17 (глава 4) рассказывается о перемещении объектов между различными подразделениями. 6.6. Изменение имени пользователя Проблема Требуется изменить имя пользователя в его учетной записи. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. Введите имя пользователя и щелкните на кнопке Find Now (Найти) 4. Щелкните правой кнопкой мыши на имени нужного пользователя и в от- крывшемся контекстном меню выберите команду Rename (Переименовать). 5. Откроется окно, где можно отредактировать имя, фамилию и инициалы поль- зователя, его выводимое имя, UPN-имя для входа в систему, а также имя учетной записи SAM. 6. Внесите необходимые данные и щелкните на кнопке ОК.
ХУ*» I HdBd О. I lUJIbdUBd ICJ1И С помощью интерфейса командной строки Приведенная ниже команда изменяет относительное отличительное имя пользо- вателя: > dsmove "<0И пользователя^' -newnarce "<новое_имя_пользователя>" С помощью команды dsmod user можно также изменить UPN-имя (ключ -upn), имя и отчество (-fn), фамилию (-In), и выводимое имя (-display). Так, следую- щая команда изменяет UPN-имя и фамилию пользователя: > dsmod user "<ОИ_пользователя>" -upn "<новое_иРН-имя_пользователя>" -In "<новая_фамилия_пользователя>" С помощью сценария на языке VBScript ' Этот код изменяет относительное отличительное имя пользователя ' и значение атрибута sAMAccountName (имя учетной записи SAM) ' ---- SCRIPT CONFIGURATION ---- strParentDN » "<ОИ_рол_контейнера>" ' Например: cn-Users.dc-rallencorp.dc**com strUserOldName = "<старое_имя_лользователя>" ’ Например: jsmith strUserNewName = "<новое_икя пользователя^' ' Например: Jim 1 ....- END CONFIGURATION------- set objCont » GetObject(“LDAP://” & strParentDN) objCont.MoveHere "LDAP://cn-" & strUserOldName & & strParentDN. ''cn=" & strllserNewName set objUser - GetQbjectC'LDAP^/cn-” & strUserNewName & & strParentDN) objUser.Put "sAMAccountName". strUserNewName objUser.SetInfo WScrlpt.Echo "Rename successful" Комментарий Под фразой «переименование объекта user» в Active Directory можно понимать несколько разных действий. С точки зрения объектной структуры каталога пере- именование объекта означает изменение его относительного отличительного имени (RDN), например замену имени cn=jsmith именем cn=joe. Однако на практике на- верняка потребуется заменить и другие имена. Предположим, что, выбирая имена для пользователей, вы следовали шаблону первый_инициап_фамилия, так что, ска- жем, учетная запись пользователя Joe Smith получила имя jsmith. Но если в один прекрасный день этот человек сменит фамилию, назвавшись Einstdn, его учет- ную запись придется переименовать в jeinstein. Для полного переименования пользователя нужно изменить значения следующих атрибутов: О RON (относительное отличительное имя) — с cn=jsmith на cn=jeinstein; О sAMAccountName (имя учетной записи SAM) — на jeinstein; О userPrincipalName (UPN-имя) — najeinstein@rallencorp.com; О mail (адрес электронной почты) — на jeinstein@rallencorp.com; О sn (фамилия) — на Einstein. Как видите, смена фамилии пользователем повлекла за собой изменение зна- чений пяти атрибутов представляющего его объекта. Причем после изменения первых трех из них нужно, чтобы пользователь вышел из системы и снова вошел
в нее после того, как изменения будут реплицированы. Поскольку в большинстве сервисов и приложений используются GUID и SID пользователя, то есть его не- изменные идентификаторы, иных последствий это изменение, скорее всего, иметь не будет. Смотрите также В рецепте 4.19 (глава 4) рассказывается, как осуществить переименование объектов. 6.7. Копирование учетной записи пользователя Проблема Требуется скопировать существующую учетную запись пользователя, которая послужит шаблоном для создания новой учетной записи. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. На левой панели откройте родительский контейнер исходного объекта user. 3. На правой панели щелкните правой кнопкой мыши на этом объекте и в от- крывшемся контекстном меню выберите команду Сору (Копировать). 4. Введите имя, фамилию, полное имя и UPN-имя пользователя (а также, если потребуется, имя учетной записи SAM) и щелкните на кнопке Next (Далее). 5. Введите пароль, проверьте корректность установленных параметров и щелкните на кнопке Next (Далее). 6. Щелкните на кнопке Finish (Готово). С помощью сценария на языке VBScript Этот код колирует атрибуты, заданные в массиве Attrs. из существующего объекта в новый ' ------ SCRIPT CONFIGURATION ------ arrAttrs - Array!"department"."co"."title,,,"l". "c”. "st") strParentDN = "<родитепьский_контейнер>" ’ Например: cn-Users.dc-ra11encorp,dc-com strTemplateUser - ’'<исходное_имя_пользовдтеля>“ ’ Например: template-user-sales strNewUser ° "<новое_имя_лользовдтеля>" ' Например: jdoe strPassword = "<пароль>" ' ------ END CONFIGURATION --------- Const ADS_UF_NORMAL_ACCOUNT = 512 1 from ADS_USER_FLAGJNUM
ISO । лава о i io;ibdut!d ieiiM Set objTemplate - GetObject("LDAP://cn-" & strTemplateUser & _ & strParentDN) Set objParent - GetObjectCLDAP://1' & strParentDN) Set objUser - objParent.CreateC’user”. ”cn-" & strNewUser) objUser.Put "sAMAccountName". strNewUser objUser.Put "userAccountControl". ADS_UF_NORMAL_ACCOUNT for each strAttr in arrAttrs objUser.Put strAttr. objTempi ate.Get(strAttr) next objUser.SetInfo objUser.SetPassword(strPassword) objUser.AccountDisabled - FALSE objUser.Setinfo Wscript.Echo "Successfully created user" Комментарий Для того чтобы создать копию учетной записи пользователя, нужно сначала создать новую учетную запись, а затем скопировать в нее из исходной значения ряда ат- рибутов. Оснастка Active Directory Users and Computers (Active Directory - пользо- ватели и компьютеры) копирует только те атрибуты, которые помечены в схеме как Copied when duplicating a user (Копировать атрибут при копировании учетной записи). В приведенном выше сценарии на языке VBScript используется жестко закодированный набор атрибутов. Если вас интересует, как задаются в схеме ко- пируемые атрибуты, обратитесь к рецепту 10.12 (глава 10). К решению с помощью графического пользовательского интерфейса Для того чтобы скопировать учетную запись пользователя с помощью оснастки Active Directory Users and Computers (Active Directory — пользователи и компьюте- ры), нужно найти исходный объект user. Это придется сделать вручную, посколь- ку в контекстном меню объекта в окне результатов поиска команда Сору (Копиро- вать) отсутствует. К решению с помощью сценария на языке VBScript В состав ADSI (Active Directory Service Interfaces — интерфейсы службы Active Directory) входит метод CopyHere, но он доступен только для провайдера NDS. Для провайдера LDAP он не реализован, и поэтому копирование объекта user с помощью этого метода не поддерживается. Смотрите также В рецепте 10.12 (глава 10) рассказывается, как просмотреть и изменить список атрибутов, полученных в результате копирования объекта user.
6.8. Разблокирование учетной записи пользователя Проблема Требуется разблокировать учетную запись пользователя. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры) 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. В раскрывающемся списке In (В) выберите домен. 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти). 5. Щелкните правой кнопкой мыши на объекте user и в открывшемся контекст- ном меню выберите команду Unlock (Включить учетную запись) 6. Щелкните на кнопке ОК. С помощью сценария на языке VBScript * Данный код должен разблокировать заблокированного пользователя 1 --- SCRIPT CONFIGURATION . strUsername = ‘'<иня_пользователя>’ ' Напринер: jsmith strDomain - "<Ме1В103-иня_домена>~ ' Например- RALLENCORP ’ --- END CONFIGURATION ---- set objUser - GetObject('WinNT //" & strDomain & "/“ & strUsername) if objUser IsAccountLocked - TRUE then objUser.IsAccountLocked - FALSE objUser.SetInfo WScrlpt.Echo "Account unlocked" else WScrlpt.Echo "Account not locked" end if Комментарий Если в домене включена блокировка учетных записей (см. рецепт 6.11), Active Directory будет периодически выполнять данную операцию. Блокировка учетной записи пользователя осуществляется в нескольких случаях, чаще всего из-за того, что пользователь по нескольку раз неверно вводит пароль или, изменив пароль забывает выйти из системы и войти повторно, ити же для него определено имя Диска, который соответствует домашнему каталогу пользователя. Для того чтобы программным путем определить заблокирован ли пользователь, следует воспользоваться имеющимся в ADSI методом lADsUser:: IsAccountLocked. Присвоив этому методу значение FALSE, пользователя можно разблокировать. К сожалению, в версии указанного метода, реализованного в провайдере LDAP,
имеется ошибка, поэтому приходится использовать провайдер WinNT. (Ошибка о которой идет речь, описана в документе MS КВ 250873.) Смотрите также В рецепте 6.9 рассказывается, как найти заблокированных пользователей, а в ре- цепте 611 — как просмотреть политику блокирования учетной записи. Кроме того, ознакомьтесь с документами MS КВ 250873 (Programmatically Changing the Lockout Flag in Windows 2000) и MSDN: Account Lockout. 6.9. Поиск заблокированных учетных записей пользователей Проблема Необходимо найти заблокированные учетные записи пользователей. Решение С помощью интерфейса командной строки Приведенная ниже команда находит все заблокированные учетные записи поль- зователей в домене, к которому относится заданный контроллер домена: > unlock <иня_контроплера_дсмена> * -view ПРИМЕЧАНИЕ----------------------------------------------------------- Утилита unlock.exe написана Джо Ричардсом (Joe Richards, http.//www.joeware.net/) Ее нетрудно загрузить с сайта Джо, расположенного по адресу http://www.joeware.netfwin32/zips/Unlock.zip. Комментарий Поиск заблокированных учетных записей, как это ни странно, является довольно сложной задачей. Если вы предполагаете, что достаточно выполнить запрос, по- добный тому, с помощью которого осуществляется поиск отключенных пользо- вателей, то ошибаетесь. При блокировании пользователя текущее время записывается в атрибут lock- outTIme. Следовательно, чтобы узнать, какие из учетных записей пользователей заблокированы, нужно отобрать те объекты user, у которых заполнен данный ат- рибут (то есть выполнить поиск по критерию lockoutTime=*). Однако такой запрос вернет список всех учетных записей, которые были заблокированы, включая и те, что уже разблокированы. Вот здесь и начинаются сложности. Чтобы узнать, какие из этих записей все еще заблокированы, нужно прочи- тать значение атрибута lockoutDuration объекта domain (например. dc=rallencorp, doccm). Данный атрибут определяет время в минутах, в течение которого учетная запись остается заблокированной, после чего она автоматически разблокируется Если в результате прибавления этого значения к значению атрибута lockoutTime результат окажется больше значения текущего времени, значит, запись все еще
заблокирована. Таким образом, фильтр для отбора заблокированных учетных за- писей принимает следующую форму. (&(objectcategoryH5erson)(objectclas$=user)(lockoutT1me>DorivedTimestamp)) Такую фильтрацию не выполняет ни одно из стандартных средств Active Di- rectory, но благодаря Джо Ричардсу мы можем воспользоваться утилитой unlock.exe, которая способна не только вывести список заблокированных учетных записей пользователей, но и разблокировать их. Спасибо, Джо! Смотрите также Документ MS КВ 813500 (Support WebCast Microsoft Windows 2000 Server and Windows Server 2003: Password and Account Lockout Features). 6.10. Разрешение проблем, связанных с блокировкой учетных записей Проблема У пользователя возникла проблема с его учетной записью, и нужно выяснить, из-за чего она блокируется и как ее разблокировать. Решение С помощью графического пользовательского интерфейса В Windows 2000 и Windows Server 2003 было введено средство под названием LockoutStatus, позволяющее определить, какие пользователи контроллера домена периодически блокируются. Оно запрашивает информацию о состоянии блокиров- ки пользователя на всех контроллерах домена в домене этого пользователя. Для того чтобы определить состояние блокировки пользователя, выполните такие действия. 1. Запустите утилиту LockoutStatus и выполните команду File ► Select Target (Файл ► Выбрать цель). 2. Введите имя пользователя и укажите домен 3. Щелкните на кнопке ОК. С этого момента программа будет опрашивать все контроллеры домена и вы- водить результаты Комментарий Утилита Lockoutstatus.exe входит в набор инструментальных средств Account Lock- out and Management (Управление учетными записями и их блокировка), пре- доставляемый в распоряжение пользователей компанией Microsoft Упомяну- тые здесь новые программы призваны помочь администраторам в разрешении проблем, связанных с блокировкой учетных записей, ведь в Windows 2000 нет
подходящих для этой цели средств. Кроме указанной выше программы в набор входят следующие средства: О Al.ockout.dll — библиотека, используемая в сценарии EnableKerbLog.vbs, кото- рый активизирует функцию протоколирования результатов аутентификации приложений и предназначен для выявления приложений, содержащих невер- ные имя пользователя или пароль, являющиеся причиной возникновения бло- кировки; О ALoInfo.exe — утилита, предназначенная для вывода списка сервисов и общих ресурсов, для которых используется заданное имя учетной записи, и для вы- вода списка всех пользователей с указанием сроков действия их паролей; О NLParse.exe — средство фильтрации для файлов netlogon.log, используемое в первую очередь для отбора строк, связанных с блокировкой учетных записей. Все новые средства Account Lockout можно загрузить по адресу: http://micro- soft.com/downloads/details.aspx?familyid=7AF2E69C-91F3-4E63-8629-B999ADE0B9E& dispaylang=en. Смотрите также Документ MS КВ 813500 (Support WebCast: Microsoft Windows 2000 Server and Windows Server 2003: Password and Account Lockout Features) 6.11. Просмотр политик блокировки учетных записей в домене и управления паролями Проблема Требуется просмотреть политики блокировки учетных записей в домене и управ- ления паролями. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Domain Security Policy (Политика безопасности домена). 2. На левой панели откройте контейнер Security Settings (Параметры безопасности), а в нем — контейнер Account Policies (Политики учетных записей). 3. Щелкните на элементе Password Policy (Политика паролей) или Account Lockout Policy (Политика блокировки учетной записи), затем в появившемся на пра- вой панели списке дважды щелкните на свойстве, которое хотите установить или просмотреть. С помощью интерфейса командной строки > enumprop /ATTR:lockoutduration,lockoutthreshold.lockoutobservationwindow, д maxpwdage.minpwdage. minpwdlength,pwdhi story1ength.pwdproperties "LDAP:11<0И_яомена>"
6.11. Просмотр политик блокировки учетных записей в домене 201 С помощью сценария на языке VBScript ' Этот код выводит текущие установки политики блокировки учетных записей и политики управления паролями • ------ SCRIPT CONFIGURATION .....- strDomain - "<ОИ_доменд>'' ' Например, rallencorp.com ------ END CONFIGURATION -------- set objRootDSE - GetObject("LDAP://" & strDomain & “/RootDSE") set objDomain - GetObjectCLDAP://' & _ objRootDSE.GetCdefaultNamingContext") ) ' Хэш. содержащий атрибуты обеих политик в виде пар ' ключ-единица измерения (например: minutes) set objDomAttrHash = CreateObjectCScripting.Dictionary") objDomAttrHash.Add "lockoutDuration". "minutes" objDomAttrHash.Add "lockoutThreshold", "attempts" objDomAttrHash.Add "lockoutObservationWindow". “minutes" objDomAttrHash.Add "maxPwdAge". "minutes" objDomAttrHash.Add "minPwdAge". "minutes" objDomAttrHash.Add “minPwdLength". "characters" objDomAttrHash.Add "pwdHistoryLength". "remembered" objDomAttrHash.Add "pwdProperties". " " ' Перебор всех атрибутов и вывод их на экран for each strAttr in objDomAttrHash.Keys if IsObjectC objDomain.Get(strAttr) ) then set objLargelnt - objDomain.Get(strAttr) if objLargelnt.LowPart = 0 then value = 0 else value = AbsCobjLargelnt.HlghPart * 2A32 + objLargelnt.LowPart) value - int ( value / 10000000 ) value - int ( value / 60 ) end if else value - objDomain.Get(strAttr) end if WScrlpt.Echo strAttr value & " " & objDomAttrHash(strAttr) next Константы из перечисления DOMAIN_PASSWORD_INFORMATION Set objDomPassHash - CreateObjectCScripting.Dictionary") objDomPassHash.Add "DOMAIN PASSWORD COMPLEX". &hl ObjDomPassHash.Add "DOMAIN PASSWORD_NO_ANON_CHANGE". &h2 ObjDomPassHash.Add "DOMAIN>ASSW0RD_N0 CLEAR_CHANGE" &h4 ObjDomPassHash.Add "DOMAIN JX)CKOUT_ADMInS". &h8 objDomPassHash.Add “DOMAIN_PASSWORD_STORE CLEARTEXT". &h!6 ObjDomPassHash.Add "DOMAIN_REFUSE_PASSWORD_CHANGE“. &h32 ’ Для атрибута PwdProperties требуется особая обработка. поскольку это набор флагов, представляющих несколько установок tor each strFlag In objDomPassHash.Keys if objDomPassHash(strFlag) and objDomain GetCPwdProperties”) then WScrlpt.Echo " " & strFlag & ‘ is enabled" else WScrlpt.Echo " " & strFlag & " is disabled" end If next
202 Глава 6. Пользователи Комментарий Для объекта групповой политики безопасности домена может быть установлено несколько параметров управляющих блокировкой учетных записей и определя- ющих требования к сложности паролей. Приведем перечень параметров блоки- ровки учетных записей: О Account lockout duration (Блокировка учетной записи на) — время в минутах, в течение которого учетная запись будет заблокирована (значение 0 соответ- ствует бессрочному блокированию, то есть когда автоматическое разблокиро- вание учетной записи не осуществляется и это действие выполняется адми- нистратором вручную); О Account lockout threshold (Пороговое значение блокировки) — количество не- удачных попыток входа в систему, после выполнения которых учетная запись будет заблокирована; О Reset account lockout counter after (Сброс счетчика блокировки через) — время в минутах, прошедшее после неудачной попытки входа в систему, спустя ко- торое счетчик неудачных попыток входа будет сброшен в О Ниже перечислены основные параметры, которые определяют политику управления паролями О Enforce password history (Требовать неповторяемости паролей) - количество запоминаемых системой паролей, которые не должны повторяться (лишь сме- нив пароль определенное число раз, пользователь может использовать старый пароль повторно), О Maximum password age (Макс, срок действия пароля) — максимальный срок ис- пользования пароля: спустя заданное количество дней пользователь должен его сменить; О Minimum password age (Мин. срок действия пароля) — минимальный срок ис- пользования пароля: пароль не следует менять чаще одного раза в течение указанного количества дней; О Minimum password length (Мин. длина пароля) — минимальное количество сим- волов в пароле; О Password must meet complexity requirements (Пароли должны отвечать требова- ниям сложности) — если этот параметр включен, пароли должны удовлетворять таким требованиям- не содержать полного имени учетной записи пользователя или его части, состоять не менее чем из шести символов — латинских букв верхнего регистра (A-Z), латинских букв нижнего регистра (a-z), десятич- ных цифр (0-9), а также не буквенно-цифровых символов (I, S, #, % и т д); О Store password using reversible encrypt on (Хранить пароли всех пользователей в домене, используя обратное шифрование) — если этот параметр включен, пароли должны хранится в форме, допускающей их расшифровку (это мало чем отличается от храпения паролей в незашифрованном виде).
6.11. Просмотр политик блокировки учетных записей в домене 203 К решению с помощью графического пользовательского интерфейса На контроллере домена или компьютере, где установлен пакет adminpak.msj, оснастку Domain Security Policy (Политика безопасности домена) можно вызвать с помощью команды Start ► Programs ► Administration Tools (Пуск ► Программы ► Администри- рование). На рядовом сервере для доступа к ней нужно открыть оснастку GPO (Групповая политика) и найти на левой панели элемент Domain Secur ty Policy (Политика безопасности домена). Подробнее об объектах групповой политики рассказывается в главе 9. К решению с помощью интерфейса командной строки Стандартной утилиты с интерфейсом командной строки, предназначенной для модификации GPO, не существует, однако с помощью команды enumprop можно просмотреть атрибуты объекта domainDNS, относящиеся к политикам блокировки учетных записей и управления паролями К решению с помощью сценария на языке VBScript Решение на языке VBScript оказалось довольно сложным. Вначале создается объект-словарь Dictionary, в котором все шесть атрибутов представлены ключами, а значениями служат единицы измерения, например минуты (minutes). Затем в цикле осуществляется перебор ключей и вывод значений из словаря и значений, извлеченных из объекта domain Для обработки значений некоторых атрибутов требуется особый код. При на- личии таких представляющих время атрибутов, как lockoutDuration, вместо цело- численного или строкового значения метод Get возвращает объект типа lADsLarge- Integer, который содержит набор 64-разрядных чисел типа Integers. В 32-разрядных системах (а как известно, в настоящее время преобладают именно такие системы) 64-разрядные числа разбиваются на две части — старшую и младшую. К сожале- нию, VBScript не содержит встроенных средств для работы с такими числами и хранит их в формате doubl е. Для того чтобы преобразовать 64-разрядное число в значение, с которым может работать этот язык, нужно умножить его старшую часть на 4 294 967 296 (232), а затем прибавить младшую. value - AbstobjLargelnt.HighPart * 2Л32 + objLargelnt LowPart) Полученное число следует разделить на 10 000 000, или 107, то есть количест- во 100-наносекундных интервалов в секунде. value int ( value / 10000000 ) После этого с помощью функции i nt удаляется остаток от деления, а резуль- тат делится на 60 (количество секунд в минуте). value - int ( value / 60 ) Заметьте, что полученное значение является приблизительным; от реального оно может отличаться на несколько минут, часов или даже дней, в зависимости от исходного значения. В последней части кода осуществляется проход по еще одному объекту Dic- tionary, где содержатся константы представляющие флаги, которые входят в состав атрибута pwdProperties.
204 Глава 6. Пользователи Смотрите также Документы MS КВ 255550 (Configuring Account Policies in Active Directory), MS KB 221930 (Domain Security Policy in Windows 2000), MSDN: lADsLargeln- teger и MSDN: DOMAINJPASSWORDJNFORMATION. 6.12. Включение и отключение учетной записи пользователя Проблема Требуется включить или отключить учетную запись пользователя Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду find (Найти). 3. Укажите в раскрывающемся списке In (В) домен, к которому относится поль- зователь. 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти). 5 Щелкните правой кнопкой мыши на имени пользователя и в открывшемся контекстном меню выберите команду Disable account (Отключить учетную запись) или Enable account (Включить учетную запись). 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки Для того чтобы включить учетную запись пользователя, выполните следующую команду: > dsmod user <ОИ_пользователя> -disabled no Отключение учетной записи пользователя производится посредством такой команды: > dsmod user <0И_пользователя> -disabled yes С помощью сценария на языке VBScript Этот код включает или отключает учетную запись пользователя ’ ---- SCRIPT CONFIGURATION - Присвойте переменной strDisableAccount значение FALSE, чтобы отключить учетную запись, или TRUE, чтобы ее включить strDisableAccount = FALSE strUserDN "ОИ-ПОльзователя^ ' Например. cn-jsmitti.cn-Users.dc-rallencorp.dc-com * END CONFIGURATION -----
6.13. Поиск отключенных учетных записей пользователей 205 set objUser - GetObjectC"LDAP;//" & strUserDN) if objUser AccountDisabled - TRUE then WScript Echo "Account for " & objUser.GetC'cn") & " currently disabled" if strDisableAccount FALSE then objUser.AccountDisabled - strDisableAccount objUser SetInfo WScript.Echo "Account enabled" end 1f else WScript Echo "Account currently enabled" if strDisableAccount - TRUE then objUser.AccountDisabled - strDisableAccount objUser Setinfo WScript.Echo "Account disabled" end i f end if Комментарий Состояние учетной записи «включена/выключена» определяет, войдет ли поль- зователь в систему. Когда учетная запись пользователя выключена, он не может войти в систему с ее использованием, а следовательно, не может пользоваться ре- сурсами, которыми управляет Active Directory. Подобно состоянию блокировки, состояние «включена/выключена» хранится в виде флага в атрибуте userAccount- Control (см рецепт 6.24). Для чтения и изменения указанного состояния используется свойство IADs- User: AccountDisabled. Установив его в значение FALSE, вы сможете отключить учет- ную запись, а установив в значение TRUE— наоборот, включить таковую. Смотрите также В рецепте 6.13 рассказывается, как найти отключенные учетные записи, а в ре- цепте 6.24 приведены более подробные сведения об атрибуте userAccountContro . 6.13. Поиск отключенных учетных записей пользователей Проблема Требуется найти отключенные учетные записи пользователей в заданном домене. Решение С помощью графического пользовательского интерфейса 1- Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Подключитесь к домену, который вас интересует.
206 Глава 6. Пользователи 3. Щелкните правой кнопкой мыши на этом домене и в открывшемся контекст- ном меню выберите команду Find (Найти) 4. В раскрывающемся списке Find (Найти) выберите элемент Common Queries (Общие запросы). 5. Установите флажок Disabled accounts (Отключенные учетные записи). 6. Щелкните на кнопке Find Now (Найти) С помощью интерфейса командной строки > dsquery user <ОИ_домена> -disabled С помощью сценария на языке VBScript ' Этот код находит все отключенные учетные записи в домене ' ----- SCRIPT CONFIGURATION ---- strDomainDN - "<ОИ_допена>" ' Например. dc=rallencorp,dc-com ----- END CONFIGURATION ------- strBase •= "<LDAP:lf’‘ & strDomainDN & strFilter - "(&(objectclass=user)(objectcategory“person)" & "(useraccountcontrol:1.2.840.113556.1.4 803:=2));" strAttrs ° ''name:" strScope - "subtree" set objConn - CreateObjectCADODB.Connection") objConn.Provider = "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS objConn Execute(strBase & strFilter & strAttrs & strScope) objRS.MoveFirst while Not objRS.EOF Wscri pt.Echo objRS.Fi el ds(0).Vaiue objRS.MoveNext wend Комментарий Учетные записи пользователей в Active Directory могут быть включены или от- ключены Если учетная запись пользователя отключена, он не может войти в домен. Причем включение и отключение учетной записи производится вручную, в отли- чие от блокировки, которая выполняется автоматически, если пользователь не- сколько раз подряд вводит неверный пароль. Во всех отключенных учетных записях пользователей в атрибуте userAcco- untControl установлен бит 2 (0010). Однако это не означает, что значением данного атрибута является 2, поскольку в нем могут быть установлены и другие биты. Подробнее о битовых флагах рассказывается в рецептах 4 9 и 4 12 (глава 4) Смотрите также В рецепте 6.12 описаны процессы включения и отключения учетных записей пользователей.
6.14. Просмотр информации о членстве пользователя в группах 207 6.14. Просмотр информации о членстве пользователя в группах Проблема Необходимо выяснить, в какие группы входит пользователь Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры) 2. На левой панели щелкните правой кнопкой мыши на нужном домене и в от- крывшемся контекстном меню выберите команду Find (Найти). 3 Выберите в раскрывающемся списке In (В) домен, к которому относится дан- ный пользователь. 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти). 5. В окне результатов поиска дважды щелкните на имени пользователя, 6 Откройте вкладку Member Of (Член групп) 7 Для того чтобы узнать, в какие группы пользователь входит косвенно, нужно поочередно выполнить двойные щелчки па каждой из групп и в открывшемся диалоговом окне перейти на вкладку Member Of (Член групп), где будет указа- но, в какие группы входит выбранная группа. С помощью интерфейса командной строки Следующая команда выводит список групп, к которым относится пользователь <0И_пользователя>. Ключ -expand позволяет включить в этот список группы, в кото- рые пользователь входит как член вложенных групп: > dsget user <0И юльзователя> -memberof [-expand] С помощью сценария на языке VBScript Код выводит список групп, в которые входит заданный пользователь. Во избежание зацикливания из-за циклической вложенности групп в данном сценарии отслеживаются уже просмотренные группы ' ---- SCRIPT CONFIGURATION -- strUserDN - ”<0И пользователя^' ’ Например: cn=jsmith.cn=Users.dc-rallencorp,dc=com ' ---- END CONFIGURATION ----- set objUser « GetObjectCLDAP://” & strUserDN) Wscript.Echo "Group membership for " & objUser.GetCcn") & strSpaces - "" set dicSeenGroup = CreateObject("Scripting.Dictionary”) DisplayGroups "LDAP://" & strUserDN, strSpaces, dicSeenGroup Function DisplayGroups ( strObjectADsPath, strSpaces. dicSeenGroup) set objObject = GotObject(strObjectADsPath) WScript.Echo strSpaces & objObject.Name
208 Глава 6. Пользователи on error resume next ' Во избежание ошибки, если контейнер memberOf пуст if IsArrayC objObject.Get("memberOf") ) then colGroups - objObject GetC memberOf") else colGroups - Array( objObject.GetCmeirberOf") ) end if for each strGroupDN In colGroups if Not dicSeenGroup.Exists(strGroupDN) then dicSeenGroup Add strGroupDN. 1 DisplayGroups "LDAP://” & strGroupDN. strSpaces & " ". dicSeenGroup end if next End Function Комментарий Атрибут memberOf объекта user является составным и возвращает список отличи- тельных имен групп, в которые входит пользователь. Однако сам он не содержит эти имена, а связан с атрибутом member объектов group, в котором хранятся отли- чительные имена членов группы. Поэтому значение атрибута memberOf нельзя из- менять непосредственно — это делается путем изменения значения атрибута member объекта group. Имя основной группы, членом которой является пользователь, не будет выве- дено ни командой dsget user, ни приведенным выше сценарием на языке VBScript. О том, как узнать имя основной группы пользователя, говорится в рецепте 6.15, а также в рецепте 7.8 (глава 7). Смотрите также В рецепте 7.3 (глава 7) речь идет о просмотре списка вложенных членов группы, а в рецепте 10.16 (глава 10) приведена дополнительная информация о связанных друг с другом атрибутах и о принципах работы с ними. 6.15. Изменение основной группы пользователя Проблема Необходимо изменить основную группу пользователя Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры).
6.15. Изменение основной группы пользователя 209 2 На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти) 3. В раскрывающемся списке In (В) выберите домен, к которому относится поль- зователь. 4 Введите имя пользователя и щелкните на кнопке Find Now (Найти) 5. В окне результатов поиска дважды щелкните на имени пользователя. 6. Откройте вкладку Member Of (Член групп). 7 Щелкните на имени группы, которую хотите назначить основной для данного пользователя. 8. Щелкните сначала на кнопке Set Primary Group (Задать основную группу), а за- тем — на кнопке ОК. С помощью сценария на языке VBScript ' Данный код проверяет, назначена ли пользователю основная группа. ' Если нет, добавляет пользователя в заданную группу, если он еще ' не является ее членом, а затем назначает эту группу основной ' ..... SCRIPT CONFIGURATION .... strUserDN - '<ОИ_пользователя>' ' Напринер cn=rallen,ou-Sales.dc=ra11encorp.dc-com strGroupDN - "<ОИ_группы>" ' Например- cn-SalesGroup.ou-Sales.cc-rallencorp.dc-com 1 -----ENO CONFIGURATION---------- Const ADS_PROPERTY_APPEND - 3 set objUser - GetObjectC'LDAP //" & strUserDN ) WScrlpt.Echo set objGroup - GetObjectC’LDAP://" & strGroupDN ) objGroup.GetlnfoEx ArrayC’primanyGroupToken") 0 if objGroup.GetC’pnmaryGroupToken") - objUser GetCprimaryGroupID") then kScript.Echo "Primary group for user already set to " & strGroupDN WScript.Quit end if intAddMember - 1 for each strMemberDN in objUser GetEx("memberOf") if LCase(strMemberDN) - LCase(strGroupDN) then IntAddMember - 0 Exit for end if next if IntAddMember > 0 then objGroup.PutEx ADS_PROPERTY_APPEND, ''member". Array(strUserDN) objGroup.Setinfo WScrlpt.Echo "Added " & strUserDN & " as member of ’’ & strGroupDN end if objUser.Put "primaryGroupID''. objGroup.GetC’primaryGroupToken") objUser.SetInfo WScript Echo "Changed primary group id of “ & strUserDN & “ to " & objGroup.GetC'primaryGroupToken")
210 Глава 6. Пользователи Комментарий Понятие «основная группа» унаследовано от Windows NT и используется глав- ным образом для поддержки клиентов Macintosh и POSIX. Обычно основную группу определяют лишь для некоторых пользователей и в тех случаях, когда это требуется для работы существующих приложений. Изменение объекта основной группы программным путем — задача неслож- ная, но требующая некоторых пояснений. RID основной группы пользователя хранится в атрибуте primaryGroupID объекта user. Для того чтобы узнать иденти- фикатор заданной группы, нужно прочитать значение атрибута primaryGroupToken из ее объекта group. Прежде чем устанавливать атрибут primaryGroupID объекта user, убедитесь, что пользователь является членом соответствующей группы; если это не так, вы получите сообщение об ошибке. По умолчанию атрибут primaryGroupID всех пользователей имеет значение 513 (группа Пользователи домена). Смотрите также В рецепте 7.8 (глава 7) рассказывается, как определить имя группы по ее иден- тификатору. Кроме того, советуем ознакомиться с документами MS КВ 297951 (HOWTO: Use the PrimaryGroupID Attribute to Find the Primary Group for a User), MS KB 321360 (How to Use Native ADSI Components to Find the Primary Group) и MS KB 243330 (Well Known Security Identifiers in Windows 2000). 6.16. Включение пользователя во все группы, членом которых является другой пользователь Проблема Требуется включить определенного пользователя в те же группы, в которые вхо- дит другой пользователь. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. В раскрывающемся списке In (В) выберите домен, к которому относятся поль- зователи. 4. Укажите имя того пользователя, чье членство в группах вы пожелали взять за образец, и щелкните на кнопке Find Now (Найти).
6.16. Включение пользователя во все группы 211 5. В окне результатов поиска дважды щелкните на имени найденного пользова- теля, чтобы открыть окно его свойств. 6. Перейдите на вкладку Member Of (Член групп). 7. Для каждой группы, в которую вы хотите включить другого пользователя, выполните следующие действия: дважды щелкните на имени группы; откройте вкладку Members (Члены группы); щелкните на кнопке Add (Добавить); в открывшемся диалоговом окне выберите имя пользователя и щелкните на кнопке ОК; щелкните на кнопке ОК еще раз. С помощью интерфейса командной строки Следующая команда включает пользователя <ОИ_нового_пользователя> во все груп- пы, в которые входит пользователь ОИ_текущего_пользователя>: > for ZF "usebackq delims-""" Xi in ('dsget user "<0И_текущего_пользователя>'' -membercf') J do dsmod group Xi -addmbr '^ОИ^ового^ользователя^ Если вы захотите одновременно удалить пользователя <0И_нового_пользователя> изо всех групп <ОИ_текущего_пользователя>, добавьте в конец команды ключ -rmmbr: > for ZF "usebackq delims-'"" Xi in ('dsget user ''<0И_теку1цего_пользователя>'' -memberof’) j do dsmod group Xi -addmbr "<ОИ_нового_пользователя>" -rmmbr "ОИ_текущего_лользователя>" С помощью сценария на языке VBScript Этот код добавляет "нового” пользователя в группы. членом которых является "текущий" пользователь ' ------ SCRIPT CONFIGURATION ---- strCurrentUserDN - “<0И_текуте о_пользователя>” ' Например: сп-j smith,ou-Sales.dc-ra11encorp,dc=com strNewUserDN - "<0И_нового_пользователя>" ' Например: cn-ra11en,ou-Sales.dc-ra11encorp,dc=com” ' ------ SCRIPT CONFIGURATION .... Const ADS_PROPERTY_APPEND - 3 set objCurrentUser = GetObjectC"LDAP:ZZ" & strCurrentUserDN ) set objNewUser - GetObject(”LDAP:ZZ" & strNewUserDN ) on error resume next WScript.Echo "Transfering groups from " & strCurrentUserDN & “ to “ & strNewUserDN for each strGroupDN in objCurrentUser.GetExCmemberOf") set objGroup - GetObjectC"LDAP:ZZ" & strGroupDN) objGroup.PutEx ADS_PROPERTY_APPEND. "member". ArrayC StrNewUserDN ) objGroup.SetInfo if Err then WScript.Echo "Error adding user to group: ” & StrGroupDN else WScript.Echo "Added user to group: " & strG oupDN end if next
212 Глава 6. Пользователи Комментарий Штат любой организации периодически изменяется, сотрудники получают новые должности и новые обязанности. Все это сопровождается внесением изменений в учетные записи пользователей, изменением их членства в группах. Если один пользователь приходит на место другого или на него возлагаются такие же обязан- ности, для включения его в необходимые группы достаточно выполнить действия, описанные в этом рецепте. Следует иметь в виду, что атрибут memberOf, определяющий членство пользо- вателя в группах, содержит имена только тех групп, которые относятся к тому же домену, что и пользователь. Остальные группы в нем не указываются, и для полу- чения их списка нужно выполнить запрос к глобальному каталогу на все объекты group, в атрибуте member которых определяется отличительное имя пользователя. Смотрите также В рецепте 7.4 (глава 7) рассказывается о способах включения пользователей в группы и удаления их из таковых. 6.17. Определение пароля пользователя Проблема Требуется задать пароль для указанного пользователя. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. В раскрывающемся списке In (В) укажите домен, к которому относится поль- зователь. 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти). 5. В окне результатов поиска щелкните правой кнопкой мыши на имени пользо- вателя и в открывшемся контекстном меню выберите команду Reset Password (Смена пароля). 6. Введите и подтвердите новый пароль. 7. Щелкните на кнопке ОК. С помощью интерфейса командной строки Приведенная ниже команда изменяет пароль пользователя <ОИ_пользователя>. Сим- вол * после ключа -pwd указывает, что команда должна запросить пароль. Вы можете непосредственно ввести пароль вместо нее, но это нехорошее решение с точки
6.18. Установка пароля пользователя средствами LDAP 213 зрения безопасности, поскольку ваш пароль смогут увидеть другие пользователи, подключившиеся к тому же компьютеру. > dsmod user <0И_пользователя> -pwd * С помощью сценария на языке VBScript Этот код устанавливает пароль пользователя • SCRIPT CONFIGURATION - strUserDN = "<ОИ_пользователя>" ' Например: cn-jsmitn.cn-Users.dc-ral1encorp.dc-com strNewPasswd -= “NewPasword" ' ---- END CONFIGURATION --- set objUser - GetObjectCLDAP://" & strUserDN) objUser.SetPassword(strNewPasswd) Wscript.Echo "Password set for " & objUser.GetCcn") Комментарий Пароль пользователя хранится в атрибуте unicodePwd, значение которого невоз- можно изменить непосредственно — для этого необходимо вызвать соответству- ющий метод, входящий в состав API, которым вы пользуетесь. В сценарии на языке VBScript для получения пароля можно использовать метод lADsUser::SetPassword, а для его изменения - метод lADsUser::ChangePassword. Для вызова последнего нужно знать исходный пароль, который, в частности, приме- няется для поддержки ввода пользователем нового пароля. Смотрите также В рецепте 6.18 рассказывается, как установить пароль с использованием встроенных операций LDAP, а в рецепте 6.19 — о выполнении той же операции посредством протокола Kerberos. Рекомендуем обратиться к документам MS КВ 225511 (New Password Change and Conflict Resolution Functionality in Windows), MS KB 264480 (Description of Password-Change Protocols in Windows 2000), MSDN: !ADsUser::Set- Password и MSDN: IADsUser::ChangePassword. 6.18. Установка пароля пользователя средствами LDAP Проблема Требуется установить пароль пользователя с применением встроенных операций протокола LDAP. Решение Прежде всего нужно обеспечить для домена Active Directory поддержку протоколов SSL/TLS. О том, как это сделать, подробно рассказано в рецепте 14.1 (глава 14).
214 Глава 6. Пользователи После этого можно будет отредактировать атрибут unicodePwd объекта user — через подключение SSL или TLS, используя операции LDAP. Значением атрибута unicodePwd должна быть строка Unicode в кодировке Base64, заключенная в кавычки. О том, как преобразовать текст в данную кодировку, вы узнаете из рецепта 10.4 (глава 10). Комментарий Значение атрибута uni codePwd можно изменить непосредственно через соединение SSL или TLS, но прочитать его через таковое невозможно. Смотрите также В рецепте 10.4 (глава 10) рассказывается о кодировке Base64, а в рецепте 14.1 (глава 14) — о настройке протоколов SSL/TLS. Возможно, вас заинтересуют доку- менты MS КВ 263991 (How to Set a User's Password with Ldifde), MS KB 264480 (Description of Password-Change Protocols in Windows 2000), MS KB 269190 (HOW TO: Change a Windows 2000 User's Password Through LDAP). 6.19. Установка пароля пользователя средствами Kerberos Проблема Требуется изменить пароль пользователя, подключившись с Unix-компьютера к Active Directory с применением протокола Kerberos. Решение На компьютере, где установлен и правильно настроен протокол MIT Kerberos 5, изменение пароля определенного пользователя в Active Directory выполняется с помощью следующей команды: $ kinit Password for jsmith@RALLENCORP.COM: **** $ kpasswd Password for jsmith@RALLENCORP.COM: **** Enter new password: ****** Enter it again: ****** Password changed. Комментарий О том, что такое протокол Kerberos, рассказывается в рецепте 18.7 (глава 18). Смотрите также Документы MS КВ 264480 (Description of Password-Change Protocols in Win- dows 2000), RFC 3244 (Microsoft Windows 2000 Kerberos Change Password and Set Password Protocols) и IETF draft-ietf-cat-kerb-chg-password 02.txt.
6.20. Запрет на изменение пароля пользователем 215 6.20. Запрет на изменение пароля пользователем Проблема Требуется запретить пользователю изменять свой пароль. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. В раскрывающемся списке In (В) укажите домен, к которому относится поль- зователь. 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти). 5. В окне результатов поиска дважды щелкните на имени пользователя. 6. Перейдите на вкладку Account (Учетная запись). 7. В группе Account options (Параметры учетной записи) установите флажок User cannot change password (Запретить смену пароля пользователем). 8. Щелкните на кнопке ОК. С помощью интерфейса командной строки > dsmod user <ОИ_пользователя> -canchpwd no С помощью сценария на языке VBScript Этот код запрещает пользователю изменять свой пароль ' ----- SCRIPT CONFIGURATION -- strUserDN - ”<ОИ_лользоватепя>‘' ' Например: cn=rallen.ou-Sales.dc=rallencorp,dc=com ’ ----- END CONFIGURATION ----- Const ACETYPE ACCESS_DENIED_OBJECT = 6 Const ACEFLAG“OBJECT_TYPE_PRESENT - 1 Const RIGHT_DS_CONTROL_ACCESS = 256 Const CHANGEJASSWORD-GUID = "(ab721a53-le2f-lld0-9819-00aa0040529b}" set objUser - GetObject("LDAP://" & strUserDN) set objSD - objUser.GetC’ntSecurityDescriptor") set objDACL - objSD.DiscretionaryAcl Добавление элемента контроля доступа (АСЕ) типа deny для учетной записи Everyone set objACE - CreateCbjectC'AccessControlEntry") objACE.Trustee = “Everyone" objACE.AceFlags - 0 ObjACE.AceType - ACETYPE_ACCESS_DENIED_OBJECT ObjACE.Flags - ACEFLAG_OBJECT TYPE_PRESENT ObjACE.ObjectType - CHANGE_PASSWORO_GUID objACE.AccessMask - RIGHT_DS_CONTROL_ACCESS objDACL.AddAce objACE
216 Глава 6. Пользователи - ' Добавление элемента контроля доступа (АСЕ) типа deny для учетной записи Self set objACE - CreatedbjectCAccessControlEntry") objACE.Trustee = "Self" objACE.AceFlags - 0 objACE.AceType » ACETYPE_ACCESS_DENIED OBJECT objACE-Flags - ACEFLAG_CBJECT_TYPE_PRESENT objACE.ObjectType - CHANGE_?ASSWORD_GUIO objACE.AccessMask - RIGHT_DS_CONTROi._ACCESS objDACL.AddAce objACE objSD.DiscretionaryAcl - objDACL objUser.Put "nTSecurityDescrlptor”. objSD objUser.Setinfo WScript.Echo ’’Enabled no password chang ng for ’ & strUserDN Комментарий Хотя данную операцию очень легко выполнить с помощью пользовательского интерфейса, на самом деле, как следует из приведенного выше сценария на языке VBScript, она не так проста, как может показаться на первый взгляд. Для того чтобы запретить пользователю изменять свой пароль, нужно добавить в список контроля доступа, связанный с его объектом user, два элемента типа deny: один для учетной записи Everyone, другой — для учетной записи Sei f. Предлагаемый код работает корректно, но он не проверяет, имеются ли в списке контроля доступа добавляемые элементы. Если вы захотите написать более на- дежный сценарий, обратитесь к документу MS КВ 269159, где рассказывается о принципе формирования списка контроля доступа. Смотрите также Документ MS КВ 269159 (HOWTO: Use Visual Basic and ADsSecurity.dll to Pro- perly Order ACEs in an ACL). 6.21. Смена пароля пользователем при следующем входе в систему Проблема Требуется указать Active Directory, что при следующем входе в систему пользо- ватель должен сменить пароль. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти).
3- В раскрывающемся списке In (В) выберите домен, к которому относится поль- зователь. 4. Введите имя пользователя и щелкните па кнопке Find Now (Найти). 5. В окне результатов поиска дважды щелкните на имени пользователя. 6. Перейдите на вкладку Account (Учетная запись). 7. В группе Account options (Параметры учетной записи) установите флажок User must change password at next logon (Потребовать смену пароля при следующем входе в систему). 8. Щелкните на кнопке ОК. С помощью интерфейса командной строки > dsmod user "<ОИ_пользователя>” -mustchpwd yes С помощью сценария на языке VBScript ' Данный код устанавливает параметр "Потребовать смену пароля при сгедуедем входе в систему" 1 ---- SCRIPT CONFIGURATION --- strUserDN - "<ОИ_пользователя>" ' Например: c^rallen.ou-Sales.dc-rallencorp.dc^om ‘ ---- END CONFIGURATION ------ set objUser = GetObjectC'LDAP://" & strUserDN) objUser.Put "pwdLastSet". 0 objUser.Setinfo WScrIpt.Echo "User must change password at next logon: " & strUserDN Комментарий Когда пользователь изменяет свой пароль, в атрибут pwdLastSet объекта user запи- сываются текущая дата и время. При входе пользователя в домен эти данные про- веряются с учетом максимального срока действия пароля, определяемого поли- тикой безопасности домена. Если нужно, чтобы пользователь сменил пароль при следующем входе в систему, не дожидаясь истечения срока его действия, при- свойте атрибуту pwdLastSet объекта user значение 0. Атрибуту pwdLastSet объекта user можно присвоить только два значения: 0 и -1. Второе из них соответствует установке для данной учетной записи параметра Password never expires (Срок действия пароля не ограничен). 6.22. Снятие ограничений на срок действия пароля Проблема Требуется снять ограничения в отношении срока действия пароля, чтобы пользо- ватель имел возможность изменять его в любое время, когда ему понадобится.
Решение С помощью графического пользовательского интерфейса 1. Откроите оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры) 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. В раскрывающемся списке In (В) укажите домен, к которому относится поль- зователь. 4 Введите имя пользователя и щелкните на кнопке Find Now (Найти) 5. В окне результатов поиска дважды щелкните на имени пользователя. 6. Перейдите на вкладку (Учетная запись). 7. В группе Account options (Параметры учетной записи) установите флажок Pas- sword never expires (Срок действия пароля не ограничен). 8. Щелкните на кнопке ОК. С помощью интерфейса командной строки > dsmod user "<ОИ_пользователя>" -pwdneverexpires yes С помощью сценария на языке VBScript ’ Этот код устанавливает параметр "Срок действия пароля не ограничен" ’ Код функции CalcBit приведен в рецепте 4 12 (глава 4) ’ ---- SCRIPT CONFIGURATION . strUserDN = "<ОИ_пользователя>“ ' Например: cn-rallen.ou=Sales,dC“rallencorp.dc-com ’ .... END CONFIGURATION ---- intBit = 65536 strAttr - "userAccountControl" set objUser - GetObjectCLDAP://" & strUserDN) intBitsOrig - objUser Get(strAttr) intBitsCalc - CalcBit(IntBitsOrig, intBit. TRUE) if intBitsOrig о intBitsCalc then objUser.Put strAttr. intBitsCalc objUser.Setinfo WScrlpt.Echo "Changed ’ & strAttr 8 " from " & _ intBitsOrig 8 " to " 8 intBitsCalc else WScript.Echo "Did not need to change " 8 strAttr 8 " ("8 intBitsOrig 8 ”)" end if Комментарий Установка параметра Password never expires (Срок действия пароля не ограничен) для конкретной учетной записи пользователя перекрывает соответствующие ус- тановки политики безопасности домена Для того чтобы пароль пользователя ни- когда не устаревал, нужно записать в атрибут userAccountControl его объекта user битовый эквивалент значения 65536 (то есть 10000000000000000).
Смотрите также В рецепте 4.12 (глава 4) рассказывается о том, как модифицировать атрибуты, представляющие собой набор битовых флагов, а из рецепта 6.24 вы узнаете о том, как установить значение атрибута userAccountContrjl. 6.23. Поиск учетных записей пользователей, чьи пароли скоро станут недействительными Проблема Требуется получить список пользователей, у которых спустя какое-то время истечет срок действия паролей. Решение С помощью интерфейса командной строки > dsquery user -stalepwd <число_дией_со_времеии_лоследнего_изменения_пдроля> С помощью сценария на языке Perl #!perl # Код находит учетные записи пользователей. # у которых скоро истечет срок действия паролей # ----- SCRIPT CONFIGURATION ----- # Домен и контейнер либо домен и подразделение, в котором будет производиться поиск my Sdomain - ' <О№-имя_домена>'; my Scont = "; # Для просмотра всего домена оставьте пустую строку # Для просмотра части домена задайте соответствующий # относительный путь, например: cn=*Users # Число дней, прошедших со времени последнего изменения пароля my $days ago - <число_дней со_вренени_лоследнего_изненения_пароля> # Например. 60; # END CONFIGURATION"---............ use strict; use Win32::OLE; $Win32::OLE::Warn - 3; use Math.:BigInt; # Преобразование количества секунд в переменной $day_ago # в большое целое (Biglnt) для сравнения со значением атрибута pwdLastSet ЩУ $past_secs - time - 60*60*24*$days_ago; щу SintObj - Math::BigInt->new(Spast_secs); SintObj - Math::BigInt->new(Sint0bj->bmul(’10 000 000')): my $past_largeint = Math-:BigInt->new( Spastjargeint — s/*[+-]/Z; Sint0bj->badd('116 444 736 000 000 000’)). # Подключение ADO my SconnObj - Win32::0LE->new('ADOOB.Connection');
SconnObj->{Provider} - "ADsDSOObject”; # Установите значения следующих двух переменных, если требуется аутентификация # SconnObj-Properties->{'User ID'} = ‘ пользователь^'; # SconnObj->Propert1es->{'Password'} - '<лароль>‘; SconnObj->Open: щу ScommObj •= Win32::OLE->new(’ADODB.Command'); SconnObj->{ActiveConnection} - SconnCbj; ScorrmObj->Properties->f'Page Size'} - 1000; # Определите имя используемого по умолчанию контекста именования домена my SrootDSE = Win32::OLE->GetObject("LDAP://$domain/RootDSE"); ту SrootNC -- SrootDSE-^etC'defaultNamingContext"); # Выполните ADO-запрос и выведите результаты Scent . if Scont and not Scont — irty Squery = "<LDAP://Sdomain/ScontSrootNC>;': Squery "(SCobjectclass-user)”; Squery .= "(objectcategory-Person)": Squery .= ”(!useraccountcontrol:1.2.840.113556.1.4.803:-2)"; Squery .= "(pv,dLastSet<=$past_largeint)": Squery .= ”(’pwdLa stSet-0)): “; Squery .» ’’cn.distinguishedName;"; Squery .- "subtree"; ScommObj->{CommandText) - Squery: щу SresObj - ScommObj->Execute(Squery); die "Could not query Sdomain: ",$Win32::OLE::LastError."\n" unless ref SresObj; print "\nUsers who haven't set their passwd in $days_ago days or longerAn”: my Stotal 0: while (!(SresObj->EOF)) { pri nt "\t".SresObj->Fi el ds("di stingui shedName”)->value,"\n": $total++; SresObj->Moveh'ext: } print “Total: Stotal\n": Комментарий Когда к Active Directory подключается Windows-клиент, проверка срока действия его пароля производится с помощью атрибута pwdLastSet объекта user. Если этот срок истек, пользователю предлагается сменить пароль. В чистой Windows-среде описанная процедура выполняется корректно, но когда к домену Active Directory пытается подключиться компьютер, работающий под управлением другой опера- ционной системы (в частности, Unix-компьютер, использующий для защиты связи протокол Kerberos), а также в тех случаях, когда в системе определено множество учетных записей для сервисов и приложений, схема принудительной смены паролей может не работать. И даже в чистой Windows-среде возможны проблемы, связан- ные с кэшированием подключений: когда пользователь входит в домен с кэширо- ванными идентификационными данными (если клиент не может установить связь с контроллером домена), проверка срока действия пароля не производится. Процедура поиска пользователей, для которых срок действия паролей исте- чет по прошествии определенного времени, не совсем проста. Конечно, нам мо- жет помочь новая команда dsquery user, позволяющая найти пользователей, чьи пароли не изменялись в течение заданного количества дней (ключ -stalepwd). Од-
o.zo. । iuuxk учетных записей пользователей нако возвращаемый ею список будет содержать имена не только тех пользовате- лей, срок действия чьих паролей скоро истечет, но и тех, которые должны сме- нить пароли при следующем входе в систему. Сценарий на языке Perl позволяет более точно решить такого рода проблему. Указанный сценарий состоит из двух частей. Первым делом вычисляется мо- мент времени, начиная с которого пароли считаются «старыми». Атрибут pwd- LastSet — это атрибут объекта user, содержащий дату и время последней установ- ки пароля пользователя в виде большого целого. Предположим, что сегодня 31 мая и нужно найти учетные записи всех поль- зователей, которые не меняли пароли как минимум 30 дней. В этом случае нужно запросить список объектов user, в атрибуте pwdLastSet которых хранятся значения дат, предшествующих 1 мая. Следует сказать несколько слов о хранении даты и времени в виде большого целого. В Active Directory значения даты и времени представлены количеством 100-наносекундных интервалов, прошедших после 1 января 1601 года. Для пре- образования текущего времени в большое целое для сравнения со значением, хранящимся в Active Directory, нужно определить, сколько секунд прошло с 1 ян- варя 1970 года, умножить это число на 10 000 000 и прибавить к нему значение 116 444 736 000 000 000. Получится большое целое число, которое представляет приблизительное время, выраженное количеством 100-наносекундных интервалов. Приблизительным оно считается потому, что при арифметических операциях со столь большими числами происходит заметная потеря точности. ПРИМЕЧАНИЕ—--------------------------------------------—----------- Сценарий написан на языке Perl, а не на VBScript, потому, что последний плохо «справляется» с та- кими большими числами. Итак, вычислив текущее время, следует определить момент, начиная с кото- рого пароли в соответствии с заданным условием считаются старыми. Наш сцена- рий позволяет задать количество дней, прошедших со времени последнего изме- нения пароля пользователями. Наконец, получив граничное значение времени, можно сформировать фильтр для ADO-запроса. Первая часть фильтра будет соот- ветствовать всем объектам user: Squery .» "(&(objectclass=user)“: Squery "(objectcategory-Person)"; Поскольку нас интересуют только те пользователи, чьи учетные записи акти- визированы, к выражению фильтра добавляется приведенная ниже строка (о поиске включенных и отключенных учетных записей и побитовых фильтрах подробно рассказывается в рецепте 6.13). Squery .= "(!useraccountcontrol:1.2.840.113556.1.4.803:-2)"; Далее следует самая важная часть фильтра, в которой время последнего изме- нения пароля, pwdLastSet, сравнивается с вычисленным значением: Squery .= "(pwdLastSet<-$past_largeint)“: В завершение исключаем пользователей, которые должны сменить пароли при следующем входе в систему (pwdLastSet равняется нулю): Squery "(!pwdLastSet=O)):":
444 ленде о. । icwibjwbd । ел и Смотрите также В рецепте 6.11 рассказывается о политике управления паролями в домене, в ре- цепте 6.17 — об установке пароля пользователя, а в рецепте 6.22 — о том, как уста- новить параметр Password never expires (Срок действия пароля не ограничен). 6.24. Установка параметров учетной записи пользователя Проблема Требуется просмотреть или изменить значение атрибута userAccountControl объекта user. Этот атрибут содержит набор значений параметров учетной записи. В част- ности, в нем указывается, отключена ли учетная запись и требуется ли смена па- роля при следующем входе в систему. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду And (Найти). 3. В раскрывающемся списке In (В) укажите домен, к которому относится поль- зователь. 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти). 5. В окне результатов поиска дважды щелкните на имени пользователя. 6. Перейдите на вкладку Account (Учетная запись). 7. В группе Account options (Параметры учетной записи) установите флаги, со- ставляющие значение атрибута userAccountControl. 8. Выполнив необходимые установки, щелкните на кнопке ОК. С помощью интерфейса командной строки У команды dsmod user имеется несколько ключей для управления флагами атрибу- та userAccountControl (табл. 6.2). Чтобы включить или отключить определенную установку, после соответствующего ей ключа нужно ввести значение yes или по. Таблица 6.2. Ключи команды dsmod user, предназначенные для установки флагов в атрибуте userAccountControl Ключ Описание -mustchpwd -canchpwd Необходима смена пароля при следующем входе в систему Пользователю запрещено изменять пароль (введите yes для разрешения смены пароля)
O.zh. ycidHUBKd параметров учетной записи пользователя Ключ Описание -disabled Отключение учетной записи (для отключения введите yes, для включения — по) -reversiblepwd Пароль должен быть зашифрован методо.м обратимого шифрования -pwdneverexpires Срок действия пароля не ограничен С помощью сценария на языке VBScript Этот код устанавливает или снимает заданный флаг в атрибуте userAccountControl ’ Код функции CalcBit приведен в рецепте 4.12 (глава 4) ----- SCRIPT CONFIGURATION .....- strUserDN - “<ОИ_пользователя>'' ' Например: cn-rallen.ou-Sales.dc=rallencorp.dc-com intBit - <битовое_значение> ' Напринер: 65536 bool Enable - <True_wiu_False> ' Напринер: TRUE ' -.... END CONFIGURATION ------- strAttr = "userAccountControl" set objUser - GetObjectCLDAP://" & strUserDN) intBitsOrig - objUser.Get(strAttr) IntBItsCalc - CalcBit(intBitsOrig. intBit. boolEnable) if intBitsOrig <> IntBItsCalc then objUser.Put strAttr. intBItsCalc objUser.Setinfo WScript.Echo "Changed " & strAttr & " from ” & _ IntBitsOrig & " to " & IntBItsCalc else WScript.Echo "Did not need to change “ & strAttr & " (" & intBitsOrig & ")" end if Комментарий Атрибут userAccountControl объектов user и computer — это набор различных, даже не всегда связанных между собой свойств учетной записи, представленных в виде битовых флагов. Если вам нужно будет часто работать с объектами user, изучите его структуру как следует. О том, как выполняется поиск объектов по значениям отдельных флагов при помощи поразрядного фильтра, подробно рассказывается в рецепте 4.9 (глава 4), а о том, как изменяются значения отдельных флагов, — в ре- цепте 4.12 (глава 4). Для изменения значений подмножества свойств, хранящихся в атрибуте user- AccountControl , используется команда dsmod user, параметры которой описаны выше (см. табл. 6.2). Полный перечень этих свойств и соответствующих им констант из перечисления ADS_USER_FLAG_ENUM приведен в табл. 6.3. Таблица 6.3. Значения констант из перечисления ADSJJSER FLAG ENUM Имя Значение Описание ADS_UF_SCRIPT 1 Выполняется сценарий входа ads_uf_accountdisable 2 Учетная запись отключена продолжение^
224 Глава ь. пользователи Таблица 6.3 (продолжение) Имя Значение Описание ads_uf_homedir_required 8 Требуется наличие домашнего каталога ADSJJF_LOCKOUT 16 Учетная запись заблокирована ads_uf_passwd_notreqd 32 Пароль не нужен ADS_llF_PASSWD_CANT_CHANGE 64 Доступный только для чтения флаг, указывающий, может ли пользователь изменять свой пароль ads_ufjncrypted_text_password_ ALLOWED 128 Хранить пароль, используя обратимое шифрование ADS_UF_TEMP_DUPL1CATE_ACCOUNT 256 Учетная запись предоставляет доступ к данному домену, но не к доменам, которые ему доверяют ads_uf_normal_account 512 Учетная запись включена ADS_UF_INTEROOMAIN_TRUST_ACCOUNT 2048 Разрешение для текущего домена, доверяющего другим доменам, доверять данной учетной записи ADS_UF_WORKSTATION_TRUST_ACCOUNT 4096 Учетная запись компьютера включена aosjjf_server_trust_account 8192 Учетная запись компьютера для резервного контроллера домена ADSJJF_DONT_EXPIRE_PASSWD 65536 Срок действия пароля не ограничен ADS JJFJINS JOGON.ACCOUNT 131072 Учетная запись MNS ads_uf_smartcard_requIred 262144 Вход с помощью смарт-карты ADS_UF_TRUSTED_FOR_DELEGATION 524288 Разрешено делегирование Kerberos ADS_llF_NOT_DELEGATED 1048576 Делегирование Kerberos не разрешено, даже если включен параметр ADS JJF_TRUSTED_FOR_DEL ETAT I ON ADS_UF_USE_DES_KEY_ONLY 2097152 Необходимо DES-шифрование ключей ADS_UFJX)NT_RE(HJIRE_PREA’JTH 4194304 Нс требовать предварительной проверки подлинности учетной записи по протоколу Kerberos ADSJJF_PASSWORD_EXPIRED 8388608 Доступный только для чтения флаг, указывающий, что срок действия пароля учетной записи истек. Используется только с провайдером WinNT ADS_UF_TRLISTED_TO_AUTHENTICATE_ for delegation 16777216 Учетная запись может быть делегирована
6.25. Установка срока действия учетной записи 225 Смотрите также В рецепте 4.12 (глава 4) рассказывается, как устанавливаются битовые флаги. Кроме того, прочтите документ MSDN: ADS_USER_FLAG_ENUM. 6.25. Установка срока действия учетной записи Проблема Требуется установить срок действия учетной записи. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. В раскрывающемся списке In (В) укажите домен, к которому относится поль- зователь. 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти). 5. В окне результатов поиска дважды щелкните на имени пользователя. 6. Откройте вкладку Account (Учетная запись). 7. В области Account expires (Срок действия учетной записи) выберите переклю- чатель End (Истекает). 8. Укажите дату, по наступлении которой истечет срок действия учетной записи. 9. Щелкните на кнопке ОК. С помощью интерфейса командной строки В параметре -acctexpires задается положительное значение, определяющее число дней, спустя которое срок действия учетной записи истечет, либо 0, чтобы учетная запись действовала до конца суток, либо "never", чтобы задать неограниченный срок ее действия. > dsmod user "<ОИ_пользователя>'' -acctexpires <число_дней> С помощью сценария на языке VBScript Этот код устанавливает дату, до которой будет действовать учетная запись ‘ --- SCRIPT CONFIGURATION - strExpireDate - ”<дата>‘ ' Например: ”07/10/2004" strUserDN - "ОИ_лользователя>" ' Например: cn-rallen.ou-Sales.dc-ral1encorp.dc-com ‘ --- ENO CONFIGURATION ---- set objUser = GetObjectCLDAP://" & strUserDN) objUser.AccountExpirationDate = strExpireDate
226 лава . пользователи objUser.Setinfo WScript.Echo "Set user " & strUserDN & ” to expire on ” & strExpireDate ' Следующие две строки снимают ограничение на срок действия учетной записи * objUser.Put "accountExpires". О ' objUser.Setinfo Комментарий Active Directory позволяет задать срок действия учетной записи — дату, по насту- плении которой она станет недоступной. Указанная дата хранится в атрибуте accountExpi res объекта user в виде большого целого числа. Если присвоить этому атрибуту значение 0, срок действия учетной записи станет неограниченным. За- метьте, что «смысл» значения 0 атрибута accountExpi res отличается от «смысла» значения 0 параметра -acctexpi res команды dsmod user: последнее устанавливает срок действия учетной записи до конца суток. Вы спрашиваете, почему они раз- личны? Это загадка. Смотрите также Документы MS КВ 318714 (HOW ТО: Limit User Logon Time in a Domain in Windows 2000) и MSDN: Account Expiration. 6.26. Поиск учетных записей, срок действия которых скоро истечет Проблема Требуется найти учетные записи пользователей, срок действия которых истечет спустя заданное время. Решение С помощью сценария на языке Perl # Этот код находит учетные записи. # срок действия которых скоро истечет # ----- SCRIPT CONFIGURATION ------ # Домен и контейнер либо подразделение, в котором будет производиться поиск щу Sdomain - '<ОМ8-имя_домена>': ' Например: amer.rallencorp.com щу Scont - "; # Для просмотра всего домена оставьте пустую строку # Для просмотра части домена задайте соответствующий # относительный путь, например: cn-Users # Число недель, спустя которое учетная запись станет недоступной my $weeks_ago = 4: # ----- END CONFIGURATION .....—- use strict; use Win32::OLE; SWin32::OLE::Warn - 3- use Math::BigInt;
b.2b. I юиск учетных записей, срок действия которых скоро истечет 227 # Преобразование значения времени # в большое целое (Biglnt) и его сравнение с атрибутом accountExpires щу $future_secs - time + 60*60*24*7*Sweeks_ago: щу SintObj - Math::BigInt->new(Sfuture_secs): SintObj - Math::BigInt->new($intObj->bmul('10 000 000’)); щу Sfuture_largeint - Math::B g!nt->new($intObj->badd('116 444 736 000 000 000')): $future_largeint — s/*[+-]//: # Преобразование текущего времени в большое целое SintObj - Math::Biglnt->new( time ); SintObj - Math::BigInt->new(SintObj->bmul('10 000 000')): my $current_largeint - Math::BigInt->new($intObj->bado('116 444 736 000 000 000')): $current_largeint =~ s/*[+-]//; # Установка подключения ADO my SconnObj - Win32::0LE->new(’AD0DB.Connect ion ): Sconn0bj->{Provider} - "AOsDSOObject": # Set these next two if you need to authenticate # SconnObj^Properties->{'User ID'} - ‘<пользователь>': # SconnObj^Properties->{'Password'} - ‘<пароль>'-. SconnObj->Open: my ScommObj » Win32::0LE->new('ADODB.Command'): ScommObj->{Act1veConnection} - SconnObj: ScommObj->Properties->{’Page Size’} e 1000; # Определение имени используемого no умолчанию контекста именования домена my SrootDSE - Win32: ^LE-^etObjectCLDAPV/Sdomain/RootDSE''): ту SrootNC - SrootDSE->Get("defaultNani1ngContext"); # Выполнение запроса ADO и вывод результатов Scont 1f Scont and not Scont — /,$/; my Squery - "<LOAP://$domain/ScontSrootNC>:“: Squery "(&(objectclass“user)"; Squery "(objectcategory-Person)"; Squery “(’useraccountcontrol:1.2.840.113556.1.4.803:-2)": Squery .- "(accountExpires<=$future_largeint)“: Squery .= "(accountExp7res>*=Scurrent_largeint)": Squery "(!accountExpires”0)):“: Squery .= '’cn.dlstinguishedName;'’: Squery . "subtree": ScommObj->{Command!ext} - Squery: my SresObj - ScommObj->Execute(Squery): die "Could not query Sdomain: ",$Win32::OLE::LastError,“\n" unless ref SresObj: print "\nlsers whose account will expire in $weeks_ago weeks or less:\n": my Stotal - 0: while (!(SresObj->EOF)) { print "\t”.SresObj->Fields(“distinguishedName”)->value."\n"; Stotal++: SresObj->MoveNext: } print “Total: Stotal\n":
228 Глава 6. Пользователи Комментарий Приведенный выше код для поиска объектов user, срок действия которых истечет спустя указанное время, очень похож на код из рецепта 6.23, где выполнялся поиск объектов user, у которых истекает срок действия паролей. Его главное отличие состоит в том, что при отборе объектов в запросе используется атрибут ассо- untExpi res, а не pwdLastSet. Кроме того, вычисляемое значение времени относится к будущему, а не к прошлому. Теперь рассмотрим используемый в запросе фильтр по частям. Вначале отбираются объекты user, представляющие включенные учетные записи: Squery .- "(&(objectclass=user)"; Squery .- "(objectcategory-Person)": Squery "(iuseraccountcontrol:1.2.840.113556.1.4.803:=2)"; Из них отбираются учетные записи, срок действия которых истечет до задан- ного срока (1-я строка), но при этом еще не истек (2-я строка): Squery .- H(accountExpires<=$future_largeint)'': Squery .- "(accountExpires>=Scurrent_largeint)": Наконец, исключаются учетные записи, для которых срок действия не уста- новлен: Squery .- "('accountExpires-O));"; Смотрите также В рецепте 6.23 довольно подробно рассказывается об операциях с большими це- лыми числами, а в рецепте 6.25 — об установлении срока действия учетной записи. Рекомендуем ознакомиться с документом MS КВ 318714 (HOW ТО: Limit User Logon Time in a Domain in Windows 2000). 6.27. Определение времени последнего входа пользователя в систему Проблема Требуется определить время последнего входа пользователя в систему. Решение1 С помощью графического пользовательского интерфейса Установив для оснастки Active Directory Users and Computers (Active Directory — пользователи и компьютеры) расширение Acctlnfo.dll, вы всегда сможете видеть дату и время последнего входа пользователя в систему. 1 Данный рецепт можно использовать лишь при условии, что функциональный уровень домена соот- ветствует Windows Server 2003.
6.27. Определение времени последнего входа пользователя в систему 229 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. В раскрывающемся списке In (В) укажите домен, к которому относится поль- зователь. 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти). 5. В окне результатов поиска дважды щелкните на имени пользователя. 6. Откройте вкладку Additional Account Info (Дополнительные данные учетной за- писи). Требуемая информация будет приведена в поле Last-Logon-Timestamp. ПРИМЕЧАНИЕ----------------------------------------------------------------:-------- Расширение Acctlnfo.dll можно загрузить с сайта Microsoft по такому адресу: http://miaosoft.com/ downloads/detalls.aspx?FamllyId=7AF2E69C-91F3-4E63-8629-B999ADDE0B9E&dlsplaylang=en С помощью сценария на языке VBScript ' Этот код выводит время последнего входа пользователя в систему ' ----- SCRIPT CONFIGURATION ---- strUserDN - "<ОИ_пользовдтеля>" ' Например: cn-rallen.ou-Sales.dc-rallencorp.dcecom ' ..... END CONFIGURATION ------- set objUser - GetObject("LDAP://" & strUserDN) set objLogon - objUser.Get("lastLogonTimestamp") intLogonTime - objLogon.HighPart * (2*32) + objLogon.LowPart intLogonTime - IntLogonTime / (60 * 10000000) IntLogonTime - intLogonTime / 1440 Wscript.Echo "Approx last logon timestamp: " & intLogonTime + #1/1/1601# Комментарий Работая в среде Microsoft NOS (Network Operating System — сетевая операцион- ная система), определить время последнего входа пользователя в систему непро- сто. В Windows NT его можно запросить у первичного или резервного контролле- ра домена, но это будет время последнего подключения пользователя к данному контроллеру, а чтобы узнать, когда он последний раз регистрировался на любом из контроллеров домена в сети, нужно опросить все контроллеры. В большой сети это займет много времени. Но в Windows 2000 ситуация несколько улучшилась. В ней появился атрибут lastLogon, в котором хранятся дата и время последнего входа пользователя в систему, но этот атрибут, к сожалению, не реплицируется. Поэтому опять-таки приходится опрашивать все контроллеры домена. В Windows Server 2003 проблема решена: в схему добавлен новый атрибут lastLogonTimestamp, вошедший в состав объекта user. Он подобен атрибуту last- Logon, но имеет два важных отличия. Во-первых, он реплицируется, то есть после регистрации пользователя на любом контроллере домена дата и время его регист- рации копируются в атрибут соответствующего объекта user на все контроллеры текущего домена. Во-вторых, чтобы предотвратить увеличение сетевого трафика, ко- гда пользователи часто входят и выходят из системы, атрибут lastLogonTimestamp обновляется лишь в том случае, если последнее подключение пользователя
230 Глава 6. Пользователи было зафиксировано неделю назад, поэтому с его помощью можно определить дату и время подключения лишь с точностью до недели. Как правило, такой точ- ности вполне достаточно, поскольку большинство администраторов запрашива- ют значения атрибута lastLogonTimestamp для выявления пользователей, которые не регистрировались в системе более месяца. Смотрите также В рецепте 6.28 рассказывается, как найти учетные записи пользователей, не вхо- дивших в систему в течение определенного времени. 6.28. Поиск учетных записей пользователей, не входивших в систему в течение определенного времени Проблема Требуется найти учетные записи пользователей, не входивших в систему в течение заданного времени. Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active D rectory - поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. Выберите из списка Find (Найти) элемент Common Queries (Общие запросы). 4. Укажите количество дней в раскрывающемся списке Days since last logon (Число дней со времени последнего входа в систему). 5. Щелкните на кнопке Find (Найти). С помощью интерфейса командной строки > dsquery user -inactive <число_недель> С помощью сценария на языке Perl # Этот код находит учетные записи пользователей. # не входивших в систему в течение указанного времени # ---- SCRIPT CONFIGURATION - # Домен и контейнер либо подразделение, в которой будет производиться поиск my Sdomain - '<Ж5-имя_донена>'; # Например. amer.rallencorp сот щу $cont ° *cn=Users’; # Для просмотра всего домена задайте пустую строку # Для просмотра части домена задайте соответствующий # относительный путь, например: cn-Users 1 Данный рецепт можно использовать лишь при условии, что функциональный уровень домена соот- ветствует Windows Server 2003
6.28. Поиск учетных записей пользователей, долго не входивших в систему 231 # Количество недель, в течение которых определенные пользователи не входили в систему щу $weeks_ago = <число_недель>; # Например: 4 | ------ END CONFIGURATION --------- use strict: use Win32:.OLE; SW1n32.:0LE:-Warn - 3; use Math::Biglnt: # Преобразование количества секунд, хранящихся в переменной $day_ago, # в большое целое (Biglnt) для сравнения со значением атрибута lastLogonTImestamp щу Spast_secs = time - 60*60*24*7*$weeks_ago; щу SintObj - Math:.Biglnt->new($past_secs): SintObj - Math::BigInt->new($intObj->bmul('10 000 000')); my Spast largeint - Math: Biglnt->new( SintObj->badd(’116 444 736 000 000 000')); Spast_largeint — s/*[+-]/Z; # Подключение ADO щу SconnObj - Win32::0LE->new('ADODB.Connect)on'); $conn0bj->{Provider} "ADsDSOObject": # Установите значения следующих двух переменных, если требуется аутентификация # SconnObj^Properties-*{'User ID'} ° '<иР_или_ОИ_пользователя>’: # SconnObj^Properties-*{'Password'} » '<пароль>‘-. SconnObj->0pen; щу ScommObj Win32::OLE->new('ADODB.Command'): $commObj->{ActiveConnection} - SconnObj; ScommObj->Propert1es->{'Page Size'} • 1000; # Определите имя используемого no умолчанию контекста именования домена щу SrootDSE - Win32::0LE->Get0bject("LDAP://$doma1n/RootDSE"); щу SrootNC - SrootDSE-*Get("defaultNam1ngContext“): # Выполните ADO-запрос и выведите результаты Scont if Scont and not Scont — /,$/; щу Squery - "<LDAP://Sdomain/ScontSrootNC*:”: Squery ‘’(&(objectclass-user)"; Squery .- "(objectcategory-Person)"; Squery .- "(useraccountcontrol:1.2.840.113556.1 4 803 =2)“; Squery .= "(lastlogontimestamp<»$past_largeint));'': Squery "cn.distinguishedName:": Squery .- "subtree"; ScommObj->{CofrrnandText} - Squery; щу SresObj = ScommObj->Execute(Squery); die "Could not query Sdomain ",$Win32::OLE::LastError."\n” unless ref SresObj; print "\nUsers that have been inactive for $weeks_ago weeks or more:\n“; щу Stotal - 0; while (!(SresObj-*EOF)) { my Sen = SresObj->Fields(0)-*value. print ''\t",$resObj->Fields(''distinguishedName")->value."\n''; $total++; SresObj->MoveNext; } print "Total: $total\n";
232 Глава 6. Пользователи Комментарий Как было сказано в пояснении к рецепту 6.27, в Windows Server 2003 новый атрибут lastLogonTimestamp объекта user содержит приблизительную дату последнего входа пользователя в систему. Мы используем это значение для определения того, кто из пользователей не подключался к системе в течение указанного числа недель. В Windows 2000 при выполнении аналогичной работы пришлось бы опросить каж- дый контроллер заданного домена. Решения с использованием графического пользовательского интерфейса и ко- мандной строки просты, но сценарий, написанный на языке Perl, сложнее. Он по- хож на сценарии из рецептов 6.27 и 6.23. Смотрите также В рецепте 6.23 речь идет о работе со значениями даты и времени, хранящимися в виде больших целых чисел, а в рецепте 6.27 показано, как определить время по- следнего подключения пользователя к системе. 6.29. Установка параметров пользовательского профиля Проблема Требуется установить один или несколько параметров пользовательского профиля. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. На левой панели щелкните правой кнопкой мыши на имени домена и в от- крывшемся контекстном меню выберите команду Find (Найти). 3. В раскрывающемся списке In (В) укажите домен, к которому относится инте- ресующий вас пользователь. 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти). 5. В окне результатов поиска дважды щелкните на имени пользователя. 6. Откройте вкладку Profile (Профиль). 7. Задайте требуемые параметры профиля. 8. Щелкните на кнопке ОК. С помощью интерфейса командной строки * dsmod user “<ОИ_пользователя>" -loser <луть_к_сценарию> -profile <луть_к_профилю> -hmdiru <начальный_каталог> -hmdrv <буква_диска>
Ь.зи. I излучение списка ооъекгов, принадлежащих указанному пользованию лаз С помощью сценария на языке VBScript ' Этот код устанавливает значения атрибутов. ' представляющих параметры пользовательского профиля strUserDN - "<0И_пользователя>" ' Например: cn-jsmith.cn-Users.dc-rallencorp.dc-com set objUser = GetObject("LDAP://" & strUserDN) objUser.Put "homeDirectory“, “WfileserverV & objUser.GetC’sAMAccountName") objUser.Put "homeDrive". "z:" objUser.Put “profllePath", “WfileserverV &_ objUser.Get("sAMAccountName") & "\profile" objUser.Put "scriptPath". ‘login.vbs" objUser.Setinfo Wscript.Echo “Profile info for “ & objUser.Get("sAMAccountName") & " updated" Комментарий Параметры пользовательского профиля представлены в Active Directory четырьмя атрибутами объекта user: О homeDi rectory — UNC-путь к домашнему каталогу; О homeDrive — имя диска (z:), назначенное домашнему каталогу пользователя; О profllePath — UNC-путь к профилю; О scri pt Ра th — путь к сценарию входа. Прежде чем записывать имя каталога в атрибут homeDi rectory, убедитесь, что этот каталог уже существует. Пример создания домашних каталогов пользовате- лей приведен в документе MS КВ 234746. Смотрите также Документы MS КВ 234746 (How to Create User Shares for All Users in a Domain with ADSI), MS KB 271657 (Scripted Home Directory Paths Require That Folders Exist) и MS KB 320043 (HOW TO: Assign a Home Directory to a User). 6.30. Получение списка объектов, принадлежащих указанному пользователю Проблема Требуется получить список объектов, принадлежащих указанному пользователю. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Если имя контекста именования, который вы хотите просмотреть, не выведе- но на экран, щелкните правой кнопкой мыши на элементе ADSI Edit на правой
глава 6. пользователи панели и в открывшемся контекстном меню выберите команду Connect to (Подключится к). Затем укажите, в каком контексте именования — контейне- ре или подразделении — вы ищете объект. Если нужно ввести другое имя пользователя и пароль, щелкните на кнопке Advanced (Текущие). 3. На левой панели откройте контейнер или подразделение, в состав которого входит интересующий вас пользователь. Затем щелкните на имени пользова- теля правой кнопкой мыши и в открывшемся контекстном меню выберите ко- манду Properties (Свойства) Список объектов, принадлежащих данному поль- зователю, будет приведен в атрибуте managedObjects. С помощью интерфейса командной строки > enumprop /ATTR:managedObjects ”[.[)№://<ОИ_пользователя>" С помощью сценария на языке VBScript 1 Этот код выводит список объектов, принадлежащих указанному пользователю 1 ----- SCRIPT CONFIGURATION ---- strUserDN - "<ОИ_пользователя>" ' Например: cn-jsmith,cn=users.dc-rallencorp.dc“com ‘ ....- ENO CONFIGURATION ......- on error resume next set objUser = GetObjectC"LDAP://" & strUserDN) Wscript.Echo objUser .GetC'ce") & '"s Managed Objects:’ colObjects - objUser.GetEx("managedObjects") if Err.Number - -2147463155 then Wscript.Echo " none" else for each strObjectDN in colObjects Wscript.Echo " ” & strObjectDN next end if Комментарий Атрибут managedObjects связан с атрибутом managedBy, имеющимся у некоторых объектов Active Directory, в частности у computer и group. Установка атрибута ma- nagedBy является простейшим способом указания владельца объекта. Если задать значение этого атрибута, то в атрибуте managedObjects объекта user будет указано имя принадлежащего пользователю объекта. Иными словами, атрибут managed- Objects объекта user содержит имена тех объектов, у которых в атрибуте managedBy присутствует имя данного объекта user. 6.31. Изменение выводимого имени пользователя Проблема Необходимо изменить выводимое имя пользователя, сгенерированное при создании нового объекта user с помощью оснастки Active Directory Users and Computers (Active Directory — пользователи и компьютеры).
Ь.51. изменение выводимого имени льзователя Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2 Затем в разделе конфигурации откройте контейнер Displayspecifiers, а в нем — контейнер СМ~<КодЯзыка> (например, американский английский язык имеет код 409). 3. Дважды щелкните на элементе cn=user-Display. 4. Отредактируйте значение атрибута createDialog, введя в него другую специ- фикацию для отображаемого имени (например: X<sn>, ^<givenName>). 5. Щелкните на кнопке ОК. С помощью сценария на языке VBScript ' Код изменяет выводимое имя пользователя • ----- SCRIPT CONFIGURATION --- strNewDefault - "X<sn>. X<givenName>" strForestName “ "<Ж-иня леса>" ‘ Например: rallencorp.com ' ----- END CONFIGURATION ------ Set objRootDSE - GetObjectCLDAP://" & strForestName & "/RootDSE") Set objDlspSpec - GetObject("LDAP://cn*=User-Display.cn=409." & _ "cn=DisplaySpecifiers." 8 _ obj RootDSE.Get("Conf1gurat i onNami ngContext")) objDlspSpec.Put "createDialog". strNewDefault obj DIspSpec.SetInfo WScript.Echo "New default for user's display name has been set to: " & _ strNewDefault Комментарий Когда вы создаете новый объект user с помощью оснастки Active Directory Users and Computers (Active Directory — пользователи и компьютеры) при вводе значений в поля first Name (Имя), Initials (Инициалы) и Last Name (Фамилия) автоматически заполняется поле Full Name (Полное имя) Для удобства работы параметры этой оснастки можно изменить, с тем чтобы она формировала полное имя иначе Для этого нужно отредактировать объект User-Display, имеющий отличительное имя cn-user-Di splay. cn=<KO/j_j?3tw<d>.cn=DisplaySpecifiers.cn*Configurati on. <корневое_01/_леса> В приведенной выше строке <код_языка> нужно заменить кодом используемого языка, а <корневое _СИ_леса> — отличительным именем корневого домена леса. Задай- те в этом объекте значение атрибута createDialog. Места для подстановки значе- ний атрибутов в данном свойстве обозначаются как %<атрибут>, где <атрибут> — это имя атрибута. Например, если вы хотите, чтобы по умолчанию полное имя фор- мировалось в формате "Фамилия. ИмяОтчество" задайте следующее значение £<sn>. X<givenName>
Смотрите также Документ MS КВ 250455 (XADM: How to Change Display Names of Active Di- rectory Users). 6.32. Создание UPN-суффикса для леса Проблема Нужно, чтобы UPN-имена учетных записей пользователей (User Principal Na- • me — имя пользователя-участника системы безопасности) включали суффикс, отличный от используемого по умолчанию для данного леса. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Domain and Trusts (Active Directory — домены и доверие). 2. На левой панели щелкните правой кнопкой мыши на элементе Active Directo- ry Domain and Trusts (Active Directory — домены и доверие) и в открывшемся контекстном меню выберите команду Properties (Свойства). 3. В поле Alternate UPN-suffixes (Дополнительные UPN-суффиксы) введите имя, которое будет служить дополнительным суффиксом. 4. Щелкните сначала на кнопке Add (Добавить), затем — на кнопке ОК. С помощью сценария на языке VBScript Этот код добавляет новый суффикс имен UPN ’ --- SCRIPT CONFIGURATION --- strNewSuffix - "<новый_суффикс>" ' Например: othercorp.com strDomain = "ONS-имя_ромена>" ' Например: rallencorp.com ' --- ENO CONFIGURATION ------ set objRootDSE - GetObjectCLDAP://" & strDomain & "/RootDSE") set objPartitions - GetObject(“LDAP://cn-Part1tions." & _ objRootDSE.Get("Confi gurati onNami ngContext")) objPartitions.PutEx ADS_PROPERTY_APPEND. "uPNSuffixes". Array!strNewSuffix) objPartitions Setinfo Комментарий UPN-имя служит для входа в систему и имеет понятную структуру, аналогичную структуре адреса электронной почты. При подключении с его применением поль- зователю не нужно знать имя домена, к которому относится его учетная запись. Если вы хотите, чтобы UPN-имена соответствовали адресам электронной почты пользователей, но при этом имя корневого домена леса (например: ad.fallen-
6.32. Создание UPN-суффикса для леса 237 corp.com) отличалось от имени домена, которое указывается в адресах электронной почты (например: rallencorp.com), рекомендуем вам определить дополнительный суффикс UPN. К решению с помощью сценария на языке VBScript Суффиксы UPN-имен хранятся в составном атрибуте uPNSuffixes контейнера Par- titions в разделе конфигурации. Учтите, что этот атрибут не содержит суффикса, используемого по умолчанию. Смотрите также Документы MS КВ 243280 (Users Can Log On Using User Name or User Principal Name), MS KB 243629 (HOW TO: Add UPN Suffixes to a Forest) и MS KB 269441 (HOWTO. Use ADSI to List the UPN Suffixes That Are Defined in Active Directory).
7 Группы 7.0. Введение Концепция группы, то есть именованного набора объектов, используется во многих системах. В частности, она характерна для систем безопасности, где в группы объединяются пользователи, которым назначены одинаковые разрешения или права. При поддержке данной концепции процесс предоставления разрешений пользователям значительно упрощается, поскольку назначить их сразу всей группе намного легче, чем каждому пользователю в отдельности. Группы Active Directory — это гибкие структуры, которые могут включать объекты практически любых типов и используются для самых разных целей, в том числе для управления доступом пользователей к ресурсам и определения фильтров в случае применения групповых политик. Кроме того, группы Active Directory можно использовать в качестве списков рассылки сообщений электронной почты. Каждая группа имеет определенную область действия и относится к одному из двух типов: безопасности или распространения. Группы безопасности исполь- зуются для ограничения доступа к ресурсам, а группы распространения — просто как механизм группировки объектов. Область действия группы может быть гло- бальной, универсальной или локальной доменной. Она определяет, в какой части леса располагаются включаемые в группу объекты и в какой части леса группа используется в списках контроля доступа. Члены универсальных и локальных доменных групп могут относиться к любым доменам леса, но при этом первым разрешения обычно предоставляются в любом домене леса, а вторым — только в ло- кальном. Глобальные группы включают пользователей из того же домена, к кото- рому относится группа, но зато им могут быть предоставлены разрешения в лю- бом домене леса. Анатомия объекта group Любая группа в Active Directory представлена объектом group. Перечень наиболее важных атрибутов данного объекта приведен в табл. 7.1. Таблица 7.1. Атрибуты объекта group Атрибут Описание СП Относительное отличительное имя объекта group createTi'roestamp Дата и время создания объекта
7.1. Создание группы 239 Атрибут Описание description groupType Текстовое описание группы Набор флагов, определяющих область действия и тип группы. См. также рецепт 7.6 info primaryGroupToken Дополнительная информация о группе Локальный RID группы. Он соответствует значению атрибута primaryGroupID объектов user, для которых данная группа является основной managedBy Относительное имя пользователя или группы, которая является владельцем данной группы managedObjects Список отличительных имен объектов group, в атрибуте managedBy которых указана данная группа member Список отличительных имен членов группы memberOf Список отличительных имен групп, членом которых является данная группа modifyTimestamp sAMAccountName Дата и время последнего изменения группы Имя учетной записи SAM данной группы. Обычно совпадает со значением атрибута сп wWWHomePage URL домашней страницы группы 7.1. Создание группы Проблема Требуется создать в Active Directory новую группу. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользователи и компьютеры), выберите команду Connect to Domain (Подключение к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели разверните родительский контейнер создаваемой группы, щелкните на нем правой кнопкой мыши и в открывшемся контекстном меню выберите команду New > Group (Создать ► Группа). 4. Введите имя группы, выберите для нее область действия и тип. 5. Щелкните на кнопке ОК.
240 Глава 7, Группы С помощью интерфейса командной строки В приведенной ниже команде имя <ОИ_группы> нужно заменить отличительным именем создаваемой группы, <областьдействия_группы> — одной из трех букв: 1 (ло- кальная доменная), g (глобальная) или и (универсальная), а после ключа -secgroup ввести yes, если создается группа безопасности, или по в противном случае. Реко- мендуется также ввести описание группы (ключ -desc). > dsadd group "<ОИ_гдуллы>" -scope <область_рействия_группы> -secgrp yes|по л -desc "<описание_групль1>’' С помощью сценария на языке VBScript ' Следующий код создает глобальную группу безопасности SCRIPT CONFIGURATION ------ strGroupParentDN - "<0И_род_обьекта_группы>я strGroupName - "<имя_грулпы>" strGroupDescr - "<опясание_груплы>" • -.....END CONFIGURATION -.......- ' Напринер ou-Groups.dc-ra11encorp.dc-com ' Напринер: ExecAdminsSales * Например: Executive Admins for Sales group ' Constants taken from ADS_GROl)P_TYPE_ENUM Const ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP - 1 Const ADS_GROUP_TYPE GLOBAL_GROUP - 2 Const ADS_GROUP_TYPEj-OCAL_GROUP - 4 Const ADS_GROUP_TYPE_SECURITY_ENABLED - -2147483648 Const ADS_GROUP_TYPE_UNIVERSAL_GROUP - 8 set objOU - GetObjectC"LDAP.7/" & strGroupParentDN) set objGroup - objDomain CreateC"group”."cn-" 8 strGroupName) objGroup.Put "groupType". ADS_GROUP_TYPE_GLOBAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED objOU.Put ’description". strGroupDescr objOU.SetInfo Комментарий В каждом из приведенных выше решений создается группа, не содержащая ни од- ного члена О том, как производится включение в группу новых членов и удале- ние существующих, рассказывается в рецепте 7.4. В атрибуте groupType содержится набор флагов, определяющих область действия и тип группы. Значения этих флагов указаны в перечислении ADS_GROUP_TYPE_ENUM. Дополнительная информация о том, как задать область действия и тип группы, приведена в рецепте 7.6. Смотрите также В рецепте 7 4 речь идет о добавлении и удалении членов группы, а в рецепте 7.6 - об определении ее области действия и типа. Рекомендуем просмотреть документы MS КВ 231273 (Group Type and Scope Usage in Windows), MS KB 232241 (Group Management with ADSI in Windows 2000), MS KB 320054 (HOW TO: Manage Groups in Active Directory in Windows 2000) и MSDN: ADS_GROUP_TYPE_ENUM-
7.2. Просмотр списка непосредственных членов группы 241 7.2. Просмотр списка непосредственных членов группы Проблема Требуется просмотреть список непосредственных членов группы. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory - пользователи и компьютеры), выберите команду Connect to Domain (Подключение к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели щелкните правой кнопкой мыши на имени домена, к которо- му относится интересующая вас группа, и в открывшемся контекстном меню выберите команду Find (Найти). 4. Введите имя группы и щелкните на кнопке Find Now (Найти) 5. На панели результатов поиска дважды щелкните на имени группы. 6. Откройте вкладку Members (Члены группы). С помощью интерфейса командной строки > dsget group ‘<0И_группы>" -members С помощью сценария на языке VBScript Этот код выводит список непосредственных членов заданной группы ' ---- SCRIPT CONFIGURATION - strGroupDN = "<ОИ_группьг>” ’ Например: cn-SalesGroup.ou-Groups.dc=raHencorp.dc-com ’ ---- END CONFIGURATION ---- set objGroup ° GetObjectC"LDAP://" & strGroupDN) Wscript Echo “Members of " & objGroup Name & for each objMember in objGroup.Members Wscript Echo objMenfcer.Name next Комментарий Атрибут member объекта group содержит отличительные имена непосредственных членов группы. Употребляя данное понятие, мы имеем в виду напрямую добавленные в группу объекты (но не объекты, входящие в ее вложенные группы) Смотрите также В рецепте 7.3 рассказывается, как просмотреть список косвенных членов группы.
242 Глава 7. Группы 7.3. Просмотр списка косвенных членов группы Проблема Требуется просмотреть список косвенных членов группы. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользователи и компьютеры), выберите команду Connect to Domain (Подключение к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели щелкните правой кнопкой мыши на имени домена, к которо- му относится интересующая вас группа, и в открывшемся контекстном меню выберите команду Find (Найти). 4. Введите имя группы и щелкните на кнопке Find Now (Найти). 5. Дважды щелкните на имени группы на панели результатов поиска. 6. Откройте вкладку Members (Члены группы). 7. Поочередно откройте окно свойств каждого члена группы двойным щелчком на его имени, а в нем — вкладку Members (Члены группы). С помощью интерфейса командной строки > dsget group “<ОИ_группы>" -members -expand С помощью сценария на языке VBScript Этот код выводит список косвенных членов группы ' ---- SCRIPT CONFIGURATION --- strGroupDN - ’,<0И_группы>" ’ Например: cn-SalesGroup.ou-Groups,dc=rallencorp,dc=com ' ---- END CONFIGURATION ...... strSpaces - " " set dicSeenGroupMember - CreateObjectC'Scrlpting.Dictionary") Wscript.Echo "Members of " & strGroupDN & DisplayMembers "LDAP://" & strGroupDN, strSpaces. dicSeenGroupMember Function DisplayMembers ( strGroupADsPath. strSpaces. dicSeenGroupMember) set objGroup - GetObject(strGroupADsPath) for each objMember In objGroup.Members Wscript.Echo strSpaces & objMember.Name if objMember.Cl ass - "group" then if dicSeenGroupMember.Exists(objMember.ADsPath) then Wscript.Echo strSpaces & " Л already seen group member " & _ "(stopping to avoid loop)'*
7.4. Добавление и удаление членов группы 243 else dicSeenGroupMember.Add objMember.ADsPath, 1 DisplayMembers objMember.ADsPath, strSpaces & " ", di cSeenGroupMember end if end if next End Function Комментарий Как уже было сказано в рецепте 7.2, список членов труппы хранится в составном атрибуте member объекта group. Однако этот атрибут содержит только имена непо- средственных членов группы, а имена членов ее вложенных трупп в нем отсутст- вуют. Для того чтобы их получить, необходимо рекурсивно просмотреть списки членов каждой из вложенных групп. В приведенном выше сценарии на языке VBScript используется объект-сло- варь dictionary (в других языках подобные структуры называются хэш-таблицами или ассоциативными массивами), куда записывается список всех членов текущей обрабатываемой группы. Перед вызовом функции Di spl ayMembers мы проверяем, обрабатывалась ли уже данная группа. Если она обрабатывалась, выводится соот- ветствующее сообщение. Подобная проверка необходима в случае циклической вложенности групп, когда, к примеру, группа А входит в группу Б, группа Б — в группу В, а группа В — в группу А. Смотрите также В рецепте 7.2 рассказывается, как просмотреть список членов группы. Рекомен- дуем обратиться и к документу MSDN: lADsMember. 7.4. Добавление и удаление членов группы Проблема Требуется включить в группу новый объект или удалить из нее один из сущест- вующих объектов. Решение С помощью графического пользовательского интерфейса 1. Выполните действия, описанные в рецепте 7.2, чтобы вывести на экран спи- сок членов группы. 2. Если нужно удалить одного из членов группы, щелкните на его имени, затем на кнопке панели инструментов Remove (Удаление), подтвердите необходи- мость операции удаления и щелкните на кнопке ОК. 3. Для того чтобы добавить в труппу новый объект, щелкните на кнопке панели инструментов Add (Добавление), введите имя этого объекта и дважды щелк- ните на кнопке ОК.
244 Глава 7. Группы С помощью интерфейса командной строки Для добавления в группу нового объекта нужно выполнить команду dsmod group с ключом -addmbr: > dsmod group "<СИ_группы>’‘ -addmbr "<0И_члена>" Ключ -rwr.br предназначен для удаления члена группы: > dsmod group "<0И_группы>’' -rrrmbr "<0И_члена>" Для замены всего списка членов группы следует воспользоваться ключом -chmbr: > dsmod group "<ОИ_груплы>" -chmbr ”<ОИ_члена1 0И_члена1 . . .>" С помощью сценария на языке VBScript ' Этот код добавляет в группу новый объект • ----- SCRIPT CONFIGURATION --- strGroupDN - "<0И_группы>“ ' Например: cn-SalesGroup.ou-Groups.dc-ra11encorp.dc-com strMemberDN - “<ОИ_члена>" ' Например: cn-jsmith.cn-users.dc-rallencorp.dc-com ’ ..... END CONFIGURATION ----- set objGroup - GetObject!“LDAP://” & strGroupDN) ’ Add a member objGroup.Add!"LDAP://" & strMemberDN) ' Этот код удаляет объект из группы ' ..... SCRIPT CONFIGURATION ... strGroupDN - "<0И_грулпы>" ' Например: cn-SalesGroup.ou-Groups.dc-rallencorp.dc-com strMemberDN - "<ОИ_члена>" ‘ Например: cn-jsmith,cn=users,dc=ra11encorp dc-com ‘ ----- END CONFIGURATION ------ set objGroup - GetObject!"LDAP://” & strGroupDN) ' Удаление objGroup.Remove!"LDAP://" & strMemberDN) Комментарий Поскольку в атрибут member можно помещать любые отличительные имена, членами группы могут быть любые объекты. И если организационные подразделения обычно используются для объединения объектов на основе некоторого критерия, с помо- щью объектов group можно группировать разнородные объекты. Один и тот же объект может быть членом нескольких групп, что нехарактер- но для подразделений, поэтому в отдельных случаях для группировки объектов в большей мере подходят группы, нежели подразделения. Еще одной важной осо- бенностью групп является то обстоятельство, что им можно назначать разрешения на доступ к ресурсам, поскольку в Active Directory они являются участниками системы безопасности, тогда как подразделения к числу таковых не относятся. В некоторых других службах каталогов, например в Novel Netware, подразделения также выступают участниками системы безопасности. Смотрите также В рецепте 7.2 рассказывается, как можно просмотреть список непосредственных членов группы. Ознакомьтесь с документами MSDN: IADsGroup::Add и MSDN: IADsGroup::Remove.
/ .о. изменение ооласти действия и типа группы 7.5. Перемещение группы Проблема Требуется переместить группу в другое подразделение или домен. Решение При необходимости переместить группу в другое подразделение выполните дей- ствия, описанные в рецепте 4.17 (глава 4). Инструкции по перемещению группы в другой домен приведены в рецепте 4.18 (глава 4). Комментарий Между доменами разрешается перемещать только универсальные группы. Если нужно переместить в другой домен глобальную группу или локальную группу до- мена, то таковую вначале нужно преобразовать в универсальную, а после переме- щения вернуть ее исходный тип. Однако имейте в виду: при попытке преобразовать rpj ппу в группу другого типа вы можете столкнуться с проблемами, обусловленными теми ограничениями, которые налагаются на членство в группах разных типов. Об этих ограничениях рассказывается выше, в разделе 7.0. Перемещение группы между доменами проще всего выполнить с помощью специальной утилиты ADMT (Active Directory Migration Tool - средство миграции Active Directory). Она позволяет перемещать и реструктурировать группы без их преобразования из одного типа в другой и без изменения списка или разрешений их членов. Подробная информация об этой утилите имеется на сайте www.micro- soft.com/windows2000/downloads/tools/admt/default.asp. Смотрите также В рецепте 4.17 (глава 4) рассказывается о перемещении объекта в другое подраз- деление, в рецепте 4.18 (глава 4) — о перемещении его в другой домен, а в рецеп- те 7.6 — об изменении области действия и типа группы. 7.6. Изменение области действия и типа группы Проблема Необходимо изменить в Active Directory область действия и тип группы. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры).
Z4O I лава /. i руппы 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользовате- ли и компьютеры), выберите команду Connect to Domain (Подключение к доме- ну), введите имя домена и щелкните на кнопке ОК. 3. На левой панели щелкните правой кнопкой мыши на имени домена, к которо- му относится искомая группа, и в открывшемся контекстном меню выберите команду Find (Найти). 4. Введите имя группы и щелкните на кнопке Find Now (Найти). 5. Дважды щелкните на имени группы на панели результатов поиска. б. В открывшемся окне свойств выберите новые тип и область действия группы, после чего щелкните на кнопке ОК. С помощью интерфейса командной строки Следующая команда устанавливает для группы <ОИ_группы> область действия, ука- занную в параметре <новдя_облдсть_действия>, который может принимать одно из трех значений: 1 (локальная доменная), g (глобальная) или и (универсальная). > dsmod group "<ОИ_группы>" -scope <новая_область_рсйствия> Приведенная ниже команда изменяет тип группы <ОИ_группы>. Чтобы сделать данную труппу группой безопасности, введите после ключа -secgrp значение yes, а чтобы сделать ее группой распространения — значение по. > dsmod group “<ОИ_группы>" -secgrp yes|по С помощью сценария на языке VBScript 1 Этот код устанавливает область действия и тип заданной группы. * преобразуя ее в универсальную группу безопасности ’ ----- SCRIPT CONFIGURATION --- strGroupDN - "<0И группы*" ' Напринер: cn-Sale$Group.ou=Groups.dc-ral1encorp.dc=com ’ ----- END CONFIGURATION ------ ‘ Константы из ADS_GROUP_TYPE_ENUM ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP = 1 ADS_GROUP_TYPE GLOBAL_GROUP - 2 ADS_GROUP_TYPEJ_OCAL_GROUP = 4 ADS_GROUP_TYPE_SECURITY_ENABLED = -2147483648 ADS_GROUP_TYPE_UNIVERSAL_GROUP - 8 set objGroup - GetObjectCLDAP://" & strGroupDN ) objGroup.Put "groupType". ADS_GROUP_TYPE_UNIVERSAL_GROUP _ Or ADS_GROUP_TYPE_SECURITY_ENABLEO objGroup.Setinfo Комментарий Информация об области действия и типе группы записывается в виде флагов в атрибуте groupType объекта group. Для непосредственной установки значения этого атрибута нужно объединить устанавливаемые флаги с помощью логической поразрядной операции OR. Заметьте, что для группы распространения не сущест- вует специальной константы, которая определяла бы тип группы. Поэтому при
7.7. Делегирование управления членством в группе 247 необходимости задать группу распространения просто не нужно включать в фор- мируемое значение атрибута groupType константу ADS_GROUP_TYPE_SECURITY_ENABLED. Смотрите также Документы MS КВ 231273 (Group Type and Scope Usage in Windows), MSDN: ADS_GROUP_TYPE_ENUM и MSDN: What Type of Group to Use. 7.7. Делегирование управления членством в группе Проблема Требуется делегировать определенному пользователю или группе право управлять членством в заданной группе. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользовате- ли и компьютеры), выберите команду Connect to Domain (Подключение к доме- ну), введите имя домена и щелкните на кнопке ОК. 3. На левой панели щелкните правой кнопкой мыши на имени домена, к которо- му относится интересующая вас группа, и в открывшемся контекстном меню выберите команду Find (Найти). 4. Введите имя группы и щелкните на кнопке Find Now (Найти). 5. Дважды щелкните на имени группы на панели результатов поиска. 6. Перейдите на вкладку Managed By (Управление). 7. Щелкните на кнопке Change (Изменить). 8. Выберите имя пользователя или группы, которой вы хотите поручить управ- ление данной группой, и щелкните на кнопке ОК. 9. Установите флажок Manager can update membership list (Пользователь может изменять список членов). 10. Щелкните на кнопке ОК. ПРИМЕЧАНИЕ----------------------------------------------------------- Перечисленные действия можно выполнить только с помощью оснастки Active Directory Users and Computers (Active Directory — пользователи и компьютеры) для Windows Server 2003. С помощью интерфейса командной строки > dsacls <0И_группы> /G <M«^_rpyn/7w>^DomainName:WP;member;
24Ь Глава 7. руппы В следующем фрагменте кода труппе Sal esAdmi п предоставляется право вносить изменения в список членов группы PreSales. > dsacls cn-presales.ou=sales,dc-rallencorp.dc-com /G salesadmins@rallencorp.com:WP:member; С помощью сценария на языке VBScript ’ Этот код предоставляет членам группы право на изменение свойства member ' ----- SCRIPT CONFIGURATION ...... strGroupDN - “<ОИ_группы>“ ' Например cn-SalesGro’Jp.ou-Sales.dc-rall encorp, dc-com” strUserOrGroup - ~<пользовдтепьули_группа>" ’ Например: joeOrallencorp com or RALLENCORPXjoe 1 ----- END CONFIGURATION --------- set objGroup = GetObjectCLDAP://" & strGroupDN) ' Константы • ЯГ ,’ЙШ ШЯШЯЯШ Из перечичления ADS ACETYPE_ENUM Const ADS ACETYPE_ACCESS_ALL0WED_08JECT - &h5 Const ADS_FLAG_OBJECT_TYPE PRESENT - &hl Const ADS_RIGHT_DS_WRITE_PROP = &h20 ’ Идентификатор schemalDGUID атрибута member Const MEMBER_ATTRIBUTE - "{bf9679c0-0de6-lld0-a285-00aa003049e2}" • JIIIUIUIHUI'UJ! ' U-f 1ЦЦ/tl П № HJIJUMJt. U Л IT И I» II N Hlrt И И 1ГI/ ft II ulr/T П ГТ 17 fflf ЛГГгг ’ Создание списка контроля доступа set objSD - objGroup.GetC’ntSecurityDescriptor") set objOACL - objSD.DiscretionaryAcl 1 Установка разрешения на запись свойства для атрибута member set objACE = CreateObject("AccessControlEntry") objACE.Trustee - strUserOrGroup objACE.AccessMask » ADS_RIGHT_DS_WRITE_PROP objACE.AceFlags - 0 objACE.Flags - ADS_FLAG_OBJECT_TYPE_PRESENT objACE.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT objACE.ObjectType - MEMBER_ATTRIBUTE objDACL.AddAce objACE Установка списка контроля доступа objSD.DiscretionaryAcl - objOACL objGroup.Put "ntSecurityDescriptor". objSD objGroup.Setinfo WScript.Echo “Delegated control of member attribute for " & _ strGroupDN & " to " & strUserOrGroup Комментарий Для того чтобы предоставить пользователю или группе разрешение на управление членством в определенной группе, нужно предоставить разрешение на запись свойства (write property, WP) в атрибут member данной группы. Сделать это можно
7.8. Определение имени основной группы пользователя 249 разными способами- либо добавив новый элемент в список контроля доступа группы, управление которой решено делегировать, либо воспользовавшись оснасткой Active Directory Users and Computers (Active Directory — пользователи и компьютеры). В Windows Server 2003 оснастка дополнена новой функцией: теперь для выполнения указанной задачи в пей достаточно открыть окно свойств группы и установить соответствующий флажок, разрешающий определенному пользова- телю или группе изменять членство в этой группе. Если нужно настроить дополнительные разрешения, скажем право на изме- нение значения атрибута description, это можно сделать па вкладке Security (Безо- пасность) диалогового окна свойств группы в оснастке Actve Directory Users and Computers (Active Directory — пользователи и компьютеры) или с помощью команды dsacl s, указав требуемый атрибут после ключа /G. Например, разрешение на запись атрибута description устанавливается так: /G j’pynnbP’WomainDNSName: WP; descri pti on: Смотрите также В рецепте 14 10 (глава 14) рассказывается о том, что такое делегирование управ- ления и как таковое производится в Active Directory 7.8. Определение имени основной группы пользователя Проблема Необходимо узнать имя основной группы указанного пользователя Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Ести нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользователи и компьютеры), выберите команду Connect to Domain (Подключение к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели щелкните правой кнопкой мыши на имени домена, к которо- му относится интересующий вас пользователь, и в открывшемся контекстном меню выберите команду Find (Найти) 4. Введите имя пользователя и щелкните на кнопке Find Now (Найти) 5. Дважды щелкните на имени пользователя на панели результатов поиска. 6 В диалоговом окне свойств пользователя откройте вкладку Member Of (Член групп). В нижней ее части будет указано имя его основной группы.
250 Глава 7. Группы С помощью сценария на языке VBScript * Этот код выводит имя основной группы пользователя • ----- SCRIPT CONFIGURATION ------- strNTDomain - "<имя_роиена>" ' NetBIOS-имя домена Active Directory. ' Например: RALLENCORP strUser = ~<иня-Пользователя^ * Например: Administrator ' ----- END CONFIGURATION ---------- ' В цикле по группам пользователя создается фильтр, содержащий имена ‘ всех групп set objUser - GetObject!"WinNT://* & strNTDomain & "Г & strUser & ".user") strFilter - for each objGroup in objUser Groups strFilter - strFilter & "(sairAccountName=" & objGroup.Name & ")" next strFilter ° '(I" & strFilter & ")M ' Теперь выполняется поиск с целью извлечения всех * групп и их атрибута primaryGroupToken strBase - "<LDAP://" & strNTDomain & StrFilter - ''(&(objectcategory-group)'' & strFilter & strAttrs - '’name.primaryGroupToken.cn:" strScope - "subtree:'' set objConn - CreateObject("AOODB.Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" set objComm - CreateObjectC'ADODB.Command") set objComm.ActiveConnectlon objConn objComm CommandText - strBase & strFilter & strAttrs & strScope Включается режим постраничного получения результатов поиска ' на тот случай, если групп окажется более 1000 objComm.Properties("Page Size") » 1000 set objRS - objComm.Execute Еще раз проходим в цикле по всем группам и останавливаемся. найдя идентификатор primaryGroupID, указанный в объекте user strPrimaryGroup - "" while ( (not objRS.EOF) and (strPrimaryGroup - '"') ) if (objUser.PrimaryGroupID - objRS.FieldsCprimaryGroupToken") .value) then strPrimaryGroup - objRS.FieldsCname") Value end if objRS.moveNext wend objConn.Close WScrlpt.Echo "Primary Group for " & strUser & " is " & strPrimaryGroup & _ “ (" & objUser.PrimaryGroupID & ")* Комментарий Для того чтобы определить, в какие группы входит пользователь, необходимо просмотреть содержимое его атрибута memberOf, где хранится список отличительных имен групп, членом которых данный пользователь является, а также узнать имя
7.9. Кэширование информации о членстве в универсальных группах 251 его основной группы. По умолчанию всем пользователям основной группы на- значается имя Domain Users (Пользователи домена), так что все они становятся членами этой группы. Однако имейте в виду, что основная группа пользователя не указывается в атрибуте memberOf, если только информация о ней не была добав- лена в него явно. ПРИМЕЧАНИЕ-------------------—---------------------------------------------- Основная группа пользователя определяется для работы с приложениями Macintosh и POSIX. Если таких приложений в системе нет, вам незачем устанавливать основные группы пользователей. Информация об основной группе пользователя хранится в атрибуте primary- GroupID его объекта user. К сожалению, этот атрибут содержит не отличительное имя и даже не имя учетной записи SAM, а RID-идентификатор группы. У объекта group имеется атрибут primaryGroupToken, возвращающий то же значение, но оно является вычисляемым, а потому не может использоваться в фильтре при поиске. Даже зная значение атрибута primaryGroupID объекта user, вы не сможете с помощью простого запроса определить, с какой группой связан этот код. Имя основной группы пользователя легко установить, используя оснастку Active Directory Users and Computers (Active Directory - пользователи и компьюте- ры), как это описано выше А вот определить его программным путем сложнее, хотя это можно сделать несколькими способами (описаны в документах MS КВ 321360 и MS КВ 297951). В настоящем рецепте приведено наиболее простое ре- шение, и заключается оно в следующем. Прежде всего мы с помощью провайдера WinNT определяем список групп пользователя. WinNT в отличие от LDAP возвращает код основной группы в со- ставе семейства lADsGroup. Но при этом, к сожалению, неизвестно, какая из групп, входящих в данное семейство, является основной. Поэтому ничего не остается, как сформировать фильтр LDAP для получения с использованием ADO инфор- мации обо всех группах. Выполнив ADO-запрос и получив список имен групп и значений их атрибута primaryGroupToken, мы можем поочередно сравнить это зна- чение со значением атрибута primaryGroupID объекта user. Группа, для которой они совпадут, является основной. Смотрите также Документы MS КВ 297951 (HOWTO: Use the атрибут PrimaryGroupID to Find the Primary Group for a User) и MS KB 321360 (How to Use Native ADSI Components to Find the Primary Group). 7.9. Кэширование информации о членстве в универсальных группах Проблема Требуется обеспечить кэширование информации о членстве в универсальных группах — в таком случае отпадет необходимость при входе пользователей в сис- тему подключаться к серверу глобального каталога.
252 Глава 7. Группы Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Ha левой панели, открыв нужный контейнер, выделите сайт, для которого ре- шено производить кэширование. 3. На правой панели дважды щелкните на объекте NTDS Si te Setti ngs (Параметры сайта NTDS), чтобы открыть окно его свойств. 4. Установите флажок Enable Universal Group Caching (Включить кэширование членства в универсальных группах). 5. В списке Cache refresh from (Обновление кэша из) выберите сайт, с которого будет обновляться кэш данного сайта, или оставьте установку <Default> (<По умолчанию>), чтобы обновление производилось с ближайшего сайта, где имеется глобальный каталог. 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки Для того чтобы узнать, включено ли для сайта кэширование информации о членстве в универсальных группах, нужно объединить команды dsquery site и dsget site: > dsquery site -name <имя_сайта> | dsget site -dn -cachegroups -prefGCSite Произвести кэширование можно с помощью команды Idifde. Создайте файл enable_univ_cache.ldf, добавив в него приведенный ниже текст и заменив <имя_сдйтд> именем сайта, для которого вы хотите выполнить кэширование, а <корневое_0И_ леса> — отличительным именем корневого домена леса: dn: cn=NTDS Site Settings.cn“<MMflj?awra>.cri“sites.cn-configuration.<корневое_ОИ_песа> changetype: modify replace: options options: 32 Затем выполните следующую команду, позволяющую импортировать заданную в файле установку в Active Directory: > Idifde -i -f enable_un1v_cache.ldf С помощью сценария на языке VBScript Этот код включает для заданного сайта кэширование информации о членстве в универсальных группах ‘ ----- SCRIPT CONFIGURATION --- strSiteName = "<яня_сайта>" ' Например: 0efault-F1rst-Site-Name ’ ----- END CONFIGURATION ...... set objRootDSE - GetObjectCLDAP://RootDSE") set objSite - GetObjectCLDAP://cn-NTDS Site Settings.cn=" & strSiteName & _ ".cn=sites," & objRootDSE.GetCconfigurationNamingContext") ) 1 Для выполнения этого рецепта необходимо, чтобы функциональный уровень леса соответствовал Windows Server 2003.
7.9. Кэширование информации о членстве в универсальных группах objSite.Put "options*', 32 objSite.Setinfo WScrlpt.Echo "Successfully enabled universal group caching for " & _ strSiteName Комментарий Когда пользователь подключается к контроллеру домена Windows 2000 Active Di- rectory, этот контроллер должен обратиться к серверу глобального каталога (если сам таковым не является), чтобы получить у него информацию о членстве данного пользователя в универсальных группах. Универсальные группы могут создаваться и использоваться в любом месте леса, и в них можно включать объекты, также расположенные в любом месте леса. А поскольку объект user может входить в универсальную группу', находящуюся в другом домене, информация о его членстве в этой группе должна храниться в глобальном каталоге. Когда пользователь входит в систему, обрабатывающий его подключение контроллер домена должен запросить из глобального каталога информацию о членстве пользователя во всех универ- сальных группах, поскольку этим группам могут быть назначены разрешения на доступ к различным ресурсам. Если такая информация не запрашивается, поль- зователь не получит разрешений на доступ к соответствующим ресурсам. На случат!, когда сервер глобального каталога временно недоступен, в Windows Server 2003 Active Directory введено кэширование информации о членстве поль- зователя в универсальных группах, устраняющее необходимость подключаться к серверу глобального каталога во время регистрации пользователя в системе. Для того чтобы включить кэширование, нужно установить в атрибуте options объекта NTDS Site Settings (Параметры Сайта NTDS) бит 10000, соответствующий десятичному значению 32. В приведенных выше решениях с использованием ко- мандной строки и сценария на языке VBScript в указанный атрибут просто запи- сывается число 32, что не очень хорошо. О том, как правильно установить битовые флаги атрибутов, рассказывается в рецепте 4.12 (глава 4). Оснастка Active Directory Sites and Services (Active Directory — сайты и службы) позволяет выполнить эту зада- чу, воспользовавшись соответствующим флажком. Вам следует знать об еще одной установке, связанной с кэшированием ин- формации о членстве пользователя в универсальных группах. По умолчанию контроллеры домена, для того чтобы определить, к какому серверу глобального каталога лучше всего подключиться, используют сведения о топологии сайтов. Одпако вы можете явно указать, контроллеры домена какого сайта следует ис- пользовать для этой цели. Соответствующая установка задается с помощью оснастки Active Directory Sites and Services (Active Directory — сайты и службы): ат- рибуту msDS-Preferred-GC-Site объекта NTDS Site Settings (Параметры сайта NTDS) присваивается отличительное имя нужного сайта.
О Компьютеры 8.0. Введение В Active Directory представление компьютеров во многом подобно представле- нию пользователей: это объекты в составе каталога, для удобства администриро- вания объединенные в группы и подразделения. Равно как и объектам user, им предоставляются разрешения на доступ к ресурсам, к ним применяются группо- вые политики. Класс computer, к которому относятся эти объекты, наследует класс user, благодаря чему он в дополнение к нескольким собственным атрибутам вклю- чает все атрибуты данного класса. Для того чтобы компьютеры могли входить в состав доменов, каждый из них должен иметь защищенный канал связи с контроллером домена. Такого рода канал представляет собой аутентифицируемое подключение, через которое можно пе- редавать зашифрованные данные. Для его создания компьютер должен сообщить контроллеру домена свой пароль, который будет сверяться с паролем, хранящим- ся в учетной записи этого компьютера в Active Directory. Без такой учетной запи- си (представленной объектом computer) аутентификация компьютера просто не- возможна. Анатомия объекта computer По умолчанию объекты computer помещаются в контейнер cn=Computers (Компью- теры), который находится в корневом каталоге домена. Однако при желании та- кие объекты можно создавать в любом месте дерева каталога в пределах домена. Более того, в Windows Server 2003 можно изменить задаваемое по умолчанию ме- стоположение объектов computer; о том, как это сделать, рассказывается в рецеп- те 8.12. Список важнейших атрибутов объекта computer приведен в табл. 8.1. Таблица 8.1. Атрибуты объекта computer Атрибут Описание СП dnsHostName 1astLogonTi mes tarop managedBy Относительное отличительное имя объекта computer Полное DNS-имя компьютера Приблизительные значения даты и времени последнего подключения компьютера к домену. Этот атрибут был введен в Windows Server 2003 Отличительное имя пользователя (или группы), отвечающего за управление данным компьютером
o.i. ииздание ииьек о ujinpuici Атрибут Описание memberOf Список отличительных имен групп, в которые входит данный компьютер operatingSystem Текстовое описание операционной системы, под управлением которой работает компьютер. См. также рецепт 8.10 operat1ngSystefflHotF i x operatingSystemServIcePack В настоящее время не используется Версия установленного на компьютере пакета обновлений (sendee pack). См. также рецепт 8.10 operati ngSystemVersi on Версия операционной системы, под управлением которой работает компьютер. См. также рецепт 8.10 pwdLastSet Большое целое число, представляющее время последней установки пароля данного компьютера. См. также рецепт 8.8 sAMAccountName NetBIOS-имя компьютера. Обычно это имя компьютера с символом «S» на конце userAccountControl Набор битовых флагов, представляющих свойства учетной записи 8.1. Создание объекта computer Проблема Требуется создать в Active Directory объект computer. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользовате- ли и компьютеры), выберите в открывшемся контекстном меню команду Con- nect to Domain (Подключение к домену), затем введите имя домена и щелкните на кнопке ОК. 3. На левой панели найдите родительский контейнер компьютера, щелкните на нем правой кнопкой мыши и выберите в открывшемся контекстном меню ко- манду New ► Computer (Создать ► Компьютер). 4. Введите имя нового компьютера и щелкните на кнопке ОК. С помощью интерфейса командной строки > dsadd computer “<ОИ_компыотерд>" -desc "<олисаиие>"
256 Глава 8. Компьютеры С помощью сценария на языке VBScript ' Этот код создает объект computer ' ....- SCRIPT CONFIGURATION -- strBase - "<имя_род_конт_конпьютера>'' ' Например: cn-Computers.dc-rallencorp.dc-com strComp - “<иня_компьютера>" ' Например: joe-xp strDescr - "<олисание>“ ' Например: Joe's Windows XP workstation ---- END CONFIGURATION ------ ‘ Из перечисления ADS_USER_FLAG_ENUM Const ADS_UF_WDRKSTATION_TRUST_ACCOUNT - &hl000 set objCont - GetObjectCLDAP://" & strBase) set objComp - objCont.Create!"computer'. "cn-" & strComp) objComp.Put "sAMAccountName". strComp & objComp.Put "description". strDesc objComp.Put "userAccountControl“. ADS_UF_WORKSTATION_TRUST_ACCO'JNT objComp.Setinfo Wscrlpt.Echo "Computer account for ” & strComp & " created" Комментарий Процедура создания объекта computer в Active Directory мало чем отличается от процедуры создания объекта user. В решениях с использованием командной строки и сценария на языке VBScript обычно (но не всегда) устанавливается значение атрибута description. Единственным обязательным атрибутом является отличи- тельное имя компьютера, которое в сценарии па языке VBScript используется также для заполнения атрибута sAMAccountName, представляющего имя учетной за- писи SAM, — в него записывается имя компьютера с символом «$» на конце. За- метьте, что во всех трех решениях просто создается объект computer. Однако одного только его присутствия недостаточно для того, чтобы пользователь мог присоеди- нить этот компьютер к домену. Дополнительная информация о создании объекта computer и предоставлении пользователю или группе возможности присоединять его к домену приведена в рецепте 8.2. Смотрите также В рецепте 8.2 рассказывается, как создать объект computer для конкретного поль- зователя или группы. Ознакомьтесь с документами MS КВ 222525 (Automating the Creation of Computer Accounts), MS KB 283771 (HOW TO: Pre-stage Windows 2000 Computers in Active Directory), MS KB 315273 (Automating the Creation of Computer Accounts), MS KB 320187 (HOW TO: Manage Computer Accounts in Active Direc- tory in Windows 2000) и MSDN: ADS_USER_FLAG_ENUM. .2. Создание объекта computer для конкретного пользователя или для группы Проблема Требуется создать объект computer для конкретного пользователя или группы, с тем чтобы его можно было присоединять к домену. Пользователь и группа должны иметь соответствующие разрешения на операции с этим объектом.
8.2. Создание объекта computer для конкретного пользователя или для группы 257 Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользовате- ли и компьютеры), выберите в открывшемся контекстном меню команду Con- nect to Domain (Подключение к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели найдите родительский контейнер интересующего вас компь- ютера, щелкните на нем правой кнопкой мыши и в открывшемся контекстном меню выберите команду New ► Computer (Создать ► Компьютер). 4. Введите имя компьютера. 5. Щелкните на кнопке Change (Изменить). 6. Выберите пользователя или группу, которым хотите предоставить разреше- ние на присоединение компьютера к домену. 7. Щелкните на кнопке ОК. С помощью интерфейса командной строки В приведенном ниже фрагменте кода замените имя <ОИ_компьютера> отличитель- ным именем объекта computer, а имя <пользователь_или_группа> — именем участни- ка системы безопасности или NT-именем пользователя либо группы, которым будет доверено управление данным компьютером: > dsadd computer <ОИ_компыотера> > dsacls <ОИ_конпыотера> /G пользователь_wn_rpynna>:CALCGRSCDTRC:: > dsacls <ОИ_компьютера> /G пользователь jmHjpynna>:MP;description; > dsacls <ОИ_компьютера> /G <лользователь_или_грулпа>-УР:sAMAccountName; > dsacls <ОИ_компьютера> /G <пользователь_ипи_группа>:У1Р-.(Изр\ау№те; > dsacls <ОИ_комльютера> /G пользовательjinHjpynna>:MP;”Logon Information”: > dsacls <ОИ_конпьютера> /G <пользователь_или_группа>:Ю;“Account Restrictions": > dsacls <ОИ_компьютера> /G<nonb30Bare^b_Mnn_rpynna>:WS:"Validatedwritetoservicepnncipal name"; > dsacls <ОИ_компьютера> /G <лользовательули_группа>-У}$-. "Validated write to DNS host name"; С помощью сценария на языке VBScript Этот код создает объект computer и предоставляет право управления им пользователю или группе ' ----- SCRIPT CONFIGURATION ------ strComputer - ''<иня_конпьютерд>" ' Напринер: joe-xp strUser - "<лользователь_или_грулпа>" ‘ Например: joe@rallencorp.com or RALLENCORPXjoe strOescr - "<описание_компыотера>" ' Например: Joe's workstation strDomain - "<домен_конпьютера>" ' Например: rallencorp.com ' ----- END CONFIGURATION --------- шшмшшшни ' Константы Из перечисления ADS_USER_FLAG_ENUN Const ADS_UF_PASSWD_NOTREQD - &К0020
гъв Глава 8. Компьютеры Const ADS_UF_WORKSTATION_TRUST_ACCOUNT - fihlOOO ’ Из перечисления ADS_ACETYPE_ENUM Const ADS_ACETYPE_ACCESS_ALLOWED - &h0 Const ADS_ACETYPE_ACCESS_ALLOWED_03JECT = &h5 ' Из перечисления ADS_FLAGTYPE_ENUM Const ADS_FLAG_OBJECT_TYPE_PRESENT - &hl ' Из перечисления ADS_RIGHTS_ENUM Const ADS_RIGHT_DS_SELF - &h8 Const ADS_RIGHT_DS_WRITE_PROP - &h20 Const ADS_RIGHT_DS_CONTROL_ACCESS - &ЫОО Const ADS_RIGHT_ACTRL_DS_LIST - 8h4 Const ADS_RIGHT_GENERIC_READ - &h80000000 Const ADS_RIGHT DELETE - bhlOOOO Const ADS_RIGHTJ)S_DELETE_TREE - &h40 Const ADS_RIGHT_READ_CONTROL = &И20000 ' Значения schemalDGUID Const DISPLAY_NAME ° "{bf967953-0de6-lld0-a285-00aa003049e2}“ Const SAM_ACCOUNT_NAME - "{3e0abfd0-126a-lld0-a060-00aa006c33ed}" Const DESCRIPTION - "{bf967950-0de6-lld0-a285-00aa003049e2}" ' Значения rightsGUID для controlAccessRight Const USER_LOGON_INFORMATION - "(5f202010-79a5-lld0-9020-00c04fc2d4cf}" Const USER ACCOUNT_RESTRICFIONS - "(4C164200-20CO-11DO-A768-OOAA006E0529}” Const VALIDATED_DNS_HOST_NAME = "{72E39547-7B18-HD1-ADEF-O0C04FD8D5CD}" Const VALIDATED_SPN = “{F3A64788-5306-11D1-A9C5-0000F8O367C1}" fl II it frit it It alt ti II It IIII tmint ft fruit tt // о ' Создание объекта computer set objRootDSE - GetObjectCLDAP://’ & strDomain & ''/RootDSE") set objContainer - GetObject(“LDAP://cn-Computers." & _ objRootDSE.Get("defaultNamingContext")) set objComputer ° objContainer.CreateCComputer". "cn=" & strComputer) objComputer.Put “sAMAccountName". strComputer & objComputer.Put "userAccountControl". ADS_UF_PASSWD_NOTREQD Or ADS_UF_WORKSTATION_TRUST_ACCOUNT objComputer.Put "description". strDescr objComputer.SetInfo Создание списка управления доступом мкш set objSD - objComputer.GetCntSecurityDescriptor1’) set objDACL - objSD.DiscretionaryAcl Особые разрешения: Control Rights (Управление) List Children (Список дочерних объектов) Generic Read (Общее чтение). Delete (Удаление) Delete Subtree (Удаление поддерева) Read Permission (Разрешение на чтение)
8.2. Создание объекта computer для конкретного пользователя или для группы set objACEl - CreateObjectC’AccessControlEntry'1) objACEl.Trustee - strUser objACEl.AccessMask - ADS RIGHT_DS_CONTROL_ACCESS Or _ ADS_RIGHT_ACTRL_DS_L1ST Or _ ADS_RIGHT_GENERIC_READ Or _ ADS_RIGHT_DELETE Or _ ADS_RIGHT_DS_OELETE_TREE Or ADS_RIGHT_READ_CONTROL objACEl.AceFlags - 0 ObjACEl.AceType - ADS_ACETYPE_ACCESS_ALLOWED • Разрешение на запись свойства description set objACE2 - CreateObjectC'AccessControlEntry") objACE2.Trustee ** strUser objACE2.AccessMask - ADS_R1GHT_DS_WRITE_PROP objACE2.AceFlags - 0 objACE2.Flags = ADS_FLAG_OBJECT_TYPE_PRESENT objACE2. AceType = ADS_ACETYPE_ACCESS_ALLO'aED_OBJECT objACE2.0bjectType = DESCRIPTION ’ Разрешение на запись свойства sAMAccountName set objACE3 - CreateObject("AccessControlEntry") objACE3.Trustee - strUser objACE3.AccessMask - ADS_RIGHT_DS_WRITE_PROP objACE3.AceFlags “ 0 objACE3.Flags - ADS_FLAG_03JECT_TYPE_PRESENT objACE3.AceType - ADS_ACETYPE_ACCESS_ALLOWED_OBJECT objACE3.ObjectType - SAM_ACCOUNT_NAME ' Разрешение на запись свойства displayName set objACE4 = CreateObjectC'AccessControlEntry") objACE4.Trustee - strUser objACE4.AccessMask - ADS_RIGHT_DS_kRITE_PROP objACE4.AceFlags = 0 objACE4.Flags - ADS_FLAG_OBJECT_TYPE PRESENT objACE4.AceType » ADS_ACETYPE_ACCESS_ALLO'JED_OBJECT objACE4.0bjectType - DISPLAY_NAME Разрешение на запись свойства Logon Information set objACE5 - CreateObjectC'AccessControlEntry") objACE5.Trustee - strUser objACE5.AccessMask = ADS_R1GHT_DS_WRITE_PROP objACE5.AceFlags = 0 ObjACE5.AceType = ADS_ACETYPE_ACCESS_ALLCWED_CBJECT 0bjACE5.Flags - ADS_FLAG_OBJECT_TYPE_PRESENT objACE5.0bjectType » USER_LOGON_INFORMATION Разрешение на запись свойства Account Restrictions set objACE6 - CreateObjectC'AccessControlEntry") objACE6.Trustee - strUser ObjACE6.AccessMask = ADS_RIGHT_DS_WRITE_PROP objACE6.AceFlags e 0 ObjACE6.AceType - ADS_ACETYPE_ACCESS_ALLOWEO_OBJECT °bjACE6.Flags - ADS_FLAG_OBJECT_TYPE_PRESENT °bjACE6.ObjectType - USER_ACCOUNT_RESTRICTIONS
260 Глава 8. Компьютеры * Разрешение на запись собственного свойства Validated SPN set objACE7 - CreateObjectCAccessControlEntry") objACE7.Trustee - strUser objACE7.AccessMask - ADS_RIGHT_DS_SELF objACE7.AceFlags - 0 0bjACE7.AceType - ADS_ACETYPE_ACCESS_ALLOWED_OBJECT objACE7.Flags - ADS_FLAG_OBJECT_TYPE_PRESENT objACE7.0bjectType “ VALIDATED_SPN ' Разрешение на запись собственного свойства Validated DNS Host Name set objACES - CreateObjectCAccessControlEntry") objACE8.Trustee - strUser objACE8.AccessMask ° ADS_RIGHT_DS_SELF objACE8.AceFlags - 0 objACE8.AceType “ ADS_ACETYPE_ACCESS_ALLOWED_OBJECT objACE8.Flags - ADS_FLAG_OBJECTTYPE PRESENT objACE8.0bjectType - VALIDATED_DNS_HOST_NAME objDACL.AddAce objACEl objDACL.AddAce objACE2 objDACL.AddAce objACE3 objDACL.AddAce objACE4 objDACL.AddAce objACE5 objDACL.AddAce objACE6 objDACL.AddAce objACE7 objDACL.AddAce objACE8 int inrff ..ТПГ7Гr.rtnrrr inrttn a 'irti Й rlrtrnTf ’ Установка списка управления доступом (ACL) objSD.DiscretionaryAcl - objDACL objComputer.Put "ntSecurityDescriptor". objSD objComputer.SetInfo WScript.Echo "Successfully created " & strComputer & " and gave rights to “ & strUser Комментарий Сам no себе факт создания объекта computer в Active Directory еще не позволяет пользователю присоединить этот компьютер к домену. Чтобы конкретный поль- зователь получил такую возможность, ему нужно предоставить разрешения на модификацию объекта computer. При создании объекта с помощью оснастки Active Directory Users and Computers (Active Directory — пользователи и компьютеры) име- ется возможность выбрать пользователя (или группу), которому будет позволено управлять данным объектом и присоединять с его помощью компьютер к домену. В этом случае в список управления доступом (ACL) объекта computer добавляется восемь новых элементов, представляющих следующие разрешения: О List Contents (на вывод списка содержимого), Read All Properties (на чтение всех свойств), Delete (на удаление), Delete Subtree (па удаление поддерева), Read Permissions (на чтение разрешений), а также все дополнительные разре- шения, в том числе Allowed to Authenticate (на аутентификацию), Change Pas- sword (на изменение пароля), Send As (на отправку), Recei ve As (на получение) и Reset Password (на переустановку пароля);
8.2. Создание объекта computer для конкретного пользователя или для группы ZO1 О Write Property description (на запись свойства description); О Wri te Property sAMAccountName (на запись свойства sAMAccountName); О Write Property displayName (на запись свойства displayName); О Write Property Logon Information (на запись свойства Logon Information); О Write Property Account Restrictions (казались свойства Account Restrictions); О Validated write (на удостоверенную запись на узел с DNS-именем); О Validated write (на подтверждение имени сервиса-участника системы безо- пасности). К решению с помощью графического пользовательского интерфейса Если требуется изменить разрешения, устанавливаемые по умолчанию при выборе пользователя или группы, дважды щелкните на объекте computer и откройте в ок- не его свойств вкладку Security (Безопасность). Она доступна только при условии, что выбран режим View ► Advanced Features (Вид ► Дополнительные функции). К решению с помощью интерфейса командной строки Утилита dsacls позволяет задать либо UPN-имя учетной записи пользователя в формате пользователь&донен, либо ее стандартное имя в формате Д0МЕН\пользователь. Кроме того, указанная утилита требует, чтобы для того атрибута, для которого вы устанавливаете разрешение на запись или дополнительные разрешения, было за- дано выводимое имя displayName, а не IDAPDisplayName. К решению с помощью сценария на языке VBScript После создания объекта computer тем же способом, что и в рецепте 8.1, для каждого из восьми новых элементов списка управления доступом создается объект Ас- cessControl Entry. Чтобы связать элементы списка с объектом computer, необходимо извлечь текущий дескриптор безопасности этого объекта, хранящийся в атрибуте nTSecurityDescriptor, а затем добавить в его ACL восемь новых элементов. Наконец, чтобы подтвердить внесенные в Active Directory изменения, нужно вызвать метод Set Info. За дополнительной информацией об особенностях формирования списка управления доступом программным путем можно обратиться к документации по интерфейсу lADsAccessControl Entry, имеющейся в MSDN. Смотрите также В рецепте 8.1 рассказывается об особенностях создания новой учетной записи компьютера. Обратитесь к документам MS КВ 238793 (Enhanced Security Joining or Resetting Machine Account in Windows 2000 Domain), MS KB 283771 (HOW TO: Prestage Windows 2000 Computers in Active Directory), MS KB 320187 (HOW TO: Manage Computer Accounts in Active Directory in Windows 2000), MSDN: IADsAc- cessControlEntiy, MSDN: ADS_ACETYPE_ENUM, MSDN: ADS_RIGHTS_ENUM, MSDN: ADS FLAGTYPE ENUM.
262 Глава 8. Компьютеры 8.3. Присоединение компьютера к домену Проблема Требуется присоединить компьютер к домену после создания в Active Directory соответствующего объекта computer. Решение С помощью графического пользовательского интерфейса 1. Войдите в систему компьютера, который вы хотите присоединить к домену. 2. Воспользовавшись панелью управления, запустите приложение System (Сис- тема) и перейдите на вкладку Computer Name (Имя компьютера). 3. Щелкните на кнопке Change (Изменить). 4. В области Member of (Является членом) установите переключатель в положе- ние Domain (домена). 5. Введите имя домена, к которому хотите присоединить компьютер, и щелкни- те на кнопке ОК. 6. Если вам будет предложено указать имя и пароль учетной записи пользовате- ля, имеющей разрешения на присоединение компьютера к домену, введите таковые. 7. Перезагрузите компьютер. ПРИМЕЧАНИЕ------------------------------------------------------------ В операционных системах Windows 2000, Windows ХР и Windows Server 2003 интерфейс приложения System (Система), вызываемого с панели управления, несколько различается. С помощью интерфейса командной строки > netdom join <иня_компьютера> /Domain <имя_ромена> /UserD <иРН_имя_пользователя_домена>^ /PasswordD * /UserO <адлииистратор_компьютера> /PasswordD * /Reboot С помощью сценария на языке VBScript Этот код присоединяет компьютер к домену ’ ------ SCRIPT CONFIGURATION ----- strComputer =*= "<иня_компьютера>“ ' Например: joe-xp strDomain - ’,<имя_домена>“ ' Например: rallencorp.com strDomainUser - “<иРМ-имя_попьзователя_домена>'' ‘ Например: administratortfrallencorp.com strDomainPasswd = "<лароль_лользователя_домена>" strLocalUser = "<аднинистратор_компьютера>’' ‘ Например: administrator strLocalPasswd - "<лдроль_пользователя_компьютера>“ ’ ------END CONFIGURATION........- Константы Const JOIN_DOMAIN Const ACCT_CREATE Const ACCT_DELETE Const WIN9X UPGRADE » 1 - 2 » 4 = 16
8.3. Присоединение компьютера к домену 263 Const DOMAIN JOIN_IF_JOINED - 32 Const JOINJJNSECURE - 64 Const MACHINE_PASSWORD_PASSED - 128 Const DEFERRED_SPN_SET = 256 Const INSTALL INVOCATION - 262144 • Подключение к компьютеру set objWMILocator - CreateObjectCWbemScripting.SWbemLocator") objWMILocator.Security_.AuthenticationLevel - 6 set objWMIComputer - objhMILocator.ConnectServer(strComputer. 'Toot\cimv2". strLocalUser, strLocalPasswd) set objWMIComputerSystem - objUMIComputer.Get( "Win32_ComputerSystem.Name-’" & _ strComputer & ' Присоединение компьютера к домену • шшшшш rc = objWMIComputerSystem.JoinOomainOrWorkGroup(strDomain. strDomainPasswd. strOomainllser. vbNullString. JOINJXIMAIN) if rc о 0 then WScript.Echo "Join failed with error: " & rc else WScript.Echo "Successfully joined “ & strComputer & “ to " & strDomain end if Комментарий При необходимости присоединить компьютер к домену Active Directory нужно сначала создать представляющий его объект computer. О том, как это сделать, рас- сказывается в рецептах 8.1 и 8.2. К решению с помощью графического пользовательского интерфейса Имея в Active Directory необходимые разрешения, можно одновременно создать объект computer и присоединить его к домену, выполнив действия, описанные в решении с помощью пользовательского интерфейса. Поскольку приложение System (Система) панели управления не позволяет указать подразделение, где бу- дет помещен объект computer, этот объект создается в используемом по умолча- нию контейнере Computers (Компьютеры). Где находится такой контейнер и как задать для хранения объектов computer другой контейнер, рассказывается в рецеп- тах 8.1 и 8.2. К решению с помощью интерфейса командной строки Присоединяя компьютер к домену, утилита netdom создает для него и объект com- puter, если таковой еще не существует. При желании можно добавить ключ /011
264 Глава 8. Компьютеры и указать за ним подразделение, где должен быть размещен этот объект. Однако учтите, что вы не сможете выполнить данную процедуру, если не имеете разреше- ния на создание объектов в указанном подразделении. Существует несколько ограничений на удаленное выполнение команды net- dom join. Если на компьютере, работающем под управлением Windows ХР, вклю- чена установка ForceGuest политики безопасности, удаленное присоединение ком- пьютера к домену невозможно. Но если данная команда выполняется на том компьютере, который вы хотите присоединить к домену, установка ForceGuest значения не имеет. К решению с помощью сценария на языке VBScript Для удаленного выполнения метода Win32_ComputerSystem:: JoinDomainOrWorkGroup нужно установить параметр AuthenticationLevel равным б, чтобы трафик между двумя компьютерами (а точнее, передаваемые между ними пароли) обязательно шифровался. Создать объект computer можно и с помощью метода JoinDomainOr- WorkGroup, задав флаги ACCT_CREATE и JOIN_DOMAIN. ПРИМЕЧАНИЕ------------------------------------------------------------------ Указанная возможность доступна только в Windows ХР и W ndows Server 2003, но не в Windows 2000 и более ранних операционных системах. Данный сценарий, равно как и утилиту netdom, нельзя выполнять для удаленного компьютера, на котором включена установка ForceGuest. Смотрите также Дополнительную информацию об установке ForceGuest можно найти по адресу http://www.microsoft.com/technet/prodtechnol/winxppro/reskit/prde_ffs_ypuh asp Рекомен- дуем просмотреть документы MS КВ 238793 (Enhanced Security Joining or Re- setting Machine Account in Windows 2000 Domain), MS KB 251335 (Domain Users Cannot Join Workstation or Server to a Domain), MS KB 290403 (How to Set Se- curity in Windows XP Professional That Is Installed in a Workgroup), MSDN: Win32_ComputerSystem:: JoinDomainOrWorkgroup и MSDN: NetJoinDomain. 8.4. Перемещение объекта computer Проблема Требуется переместить объект computer в другой контейнер или в Другое подраз- деление Active Directory. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active D rectory Users and Computers (Active Directory — поль- зователи и компьютеры)
8.4. Перемещение объекта computer 265 2 Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользовате- ли и компьютеры), выберите в открывшемся контекстном меню команду Con- nect to Doma n (Подключение к домену), затем введите имя домена и щелкните на кнопке ОК. 3. На левой панели щелкните правой кнопкой мыши на имени домена и выбери- те в открывшемся контекстном меню команду Find (Найти) 4. В поле со списком Find (Найти) выберите элемент Computers (Компьютеры). 5 Введите имя перемещаемого компьютера, а затем щелкните на кнопке Find Now (Найти). 6. На панели результатов поиска щелкните правой кнопкой мыши на имени компьютера и выберите в контекстном меню команду Move (Переместить). 7. В открывшемся диалоговом окне найдите и выделите контейнер, в который хотите поместить объект. 8. Щелкните на кнопке ОК. ПРИМЕЧАНИЕ-------------------------------------------------------------- В оснастке Active Directory Users and Computers (Active Directory — пользователи и компьютеры), вернее в ее версии для W ndows Server 2003, перемещение объектов computer и некоторь х других можно производить путем перетаскивания. С помощью интерфейса командной строки > dsmove "<ОИ_компьютера>'' -newparent "<СИ_нового_род_контейнера>'' С помощью сценария на языке VBScript Этот код перемещает компьютер в заданный контейнер или подразделение ‘ ---- SCRIPT CONFIGURATION --- strCompDN = <ОИ^компьютера»'' ' Например cn“joe-xp.cn=Users.dcerallencorp.dc-com strOUDN “ "<0И_нового_род_контейнера>" ' Например: ou^orkstations.dc-rallericorp.dc-com ’ ---- END CONFIGURATION ------ set objComp - GetObject("LDAP://" & strCompDN) set objOU = GetObjectC’LDAP://" & strOUDN) objOU.MoveHere objComp ADsPath. objComp.Name Комментарий Перемещение объекта computer практически никак не отражается на его свойствах. Однако следует иметь в виду, что установки безопасности нового родительского подразделения могут сказаться на возможностях пользователей управлять дан- ным объектом в Active Directory. Кроме того, если с новым родительским контей- нером или подразделением был связан другой объект групповой политики, его установки повлияют на процесс загрузки и подключения компьютера. Смотрите также В рецептах 4 17 и 4 18 (глава 4) рассказывается о том, как перемещать объекты в другое подразделение и в другой домен соответственно.
266 Глава 8. Компьютеры 8.5. Переименование компьютера Проблема Требуется переименовать компьютер в Active Directory. Решение С помощью графического пользовательского интерфейса 1. Войдите в систему компьютера, который вы хотите присоединить к домену. 2. После этого откройте приложение System (Система) панели управления и пе- рейдите на вкладку Computer Name (Имя компьютера). 3 Щелкните на кнопке Change (Изменить). 4. В поле Computer Name (Имя компьютера) введите новое имя и щелкните на кнопке ОК, а после этого еще раз щелкните на указанной кнопке — для выхода из приложения System (Система). 5. Перезагрузите компьютер С помощью интерфейса командной строки > netdom renamecomputer <имя_компьютера> /NewName <новое_имя_компьютера> ZUserDJ <иРМчшя.пользователя_домена> /PasswordO * /UserO <администратор_компьютера> /PasswordO * /Reboot С помощью сценария на языке VBScript ' Этот к in переименовывает компьютер и записывает его новое имя в каталог Active Directory ' ------ SCRIPT CONFIGURATION ----- strComputer - "<имякомпьютерам Например: joe-xp strNewComputer = "<новое_имя компьютерам Например: joe-pc strDomalnUser » "<имя пользователя_доненам Например: administrator@rallencorp com strDomainPasswd « “<пароль_пользователя_донензМ' strLocalUser => ''<аднинистратор_компьютерам Например: joe-xp\adm1nistrator strLocalPasswd = "<пароль администратора компьютерам ' ------ END CONFIGURATION -------- Подключение к компьютеру • хжмтж set objWMILocator - CreateObjectCWben'iScripting.SWbemLocator") objkMlLocator.Security_.AuthentlcationLevel » б set objWMIComputer - objkMILocator.ConnectServerCstrComputer, "root\cimv2“. strLocalUser. strLocalPasswd) set objWMIComputerSystem - objWMIConiputer.Get( "Win32_ComputerSysteni.Name-'” & strComputer & ...............................) ; шмтмжшжшм Переименование компьютера rc - objWMIComputerSystem.Rename(strNewComputer. strDomainPasswd strDomainUser)
8.5. Переименование компьютера if гс <> 0 then WScrlpt.Echo "Rename failed with error: " & rc else WScnpt.Echo "Successfully renamed " & strComputer & " to " & _ strNewComputer end if WScrlpt.Echo "Rebooting ..." set objWSHShell - WScript.CreateObjectC“WScript.Shell") objWSHShell.Run "shutdown.exe /r" Комментарий Чтобы переименовать компьютер, нужно выполнить два действия: переименовать в Active Directory объект computer и изменить имя самого компьютера. Для того чтобы сделать это за один раз, как показано выше, в Active Directory нужно иметь разрешение на переименование учетной записи, а на компьютере, подлежащем переименованию, — разрешения администратора ВНИМАНИЕ--------------------------------------------------------------------------- В некоторых случаях переименование компьютера отражается на функционирующих на нем служ- бах Поэтому нельзя, скажем, переименовать компьютер, являющийся контроллером домена Win- dows 2000 или сервером сертификации Windows, не отключив в начале соответствующие службы К решению с помощью графического пользовательского интерфейса После того как вы переименуете компьютер, вам будет предложено его перезагрузить. Перезагрузку можно отложить, но позднее ее обязательно нужно будет выпол- нить, иначе внесенные вами изменения не вступят в силу. К решению с помощью интерфейса командной строки Ключ renamecomputer команды netdom был введен в Windows Server 2003 Данная команда может выполняться удаленно и поддерживает ключ /Reboot, позволяю- щий указать, что после переименования компьютер следует перезагрузить авто магически. К решению с помощью сценария на языке VBScript Если компьютер, который вы хотите переименовать, не входит в состав домена, метод Wi n32_ComputerSystem:: Rename должен выполняться на нем локально Про- граммное решение не позволяет задать для подключения имя и пароль пользова- теля, отличные от имени и пароля пользователя домена. По этой причине учетная запись, задаваемая при вызове метода Rename, должна иметь на переименовываемом компьютере права администратора (то есть быть членом группы Администраторы), а также иметь разрешение на переименование объекта computer в Active Directory ПРИМЕЧАНИЕ------------------—---------------------------------------------- Даннь й метод является нововведением Windows ХР и Windows Server 2003, поэтому недоступен в Windows 2000 и более ранних операционных системах.
268 Глава 8. Компьютеры Смотрите также В рецепте 4 19 (глава 4) рассказывается, как переименовать объект. Рекомендуем ознакомиться с документами MS КВ 228544 (Changing Computer Name in Win- dows 2000 Requires Restart), MS KB 238793 (Enhanced Security Joining or Reset- ting Machine Account m Windows 2000 Domain), MS KB 260575 (HOW TO: Use Netdom.exe to Reset Machine Account Passwords of a Windows 2000 Domain Con- troller), MS KB 325354 (HOW TO: Use the Netdomexe Utility to Rename a Computer in Windows Server 2003) и MSDN Wm32_ComputerSystem Rename. 8.6. Тестирование защищенного канала компьютера Проблема Требуется протестировать защищенный канал заданного компьютера. Решение С помощью интерфейса командной строки > nltest /server;<имя_конпьютерд> /зс_^егу:<имя_ромена> Комментарий Каждый компьютер, входящий в состав домена Active Directory, устанавливает защищенный канал связи с контроллером домена. Пароль этого компьютера хра- нится локально в форме секретного значения LSA (Local Security Authority — ло- кальные средства защиты), а также в Active Directory. Указанный пароль исполь- зуется службой NetLogon для создания защищенного канала между компьютером и контроллером домена. Если по какой-либо причине секретное значение LSA и пароль компьютера окажутся различными, компьютер потеряет возможность аутентификации в домене. С помощью команды nltest /sc_query компьютер можно опросить, для того чтобы убедиться в работоспособности его защищенного кана- ла. Ниже приведен результат выполнения этой команды при нормальном функцио- нировании канала: Flags: 30 HASJP HAS_TIMESERV Trusted DC Name Wdcl rallencorp.com Trusted DC Connection Status Status - 0 0x0 NERR_Success The command completed successfully Если же канал не работает, необходимо выполнить переустановку учетной за- писи компьютера, как описано в рецепте 8.7. Вот пример вывода команды nltest / scjquery в случае, когда канал не функционирует: Flags: О Trusted DC Name Trusted DC Connection Status Status - 1311 0x51f ERROR_NO_LOGON_SERVERS The command completed successfully
8.7. Переустановка учетной записи компьютера 269 Смотрите также В рецепте 8.7 рассказывается, как выполнить переустановку учетной записи ком- пьютера. Обратитесь и к документу MS КВ 216393 (Resetting Computer Accounts in Windows 2000 and Windows XP). 8.7. Переустановка учетной записи компьютера Проблема В связи с тем, что канал связи компьютера не работает, требуется переустановить его учетную запись Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory — поль- зователи и компьютеры). 2. Если нужно сменить домен, на левой панели щелкните правой кнопкой мыши на элементе Active Directory Users and Computers (Active Directory — пользовате- ли и компьютеры), выберите в открывшемся контекстном меню команду Con- nect to Domain (Подключение к домену), введите имя домена и щелкните на кнопке ОК. 3. На левой панели щелкните правой кнопкой мыши на имени домена и выбери- те в контекстном меню команду Find (Найти). 4. В поле со списком Find (Найти) выберите элемент Computers (Компьютеры) 5. Введите имя компьютера и щелкните на кнопке Find Now (Найти). 6. На панели результатов поиска щелкните правой кнопкой мыши на имени компьютера и выберите в контекстном меню команду Reset Account (Переуста- новить учетную запись). 7. Подтвердите необходимость переустановки, щелкнув на кнопке Yes (Да). 8. Щелкните на кнопке ОК. 9. Выполните повторное присоединение компьютера к домену. С помощью интерфейса командной строки Воспользовавшись утилитой dsmod, можно переустановить пароль компьютера. После этого компьютер следует повторно присоединить к домену > dsmod computer “<ОИ_ксмпьютера>" -reset Кроме того, можно задать команду netdom, которая переустанавливает учет- ную запись компьютера таким образом, что его не нужно повторно присоеди- нять к домену: letdom reset <имя_конпьютера> /Domain <иня_домена> ZUserO <иРМ-имя_пользователя> /PasswordD *
270 Глава 8. Компьютеры С помощью сценария на языке VBScript ' Этот код переустанавливает учетную запись компьютера, назначая ей пароль. ' используемый по умолчанию. После выполнения данного действия ' нужно повторно присоединить компьютер к домену set objComputer = GetObject("LDAP /<ОИ_конпьюгера>"} objComputer.SetPassword "<имя_компьютера>" Комментарий Обнаружив, что защищенный канал компьютера не работает, следует переустано- вить его учетную запись, то есть назначить объекту computer пароль, используе- мый по умолчанию — имя компьютера. Именно такой пароль обычно получает но- вая учетная запись компьютера. Каждые 30 дней Windows 2000 и более поздние операционные системы автоматически изменяют пароли компьютеров, входящих в состав доменов Установив пароль, нужно повторно присоединить компьютер к домену, поскольку он более не может взаимодействовать с контроллером домена по причине несовпадения паролей. Решение с использованием командной строки имеет то преимущество, что команда netdom reset одновременно переустанавли- вает пароли и на компьютере, и в Active Directory, так что в случае ее успешного выполнения пет необходимости повторно присоединять компьютер к домену Смотрите также В рецепте 8.3 речь идет о присоединении компьютера к домену а в рецепте 8 6 — о тестировании защищенного канала. Рекомендуем обратиться к документу MS КВ 216393 (Resetting Computer Accounts in Windows 2000 and Windows XP) и к документу MS KB 325850 (HOW TO: UseNetdom.exe to Reset Machine Account Passwords of a Windows Server 2003 Domain Controller). 8.8. Поиск неактивных или неиспользуемых компьютеров Проблема Требуется найти учетные записи компьютеров, не подключавшихся к Active Di- rectory в течение заданного времени. Решение1 С помощью интерфейса командной строки Все неактивные компьютеры в указанном лесу поможет найти такой запрос: > dsquery computer forestroot -inactive <число_недель> 1 Данное решение применимо только по отношению к компьютерам, работающим под управлением операционных систем семейства Windows. Другие компьютеры, имеющие учетные записи в Active Directory (например, работающие под управле!шем Unix), могут нс обновлять атрибуты, в которых хранятся время входа и пароль и на основе которых определяется, активен ли компьютер.
8.8. Поиск неактивных или неиспользуемых компьютеров 271 Задав опцию domainroot в сочетании с ключом -d, вы сможете опросить опре- деленный домен: > dsquery computer domainroot -d <иня_донена> -Inactive <число_недепь> или даже адресовать запрос конкретному контейнеру: > dsquery computer ou=MyComputers dc-rallencorp.dc=com -inactive <число_недель> ПРИМЕЧАНИЕ------------------------------------------------------------------------------------ Выполнение данной команды возможно лишь при условии, что функциональный уровень домена со- ответствует Windows Server 2003. С помощью сценария на языке Perl #’perl #---------- # Script Configuration # # Переменной присваиваются имена домена и контейнера либо подразделения, где будет # произве диться л )иск неактивных компьютеров my Sdomain - ’amer.rallencorp.com': # Переменной присваивается пустая строка, чтобы поиск выполнялся по всему домену my $computer_cont - ‘cn-Computers.': # Количество недель, в течение которых искомые компьютеры не были активными my $weeks_ago - 30 # ---- ... # End Configuration # ------------- use strict; use Win32 OLE; $W1n32: OLE: Warn - 3. use Math::B1gInt; # Преобразование значения $weeks_ago в большое целое число. # представляющее количество секунд, для сравнения с lastLogonTimestamp Ry $sixmonth_secs “time - 60*60*24*7*$weeks_ago; Ry SintObj - Math::B1gInt->new($sixmonth_secs); SintObj - Math ;BigInt->new($1ntObj->bmulCIO ООО 000')); Ry $sixmonth_1nt - Math: Biglnt->new( Sint0bj->badd(’116 444 736 000 000 000’)); tsixmonthint — s/*[+-]//; # Подключение ADO my SconnObj = Win32::OLE->new(’ADODB.Connect!on'): $connObj->{Provider} = "ADsDSOObject"; SconnObj->Open; Ry ScommObj - Win32: :OLE->neiftCADODB.Command'): ScommObj->{ActiveConnection} = SconnObj; ScommObj->Properties->{’Page Size’} - 1000: # Определение имени используемого no умолчанию контекста именования д мена Ry SrootDSE Win32::OLE-*GetObjectC"LDAP://$domain/RootDSE"): Ry SrootNC - SrootDSE->Get(''defaultNanhngContext"): # Выполнение ADO запроса и вывод результатов
272 Глава 8. Компьютеры щу Squery - ”<LDAP://(domain/(ccmputer_cont(rootNC>:“; Squery "(&(objectclass-computer)"; Squery "(objectcategory^computer)"; Squery - “(lastlogontimestamp<»S$7xmont/i_7nt)); (query .» ''cn.distinguishedName:”: (query .- "subtree": Scoff7rt7bJ->{CommandText} - Squery; щу SresObj - ScommObj->Execute(Squery); die "Could not query Sdomain: “.$И1п32::OLE::Last£rror."\n" unless ref SresObj; print “\nComputers that have been Inactive for $weeks_ago weeks or moreAn"; щу Stotal - 0; while (!(SresObj->EOF)) { щу Sen - SresObj->F1elds(0)->value print “\t",SresObj->F1el ds("disti nguishedName")->value."\n"; Stotal++; SresObj->MoveNext; } print "Total: $total\n"; Комментарий К решению с помощью интерфейса командной строки Команду dsquery computer очень удобно использовать для поиска неактивных ком- пьютеров, то есть таких, которые не подключались к домену в течение несколь- ких недель или месяцев Результаты выполненного с ее помощью запроса можно передать команде dsrm, и все соответствующие объекты computer сразу же будут удалены из Active Directory. Вот как можно удалить учетные записи всех компью- теров, которые не подключались к домену в течение 12 и более недель: > for /F "usebackq" Si in ('dsquery computer domainroot -inactive 12') do dsrm Xi Если нет особой необходимости, не следует удалять учетные записи компью- теров, которые неактивны менее трех месяцев. Наиболее целесообразно выполнять удаление через год, то есть через 52 недели. К решению с помощью сценария на языке Perl В Windows 2000 единственный способ определения того, активен ли компьютер, заключается в анализе значений атрибутов pwdLastSet и lastLogon его учетной за- писи. Первый из них, pwdLastSet, — это 64-разрядное целое число, представляющее дату и время последнего изменения пароля компьютера Поскольку пароли ком- пьютеров должны меняться каждые 30 дней, тот факт, что пароль остается неиз- менным в течение нескольких месяцев, означает, что компьютером не пользуют- ся. В VBScript выполнить указанную проверку затруднительно, так как этот язык не очень хорошо «справляется» с 64-разрядными целыми числами. Существуют библиотеки сторонних производителей, которые содержат 64-разрядные функ- ции, но стандартные функции VBScript с такими числами не работают. Второй атрибут, lastLogin, также содержит 64-разрядное целое число, пред- ставляющее дату и время последнего подключения компьютера к домену Однако этот атрибут, к сожалению, не реплицируется. Поэтому для определения времени самого последнего подключения компьютера к домену нужно опрашивать все
8.9. Изменение максимального количества компьютеров 273 контроллеры данного домена, что, конечно же, не очень удобно, особенно если контроллеров довольно много. В Windows Server 2003 появился новый атрибут, получивший название last- LogonTimestamp. Он входит в состав объектов user и computer и содержит приблизи- тельное время последнего подключения пользователя или компьютера к домену (опять-таки в виде 46-разрядного целого), но в отличие от атрибута 1 astLogl п реп- лицируется на все контроллеры домена. Этот атрибут обновляется только в том случае если он не менялся в течение заданного времени, скажем, недели, что по- зволяет предотвратить слишком частую его репликацию и связанное с ней увели- чение трафика. Итак, для настоящего рецепта выбран язык Perl. А как уже было отмечено, едва ли найдется задача, которую нельзя решить с его помощью. Нс является исклю чением и данная задача. Для выполнения операций над большими целыми числами в Perl имеется специальный модуль, называемый Math::BigInt. Первым делом в приведенном сценарии вычисляется количество секунд, про- шедших с 1970 года до даты проверки компьютера на предмет его активности (те- кущая дата минус заданное число недель). Результат преобразуется в большое целое число, после чего остается лишь выполнить ADO-запрос на получение списка компьютеров, у которых значение атрибута lastLogonTimestamp не превышает указанного числа. Смотрите также В рецепте 6.26 (глава 6) рассказывается как найти учетные записи пользователей, срок действия которых истекает спустя указанное время. 8.9. Изменение максимального количества компьютеров, которые пользователь может присоединить к домену Проблема По умолчанию пользователю предоставляется возможность присоединять к домену не более 10 компьютеров. Требуется изменить эту установку. Решение С помощью графического пользовательского интерфейса 1. Откроите редактор ADSI Edit. 2. Щелкните правой кнопкой мыши па объекте domai nDNS, представляющем до- мен, в котором нужно выполнить установку, и выберите в открывшемся контек- стном меню команду Properties (Свойства). 3. Отредактируйте значение атрибута ms-DS-MachineAccountQuota, введя новое значе- ние квоты. 4. Дважды щелкните на кнопке ОК.
274 Глава 8. Компьютеры С помощью интерфейса командной строки Создайте LDIF-файл с именем changejcomputer_quota.ldf содержащий приведенный ниже код, где <ОИ_домена> нужно заменить именем домена, для которого вы хотите задать новую установку, а <квота> — новой квотой на количество компьютеров: dn: <ОИ_домена> changetype: modify repl асе: ms-DS-Machi neAccountQuota ms-DS-MachineAccountQuota: <квота> Затем выполните следующую команду: > Idifde -v -i -f change_computer_quota.ldf С помощью сценария на языке VBScript * Этот код устанавливает для домена квоту на количество компьютеров. * присоединяемых одним пользователем * SCRIPT CONFIGURATION ----- intQuota - <квота> strDomain - "ONS-имя домена>" ' Например: emea.rallencorp.com * END CONFIGURATION -------- set objRootDSE = GetObject("LDAP://" & strDomain & "/RootDSE”) set objDomain = GetObject("LDAP://" & objRootDSE.Get("defaultNamingContext")) objDomain.Put "ms-DS-MachineAccountQuota". intQuota objDomain.Setinfo WScript.Echo "Updated user quota to " & intQuota Комментарий Как уже было сказано, по умолчанию члены группы Authenticated Users (Прошед- шие проверку) могут присоединить к домену до 10 компьютеров Кроме того, на- помним, что учетные записи компьютеров по умолчанию находятся в контейнере Computers (Компьютеры). Указанное количество учетных записей определено в атрибуте ms-DS-Machi neAccountQuota объекта doma inDNS. Его легко изменить, задав любое другое число, и в частности 0. Если атрибуту ms-DS-Machi neAccountQuota будет присвоено значение 0, вам придется предоставлять пользователям явные разрешения на присоединение компьютеров к домену (о том, как это делается, рассказано в рецепте 8.3) Существует еще один способ предоставления пользователям разрешения на присоединение компьютеров к домену, хотя применять его не рекомендуется. Этот способ основан на использовании групповой политики. Если в редакторе группо- вой политики развернуть ветвь Computer Configuration ► Windows Settings ► Security Settings ► Local Policies ► User Rights Assignment (Конфигурация компьютера ► Кон- фигурация Windows ► Параметры безопасности ► Локальные политики ► Назна- чение прав пользователя) и дважды щелкнуть на разрешении Add workstation to domain (Добавление рабочих станций к домену), откроется окно, где можно указать пользователей или группы, которым нужно предоставить данное разрешение. Получившие его пользователи могут создавать учетные записи компьютеров, даже если у них нет разрешения на создание дочерних объектов в используемом
8.10. Поиск учетных записей компьютеров 275 по умолчанию контейнере Computers (Компьютеры) Такая возможность преду- смотрена для обеспечения обратной совместимости с Windows NT, но без особой не- обходимости ею лучше не пользоваться Смотрите также В рецепте 8.3 указано, какие разрешения необходимо иметь для присоединения компьютера к домену. Ознакомьтесь с документами MS КВ 251335 (Domain Users Cannot Join Workstation or Server to a Domain) и MS KB 314462 («You Have Exceeded the Maximum Number of Computer Accounts» Error Message When You Try to Join a Windows XP Computer to a Windows 2000 Domain) 8.10. Поиск учетных записей компьютеров, работающих под управлением определенной операционной системы Проблема Требуется найти в домене учетные записи компьютеров, работающих под управ- лением определенной операционной системы (ее конкретной версии) с указан- ной версией пакета обновлений. Решение С помощью графического пользовательского интерфейса 1 Запустите служебную программу LDP 2 Выберите команду Connection ► Connect (Подключение ► Подключиться) 3 В поле Server (Сервер) введите имя контроллера домена (или оставьте это поле пустым — в таком случае связь будет установлена без участия сервера). 4. В поле Port (Порт) введите значение 389 5 Щелкните на кнопке ОК. 6. Выберите команду Connection ► Bind (Подключение ► Связать). 7 Введите имя и пароль пользователя, а затем щелкните на кнопке ОК. 8. Выберите команду Browse ► Search (Поиск ► Найти). 9. В поле BaseDN (Отличительное имя базы) введите отличительное имя объекта, с которого должен быть начат поиск. 10. В поле Filter (Фильтр) укажите спецификацию фильтра, включающую атри- бут операционной системы, по которому должен производиться отбор. На- пример, для того чтобы найти учетные записи всех компьютеров, которые ра- ботают под управлением Windows ХР, следует воспользоваться фильтром (&(objectclass-computer)(objectcategory-coniputer)(operatingSysteni"Windows ХР Pro- fessional)).
276 Глава 8. Компьютеры 11. Укажите подходящую область поиска. 12. Далее, если вы хотите настроить список атрибутов, значения которых будут возвращены для каждого найденного объекта, щелкните на кнопке Options (Параметры). 13. Щелкните на кнопке Run (Выполнить), и результаты поиска будут выведены на правой панели. С помощью интерфейса командной строки > dsquery * <ОИ_домена> -scope subtree -attr "*" -filter "(&(objectclass=J computer)(objectcategory-computer)(operati ngSystein=W1ndows Server 2003))" С помощью сценария на языке VBScript ’ Этот код находит компьютеры, на которых установлен пакет Service Pack 1 ' ----- SCRIPT CONFIGURATION ... strBase - “<-LDAP: I/“ & "ОИлонена^ & 1 ..... END CONFIGURATION ------ strFilter = "(&(objectclass=coniputer)(objectcategory=computer)" & "(operati ngSystemServicePack=Servi ce Pack 1));" strAttrs - "cn.operatingSystem.operatingSystemVersion." & " operati ngSystemServi cePack;" strScope - "subtree" set objConn » CreateObjectC'ADODB.Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" Set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope) objRS.MoveFirst while Not ObjRS.EOF Wscript.Echo objRS.Fields(O).Value Wscript Echo objRS.Flelds(l).Value Wscript.Echo objRS.Fields(2).Value Wscri pt.Echo objRS.Fi el ds(3).Vaiue WScrlpt.Echo objRS.MoveNext wend Комментарий Когда компьютер присоединяется к домену Active Directory, в представляющем его объекте computer настраиваются значения атрибутов, определяющих операци- онную систему. Таких атрибутов три, и их можно использовать для поиска учет- ных записей компьютеров: О operati ngSystem — название операционной системы, под управлением которой работает компьютер (Windows Server 2003, Windows 2000 Server или Win- dows XP Professional); О operatingSystemVersion — номер версии операционной системы (например, 5.0 (2195) или 5.2 (3757)); О operati ngSystemServicePack — номер пакета обновлений, который установ- лен на компьютере (скажем, Service Pack 2 или Service Pack 3)
8.11. Ссылка на контейнер для хранения объектов computer 277 ПРИМЕЧАНИЕ--------------------------------------------------------------- Рецепт 8.10 можно применить только к компьютерам, работающим под управлением операционных систем семейства Windows. Компьютеры с системами других типов (в частности, Unix), хоть и имеют учетные записи в Active Directory, обновление атрибутов, представляющих операционную систему, не производят. 8.11. Ссылка на контейнер, используемый по умолчанию для хранения объектов computer Проблема Требуется указать контейнер, в который Active Directory по умолчанию помещает создаваемые объекты computer. Решение1 С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выберите команду Connection ► Connect (Подключение ► Подключиться) 3. В поле Server (Сервер) введите имя контроллера домена (или оставьте это поле пустым, — в таком случае связь будет установлена без участия сервера). 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5 Выберите команду Connection ► Bind (Подключение ► Связать) 6 Введите имя и пароль пользователя данного домена и щелкните на кнопке ОК. 7 Выполните команду View ► Tree (Вид ► Дерево). 8 В поле DN (Отличительное имя) введите <WKGUII>aa312825768811dladed00c04- fd8d5cd <0И_домена», где <0И_домена> — это отличительное имя домена. 9. Щелкните на кнопке ОК, и слева будет отображен контейнер, используемый по умолчанию для хранения учетных записей компьютеров. С помощью интерфейса командной строки Утилита netdom предоставляет возможность задать имя только компьютера, но не его родительского контейнера В таких случаях обычно применяется контейнер, используемый по умолчанию С помощью сценария на языке VBScript Этот код показывает, как полагается ссылаться на используемый пэ умолчанию контейнер объектов computer в сценариях ’ SCRIPT CONFIGURATION --- strDomain - ”<DNS-имя-Домена^ ' Например: apac.rallencorp.com ‘ END CONFIGURATION ...... 1 Данный рецепт можно использовать тишь при условии, что функциональный уровень домена соот- ветствует Windows Server 2003
278 Глава 8. Компьютеры ‘ Определенная в файле ntdsapi.h константа, представляющая GUID контейнера объектов axnputer I Const ADS_GUID_COMPUTRS_CONTAINER - "aa312825768811dladed00c04fd8d5cd" set objRootDSE - GetObjectC"LDAP://" & strDomain & "/RootDSE") set objCompContainer - GetObject("LDAP://<WKGUID=" & _ ADS_GUID_COMPUTRS_CONTAINER & & _ objRootDSE.GetCdefaultNamingContext") & ">" ) WScript.Echo objCompContainer.Get(“distinguishedName") Комментарий В каждом домене Active Directory имеется несколько важных объектов, которые должны быть «устойчивыми к переименованию». Другими словами, переименование таких объектов не должно отражаться на работе приложений, в которых они ис- пользуются. Для обеспечения безопасного переименования Microsoft разработала технологию, называемую связыванием WKGUID. Данная технология позволяет задавать в приложении не имена объектов, а их стандартные GUID, называемые WKGUID (Well Known GUID — общеизвестный GUID). В качестве примера ниже приведен WKGUID используемого по умолчанию контейнера Computers (Компьютеры): aa312825768811dladed00c04fd8d5cd С помощью данного идентификатора можно сослаться на используемый по умолчанию контейнер объектов computer — дляртого достаточно задать значение атрибута ADsPath: LDAP:/f<UKGUID-aa312825768811dladed00c04fd8d5cd. dc-apac.dc=ra11encorp.dc=com> Список объектов домена, имеющих идентификаторы WKGUID, содержится в атрибуте wel 1 KnownObjects объекта domainDNS этого домена. Данный атрибут явля- ется многозначным и имеет синтаксис DNW1 thBi nary. Одно из возможных значений атрибута wellKnownObjects для домена rallencorp.com приведено ниже: В:32:AA312825768811D1ADED00C04FD8D5CD:CN=Ccmputers.DC=ral 1 encorp.DC-СОШ; В:32:F48E92A4C777485E878E9421D53087DB:CN=Microsoft.CN-Program Data.DC-ra11encorp.DC-com: В:32:09460C08AE1E4A4EAOF64AEE7DAA1E5A:CN-Program Data.DC=ral1encorp.DC-com; В:32:22B70C67D56E4EFB91E9300FCA3DC1AA:CN=ForeignSecuri tyPrinci pals.DC-ral1encorp.DC-conr, В:32:18E2EA80684F11D2B9AAOOC04F79F805:CN-Deleted Objects.DC-ral 1encorp.OC-com; В:32:2FBAC1870ADE11D297C400C04FD8D5CD:CN-Infrestructure.DC-ral 1encorp.DC’COm; В:32:AB8153B7768811D1ADED00C04FD8D5CD:CN-LostAndFound.DC»ral1encorp.DC-com: В:32:AB1D30F3768811D1ADED00C04FD8D5CD:CN-Systern.DC-ral1encorp.DC-com; В:32:A361B2FFFFD21101AA4BOOC04FD7D83A:O'J-Dcmai n Control1ers.DC-ral1encorp.DC-com: В:32:A9D1CA15768811D1ADED00C04FD8D5CD:CN-Users.DC-ral 1 encorp.DC-com; Каждое из составляющих этого значения имеет формат В-.Number of Bytes: GUID: Di sti ngui shedName Как видите, GUID первого значения совпадает с приведенным выше значени- ем атрибута ADsPath, предназначенного для связывания с используемым по умолча- нию контейнером объектов computer.
8.12. Замена используемого по умолчанию контейнера объектов computer 279 Смотрите также В рецепте 8.12 рассказывается, как сменить контейнер, используемый по умолча- нию для хранения объектов computer. Прочтите документ MSDN: Binding to Well- Known Objects Using WKGUID. 8.12. Замена используемого по умолчанию контейнера объектов computer Проблема Требуется сменить используемый по умолчанию контейнер объектов computer. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выберите из ее меню команду Connection ► Connect (Подключение ► Подклю- читься). 3. В поле Server (Сервер) введите имя контроллера домена (если вы оставите его пустым, связь будет установлена без участия сервера). 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выберите команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя данного домена, после чего щелкните на кнопке ОК. 7. Выберите команду Browse ► Modify (Поиск ► Изменить). 8. В поле DN (Отличительное имя) введите отличительное имя объекта domainDNS, представляющего домен, в котором нужно сменить используемый по умолча- нию контейнер объектов computer. 9. В поле Attribute (Атрибут) введите wellKnownObjects. 10. В поле Values (Значения) введите В-.32:AA312825768811D1ADED00C04FD8D5CD^Compu- ters , <0И_домена>, где <0И_доменз> — отличительное имя, введенное в поле DN. И. Выберите команду Delete for the Operation (Удалить из определения операции) и нажмите клавишу Enter (Ввод). 12. После этого еще раз вернитесь к полю Values (Значения) и введите следую- щее: В: 32: АА31282576881ID 1ADED00C04FD8D5CD: <новый_род_конт_компьютеров>. <ОИ_домена>, где <новый_род_конт_компьютеров> — имя родительского контейнера, в котором теперь будут создаваться новые объекты computer (например, ou=RAl 1 enCorp Computers). 13. Выберите команду Add for the Operation (Добавить в определение операции) и нажмите клавишу Enter. 14. Щелкните на кнопке Run (Выполнить), и результаты операции будут отобра- жены на правой панели.
280 Глава 8. Компьютеры С помощью интерфейса командной строки > redircmp "<ОИ_нового_род_конгейнера>" С помощью сценария на языке VBScript ' Этот код изменяет контейнер, используемый по умолчанию для объектов computer • ----- SCRIPT CONFIGURATION --- strNewComputersParent - "<новый_род_ионт_комьютеров>" ‘ Например: OU-RAI 1enCorp Computers strDomain - "<ОМЗ-имя_домена>" ' Например: rallencorp.com - -----END CONFIGURATION......... Const CCMPUTER_WKGUID - "B:32:AA312825768811D1ADEDOOC04FD8D5CD:“ ‘ Из перечисления ADS_PROPERTY_OPERATIW_ENUM Const ADS_PROPERTY_APPEND = 3 Const ADS_PROPERTY_DELETE = 4 set objRootDSE = GetObjectCLDAP://" & strDomain & "/RootDSE") set objDomain - GetObjectCLDAP:// ' & objRoorDSE.GetCdefaultNamingContext")) set objCompWK - GetObjectCLDAP://" & _ "<UKGUID~M312825768811D1ADEDOOCO4FD8D5CD." & _ objRootDSE.Get("defaultNamingContext") i ">'') objDomain.PutEx ADS_PROPERTY_DELETE. "wellKnownObjects". Array( COMPUTER_UKGUID & objCompWK.GetCdistinguishedName")) objDomain.PutEx ADS_PROPERTY_APPEND. "wellKnownObjects". Array! COMPUTERJm'KGUID & st NewComputersParent & V & objRootDSE .GetCdefaul tNami ngContext") ) objDomain.SetInfo WScript.Echo "New default Computers container set to " & _ st NewComputersParent Комментарий Контейнер Computers (Компьютеры) из корневого раздела домена предназначен для хранения объектов computer, но большинство администраторов Active Direc- tory не используют его для этой цели. Объясняется это тем, что данный контей- нер не является подразделением, а следовательно, к нему нельзя применить груп- повую политику. Если вы также предпочитаете хранить объекты computer в другом месте, имеет смысл изменить используемый по умолчанию контейнер этих объектов, чтобы приложения могли находить их по общеизвестному идентификатору кон- тейнера. Кроме всего прочего, это поможет предотвратить появление в Active Di- rectory учетных записей компьютеров, к которым не применяется определенная вами групповая политика. Более подробная информация о том, как в Active Directory определяются об- щеизвестные идентификаторы объектов, приведена в рецепте 8.11. Смотрите также Документ MS КВ 324949 (Redirecting the Users and Computers Containers in Win- dows Server 2003 Domains).
9 Объекты групповой политики 9.0. Введение Объекты групповой политики (Group Policy Object, GPO) Active Directory могут использоваться для настройки самых разнообразных параметров рабочего окру- жения пользователя и компьютера. Кроме того, они помогают автоматизировать процесс установки приложений, обеспечивают защиту компьютеров, выполнение сценариев входа в систему и выхода из нее и т. д. Объект групповой политики может быть связан с группой безопасности, подразделением, сайтом или доменом, то есть с определенной областью управления (Scope Of Management, SOM). В этом случае он используется при выполнении всех операций, имеющих отношение к входящим в данную область пользователям или компьютерам. Операция назначе- ния объекту GPO определенной области управления называется его связыванием. В Windows Server 2003 имеется возможность ограничить область действия объекта групповой политики с помощью фильтра WM1. Этот фильтр представляет собой запрос WMI (Windows Management Instrumentation — инфраструктура управления Windows) на получение информации о клиентском компьютере. Если запрос возвращает какие-либо данные, объект групповой политики обрабатывается; в противном случае его обработка не производится. Таким образом, вы можете не только связывать объекты групповой политики с любыми областями управления, но еще и решать, руководствуясь сведениями о клиентском компьютере, имеет ли смысл применять GPO в каждом конкретном случае. Объект групповой политики представляет собой структуру данных, состоя- щую из двух частей. Первая из них, называемая контейнером групповой политики, хранится в Active Directory в виде объекта groupPollcyContainer, который нахо- дится в контейнере cn=Policies.cn=System.<OKj?oweHa>. В объектах groupPolicyCon- tainer (их связывают с подразделениями, сайтами и доменами) содержится ин- формация, относящаяся к установке программного обеспечения. Вторая часть объекта групповой политики, называемая шаблоном групповой политики, хранится в файловой системе каждого контроллера домена в файлах GPT (Group Policy Template - шаблон групповой политики), которые находятся в каталоге %System- Root°/o\SYSVOL\sysvol\<DNS-MMB_flOMeHa>\Policies. Почему же объект групповой политики хранится в двух местах? Необходимость в представлении групповой политики в виде объекта Active Directory очевидна: для того чтобы можно было связать GPO с объектами других типов, он сам должен
282 Глава 9. Объекты групповой политики быть представлен объектом Active Directory. Ну а необходимость в хранении дан- ных GPO в файловой системе вызвана тем, что клиенты используют механизмы файловой системы для хранения и обработки объектов групповой политики; кроме того, нужно организовать поддержку папки NETLOGON, применяемой для обеспе- чения совместимости с предыдущими версиями Windows. * Управление объектами групповой политики В Windows 2000 возможности, предоставляемые объектами групповой политики, были очень широкими, а вот эффективных средств для управления ими явно недоставало. Описанный выше способ хранения информации объектов группо- вой политики создавал множество проблем. Во-первых, Microsoft не предостав- ляла программного интерфейса для работы с этими объектами. Во-вторых, не было средств для их копирования из отладочной среды в рабочую. Основным средством управления объектами групповой политики считался редактор группо- вой политики (Group Policy Editor, GPE), теперь называемый редактором объек- тов групповой политики (Group Policy Object Editor, GPOE). Главное его назна- чение заключается в редактировании установок GPO; других возможностей для управления этими объектами редактор не предоставляет. В Microsoft понимали, что перечисленные недостатки препятствуют внедре- нию групповых политик, и поэтому разработали консоль управления групповой политикой GPMC (Group Policy Management Console). Эта консоль реализована в виде оснастки ММС с полным набором функций управления объектами GPO: с ее помощью таковые можно создавать, удалять, импортировать, копировать, создавать их резервные копии, восстанавливать и моделировать (эмулировать). А особенно важно то обстоятельство, что одновременно с консолью устанавлива- ется API, с помощью которого все перечисленные действия можно выполнять и программным путем. ПРИМЕЧАНИЕ------------------------------------------------------------ Единственная важная функция, которая до сих пор не реализована в GPMC, — это возможность не- посредственно изменять установки GPO с помощью редактора GPOE. Зато консоль обладает рядом функций для переноса объектов групповой политики, что позволяет решать многие серьезные про- блемы, с которыми сталкиваются администраторы Active Directory. Оснастку GPMC можно загрузить с сайта, который расположен по адресу http://www.microsoft.com/windowsserver2003/gpmc/default.mspx. Для ее корректной работы требуются системное программное обеспечение Windows Server 2003 или Windows ХР SP 1 с исправлением Q326469 и платформа NET Framework; в Win- dows 2000 оснастка не функционирует. С помощью GPMC можно управлять объек- тами групповой политики Windows 2000, но сама она должна выполняться на од- ной из указанных выше платформ. Во многих представленных в этой главе решениях предполагается использова- ние оснастки GPMC. Более того, без нес решить большинство описанных здесь задач вообще было бы невозможно. По этой причине весьма желательно установить ос- настку и как следует изучить ее. В преобладающей части приведенных здесь ре- шений на основе командной строки используются сценарии, устанавливаемые вместе с GPMC. С этой консолью поставляется множество готовых сценариев, на-
9.1. Поиск объекта групповой политики в домене 283 писанных отчасти на VBScript, а отчасти — на JavaScript. С одной стороны, они представляют собой мощный инструментарий с интерфейсом командной строки, а с другой — пример того, как следует программировать операции над объектами групповой политики. По умолчанию эти сценарии находятся в каталоге %Prog- ramFiles%\GPMC\scripts, и существует два способа их выполнения. Во-первых, это можно сделать с использованием команды cscript: > cscript listallgpos.wsf Во-вторых, если программа cscript по умолчанию используется как интерпрета- тор WSH, файлы сценариев можно запускать непосредственно. Для того чтобы назначить программу cscript интерпретатором, необходимо выполнить команду: > cscript //Нrescript Полная документация по GPMC содержится в файле gpmc.chm, расположенном в каталоге %ProgramFiles%\GPMC\scripts, а также в MSDN (http://msdn.microsoft.com/). 9.1. Поиск объекта групповой политики в домене Проблема Требуется найти все объекты групповой политики, имеющиеся в заданном домене. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели откройте контейнер Forest (Лес), а в нем — контейнер Do- mains (Домены). 3. Найдите интересующий вас домен. 4. Откройте контейнер Group Policy Objects (Объекты групповой политики), и вы увидите полный список объектов групповой политики выбранного домена. С помощью интерфейса командной строки > listallgpos.wsf [/domain:<QVS-имя_донена>] [/v] Список объектов групповой политики можно вывести еще одним способом: > gpotool [/<!ота1п:<О//5-иия_домеяа>] [/verbose] С помощью сценария на языке VBScript Этот код выводит список объектов групповой политики заданного домена ‘ ---- SCRIPT CONFIGURATION ---- strDomain - “<Ж-иня_донена>“ ‘ Например: rallencorp.com ' ---- END CONFIGURATION -- set objGPM - CreateObjectC’GPMgmt.GPM") set objGPMConstants - objGPM.GetConstants( )
284 Глава 9. Объекты групповой политики ‘ Инициализация объекта Domain set objGPMDoma'<. - objGPM.GetDomainfstrDomain. objGPMConstants.UseAnyOC) ’ Создание пустого критерия поиска set objGPMSearchCriteria - objGPM.CreateSearchCriteria set objGPOList ° objGPKDomain.SearchGPOs(objGPMSearchCriteria) 1 Вывод списка GPO WScrlpt.Echo "Found " & objGPOList.Count & " GPOs in “ & strDomain & for each objGPO in objGPOList WScrlpt.Echo " " & objGPC.DisplayName next Комментарий В разделе 9.0 довольно подробно рассказывается о том, как в Active Directory хранятся объекты групповой политики. К решению с помощью сценария на языке VBScript Поиск объектов групповой политики в домене можно произвести с помощью ме- тода GPMDomain.SearchGPOs. Единственный параметр, который нужно ему передать, это объект GPMSearchCriteria, используемый для определения критериев поиска. В приведенном выше сценарии создается пустой объект GPMSearchCriteri а, посколь- ку нам нужны все GPO-объекты домена. Метод SearchGPOs возвращает объект GP- MGPOCollection, представляющий собой семейство объектов GPMGPO. Смотрите также Документы MS КВ 216359 (HOW TO: Identify Group Policy Objects in the Active Directory and SYS VOL) и MSDN: GPMDomain.SearchGPOs. 9.2. Создание объекта групповой политики Проблема Требуется создать объект групповой политики и определить для пользователей единую конфигурацию рабочего стола или единые конфигурационные установки рабочих станций либо серверов. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), а затем домен, в котором требуется создать новый объект групповой политики. 3. Щелкните правой кнопкой мыши на контейнере Group Policy Objects (Объекты групповой политики) и выберите в открывшемся контекстном меню команду New (Создать). 4. Введите имя нового объекта групповой политики и щелкните на кнопке ОК.
9.3. Копирование объекта групповой политики 285 С помощью интерфейса командной строки > creategpo.wsf <иня_вРО> [/й<хпа1п:<ОН5-имя^омена>] С помощью сценария на языке VBScript ' Этот код создает пустой объект групповой политики ----- SCRIPT CONFIGURATION ...- strGPO - "<hhz_GPO>" ' Например: Sales GPO strDomain - "ОН5-иняуюмена>" ' Например: rallencorp.com ' ----- END CONFIGURATION ------ set objGPM - CreateObjectC’GPMgmt.GPM") set objGPMConstants - objGPM.GetConstants( ) ‘ Инициализация объекта Domain set objGPKDomain = objGPM.GetDomainCstrDomain. objGPMConstants.UseAnyOC) 1 Создание GPO и вывод результатов set objGPO - objGPHDomain.CreateGPO( ) WScript.Echo "Successfully created GPO" objGPO.DisplayName - strGPO WScript.Echo "Set GPD name to ” & strGPO Комментарий Объект групповой политики, созданный с помощью оснастки GPMC, вначале бу- дет пуст, для него не настроены пи установки, ни связи. О том, как изменить уста- новки объекта групповой политики, рассказывается в рецепте 9.6, а о том, как связать его с областью управления, — в рецепте 9.12. С помощью сценария на языке VBScript Для создания объекта групповой политики программным путем первым делом нужно создать объект GPMDomain, представляющий домен, в котором будет раз- мещен новый GPO. Эта операция выполняется с помощью метода GPM.GetDomain, после чего остается лишь вызвать метод без параметров GPMDomain.CreateGPO, соз- дающий пустой GPO. Данный метод возвращает объект GPM.GPO, из которого при- веденный сценарий считывает и выводит имя объекта групповой политики. Смотрите также Документы MS КВ 216359 (HOW TO: Identify Group Policy Objects in the Active Directory and SYSVOL) и MSDN: GPMDomain.CreateGPO. 9.3. Копирование объекта групповой политики Проблема Требуется создать новый объект групповой политики, содержащий копию свойств и установок указанного объекта.
286 Глава 9. Объекты групповой политики Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2 На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), домен, в котором находится исходный объект групповой политики, и контейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните правой кнопкой мыши на исходном объекте групповой политики и выберите в открывшемся контекстном меню команду Сору (Копировать). 4. Щелкните правой кнопкой мыши на контейнере Group Policy Objects (Объекты групповой политики) и выберите из контекстного меню команду Paste (Вста- вить) 5. Укажите, какие именно разрешения — используемые по умолчанию или уже заданные — вы хотите применить, и щелкните на кнопке ОК 6. Откроется окно сообщения, где будет указано, успешно ли произведено копи- рование. Щелкните на кнопке ОК, и окно будет закрыто. 7 Переименуйте только что созданный объект, воспользовавшись командой Re- name (Переименовать) его контекстного меню. С помощью интерфейса командной строки > copygpo.wsf <имя_исходного_вРО> <иня_нового_СРО> С помощью сценария на языке VBScript ' Этот код создает копию объекта групповой политики • ------- SCRIPT CONFIGURATION --- strSourceGPO - "<имя_исходного_СРО>" ' Например: SalesGPD strNe^GPO = "<иня_нового_вРО>" ' Например: Marketing GPO strDomain = “<0М5-иня_домена>" ' Напринер: rallencorp.com ' ....- END CONFIGURATION--------- set objGPM = CreateObject("GPMgmt.GPM“) set objGPMConstants - objGPM.GetConstants( ) ’ Инициализация объекта Domain set objGPMDomain = objGPM.GetDomain(strDomain. . objGPMConstants.UseAnyDC) 1 Поиск исходного GPO set objGPMSearchCriteria = objGPM.CreateSearchCriteria objGPMSearchCriteria.Add objGPMConstants.SearchPropertyGPODi splayName. objGPMConstants.SearchOpEquaIs. cstr(strSourceGPO) set objGPOList - objGPMDomain.SearchGPOs(objGPMSearchCriteria) if objGPOList.Count = 0 then WScript.Echo "Did not find GPO: " & strGPO WScript Echo "Exiting." WScript.Quit el seif objGPOList.Count > 1 then WScript.Echo "Found more than one matching GPO. Count: " & _ objGPOList.Count WScript.Echo "Exiting." WScript.Quit
9.3. Копирование объекта групповой политики 287 else WScript.Echo "Found GPO: " & objGPOList.Item(l).DisplayName End if ’ Копирование из исходного объекта групповой политики в новый объект set objGPMResult - objGPOList.Item(l).СоруТоСО, objGPMDomain. strNewGPO) • Если во время операции произойдет ошибка. ’ будет сгенерировано исключение on error resume next objGPMResult.OverallStatusC ) if objGPMResult.Status.Count > 0 then WScript.Echo "Status message(s): " & objGPMResult.Status.Count for i - 1 to objGPMResult.Status.Count WScript.Echo objGPMResult.Status.Item(i) Message next WScript.Echo vbCrLf end if ' Вывод результатов if Err.Number <> 0 then WScript.Echo "Error copying GPO.” WScript Echo "Error: " & Err.Descript!on else WScript.Echo "Copy successful to " & strNewGPO & end if Комментарий Пока не появилась оснастка GPMC, одной из проблем, связанных с управлением объектами групповой политики в больших сетях, было их перемещение между лесами. Очень часто администраторы используют тестовый лес, где можно создать и настроить объекты групповой политики, протестировать их, а затем перенести в рабочую среду. Вот тут-то и возникает проблема: как их переместить? Решить проблему позволяет консоль управления групповой политикой, которая предполагает возможность копирования GPO с одного домена на другой и даже в другие леса Скопировать объект гр} пповой политики из леса в лес можно лишь при условии, что между двумя доменами (или лесами) существует доверительное отношение. Если такого отношения нет, можно импортировать GPO - данная операция сходна с копированием, но не требует наличия доверительного отноше- ния. Подробные сведения об импортировании объектов групповой политики при- ведены в рецепте 9.7. Некоторые свойства объектов групповой политики, в частности определяющие фильтры на основе членства в группах безопасности и пути в формате UNC (Uni- versal Naming Convention — общее соглашение об именовании), в разных доменах могут различаться. В таком случае удобно использовать таблицу перемещения (migration table) GPMC, где содержится информация, необходимая для перемеще- ния указанных элементов в домен назначения. Подробные сведения о таблицах пе- ремещения приведены в файле справки GPMC.
288 Глава 9. объекты групповой политики К решению с помощью сценария на языке VBScript Прежде чем вы сможете скопировать объект групповой политики, таковой нужно найти. Для этой цели в приведенном выше сценарии используется объект GPM- SearchCriteria, с помощью которого задается выводимое имя искомого объекта. Оператор 1 sei f...el se позволяет убедиться, что в результате поиска получен только один объект. Если не найдено ни одного объекта или же если их обнару- жено несколько, сценарий просто прекращает работу. Далее, имея в своем распоряжении объект GPMGPO, можно скопировать объект групповой политики с помощью его метода GPMGPO.CopyTo. Первый параметр данного метода это набор флагов, указывающий, как следует обрабатывать разрешения исходного объекта. Значение 0 соответствует использованию установок по умол- чанию, описание остальных значений приведено в файле справки оснастки GPMC. Во втором параметре задается объект GPMDomain, представляющий домен, в кото- рый следует скопировать объект групповой политики. Последний параметр дол- жен содержать выводимое имя нового GPO. Смотрите также В рецепте 9.7 речь идет об импорте объектов групповой политики. Кроме того, оз- накомьтесь с документом MSDN: GPMGPO.CopyTo. 9.4. Удаление объекта групповой политики Проблема Требуется удалить в Active Directory объект групповой политики. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), домен, в котором находится подлежащий удалению объект, и, нако- нец, контейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните правой кнопкой мыши на объекте групповой политики и выберите в открывшемся контекстном меню команду Delete (Удалить). 4. Щелкните на кнопке ОК, чтобы подтвердить необходимость удаления указанно- го объекта. С помощью интерфейса командной строки > deletespo.wsf <иня_вРО> [/domain:<М-имя_до«еяа>] С помощью сценария на языке VBScript Эгот ков улаляет заданный объект групповой политики ’ ---- SCRIPT CONFIGURATION - strGPO - "<иня_вРО>а ' Например: Му New GPO
у.ч. удаление ооъекта групповой политики strDomain - "<ОМ5-иня_ронена>" ‘ Например: rallencorp.com • Е№ CONFIGURATION-------------- set objGPM = CreateObjectCGPMgmt.GPM") set objGPMConstants = objGPM GetConstantsC ) ’ Инициализация объекта Domain set objGPMDomain - objGPM GetDomaintstrDomain. objGPMConstants.UseAnyDC) * Поиск GPO set objGPMSearchCriteria - objGPM.CreateSearchCriteria objGPMSearchCriteria.Add objGPMConstants.SearchPropertyGPODisplayName objGPMConstants.SearchOpEquals. cstr(strGPO) set objGPOList - objGPMDomain.SearchGPDs(objGPMSearchCriteria) if objGPOList.Count - 0 then WScrlpt.Echo "Did not find GPO: " & strGPO WScript.Echo "Exiting." WScript.Quit el seif objGPOList.Count > 1 then WScrlpt.Echo “Found more than one matching GPO. Count: “ & _ objGPOList.Count WScrlpt.Echo “Exiting." WScript.Quit else WScript.Echo “Found GPO: " & objGPOList.Item(l).DisplayName end if ' Удаление GPO objGPOL i st.Item(1).Delete WScript Echo "Successfully deleted GPO: ” & strGPO Комментарий При удалении объекта групповой политики оснастка GPMC пытается найти в доме- не все его связи и удалить их, если пользователь имеет соответствующее разреше- ние Если же пользователь не имеет права удалять связи GPO, объект будет удален, а связи останутся, но будут недействительными. Что касается связей, внешних по отношению к данному домену, то все они сохранятся (но также станут недействи- тельными) Таким образом, прежде чем удалять объект групповой политики, же- лательно просмотреть его связи. В GPMC связи с удаленными объектами групповой политики обозначаются как «Не найден». К решению с помощью сценария на языке VBScript Для поиска объекта групповой политики, который подлежит удалению, в приве- денном сценарии используется объект GPMSearchCriteria, позволяющий задать вы- водимое имя искомого объекта. Воспользовавшись оператором if., elseif.. else, вы сможете убедиться, что в результате поиска получен только один объект. Если не найдено ни одного объекта или же если их обнаружено несколько, сценарий просто прекращает работу Удаление объекта выполняется с помощью метода GPMGPO.Delete.
290 Глава 9. Объекты групповой политики Смотрите также В рецепте 9.11 рассказывается, как просмотреть связи GPO. Рекомендуем обра- титься и к документу MSDN: GPMGPO.Delete 9.5. Просмотр установок объекта групповой политики Проблема Требуется просмотреть установки, заданные в объекте групповой политики Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), домен, в котором находится интересующий вас объект, и контейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните на объекте групповой политики. 4. На правой панели перейдите на вкладку Settings (Параметры). 5. Для вывода всех настроенных установок выберите из контекстного меню ко- манду Show All (Показать все). С помощью интерфейса командной строки > getreportsforgpo.wsf "<имя_СРО>” <местоположение_отчетд> [/domain _роиена>] С помощью сценария на языке VBScript ' Этот код генерирует HTML-отчет, содержащий значения всех 1 свойств и установок GPO * ....- SCRIPT CONFIGURATION -- strGPO - "<hmb_GPO>‘ ' Например: Sales GPO strDomain - "<О№-имя_доненд>'’ ‘ Например: rallencorp.com strReportFile - ,'<лолное_имя_файла>’' ' Например: c \gpo report html ’ ---- END CONFIGURATION ------ set objGPM - CreateObjectCGPMgmt.GPM”) set objGPMConstants - objGPM.GetConstants( ) Инициализация объекта Domain set objGPMDomaln - objGPM.GetDoma1n(strDoma1n. objGPMConstants.UseAnyOC) set objGPMSearchCntena - objGPM CreateSearchCriteria objGPMSearchCriteria Add objGPMConstants SearchPropertyGPODIsplayName. objGPMConstants.SearchOpEquals. cstr(strGPO) set objGPOList - objGPMOomain SearchGPOs(objGPMSearchCriteria) if objGPOList.Count - 0 then
g.b. I ipocNorp установок ооъекга групповой политики ZS1 WScrlpt.Echo "Did not find GPO. " & strGPO WScrlpt.Echo ‘Exiting." WScript.Quit el seif objGPOList.Count > 1 then WScrlpt.Echo "Found more than one matching GPO. Count: ‘ _ objGPOList.Count WScrlpt.Echo "Exiting " WScript.Quit else WScrlpt.Echo "Found GPO " & objGPOList Item(l) DisplayName end if set objGPMResult - objGPOList Item(l) GenerateReportToFile( _ objGPMConstants.ReportHTML, strReportFile) Если во время операции произойдет ошибка, будет сгенерировано исключение on error resume next objGPMResult.OverallStatus( ) 1f objGPMResult Status Count > 0 then WScript Echo "Status message(s): “ & objGPMResult.Status.Count for i - 1 to objGPMResult.Status.Count WScrlpt.Echo objGPMResult.Status.Item(i).Message next WScript Echo vbCrLf end 1f * Вывод результатов if Err.Number о 0 then WScript Echo "Error generating report " WScrlpt.Echo "Error: " & Err Description else WScrlpt.Echo "Reported saved to " & strReportFile end if Комментарий Оснастка GPMC может сгенерировать в формате XML или HTML отчет обо всех установках заданного объекта групповой политики. О том, как изменить эти ус- тановки, рассказывается в рецепте 9.6. С помощью сценария на языке VBScript Чтобы вывести установки определенного объекта групповой политики, сначала та- ковой нужно найти Для этого в приведенном выше сценарии используется объект GPMSearchCriteria, позволяющий задать выводимое имя искомого объекта. Вос- пользовавшись оператором 1 f...el sei f ...el se, вы сможете убедиться, что в результа- те поиска получен только один объект. Если не найдено ни одного объекта или же если их обнаружено несколько, сценарий просто прекращает работу. Далее с помощью метода GPMGPO.GenerateReportToFile создается отчет, содержащий ус- тановки GPO. В первом параметре этого метода задается тип отчета (XML или HTML), а во втором — путь к файлу отчета.
292 Глава 9. Объекты групповой политики Смотрите также Документ MSDN GPMGPO GenerateReportToFile. 9.6. Изменение установок объекта групповой политики Проблема Требуется изменить установки объекта групповой политики. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), в котором находится интересующий вас объект, и, наконец, контейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните правой кнопкой мыши на объекте групповой политики и выберите в контекстном меню команду Edit (Редактировать) Откроется редактор объектов групповой политики. 4. Просмотрите установки, задаваемые в разделе Computer Configuration (Конфи- гурация компьютера) или User Configuration (Конфигурация пользователя), и отредактируйте их. С помощью интерфейса командной строки или сценария на языке VBScript Установки объекта групповой политики нельзя изменять с применением интер- фейса командной строки или программным путем, но их можно копировать и им- портировать. Как именно, вы узнаете из рецептов 9.3 и 9.7. Комментарий Единственная функция, которую не поддерживает консоль GPMC и устанавливае- мый вместе с пей API, — это изменение установок объекта групповой политики. Данная задача по-прежнему выполняется с помощью редактора групповой поли- тики GPOE Однако сам редактор загружается из GPMC, как показано в решении на основе графического пользовательского интерфейса. Отсутствие средств для программного изменения установок групповой политики, конечно же, вызывает определенные неудобства, особенно в больших сетях, где нужно управлять объек- тами групповой политики в нескольких лесах. Для переноса установок в другой лес можно воспользоваться операцией копирования или импорта объектов груп- повой политики.
9.7. Импорт установок объекта групповой политики 293 Смотрите также В рецепте 9 3 речь идет о копировании объектов групповой политики, в рецеп- те 9.5 — об особенностях просмотра заданных в них установок, а в рецепте 9.7 — об импорте этих установок. 9.7. Импорт установок объекта групповой политики Проблема Необходимо импортировать установки одного объекта групповой политики Ac- tive Directory в другой. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), затем домен, где находится объект, в который нужно импортировать установки, и, наконец, контейнер Group Policy Objects (Объекты групповой по- литики). 3. Щелкните правой кнопкой мыши на объекте групповой политики и выберите в открывшемся контекстном меню команду Import Settings (Импортировать установки). 4. Щелкните на кнопке Next (Далее) 5. Если нужно создать резервную копию объекта, в который вы намерены им- портировать установки, щелкните на кнопке Backup (Создать резервную копию) 6. Щелкните на кнопке Next (Далее). 7. Выберите папку для создаваемой резервной копии объекта и щелкните на кноп- ке Next (Далее) 8 Укажите резервную копию объекта, из которой будет производиться импорт, и щелкните на кнопке Next (Далее). Программа проверит, имеются ли в импор- тируемом объекте данные об участниках системы защиты или о пути UNC. Если таковые имеются, вам будет предоставлена возможность при необходи- мости изменить эти данные. 9. Щелкните сначала на кнопке Next (Далее), а затем — на кнопке Finish (Готово). С помощью интерфейса командной строки > Importgpo wsf "местоположение_резервной_копии>“ '<иня_исходного_6Р0>" "<иня_нового_СРО>"
294 Глава 9. Объекты групповой политики С помощью сценария на языке VBScript ' Этот код импортирует установки из резервной копии одного объекта групповой политики ' в другой объект групповой политики • ----- SCRIPT CONFIGURATION ------ strGPOImportTo - '<иня_БРО>’ ‘ Например: Sales GPO strDomain - "ONS-иня_ронена>“ ‘ Например rallencorp.com strBackupLocation - ’местоположение_резервной_копии>’ * Например: с \GPMC Backups ' GUID representing specific backup 1 Например:{3E53B39B-C29B-44FF-857B-8A84528804FF} strBackupID - ’<GUID_резервной_нопии>’ ’ -....END CONFIGURATION..........." set objGPM CreateObjectCGPMgmt.GPM’) set objGPMConstants - objGPM.GetConstants( ) > НЛвОНКТЭХ dT ' Инициализация объекта Domain set objGPMDomain - objGPM.GetOomain(strDomain. objGPMConstants UseAnyDC) ’ Поиск резервной копии GPO set objGPMBackupDir - objGPM.GetBackupD1r(strBackupLocation) set objGPMBackup - objGPMBackupDir.GetBackup(strBackupID) WScrlpt.Echo "Backup found:" WScrlpt.Echo ” ID " & objGPMBackup.ID WScrlpt.Echo " Timestamp " & objGPMBackup.Timestamp WScrlpt.Echo ” GPO ID " & objGPMBackup GPOID WScrlpt.Echo " GPO Name: ” & objGPMBackup GPODisplayName WScrlpt.Echo " Cement " & objGPMBackup Comment WScrlpt.Echo ’ Поиск GPO. в который будет производиться импорт set objGPMSearchCriteria - objGPM.CreateSearchCriteriа objGPMSearchCriteria.Add objGPMConstants.SearchPropertyGPODisplayName, objGPMConstants.SearchOpEquals, cstr(strGPOImportTo) set objGPOList - objGPMDomain.SearchGPOs(objGPMSearchCriteria) if objGPOList Count - 0 then WScrlpt.Echo “Did not find GPO: * & strGPO WScrlpt.Echo "Exiting.” WScript.Quit elself objGPOList Count > 1 then WScrlpt.Echo "Found more than one matching GPO. Count " & _ objGPOList Count WScrlpt.Echo "Exiting." WScript.Quit else WScrlpt.Echo "Found GPO: " & objGPOList Item(l).D1splaiyName end if ' Импорт set objGPMResult objGPOList Item(l).Import(0 objGPMBackup) Если во время операции произойдет ошибка. будет сгенерировано исключение on error resume next objGPMResult.OverallStatus! )
9.7. Импорт установок объекта групповой политики 295 1f objGPMResult.Status.Count > 0 then WScrlpt.Echo "Status message(s): " & objGPMResult.Status.Count for 1 - 1 to objGPMResult.Status.Count WScript Echo objGPMResult.Status.Item(1) Message next WScript Echo vbCrLf end if • Вывод результатов if Err.Number о 0 then WScript Echo "Error importing GPO " & objGPMBackup.GPODIsplayName WScript.Echo "Error: " & Err.Description else WScript Echo 'Inport successful." WScrlpt.Echo "GPO ’" & objGPMBackup.GPODIsplayName & _ has been imported into GPO _ objGPOList Item(l).Disp ayName & end if Комментарий Для импорта установок объекта групповой политики используется резервная копия исходного объекта. После того как она будет создана, данные из нее можно импортировать в объект GPO, находящийся в том же либо другом домене или даже в другом лесу. Таким образом, импорт объектов групповой политики явля- ется универсальным механизмом переноса их установок, в том числе и из среды, предназначенной для тестирования, в рабочую среду. Некоторые свойства объектов групповой политики, в частности определяющие фильтры на основе членства в группах безопасности и пути в формате UNC, у раз- ных доменов могут различаться. В таком случае следует воспользоваться табли- цей перемещения оснастки GPMC, где содержится информация, необходимая для обеспечения перемещения указанных элементов в домен назначения. Подробная информация о таких таблицах, как уже было сказано выше, приведена в файле справки GPMC. К решению с помощью сценария на языке VBScript При необходимости импортировать установки объекта групповой политики прежде всего нужно создать объект GPMBackup, который бы представлял исходную резерв- ную копию нужного объекта. Для этого вызывается метод GPMBackupDiг.GetBackup и ему передается GUID резервной копии. Если идентификатор нужно определить программным путем, воспользуйтесь методом GPMBackup.SearchBackups, который находит последнюю резервную копию заданного объекта групповой политики или резервную копию с указанным выводимым именем. Далее с помощью метода GPMDomain SearchGPOs создается объект GPMGPO, пред- ставляющий объект групповой политики, в который производится импорт. Это- му методу передается объект GPMSearchCntema, определяющий критерий поиска, а именно по выводимому имени GPO, заданному в разделе конфигурации Опе- ратор i f...el sei f...el se позволяет убедиться, что в результате поиска получен только один объект. Если не найдено ни одного объекта или же если их обнаружено не- сколько, сценарий прекращает работу. Импорт установок выполняется с помощью
296 Глава 9. Объекты групповой политики метода GPMGPO Import, в первом параметре которого задается набор флагов, опре- деляющих, как при импорте обрабатываются установки защиты и путь UNC. Значение 0 свидетельствует о применении установок по умолчанию, при желании можно воспользоваться таблицей перемещения. Во втором параметре задается созданный ранее объект GPMBackup. В завершение сценарий осуществляет обработку ошибок и выводит полученные результаты. Смотрите также В рецепте 9.3 рассказывается о создании копии объектов групповой политики, а в рецепте 9.17 — об их резервном копировании. Прочтите и документ MSDN: GPMGPO.Import. 9.8. Включение сценариев в объект групповой политики Проблема Требуется задать в объекте групповой политики сценарии входа и выхода поль- зователя или сценарии загрузки и завершения работы компьютера Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), затем домен, в котором находится нужный объект групповой полити- ки, и, наконец, контейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните правой кнопкой мыши на объекте групповой политики и выберите в контекстном меню команду Edit (Редактировать). Откроется окно редактора групповой политики. 4. Если вы хотите задать сценарии загрузки и завершения работы компьютера, поочередно откройте контейнеры Computer Configuration (Конфигурация ком- пьютера), Windows Settings (Конфигурация Windows) и Scripts (Сценарии (за- пуск/завершение)), а для того чтобы задать сценарии входа и выхода пользо- вателя — контейнеры User Computer (Конфигурация пользователя), Windows Settings (Конфигурация Windows) и Scripts (Сценарии (вход/выход из системы)). 5. На правой панели выполните двойной щелчок на названии типа сценария. 6. Щелкните на кнопке Add (Добавить). 7 Введите имя файла сценария или же щелкните на кнопке Browse (Обзор) и укажите его местонахождение. 8. Если сценарий должен запускаться с определенными параметрами, введите их в поле Script Parameters (Параметры сценария). 9 Дважды щелкните на кнопке ОК
Комментарий На сценарий, включенный в объект групповой политики, можно будет ссылаться вне зависимости от того, где он хранится — локально на контроллере домена в об- щей папке NETLOGON или на удаленном файл-сервере, на который указывает UNC-путь Кроме того, сценарий можно задать в атрибуте scriptPath объекта user. Эта возможность сохранена для поддержки учетных записей пользователей, перене- сенных в Active Directory из доменов типа NT 4.0. Для определения сценария можно воспользоваться любым из двух методов, но не обоими — иначе сценарий будет выполняться дважды 9.9. Установка приложений с использованием объекта групповой политики Проблема Требуется установить приложение на нескольких компьютерах с использованием объекта групповой политики Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), затем домен, в котором находится нужный объект групповой политики, и, наконец, контейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните правой кнопкой мыши на объекте групповой политики и выберите в контекстном меню команду Edit (Редактировать). Откроется окно редактора групповой политики. 4. Откройте контейнер Software Settings (Конфигурация программ) в разделе User Configuration (Конфигурация пользователя) или Computer Configuration (Конфи- гурация компьютера), в зависимости от того, для кого — конкретного пользо- вателя или всех пользователей компьютера — производится установка. 5. Щелкните правой кнопкой мыши па элементе Software Installation (Установка программного обеспечения), после чего выберите в контекстном меню команду New ► Package (Создать ► Пакет). 6. В открывшемся диалоговом окне найдите сетевую общую папку, в которой находится пакет MSI устанавливаемого приложения, щелкните на этом пакете, а затем на кнопке ОК (Открыть). 7. В следующем диалоговом окне определите метод распространения приложе- ния в сети (метод развертывания программ), выбрав переключатель Assign the application (Назначенный) или Publish the application (Публичный), и щелкните на кнопке ОК.
JldMM ITVbeKIta ipyillKJtMJM I ШЛИ ГИКИ Комментарий Функция установки приложений с использованием объектов групповой полити- ки — это мощнейший инструмент администрирования, пользуясь которым, обя- зательно следует учитывать, как это отразится на сети и клиентах. Если размер устанавливаемого пакета MSI составляет несколько мегабайтов, его загрузка на клиентский компьютер займет много времени, что снизит производительность данного компьютера, особенно если быстродействие соединения невысоко. Прежде чем устанавливать приложение, его нужно тщательно протестиро- вать. После настройки объекта групповой политики установка приложения на все клиентские компьютеры будет выполнена быстро, но если в приложении или- программе установки окажутся ошибки, последствия будут довольно серьезными. Существует два способа распространения приложения в сети с использовани- ем объекта групповой политики Active Directory: назначение и публикация. При назначении приложения его ярлык включается в меню Start (Пуск) на заданных клиентских компьютерах, а само приложение устанавливается при первом выборе этого ярлыка. В противоположность этому при публикации приложение автома- тически не инсталлируется, а лишь становится доступным для установки вруч- ную на заданных компьютерах с использованием приложения панели управле- ния Add/Remove Programs (Установка и удаление программ). 9.10. Отключение установок пользователя или компьютера в объекте групповой политики Проблема Требуется отключить в объекте групповой политики все установки, связанные с пользователем или компьютером. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), затем домен, в котором находится нужный объект групповой полити- ки, и, наконец, контейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните правой кнопкой мыши на объекте групповой политики и выберите в открывшемся контекстном меню команду GPO Status (Состояние GPO). 4. Установите флажок User Configuration Settings Disabled (Отключить параметры конфигурации пользователя) или User Configuration Settings Disabled (Отключить параметры конфигурации компьютера).
С помощью сценария на языке VBScript • Этот код включает или отключает установки пользователя или компьютера в GPO _____ SCRIPT CONFIGURATION ...... strGPO - "<имя_6Р0>,‘ ' Например: Sales GPO strDomain - "<Ж-иня_ромена>“ ’ Например: rallencorp.com boolUserEnable - False boolCompEnable - True • -----END CONFIGURATION —-........ set objGPM - CreateObjectCGPMgmt.GPM") set objGPMConstants - objGPM GetConstantsC ) ’ Инициализация объекта Domain set objGPMDomaln - objGPM.GetDoma1n(strDomain. objGPMConstants UseAnyDC) ' Поиск заданного GPO set objGPMSearchCriterla - objGPM.CreateSearchCriteria objGPMSearchCHteria.Add objGPMConstants.SearchPropertyGPODi splayName. objGPMConstants.SearchOpEquals. cstr(strGPO) set objGPOList - objGPMDomain.SearchGPOs(objGPMSearchCriteria) if objGPOList Count - 0 then WScrlpt.Echo "Did not find GPO: " & strGPO WScript Echo 'Exiting." WScript.QuIt el seif objGPOList Count > 1 then WScrlpt.Echo "Found more than one matching GPO Count: " & _ objGPOList.Count WScrlpt.Echo "Exiting." WScript.Quit else WScrlpt Echo "Found GPO: " & objGPOList.Item(l).DisplayName end if 1 Закомментируйте один из двух следующих фрагментов: objGPOList.Item(l).SetUserEnabled boolUserEnable WScrlpt.Echo "User settings; " & boolUserEnable objGPOList.Item(l).SetComputerEnabled boolCompEnable WScrlpt.Echo "Computer settings: " & boolCompEnable Комментарий Объект групповой политики включает два набора установок: для пользователя и для компьютера. В разделе пользователя содержатся установки, относящиеся к вошедшему в систему пользователю, тогда как установки из раздела компьютера относятся ко всему компьютеру независимо от того, кто на нем работает. Сущест- вует возможность отключить любой из этих двух наборов установок или даже оба. Причем в результате отключения обоих наборов будет отключен и сам объект групповой политики. Так поступают в случае, когда необходимо отменить приме- нение установок GPO к клиентским компьютерам, не удаляя сам объект и его связи и не сбрасывая заданные для него установки.
Отключение конфигурации компьютера или пользователя производят в сис- темах, где имеются отдельные подразделения для компьютеров и пользователей: в объектах групповой политики, которые связаны с подразделениями пользова- телей, отключают установки конфигурации компьютера, а в объектах, связанных с подразделениями компьютеров, — установки конфигурации пользователя. В ре- зультате ускоряется обработка объектов групповой политики и сокращается время входа в систему. С помощью сценария на языке VBScript Для того чтобы найти требуемый объект групповой политики, необходимо создать объект GPMSearchCriteria и указать в нем критерий поиска — выводимое имя GPO, заданное в разделе конфигурации. Оператор i f...el sei f.. el se позволяет убедиться, что в результате поиска получен только один объект Если не найдено ни одного объекта или же если их обнаружено несколько, сценарий просто прекращает работу. Однако если найден один объект, вызывается метод SetUserEnabled или SetCom- puterEnable, первый из которых включает или отключает конфигурацию пользо- вателя, а второй — конфигурацию компьютера Смотрите также Документы MSDN. GPMGPO SetUserEnabled и MSDN: GPMGPO.SetComputer- Enabled 9.11. Вывод списка связей объекта групповой политики Проблема Требуется просмотреть список связей заданного объекта групповой политики. Решение С помощью графического пользовательского интерфейса 1 . Откройте оснастку GPMC. 2 На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), затем домен, в котором находится нужный объект групповой полити- ки, и, наконец, контейнер Group Policy Objects (Объекты групповой политики). 3 Щелкните на объекте групповой политики, связи которого хотите просмот- реть. Их список будет выведен на правой панели в столбце Links (Связи). С помощью интерфейса командной строки > dumpgpoinfo.wsf "<иня_вРО>'' С помощью сценария на языке VBScript Этот код зыв( дит список сайтов, подразделений и доменов. с которыми связан заданный объект групповой политики
9.11. Вывод списка связей объекта групповой политики ' ------ SCRIPT CONFIGURATION ----- strGPO - ”<имя_6РО>и ' Например: SalesGPO strForest - "<имя_леса>“ ' Например rallencorp.com strDomain - “<0Н5-иия_ромена>" ' Например: rallencorp.com • ------ ENO CONFIGURATION -------- set objGPM = CreateObjectCGPMgmt.GPM") set objGPMConstants - objGPM.GetConstants( ) ’ Инициализация объекта Domain set objGPMDomain - objGPM.GetDomain(strDomain. objGPMConstants.UseAnyDC) • Initialize the Sites Container object set objGPMSItesContainer » objGPM GetS1tesContainer(strForest. strDomain. objGPMConstants.UseAnyDC) ' Поиск заданного GPO set objGPMSearchCriteria - objGPM CreateSearchCriteria objGPMSearchCriteria.Add objGPMConstants.SearchPropertyGPODisplayName. objGPMConstants SearchOpEquals. cstr(strGPO) set objGPOList = objGPMDomain SearchGPOs(objGPMSearchCriteria) if objGPOList.Count - 0 then WScript.Echo "Did not find GPO " & strGPO WScri pt.Echo “Ex1ti ng." WScript.Quit elseif objGPOList.Count > 1 then WScript Echo "Found more than one matching GPO. Count: ” & _ objGPOList.Count WScrlpt.Echo “Exiting " WScript Quit else WScrlpt.Echo "Found GPO: “ & objGPOList Item(l).DisplayName end 1f Поиск всех связей SOM для данного GPO set objGPMSearchCriteria - objGPM.CreateSearchCriteria objGPMSearchCriteria.Add objGPMConstants SearchPropertySOMLinks. objGPMConstants SearchOpContains objGPOList Item(l) set objSOMList - objGPMDomain.SearchSOMs(objGPMSearchCriteria) set objSiteLinkList - objGPMSItesContainer.SearchSites(objGPMSearchCriteria) if objSOMList.Count - 0 and ObjSiteLinkList.Count - 0 Then WScrlpt.Echo "No Site. Domain, r OU links found for this GPO" else WScrlpt.Echo "Links:" for each objSOM in objSOMList select case objSOM.Type case objGPMConstants.SOMDomaln strSOMType - "Domain” case objGPMConstants.SOMOU strSOMType - "OU" end select ' Вывод информации о связях GPO с доменами и подразделениями WScrlpt.Echo " " & objSOM.Name & " (" & strSOMType & ")" next 1 Вывод информации о свя^ЙХ GPO с сайтами for each objSiteLink 1n ObjSiteLinkList
3OZ Глава 9. Объекты групповой политики WScript.Echo " " & objSIteLink Name & " (Site)" next end if Комментарий В рецепте 9.0 довольно подробно рассказано об объектах групповой политики и их связях с областями управления. К решению с помощью сценария на языке VBScript Чтобы просмотреть список связей заданного объекта групповой политики, прежде всего таковой нужно найти. Для этого создается объект GPMSearchCriteria, в котором указывается критерий поиска — выводимое имя GPO, заданное в разделе конфи- гурации. Оператор if...elseif...else позволяет убедиться, что в результате поиска по- лучен только один объект. Если не найдено ни одного объекта или же если их об- наружено несколько, сценарий просто прекращает работу. Однако если найден один объект, вызываются методы GPMSitesContainer SearchSntes и GPMDomain Se- archSOMs, возвращающие списки сайтов и областей управления, с которыми связан данный объект групповой политики. Смотрите также В рецепте 9.12 рассказывается, как создать связь GPO с подразделением. Кроме того, обратитесь к документу MSDN: GPMDomam.SearchSOMs, and MSDN: GPM- SitesContainer.SearchSites. .12. Создание связи объекта групповой политики с областью управления Проблема Необходимо применить установки объекта групповой политики к пользователям или компьютерам, учетные записи которых находятся в заданной области управ- ления. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), а затем домен, где находится заданное подразделение. 3. Щелкните правой кнопкой мыши на нужном подразделении и выберите в от- крывшемся контекстном меню команду Link an Existing GPO (Связь с сущест- вующим объектом групповой политики). 4. Выберите объект групповой политики, с которым хотите связать данное под- разделение, и щелкните на кнопке ОК.
9.12. Создание связи объекта групповой политики с областью управления 303 С помощью сценария на языке VBScript ’ Этот код связывает объект групповой политики с подразделением • ------ SCRIPT CONFIGURATION ------ strGPO - "<иня_6Р0>' ' Напринер: Sales GPO strDomain - ’'<0Н5-имя_домена>'' ' Напринер. rallencorp.com strOU - “<ОИ_подразделения>п ‘ Например: ou-Sales.dc-rallencorp.dc-com IntLinkPos - -1 ' Присвойте этой переменной значение, соответствующее позиции GPO. ' Значение -1 указывает, что объект будет добавлен в конец списка ’ ...... END CONFIGURATION ......... set objGPM - CreateObjectC’GPMgmt GPM") set objGPMConstants - objGPM.GetConstantsI ) ' Инициализация объекта Domain set objGPMOomain - objGPM GetDomaln(strDomain objGPMConstants UseAnyDC) ‘ Поиск заданного GPO set objGPMSearchCriteria - objGPM.CreateSearchCriterla objGPMSearchCriteria.Add objGPMConstants.SearchPropertyGPODisplayName, objGPMConstants.SearchOpEquals. cstr(strGPO) set objGPOList - objGPMDomain.SearchGPOs(objGPMSearchCriteria) if objGPOList.Count - 0 then WScript Echo "Did not find GPO; “ & strGPO WScript.Echo "Exiting." WScrlpt.Quit el seif objGPOList.Count > 1 then WScript.Echo "Found more than one matching GPO. Count: " & _ objGPOList.Count WScript.Echo "Exiting." WScript.Quit else WScrlpt Echo "Found GPO " & objGP0L1st.Item(l).DisplayName end 1f * Поиск заданного подразделения set objSOM - objGPMOomain.GetSOM(strOU) 1f IsNull(objSOM) then WScript.Echo "Did not find OU: " & strOU WScript.Echo "Exiting." WScript.Quit else WScrlpt Echo "Found OU: " & objSOM Name end if , on error resume next set objGPMLInk - objSOM CreateGP0L1nk( IntLinkPos. objGPOList.Item(l) ) 1f Err.Nunfiber о 0 then WScrlpt Echo "There was an error creating the GPO link " WScript.Echo ‘Error: " & Err Description else WScript.Echo "Sucessfully linked GPO to OU" end if
304 Глава 9. Объекты групповой политики Комментарий Объект групповой политики можно связать с определенной областью управления, то есть с подразделением, сайтом или доменом. В этом рецепте выполнение данной операции продемонстрировано на примере подразделения; связывание с доменом или сайтом выполняется точно так же. В рецепте 5.11 (глава 5) показано, как связать подразделение с объектом груп- повой политики путем установления значения атрибута gpLink, без помощи ин- терфейса GPMC. К решению с помощью сценария на языке VBScript Для того чтобы найти объект групповой политики, необходимо создать объект GPMSearchCriterla и указать в нем критерий поиска — выводимое имя GPO, заданное в разделе конфигурации Оператор if...el sei f...el se позволяет убедиться, что в ре- зультате поиска получен только один объект. Если не найдено ни одного объекта или же если их обнаружено несколько, сценарий просто прекращает работу. Однако если найден один объект, создается экземпляр класса GPMSOM, для чего вызывается метод GPMDomain GetSOM, которому передается имя подразделения. После этого с помощью метода GPMSOM.CreateGPOLink подразделение связывается с объектом груп- повой политики Смотрите также Документы MS КВ 248392 (Scripting the Addition of Group Policy Links) и MSDN: GPMSOM. CreateGPOLink. 9.13. Блокирование наследования групповой политики для подразделения Проблема Требуется заблокировать для заданного подразделения наследование установок групповой политики. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2 На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), а затем домен, где находится подразделение, для которого вы хотите заблокировать наследование групповой политики. 3. Щелкните правой кнопкой мыши на этом подразделении и выберите команду Block Inheritance (Блокировать наследование политики).
9.13. Блокирование наследования групповой политики для подразделения 305 С помощью сценария на языке VBScript ' Этот код блокирует наследование групповой политики для заданного подразделения ’ ...... SCRIPT CONFIGURATION ...... strDomain ° ’<0№-иня_домена>" ' Например: rallencorp.com strOU - "<ОИ_подраздепения>" ' Например: ou-Sales,dc-ral1encorp.dc-com boolBlock - TRUE ‘ Например: set to FALSE to not block inheritance ’ ------ END CONFIGURATION --------- set objGPM - CreateObjectC’GPMgmt.GPM") set objGPMConstants = objGPM.GetConstants( ) 1 Инициализация объекта Domain set objGPMDomain = objGPM.GetDomainlstrDomain. objGPMConstants.UseAnyOC) ' Поиск заданного подразделения set objSOM и objGPMDomain GetSOM(strOU) if IsNull(objSOM) then WScrlpt.Echo “Did not find OU: ” & strOU WScript Echo "Exiting ’ WScdpt. Quit else WScrlpt.Echo "Found OU: " & objSOM.Name end if on error resume next objSOM.GPOInheritanceBlocked - boolBlock if Err Number о 0 then WScript Echo "There was an error blocking inheritance." WScrlpt.Echo “Error; " & Err.Description else WScrlpt.Echo ‘Successfully set inheritance blocking on OU to " & boolBlock end if Комментарий По умолчанию установки объекта групповой политики, связанного с подразделе- нием, наследуются и объектами, входящими в состав вложенных контейнеров или подразделений. В тех случаях, когда это нежелательно, наследование можно заблокировать. Однако злоупотреблять указанной возможностью не следует, поскольку она затрудняет определение того, какие установки применяются к конкретному пользователю или компьютеру. Увидев, что с подразделением верхнего уровня связан объект групповой политики, другой администратор может решить, что его установки применяются ко всем объектам этого подразделения на всех уровнях вложенности. С помощью оснастки Resultant Set of Policies (Результирующая поли- тика, RSoP) можно определить, какие именно установки применяются к пользо- вателю или компьютеру (см. рецепт 9.20).
306 Глава 9. Объекты групповой политики С помощью сценария на языке VBScript Для того чтобы заблокировать наследование, прежде всего нужно, вызвав метод GPMDomain.GetSOM, создать объект GPMSOM, который бы соответствовал заданному подразделению’. Единственным параметром этого метода является отличительное имя подразделения (если его не задать, будет создан объект, представляющий до- мен). После этого свойству GPMSOM.GPOInheritanceB’locked следует присвоить значе- ние TRUE — в таком случае наследование будет заблокировано, или значение FALSE, разрешающее наследование. Смотрите также Документы MSDN: GPMDomain.GetSOM и MSDN: GPMSOM.GPOInheritance- Blocked. 9.14. Фильтрация объектов, на которые распространяется действие объекта групповой политики Проблема Требуется настроить объект групповой политики таким образом, чтобы его действие распространялось только на членов определенной группы безопасности. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), домен, где находится объект групповой политики, а затем контейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните на объекте групповой политики, который вы хотите настроить. 4. На правой панели в области Security Filtering (Фильтрация на основе членства в группе безопасности) щелкните на кнопке Add (Добавить). 5. Выберите группу, к которой должна применяться данная групповая полити- ка, и щелкните на кнопке ОК. 6. Выделите группу Authenticated Users (Прошедшие проверку) и щелкните на кнопке Remove (Удалить). 7. Щелкните на кнопке ОК, чтобы подтвердить необходимость проводимой опера- . ции удаления. С помощью интерфейса командной строки * setgpopermissions.wsf л<иня_6Р0>" "<имя_групльг>" /permission:Apply > setgpopermissions.wsf "<имя_6Р0>‘ "Authenticated Users" /permission:None
9.14. Фильтрация объектов 307 С помощью сценария на языке VBScript ' Этот код добавляет в GPO разрешение Security group filter ' и удаляет разрешение Authenticated Users filter • ..... SCRIPT CONFIGURATION ----- strGPO - "<имя_вРО>“ ‘ Например: Sales GPO strDomain "<№~иня_Аонена>" ' Например: railencorp com strGroupAdd - ’<иня_группы>" ’ Например: Salesllsers strGroupRemove - "Authenticated Users" * ..... END CONFIGURATION --------- set objGPM - CreateObjectC’GPMgmt GPM") set objGPMConstants = objGPM.GetConstants( ) ' Инициализация объекта Domain set objGPMDomain - objGPM.GetDomainCstrDomain. objGPMConstants.UseAnyDC) ’ Поиск заданного GPO set objGPMSearchCriteria - objGPM.CreateSearchCriteria objGPMSearchCriteria.Add objGPMConstants SearchPropertyGPODisplayName. objGPMConstants.SearchOpEquals. cstr(strGPO) set objGPOList - objGPMDomain.SearchGPOs(objGPMSearchCriteria) If objGPOList.Count - 0 then WScrlpt.Echo "Did not find GPO: " & strGPO WScrlpt.Echo "Exiting " WScript.Quit elself objGPOList.Count > 1 then WScrlpt.Echo "Found more than one matching GPO Count: “ & _ objGPOList.Count WScrlpt.Echo "Exiting." WScript.Quit else WScript Echo "Found GPO. " & objGPOList.Itemd).DisplayName end 1f * Создание объекта-разрешения для применения к GPO set objGPMPerml - objGPM.CreatePermissionCstrGroupAdd. objGPMConstants.PermGPOApply. False) set objGPMPermZ - objGPM.CreatePermissionCstrGroupRemove. objGPMConstants.PermGPOApply. False) ' Получение имеющегося набора разрешений GPO set objSecuritylnfo - objGPOList.Item(l).GetSecuritylnfoC ) Добавление нового разрешения objSecuritylnfo.Add objGPMPerml Удаление разрешения Authenticate users objSecuritylnfo.Remove objGPMPerm2 on error resume next ' Применение разрешения к GPO objGPOList.Item(l).SetSecuritylnfo objSecuritylnfo if Err.Number о 0 then WScrlpt.Echo “There was an error setting the security filter." WScript Echo "Error. " & Err.Description else WScrlpt.Echo "Added Apply permission for group " & strGroupAdd WScrlpt.Echo "Removed Apply permission for group " & strGroupRemove end 1f
308 Глава 9. Объекты групповой политики Комментарий Для того чтобы связать с объектом групповой политики фильтр, нужно предоста- вить заданной группе разрешение Apply Group Pol icy (Применение групповой по- литики) на этот объект, то есть включить данное разрешение в список управления доступом группы. По умолчанию разрешение Apply Group Policy на каждый новый объект GPO предоставляется группе Authenticated Users (Прошедшие проверку), и если вы хотите применить фильтр на основе членства в определенных группах безопасности, это разрешение нужно предоставить только требуемым группам Использовать в фильтре установку Deny, запрещающую применение группо- вой политики к указанной группе, не рекомендуется поскольку это нередко при- водит к путанице с учетными записями, входящими в группы с конфликтующими параметрами фильтрации. Если, к примеру, пользователь является членом труппы, для которой в фильтре задана установка Deny, а также группы, для которой разре- шено применение политики, «победит» установка Deny. В подобных случаях най- ти источник проблемы бывает очень непросто. Изменяя разрешения на объекты групповой политики, будьте внимательны и осторожны. Когда вы создаете объект GPO с очень ограниченными разреше- ниями и применяете к нему фильтр, проверьте, кто и как может его модифициро- вать. Если по какой-либо причине фильтр удаляется, установленные вами запреты, как правило, распространяются на всех пользователей или на все компьютеры домена. К решению с помощью сценария на языке VBScript Для того чтобы определить фильтр для объекта групповой политики, сначала нужно найти сам объект. С этой целью создается объект GPMSearchCriteriа, в котором указывается критерий поиска — выводимое имя GPO, заданное в разделе конфи- гурации. Оператор if., el seif, else позволяет убедиться, что в результате поиска по- лучен только один объект. Если не найдено ни одного объекта или же если их об- наружено несколько, сценарий просто прекращает работу. Далее в нашем сценарии создаются два объекта GPM.CreatePerrmssion: один — для группы, добавляемой в фильтр, а другой - для группы Authenticated Users (Прошедшие проверку). Затем с помощью метода GPMGPO GetSecuritylnfo считы- вается текущий список управления доступом объекта групповой политики. В за- вершение из этого списка удаляется разрешение для группы Authenti cated Users (Прошедшие проверку), а взамен него добавляется разрешение для новой группы, к которой должна применяться групповая политика. Смотрите также Документы MSDN: GPM.CreatePermission и MSDN1 GPMGPO.GetSecuritylnfo. 9.15. Создание фильтра WMI Проблема Требуется создать в Active Directory фильтр WMI.
э.хэ. ислэдйние фильтра wmi 309 Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), а затем домен для которого хотите создать фильтр WMI, и щелкните на контейнере WMI Filters (Фильтры WMI) 3. Щелкните правой кнопкой мыши на указанном контейнере и выберите ко- манду New (Создать). 4 Введите имя и описание фильтра 5 Щелкните на кнопке Add (Добавить) 6. Выберите пространство имен, введите запрос на языке WQL и щелкните на кнопке ОК. 7 Повторите описанные в пунктах 5 и 6 действия для каждого запроса, который нужно добавить в фильтр. 8. Щелкните на кнопке Save (Сохранить) С помощью сценария на языке VBScript На момент завершения работы над этой книгой интерфейс прикладного програм- мирования GPM не содержал методов для создания фильтров WMI Комментарий Фильтры WMI являются нововведением Windows Server 2003 Их применение — это еще один способ, определяющий, каким образом объекты групповой политики воздействуют на клиентов. Фильтры данного типа хранятся в Active Directory в виде объектов в контейнере WMIPolicy, расположенном в контейнере System (Система) домена Фильтр WMI связан с объектом групповой политики и содержит запрос на языке WQL (WMI Query Language — язык запросов WMI), выпол- няющемся для каждого клиента, на которого распространяется действие данного GPO. Если WQL-запрос вернул значение TRUE (то есть не пустой результат), об- работка объекта групповой политики продолжается. Однако если было возвра- щено значение FALSE (отсутствие результатов запроса), объект групповой полити- ки не обрабатывается Основное достоинство фильтров WMI заключается в том, что для фильтрации объектов, к которым применяется групповая политика, может использоваться огромное количество имеющейся в данной инфраструктуре информации о кли- ентах Благодаря этому можно запрашивать сведения о центральном процессоре, памяти, дисковом пространстве, пакетах обновлений, приложениях, выполняющихся процессах и т. д. Например, в Windows 2000 вам будет довольно сложно создать объект группо- вой политики, предназначенный лишь для компьютеров, на которых установлена 1 Фильтры WMI можно создавать лишь на контроллере домена, работающем под управлением Win- dows Server 2003, и они применимы только к клиентам, работающим под управлением Windows Server 2003 и Windows ХР.
операционная система Windows ХР Professional. Придется либо создать группу безопасности, включающую все такие компьютеры, и применить к объекту соот- ветствующий групповой фильтр, либо переместить учетные записи этих ком- пьютеров в отдельное подразделение. В случае же работы в Windows Server 2003 достаточно будет воспользоваться приведенным ниже WQL-запросом. При вы- полнении на рабочей станции, функционирующей под управлением Windows ХР Professional, он возвращает значение true. select * from Win32_0peratingSystem where Caption - 'Microsoft Windows XP Professional" Смотрите также В рецепте 9.16 рассказывается, как связать фильтр WMI с объектом групповой политики. Кроме того, ознакомьтесь с документом MSDN: Querying with WQL. 9.16. Связывание фильтра WMI с объектом групповой политики Проблема Требуется связать фильтр WMI с объектом групповой политики. Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), домен, в котором находится объект групповой политики, а затем кон- тейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните на объекте групповой политики и укажите в нижней части правой панели требуемый фильтр WMI. 4. Выбрав фильтр, щелкните на кнопке Yes (Да), с тем чтобы подтвердить необ- ходимость выполнения данной операции. С помощью сценария на языке VBScript Этот код связывает существующий фильтр UMI с объектом групповой политики ‘ ---- SCRIPT CONFIGURATION - strGPO - ”<иня_6РО>’' ' Например: Sales GPO strDomain - "ОНЗ-имя_домена>“ ' Например: rallencorp.com ’ Например: {D715559A-7965-45A6-864D-AEBD09934415} strWMIFilterlD - ''<код_фильтра_М^1>" Фильтры WMI можно создавать лишь на контроллере домена, работающем под управлением Win- dows Server 2003, и они применимы только к клиентам, работающим под управлением Windows Server 2003 и Windows ХР.
9.ю. связывание фильтра vvmx с ооьекг м i руниоьии пиитики он 1 ...... END CONFIGURATION ........ set objGPM - CreateObjectC’GPMgmt.GPM") set objGPMConstants - objGPM.GetConstants( ) ' Инициализация объекта Domain set objGPMDomain = objGPM.GetDomain(strDomain. objGPMConstants.UseAnyOC) • Поиск GPO set objGPMSearchCriteria - objGPM.CreateSearchCriteria objGPMSearchCriteria.Add objGPMConstants.SearchPropertyGPODisplayName. objGPMConstants.SearchOpEquals. cstr(strGPO) set objGPOList - objGPMDomain.SearchGPOs(objGPMSearchCriteria) 1f objGPOList.Count - 0 then WScrlpt.Echo "Did not find GPO: ” & strGPO WScript.Echo "Exiting." WScript.Quit elseif objGPOList.Count > 1 then WScrlpt.Echo “Found more than one matching GPO. Count: " & _ objGPOList.Count WScript.Echo "Exiting." WScript.Quit el se WScript.Echo "Found GPO: " & objGPOList.Item(l).DisplayName end 1f on error resume next ’ Извлечение фильтра WMI strWMIFilter - "MSFT_SomFliter.Domain-.. & _ strDomain & ""-до-"" & _ StrWMIFilterlD & ... set objWMIFilter = objGPMDomain.GetWMIFIlter(strWMIFilter) 1f Err.Number о 0 then WScrlpt.Echo "Did not find WMI Filter: " & strWMIFilterlD WScrlpt.Echo "Exiting." WScript.Quit else WScrlpt.Echo "Found WMI Filter: " & objWMIFilter.Name end 1f ’ Связывание фильтра и вывод результата objGPOList.Item(l).SetWMIFi1ter(objWMIFi1 ter) if Err.Number <> 0 then WScrlpt.Echo "Failed to set WMI filter." WScrlpt.Echo "Error: " & err.description else WScrlpt.Echo "Set WMI filter successfully." end if Комментарий С каждым объектом групповой политики может быть связан только один фильтр WMI. Это обстоятельство не следует рассматривать как серьезное ограничение, поскольку с сайтом, доменом или подразделением можно связать более одного
J1Z I лава 9. иоъекты групповой политики объекта групповой политики. Если же потребуется связать с одним GPO несколько фильтров WMI, можно создать копию этого объекта групповой политики и при- менить к ней новый фильтр. Подробная информация о фильтрах WMI приведена в рецепте 9.15. К решению с помощью сценария на языке VBScript Для того чтобы найти объект групповой политики, с которым будет связан фильтр WMI, нужно создать объект GPMSearchCriteria и указать в нем критерий поиска — выводимое имя GPO, заданное в разделе конфигурации. Оператор 1 f... el seif...else позволяет убедиться, что в результате поиска получен только один объект Если не найдено ни одного объекта или же если их обнаружено несколько, сценарий просто прекращает работу. Далее с помощью метода GPMDomain.GetWMIFi Iter создается объект GPMWMIFi 1 ter, то есть этот метод создает объект с учетом значения GUID фильтра WMI, ука- занного в разделе конфигурации Если значение фильтра WMI нужно определить программным путем, можно воспользоваться методом GPMDoma n.SearchWMIFlIters. Получив объект GPMWMIFi 1 ter, вызовите метод GPMGPO.SetWMIFilter, связывающий объект групповой политики с фильтром WMI. Смотрите также Документы MSDN- GPMDomain.GetWMIFilter и MSDN. GPMGPO.SetWMI- Filter. 9.17. Создание резервной копии объекта групповой политики Проблема Требуется создать в Active Directory резервную копию объекта групповой политики. Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), домен, в котором находится объект групповой политики, и контейнер Group Policy Objects (Объекты групповой политики). 3 Щелкните правой кнопкой мыши на объекте групповой политики и выберите команду Back Up (Создать резервную копию). 4. В поле Location (Местоположение) укажите папку, в которую должна быть за- писана резервная копия. 5. В поле Description (Описание) введите описание объекта групповой политики. 6. Щелкните на кнопке Back Up (Создать резервную копию).
9.17. Создание резервной копии объекта групповой политики 313 7. Откроется окно с индикатором хода выполнения, а затем будет выведено со- общение об успешном завершении операции. 8 Щелкните на кнопке ОК. С помощью интерфейса командной строки > backupgpo.wsf '<имя_СРО>" "<папка_резервной_копии>" /comment-"«описание_резервной_копии>“ С помощью сценария на языке VBScript ’ Этот код создает резервную копию заданного GPO в указанной папке 1 ...... SCRIPT CONFIGURATION ----- strGPO "«иия_бРО>" 1 Например Default Domain Policy strDomain = "<О№-имя_донена>" ' Напринер- rallencorp.com strLocation - "<папка_резервной_копии>" ' Например c:\GPMC Backups strComment - "<описаииерезервной_копии>" ' Например: Default Domain Policy Weekly ‘ ------ END CONFIGURATION ........ set objGPM « CreateObjectC’GPMgmt.GPM") set objGPMConstants - objGPM.GetConstants! ) * Инициализация объекта Domain set objGPMDomain =» objGPM.GetDomainfstrDomain. objGPMConstants.UseAnyDC) ’ Поиск GPO. для которого должна быть создана резервная копия set objGPMSearchCriteria - objGPM CreateSearchCriteriа objGPMSearchCriteria Add objGPMConstants.SearchpropertyGPODisplayName. objGPMConstants.SearchOpEquals. cstr(strGPO) set objGPOList - objGPMDomain.SearchGPOs(objGPMSearchCriteria) if objGPOList.Count - 0 then WScrlpt.Echo "Did not find GPO: " & strGPO WScrlpt.Echo "Exiting " WScript.Quit el seif objGPOList Count > 1 then WScrlpt.Echo "Found more than one matching GPO. Count: ” 8 _ objGPOList.Count WScrlpt.Echo "Exiting." WScript.Quit else WScnpt.Echo "Found GPO. " & objGPOList.Item(l) DisplayName End if Удаление старой резервной копии bn Error Resume Next set objGPMResult » objGPOList.Item(l) BackupIstrLocation. strComment) Вызов метода Overall Status объекта GPMResult. Если в ходе операции произойдут ошибки, будет сгенерировано исключение objGPMResult.Overall Status! ) if objGPMResult.Status.Count > 0 then WScrlpt.Echo "Status messages " & objGPMResult.Status Count for 1 - 1 to objGPMResult.Status Count WScnpt.Echo objGPMResult.Status.Item( 1).Message next WScrlpt.Echo vbCrLf end if
314 Глава 9. Объекты групповой политики ' Вьвод результатов if Err.Number о 0 then WScript Echo "The backup failed." WScript.Echo "Attempted to backup GPO & strGPO & to location ’ & strLocation WScript.Echo "Error: " & err.description else set objGPMBackup = objGPMResult.Result WScript Echo "Backup completed successfully." WScript.Echo "GPO ID: “ & objGPMBackup GPOID WScript.Echo "Timestamp: ” & objGPMBackup Timestamp WScript.Echo "Backup ID: ” & objGPMBackup.ID end if Комментарий Оснастка GPMC позволяет создавать резервные копии отдельных (или всех) объек- тов групповой политики Каждая копия такого объекта состоит из набора папок и файлов, представляющих перечень параметров GPO, фильтров и связей, и создает- ся в указанной вами папке Резервную копию можно создать на локальном диске или на файл-сервере в сети Восстановление объекта групповой политики выпол- няется очень просто (см. рецепт 9.18). До появления оснастки GPMC единственным способом создания резервной ко- пии объекта групповой политики было резервное копирование состояния систе- мы на контроллере домена. (Файлы состояния системы включают каталог Active Directory и содержимое папки SYSVOL; для резервного копирования GPO нужны оба компонента.) Для последующего восстановления объектов групповой политики требовалось загрузиться в режиме DS Restore и выполнить авторизированное восстановление объектов. Не стоит и говорить о том, что описанный в этой книге метод значительно проще. Вы должны регулярно производить резервное копирование объектов групповой политики Поскольку вся резервная информация хранится в виде набора файлов, ее можно скопировать на внешний носитель, обеспечив тем самым два уровня восстановления. Следовательно, вы сможете восстановить последнюю резервную копию, хранящуюся на контроллере домена или на файл-сервере, или же восста- новить предыдущую версию с внешнего носителя (например, ленты). В этом вам поможет сценарий querybackuplocation wsf Рассмотрим в качестве примера коман- ду, которая выводит список имен (и GUID) папок и соответствующих GPO: > querybackuplocation.wsf "c:\gpmc backups" К решению с помощью сценария на языке VBScript Для того чтобы создать резервную копию объекта групповой политики, прежде всего таковой нужно найти. С этой целью создается объект GPMSearchCriteria, в котором указывается критерий поиска — выводимое имя GPO, заданное в разделе конфигурации. Оператор if...elself...else позволяет убедиться, что в результате поиска получен только один объект. Если не найдено ни одного объекта или если их обнаружено несколько, сценарий просто прекращает работу. Затем произво- дится вызов метода GPMGPO Backup, который создает резервную копию объекта групповой политики Посредством первого параметра ему передается путь к папке, где будет создана резервная копия, а в качестве второго — текстовое описание
9.18. Восстановление объекта групповой политики 315 резервной копии, которое будет храниться вместе с ней. Это описание пригодится вам позднее, когда нужно будет вспомнить, что это за копия. Смотрите также В рецепте 9.18 речь идет о восстановлении объекта групповой политики. Рекомен- дуем обратиться и к документу MSDN: GPMGPO.Backup. 9.18. Восстановление объекта групповой политики Проблема Требуется восстановить объект групповой политики из резервной копии. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), домен, где находится объект групповой политики, а затем контейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните правой кнопкой мыши на объекте групповой политики и выберите в открывшемся контекстном меню команду Restore from Backup (Восстановить из резервной копии). 4. Щелкните на кнопке Next (Далее). 5. Укажите папку, в которой находится резервная копия, и щелкните на кнопке Next (Далее). 6. Выберите резервную копию, из которой нужно выполнить восстановление, и щелкните на кнопке Next (Далее). 7. Щелкните на кнопке Finish (Готово). 8. На экране появится окно с информацией о протекании процесса восстановле- ния. По завершении данной операции щелкните на кнопке ОК, чтобы его за- крыть. С помощью интерфейса командной строки > restoregpo.wsf “<лапка_резервной_колии>“ "<имя_6РО>" С помощью сценария на языке VBScript Этот код восстанавливает объект групповой политики из резервной копии ’ ------ SCRIPT CONFIGURATION ---- strGPO - "<иня_6РО>" ‘ Напринер Sales Users GPO strDomain - '<0М5-имя_/]омена>'' ‘ Например: rallencorp.com strLocation и "<лапка_резервной_колии>" * Например: c \GPMC Backups strBackupID - "<GUID_резервной_копии>" ‘ Напринер- {85CA37AC-ODB3-442B-98E8-537291026ED3}
316 Глава 9. Объекты групповой политики ' ------ END CONFIGURATION --------- set objGPM - CreateObjectC'GPMgmt.GPM") set objGPMConstants - objGPM.GetConstantsI ) ' Инициализация объекта Domain set objGPMDomain = objGPM.GetDomain(strDomain. objGPMConstants.UseAnyOC) ' Проверка того, верно ли заданы местоположение и GUID резервной копии et objGPMBackupDir = objGPM.GetBackupDirCstrLocation) set objGPMBackup = objGPMBackupDir.GetBackup(strBackuplD) WScrlpt.Echo "Backup found:'' WScrlpt.Echo " ID: " & objGPMBackup.ID WScrlpt.Echo " Timestamp: " & objGPMBackup.Timestamp WScrlpt.Echo ' GPO ID: " & bjGPMBackup.GPOID WScrlpt.Echo " GPO Name- " & objGPMBackup.GPODisplayName WScrlpt.Echo " Comment: “ & objGPMBackup Comment WScrlpt.Echo ’ Выполнение операции восстановления set objGPMResult - objGPMDomain.RestoreGPOCobjGPMBackup. _ objGPMConstants.DoNotValidateDC) ' Если в ходе операции происходит ошибка. ' генерируется исключение on error resume next objGPMResult.Overall Status! ) 1f objGPMResult.Status.Count > 0 then WScript Echo "Status message(s): ’’ & objGPMResult Status.Count for i = 1 to objGPMResult.Status.Count WScrlpt.Echo objGPMResult.Status.ItemCi).Message next WScrlpt.Echo vbCrLf end if * Вывод результатов if Err.Number о 0 then WScrlpt.Echo "Error restoring GPO " & objGPMBackup.GPODisplayName WScrlpt.Echo "Error; " & Err.Description else WScrlpt.Echo "Restore successful.” WScrlpt.Echo “GPO "' & objGPMBackup.GPODisplayName & _ '" has been restored." end if Комментарий Для восстановления объекта групповой политики с использованием GPMC нужна резервная копия этого объекта. Процедура создания такой копии описана в ре- цепте 9 17. Из резервной копии объект групповой политики можно восстановить даже в том случае, если он был удален Для восстановления удаленного объекта выполните такие действия
9.19. Эмуляция результирующей политики 317 1. Откройте оснастку GPMC. 2. На левой панели поочередно откройте контейнеры Forest (Лес) и Domains (До- мены), домен, в котором находится объект групповой политики, а затем кон- тейнер Group Policy Objects (Объекты групповой политики). 3. Щелкните правой кнопкой мыши на контейнере Group Policy Objects (Объекты групповой политики) и выберите в открывшемся контекстном меню команду Manage Backups (Управление резервными копиями). 4. Выделите резервную копию объекта групповой политики и щелкните на кнопке Restore (Восстановить). 5. Щелкните на кнопке Yes (Да), чтобы подтвердить необходимость выполне- ния операции. 6. По завершении восстановления щелкните на кнопке ОК. Если у вас нет подходящей резервной копии объекта групповой политики, но имеется другой такой же или очень похожий объект (возможно, в другом лесу), можете скопировать его на место утерянного, а затем отредактировать его установ- ки. Более подробно о копировании объектов групповой политики рассказывается в рецепте 9.3. К решению с помощью сценария на языке VBScript Для восстановления объекта групповой политики прежде всего нужно найти его резервную копию и создать представляющий ее объект VBScript. С этой целью сначала создается объект GPM.GetBackupDir, соответствующий папке, где находятся резервные копии, а затем с помощью метода GPMBackupDir.GetBackup, которому передается GUID резервной копии, создается объект, представляющий эту копию. Если GUID резервной копии нужно определить программным путем, с помощью метода GPMBackup. SearchBackups можно найти последнюю резервную копию или копию с заданным выводимым именем. После создания объекта GPMBackup вызывается метод GPMDomain.RestoreGPO, который и производит восстановление. В его первом параметре задается объект GPMBackup, а во втором — флаг проверки (в данном сценарии используется кон- станта, указывающая, что копия не должна проверяться контроллером домена). Смотрите также В рецепте 9.3 рассказывается о создании копии объекта групповой политики, а в рецепте 9.17 — о создании его резервной копии. Ознакомьтесь и с документом MSDN: GPMDomain.RestoreGPO. 9.19. Эмуляция результирующей политики Проблема Требуется эмулировать результирующую политику на основе принадлежности к подразделению, сайту или членства в группе безопасности. Такая эмуляция на- зывается моделированием групповой политики.
318 Глава 9. Объекты групповой политики Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку GPMC. 2. На левой панели щелкните правой кнопкой мыши на элементе Group Policy Mo- deling (Моделирование групповой политики) и выберите команду Group Policy Modeling Wizard (Мастер моделирования групповой политики). 3. Укажите контроллер домена, который будет обрабатывать запрос, и щелкни- те на кнопке Next (Далее). 4. В списке User Information (Информация о пользователе) или Computer Information (Информация о компьютере) выберите контейнер, который должен эмулиро- вать контейнер пользователя или компьютера, либо укажите конкретную учет- ную запись пользователя или компьютера. Щелкните на кнопке Next (Далее). 5. Если нужно, выберите сайт, и щелкните на кнопке Next (Далее). 6. Вам будет предложено эмулировать членство в другой группе. Указав нуж- ную группу, щелкните на кнопке Next (Далее). 7. Мастер предложит выбрать дополнительные фильтры WML Сделав выбор, щелкните на кнопке Next (Далее). 8. Щелкните на кнопке Next (Далее), и процесс эмуляции будет начат. 9. Щелкните на кнопке Finish (Готово). Результаты эмуляции должны отобра- зиться на правой панели. Комментарий Оснастка GPMC позволяет эмулировать результирующую политику с учетом при- надлежности к подразделению или сайту либо членства в группе безопасности. Таким образом можно создать один или несколько объектов групповой полити- ки и эмулировать их применение к пользователю или компьютеру, (чтобы уви- деть, каким будет результат и какие потребуются изменения) до переноса объек- тов групповой политики в рабочую среду и их связывания с реальной областью управления. Смотрите также В рецепте 9.20 рассказывается, как можно просмотреть результирующую политику. 9.20. Просмотр результирующей политики Проблема Требуется просмотреть результирующую политику, применяемую к пользователю или компьютеру, чтобы выяснить, правильно ли настроены политики, связанные с данным клиентом. 1 Описанные в этом рецепте действия должны выполняться на контроллере домена Windows Ser- ver 2003.
9.21. Обновление групповых политик компьютера 319 Решение С помощью графического пользовательского интерфейса Откройте оснастку Resultant Set of Policies (Результирующая политика), запустив из командной строки файл rsop.msc. Данная оснастка проанализирует групповые политики компьютера и выведет в окне консоли ММС итоговые установки. Для того чтобы просмотреть результирующую политику другого компьютера, нужно на левой панели щелкнуть правой кнопкой мыши на корневом узле дерева и выбрать команду Change Query (Изменить запрос). Вам будет предложено ввести имя компьютера, который требуется опросить. ПРИМЕЧАНИЕ---------------------------------------------------------- Оснастка Resultant Set of Policies (Результирующая политика) имеется только в Windows Server 2003 и Windows ХР. С помощью интерфейса командной строки > gpresult В Windows Server 2003 команда gpresul t позволяет задать ключ /S и имя уда- ленного компьютера, для которого она должна быть выполнена. В Windows 2000 ключ /S имеется, но у него иное действие, а следовательно, получить с помощью команды gpresult информацию о другом компьютере невозможно. Подборка све- дений о синтаксисе утилиты gpresult выводится по команде gpresult /?. Комментарий При наличии нескольких объектов групповой политики бывает трудно с уверен- ностью сказать, какие установки применяются к конкретному пользователю или компьютеру. Поэтому были разработаны средства, позволяющие запросить ре- зультирующий набор установок, применяемых к клиенту, — так называемую ре- зультирующую политику (Resultant Set of Policy, RSoP). Еще одним источником данных является реестр компьютера. Информацию о применяемых к компьютеру объектах групповой политики вы найдете в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVerslon\Group Policy\Hlstory. Здесь нет сведений о применяемых к компьютеру установках, но зато указано имя каждого объекта групповой политики, его отличительное имя, местоположе- ние папки SYSVOL, номер версии операционной системы, а также область уп- равления, с которой этот компьютер связан. Смотрите также В рецепте 9.19 рассказывается об эмулировании результирующей политики. 9.21. Обновление групповых политик компьютера Проблема Предположим, вы внесли в объект групповой политики некоторые изменения, и теперь их необходимо применить к компьютеру обновив его групповые политики.
320 Глава 9. Объекты групповой политики Решение С помощью интерфейса командной строки В Windows Server 2003 или Windows ХР выполните следующую команду: > gpupdate [/target:{Computer | User}] В Windows 2000 следует задать такую команду: > secedit /refreshpolicy [machine_policy | user_policy] Комментарий Новая команда gpupdate гораздо более эффективна, чем известная вам команда secedit Она позволяет применить к объектам все установки, добавив ключ /force (по умолчанию используются только измененные установки). С помощью ключа /target с опцией Computer или User можно указать, к какому объекту должна быть применена групповая политика, а с помощью ключей /logoff и /boot выполнить автоматический выход пользователя из системы и перезагрузку после применения новой политики. Смотрите также Документ MS КВ 298444 (A Description of the Group Policy Update Utility). 9.22. Восстановление политики, применяемой по умолчанию Проблема Требуется вернуть исходную конфигурацию политики безопасности домена или контроллера домена после того, как в нее были внесены изменения. Решение1 С помощью интерфейса командной строки Следующая команда заменяет обе политики безопасности — домена и контролле- ра домена. Если вместо параметра Both (обе) задать Domain (домен) или DC (кон- троллер домена), будет изменена одна из политик. > degpofix /target:Both Данная команда должна быть выполнена на контроллере того домена, для ко- торого нужно переустановить групповую политику. 1 Предлагаемое в этом разделе решениеможно применить только для контроллера домена, работаю- щего под управлением Windows Server 2003.
у.и.. восстановление политики, применяемом по умолчанию 3Z1 Комментарий Если вы изменили один из двух используемых по умолчанию объектов групповой политики, но хотите вернуть исходные установки, воспользуйтесь утилитой dcgpoflx (работает с конкретной версией схемы Active Directory). Однако если ее текущая версия отличается от используемой в службе каталогов, утилита не сможет вы- полнить переустановку. Воспользовавшись ключом /ignoreschema, это ограничение можно обойти. В таком случае утилита восстановит объект групповой политики в соответствии с той версией схемы, которую она считает текущей. Такая потреб- ность может возникнуть, если на контроллере домена, содержащем расширение схемы, будет установлен пакет обновлений, а на втором контроллере он будет от- сутствовать. При попытке выполнить утилиту dcgpoflx на втором контроллере будет выведено сообщение об ошибке, поскольку на первом контроллере новая версия схемы и утилита dcgpof1 х еще не установлены.
10 Схема Active Directory 10.0. Введение Схема Active Directory содержит информацию о том, как структурированы и за- щищены объекты каталога, какие в них хранятся данные и как они должны быть представлены. Поэтому любой администратор Active Directoiy, любой разработчик, который пишет сценарии с целью автоматизации задач, связанных с администри- рованием каталога, должен в совершенстве знать структуру схемы, понимать смысл таких важнейших концепций, как классы, наследование, атрибуты и их типы, ин- дексирование. В этой главе приведены инструкции по выполнению множества задач, с кото- рыми ежедневно приходится сталкиваться администратору схемы. Анатомия объекта schema Интересной особенностью Active Directory, отсутствующей в других реализациях LDAP (Lightweight Directory Access Protocol — основной протокол доступа для Active Directory), является то, что схема каталога хранится в самом каталоге систе- мы в виде набора объектов. Это означает, что для управления схемой могут ис- пользоваться интерфейсы и программы, предназначенные для управления объек- тами других типов. Все объекты схемы Active Directory хранятся в контейнерах Schema (Схема), а следовательно, имеют имена наподобие такого: cn=schema, cn=configuration.<кор- невое_ОИ_леса>. Большинство объектов схемы относится к одному из двух классов: classSchema или attributeschema. Как следует из названия этих классов, первый из них определяет классы объектов, а второй — их атрибуты. Имеется и третий класс объектов, с именем subSchema. Он называется абстрактной схемой и определен в спецификации LDAP версии 3 (RFC 2251). В контейнере Schema (Схема) хра- нится только один объект этого класса, cn«Aggregate, содержащий общую инфор- мацию обо всей схеме. Списки наиболее важных атрибутов объектов classSchema и attributeschema приведены соответственно в табл. 10.1 и 10.2. Таблица 10.1. Атрибуты объекта classSchema Атрибут Описание adminDescription auxiliaryclass Информация о классе Многозначный атрибут, содержащий объекты, которые представляют особые классы, созданные для данного класса
10.0. введение 323 Атрибут Описание СП Относительное отличительное имя класса (обычное имя) defaultHidingValue Логическое значение, определяющее, скрыты ли объекты данного класса по умолчанию при просмотре схемы с помощью средств администрирования с графическим пользовательским интерфейсом defaultSecuri tyDescri ptor Используемый по умолчанию дескриптор безопасности объектов данного класса governsID Идентификатор объекта (Object IDentifier, OID) данного класса isDefunct Логическое значение, определяющее, деактивизирован ли данный класс IDAPDisplayName Выводимое имя LDAP, то есть имя, используемое для ссылки на класс при поиске, создании или изменении его объектов. Это имя может отличаться от хранимого в атрибуте сп mayContain Параметрический атрибут, содержащий список атрибутов класса, установка значений которых необязательна mustContain Параметрический атрибут, содержащий список атрибутов класса, установка значений которых обязательна objectClassCategory Тип класса, заданный целым числом: 1 (структурный), 2 (абстрактный), 3 (особый) или 0 (88). possibleInferiors Параметрический атрибут, содержащий список классов, объекты которых может содержать объект данного класса possSuperiors Многозначный атрибут, содержащий список классов, в объекты которых могут входить объекты данного класса rONAttID schemaIDGUID showlnAdvancedVIewOnly Относительное отличительное имя экземпляра класса GUID класса Логическая переменная, определяющая, должны ли объекты этого класса выводиться средствами администрирования с графическим пользовательским интерфейсом только в режиме Advanced (Дополнительно) subClassOf systemAuxi1i aryClass Родительский класс Параметрический атрибут, содержащий список особых классов, определенных для данного класса. Значение этого атрибута может изменять только сама Active Directory systemFlags Целочисленное значение, представляющее дополнительные свойства класса продолжение^
324 Глава 1U. схема Active Directory Таблица 10.1 (продолжение) Атрибут Описание systemMayContain Параметрический атрибут, содержащий список атрибутов класса, установка значений которых необязательна. Значение этого атрибута может изменять только сама Active Directory systemMustContain Параметрический атрибут, содержащий список атрибутов класса, установка значений которых обязательна. Значение этого атрибута может изменять только сама Active Directory systemPossSuperi ors Параметрический атрибут, содержащий список классов, в объекты которых могут входить объекты данного класса. Значение этого атрибута может изменять только сама Active Directory Таблица 10.2. Атрибуты объекта attrlbuteSchema Атрибут Описание adminDescription attributelD attributeSecurltyGUID Информация об атрибуте OID атрибута GUID, используемый для применения имени и пароля пользователя к группе объектов attributesyntax OID, представляющий синтаксис атрибута. Совместно с атрибутом oMSyntax определяет уникальный синтаксис СП Относительное отличительное имя атрибута, называемое также его обычным именем isDefunct Логическая переменная, определяющая, деактивирован ли данный атрибут attribute!sMemberOfPa rti a1Set Логическая переменная, определяющая, является ли атрибут членом частичного набора атрибутов (то есть входит ли он в глобальный каталог) isSingleValued Логическая переменная, определяющая тип атрибута — однозначный или многозначный 1 inked Если этот атрибут заполнен, он представляет ссылку на следующий или предыдущий атрибут IDAPDisplayName Выводимое имя LDAP, то есть имя, используемое для ссылки на атрибут при поиске или присваивании ему значения. Заметьте, что это значение может отличаться от значения атрибута сп oMSyntax Целое число, представляющее ОМ-тип атрибута. Совместно с атрибутом Syntax определяет уникальный синтаксис атрибута schemalDGUIO GUID атрибута
10.1. Регистрация оснастки Active Directory Schema 325 Атрибут Описание searchFlags Целое число, представляющее особые свойства атрибута, связанные с его поиском, включая способ индексирования и возможность использования алгоритма поиска ANR (Ambiguous Name Resolution — разрешение неоднозначных имен) systemFlags Целое число, представляющее дополнительные свойства атрибута 10.1. Регистрация оснастки Active Directory Schema Проблема Требуется в первый раз открыть оснастку Active Directory Schema (Схема Active Directory) на данном компьютере. Решение Прежде чем использовать оснастку Active Directory Schema (Схема Active Directory), нужно зарегистрировать связанную с ней библиотеку динамической компоновки (DLL). Это можно сделать с помощью утилиты regsvr32: > regsvr32 schmmgmt.dll В случае успешного выполнения данной команды будет выведено такое сооб- щение: Dll Registerserver in schrmgmt.dll succeeded. Комментарий Большинство оснасток ММС, используемых для управления Active Directory, не нуждаются в ручной регистрации их DLL. Однако при использовании оснастки Active Directory Schema (Схема Active Directory) администраторы вынуждены это делать, с тем чтобы защитить схему каталога от случайных изменений. Конечно, это не станет настоящим препятствием для пользователей, которые захотят внести изменения в схему, но по умолчанию такая возможность недоступна. В любом случае изменять схему разрешается только пользователям, входящим в группу Schema Admi ns (Администраторы схемы), так что если посторонний пользователь и получит доступ к оснастке Active Directory Schema (Схема Active Directory), он все равно не сможет это сделать. Если вы хотите использовать данную оснастку на компьютере, который не является контроллером домена, и еще не установили пакет adminpak.msi, в команде regsvr32 нужно указать полный путь к файлу schmmgmt.dll, находящемуся в каталоге \I386 на компакт-диске Windows Server 2003.
326 Глава 10. Схема Active Directory Смотрите также Документы MS КВ 320337 (HOW ТО: Manage the Active Directory Schema in Windows 2000) и MS KB 326310 (HOW TO: Manage the Active Directory Schema in Windows Server 2003 Enterprise Edition). 10.2. Разрешение на изменение схемы Проблема1 Необходимо разрешить изменение схемы на хозяине схемы. Не выполнив это требование, вы не сможете расширить таковую. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели найдите элемент Active Directory Schema (Схема Active Directory). 3. Щелкните правой кнопкой мыши на этом элементе и выберите в открывшемся контекстном меню команду Operations Master (Хозяин операций). 4. Установите флажок Allow schema modifications (Разрешить изменение схемы) и щелкните на кнопке ОК. С помощью интерфейса командной строки Для того чтобы установить разрешение на изменение схемы, выполните следующую команду: > reg add HKEY_LOCW__MACHINE\System\CurrentControlSet\Services\NTDS\Parameters /t J REG_DkORD /v "Schema Update Allowed' /d 1 А для того чтобы запретить изменение схемы, выполните такую команду: > reg delete HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NTDS\Parameters /v J "Schema Update Allowed" /f С помощью сценария на языке VBScript ' Этот код разрешает или запрещает изменять схему на хозяине схемы ----- SCRIPT CONFIGURATION -- ' TRUE to enable schema mods and FALSE to disable boolSetReg - TRUE Ввести имя хозяина схемы или при локальном выполнении strDC - "<имя_хозяина_схены>" ' ----- END CONFIGURATION ..... const HKEY_LOCAL_MACHINE - &H80000002 set objReg - GetObject("winmgmtsiW" & strDC & "XrootXdefaultzStdRegProv") 1 Разрешение на изменение схемы предоставляется только в том случае, если хозяин схемы работает под управлением Windows 2000.
10.3. Получение OID для нового класса или атрибута 327 strKeyPath - "SystemXCurrentControlSet\Services\NTDS\Parameters” strValueName - "Schema Update Allowed" if boolSetReg - TRUE then strValue 1 intRC - objReg.SetDWORDValue(HKEY_LOCAL_MACHINE.strKeyPath. _ strValueName.strValue) if intRC > 0 then WScript.Echo "Error occurred: " & intRC else WScript.Echo strValueName & " value set to " & strValue end if else intRC - objReg.DeleteValue(HKEY_LOCAL_MACHINE.strKeyPath.strValueName) if intRC > 0 then WScript.Echo "Error occurred: " & intRC else WScript.Echo strValueName & " value deleted" end if end if Комментарий Если хозяин схемы работает под управлением Windows 2000, расширение схемы невозможно без наличия явного разрешения на ее изменение. Для того чтобы предоставить таковое, в разделе HKEY_LOCAL_MACHINE\System\CurrentControlSet\Ser- vices\NTDS\Parameters системного реестра необходимо создать новый параметр с именем Schema Update Allowed (Обновление схемы разрешено) и значением 1. Чтобы запретить вносить изменения в схему, достаточно присвоить указанно- му параметру значение 0 или вовсе удалить его из реестра. ПРИМЕЧАНИЕ------------------------------------------------------------------------------- Если владелец схемы работает под управлением Windows Server 2003, предоставлять разрешение на изменение схем не понадобится, поскольку Microsoft теперь не связывает возможность расширения схемы с наличием в реестре параметра Schema Update Allowed. Смотрите также Документ MS КВ 285172 (Schema Updates Require Write Access to Schema in Active Directory). 10.3. Получение OID для нового класса или атрибута Проблема Необходимо сгенерировать OID для нового класса или атрибута, который впоследствии будет добавлен в схему.
328 Глава 10. Схема Active Directory Решение OID можно получить двумя способами. С помощью утилиты Oidgen.exe из пакета Resource Kit его легко сгенерировать на основе дерева О ID Microsoft: > oidgen Attribute Base OID: 1.2.840.113556.1.4.7000.233.28688.28684.8.2849.956347.1967079.334190 Class Base OID: 1.2.840.113556.1.5.7000.111.28688.28684.8.370553.291204.940269.113484 Работать с этой утилитой довольно просто, но если расширения схемы пред- назначаются для применения в рабочей среде, рекомендуем воспользоваться идентификатором из ветви OID вашей организации. А для того чтобы узнать, присвоен ли вашей организации OID, обратитесь на один из следующих сайтов: http://www.iana.org/assignments/enterprise-numbers http://www.alvestrand.no/objectid/ Если окажется, что организация не имеет такого идентификатора, попробуй- те обратиться в центр сертификации своей страны. Список электронных адресов центров сертификации имеется на сайте http://www.lso.ch/iso/en/aboutiso/isomembers/ lndex.html. Получив базовый OID, вы сможете создавать его ответвления. Например, если базовый OID имеет значение 1.2.3.4, новые идентификаторы классов могут на- чинаться с 1.2.3.4.1, а идентификаторы атрибутов — с 1.2.3.4.2. Тогда OID первого созданного вами класса будет таким: 1.2.3.4.1.1, a OID первого атрибута - та- ким: 1.2.3.4.2.1. Комментарий OID, или идентификатор объекта, — это не что иное, как строка чисел, разделен- ных точками. Первоначально формат таких идентификаторов был определен ор- ганизацией ITU-T в стандарте Х.208 и использовался для однозначной иденти- фикации самых разных объектов, включая MIB-объекты протокола SNMP, а также классы и атрибуты протокола LDAP. Идентификаторы объектов имеют иерархи- ческую структуру; за выделение их ветвей и управление ими отвечают нацио- нальные центры сертификации. 10.4. Генерация GUID для нового класса или атрибута Проблема Требуется сгенерировать GUID для нового класса или атрибута, который вы хотите добавить в схему. А чтобы добавить класс или атрибут в схему, его идентифика- тор GUID нужно записать в атрибут schemaIDGUID. Решение Существует несколько способов получения GUID. Если при создании класса или атрибута вы не зададите значение schemaIDGUID, оно будет сгенерировано автома-
10.4. Генерация GUID для нового класса или атрибута 329 тически. Следовательно, можно использовать значение schemaIDGUID, сгенериро- ванное в тестовом лесу. GUID можно получить и программным путем, используя язык Perl, Visual Basic, C++ или C# (но не VBScript). Наконец, API Windows включает метод CoCreateGUID, с помощью которого также можно сгенерировать та- кой идентификатор, и если вы хотите пользоваться VBScript, создайте с помощью Visual Basic оболочку метода CoCreateGUID в виде ActiveX DLL и используйте эту библиотеку. Наконец, у вас имеется возможность воспользоваться таким средством, вхо- дящим в состав пакета Microsoft Platform SDK, как uuidgen.exe. Эта утилита не требует указания параметров (хотя у нее есть несколько ключей, которые не- сложно просмотреть с помощью команды uuidgen -h) и способна сгенерировать столько GUID, сколько вам потребуется. Если для расширения схемы вы будете использовать файлы LDIF, то сможе- те перевести все GUID в кодировку base64. Это необходимо сделать, поскольку в Active Directory идентификаторы хранятся в двоичном виде. Спецификация же LDIF требует, чтобы любые двоичные данные были представлены в кодировке base64. К сожалению, VBScript не поддерживает этой кодировки, так как в отличие от других языков, и в частности от Perl, не располагает соответствующим модулем. Ниже приведен пример сценария на языке Perl, который с помощью утилиты uuidgen генерирует GUID, затем посредством метода из модуля Win32::Lanman преобразует его в двоичный формат, после чего с применением метода из модуля MIME::Base64 кодирует его: #!perl use MIME::Base64; use Win32::Lanman; # Получаем строку GUID щу $str_guid - 'uuidgen.exe'; chomp $str_guid; # Преобразуем ее в двоичный формат GUID щу $bin_guid = Win32::Lanman::StringToGuid($str_guid); # Перекодируем данные в Base64 щу $b64_guid » encode_base64($bin_guid); print "$b64_guid\n“; ПРИМЕЧАНИЕ------------------------------------------------------------------------------- Утилита uuidgen.exe вам вовсе не понадобится, если вы будете пользоваться методом из модуля Win32::Guidgen или Data::UUID (в Unix), который генерирует текстовый GUID. Комментарий Атрибут schemaIDGUID содержит GUID объекта схемы, представляющего класс или атрибут. При создании нового класса или атрибута желательно задать значение schemalDGUID, особенно если таковой должен быть связан с расширенными правами или наборами свойств. Если это значение не будет задано явно, то при создании или изменении расширенных прав на использование класса придется динамически
330 Глава 10. Схема Active Directory определять атрибут schemalDGUID каждого леса, в котором он реализован. Данное решение, как вы сможете убедиться, не отличается ясностью. 0.5. Расширение схемы Проблема Требуется расширить схему Active Directory, включив в нее новые классы и атрибуты. Решение Процесс добавления в схему новых классов или атрибутов, а также изменения су- ществующих называется расширением. Очень важно, прежде чем переносить лю- бые изменения в рабочую среду, тщательно протестировать их. Общие рекомен- дации по организации процесса расширения схемы приведены ниже. 1. Оцените, насколько обоснована необходимость интеграции приложений с Acti- ve Directory. 2. Проанализируйте планируемые расширения на предмет влияния, которое они окажут на среду Active Directory (например, придется ли вам добавлять но- вые атрибуты в глобальный каталог). 3. Тщательно проверьте измененные в результате расширения данные в тестовой среде и задокументируйте их. 4. Перенесите измененные в результате расширения классы и атрибуты в рабо- чую среду Active Directory. Комментарий Хотелось бы вас предостеречь: не превратите представленное выше описание процесса расширения схемы в долгую бюрократическую процедуру, выполнение которой может занимать несколько недель. Иначе едва ли разработчики вашего предприятия захотят интегрировать свои приложения с Active Directory. В то же время, хотя во многих организациях действуют правила, согласно которым коли- чество расширений схемы должно быть сведено к минимуму, в самих этих расши- рениях нет ничего плохого. Напротив, такая возможность является одним из важ- ных преимуществ службы каталогов Active Directory перед ее предшественницей из операционной системы Windows NT 4.0. Смотрите также В рецепте 10.7 рассказывается о том, как добавить в схему новый атрибут, а в ре- цепте 10.9 — о том, как добавить новый класс. Кроме того, просмотрите документ MS КВ 283791 (How to Modify Schema Information Using the Ldifde Utility).
10.7. Добавление нового атрибута 331 10.6. Документирование расширений схемы Проблема Требуется задокументировать расширения схемы. Решение Существует несколько способов документирования расширений схемы. Если расширение выполняется с использованием LDIF-файлов, документацией могут служить сами эти файлы. Дополните содержащиеся в них инструкции поясне- ниями, введя в начало каждой строки комментария символ #. Именно такой способ выполнения и документирования расширения схемы предпочитает и автор, реко- мендуя всем компаниям, желающим расширить схему Active Directory у своих клиентов, создавать соответствующие LDIF-файлы независимо от того, используются ли они для расширения схемы. Еще один простой способ документирования расширений заключается в ис- пользовании программы SchemaDoc, разработанной компанией Microsoft. Эта утилита с графическим пользовательским интерфейсом позволяет задокументи- ровать классы и атрибуты, уже добавленные в схему Active Directory. Она генериру- ет XML-файлы, для просмотра которых можно разработать собственный интер- фейс. Программу SchemaDoc можно загрузить с сайта http://www.microsoft.com/down- loads/details.aspx?FamilyId=BEF87BlD-D2Fl-4795-88C5-CA66CFC3AB29&displaylang=en. Довольно подробная информация о ней имеется также на сайте http://www.micro- soft.com/technet/prodtechnoi/ad/windows2000/maintain/schema.asp. Комментарий Правил, которые бы жестко регламентировали, в каких случаях следует докумен- тировать расширения схемы, не существует. Тем не менее хотя бы самое мини- мальное документирование должно быть обязательным. При наличии времени и возможности стоит разработать четкую систему документирования с использова- нием Веб или даже системы объектного моделирования. » Смотрите также Документ RFC 2849 (The LDAP Data Interchange Format (LDIF) — Technical Spe- cification). 10.7. Добавление нового атрибута Проблема Требуется добавить в схему Active Directory новый атрибут.
332 Глава 10. Схема Active Directory Решение ПРИМЕЧАНИЕ-----------------------------------------------------— В Windows 2000, прежде чем выполнять указанные в этом рецепте действия, нужно разрешить из- менение схемы. О том, как это сделать, рассказано в рецепте 10.2. С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели щелкните правой кнопкой мыши на контейнере Attributes (Атрибуты) и выберите в открывшемся контекстном меню команду Create At* tribute (Создать атрибут). 3. Щелкните на кнопке Next (Далее), подтверждая тем самым свое намерение расширить схему. 4. Введите информацию о новом атрибуте. 5 Щелкните на кнопке Finish (Готово). С помощью интерфейса командной строки Для создания новых атрибутов можно использовать утилиту Idifde, которая про- читает информацию о них из созданного LDIF-файла. Приведем пример такого файла Он имеет имя create_attr.ldf и содержит информацию об атрибуте railen- corp-LanguagesSpoken: dn cn-ral1encorp-LanguagesSpoken.cn-schema cn-configuration.<корневое_ОИ_леса> changetype, add objectclass attributeSchema IDAPDisplayName: ral1encorp-LanguagesSpoken attributed: 1.3.6.1.4.1.999.1.1.28.3 oMSyntax. 20 attributeSyntax: 2 5 5.4 isSingleValued: FALSE searchFlags: 1 description: "Languages a user speaks" Создав файл выполните следующую команду, и описанные в нем изменения будут внесены в схему: > Idifde -v -i -f create_attr.ldf С помощью сценария на языке VBScript Этот код показывает, как создать атрибут с именем railencorp-LanguagesSpoken. Предполагается, что данный сценарий выполняет пользователь. входящий в группу Администраторы схемы set objRootDSE - GetCbject("LDAP //RootDSE") set objSchemaCont = GetObjectCLDAP//" & _ objRootDSE. Get("schemaNamingContext") ) set objAttr - objSchemaCont.Create("attributeSchema". "cn-ra11encorp-LanguagesSpoken") objAttr Put "IDAPDisplayName". "rallencorp-LanguagesSpoken" objAttr Put "attributed". "1.3.6.1.4 1.999.1.1.28.3“ objAttr.Put "oMSyntax". 20 objAttr.Put "attributeSyntax". "2 5.5.4"
10.7. Добавление нового атрибута 333 objAttr.Put "isSingleValued". FALSE objAttr.Put "description". "Languages a user speaks" objAttr.Put "searchFlags". 1 ' index the attribute objAttr.SetInfo WScript.Echo "Attribute created" Комментарий Новый атрибут создается путем добавления в контейнер Schema (Схема) объекта attributeSchema. Обычно при расширении схемы Active Directory производится сразу несколько дополнений и изменений классов и атрибутов. Причем порядок следования выполняемых при этом операций, как правило, имеет значение. На- пример, нельзя создать класс, включив в него еще не существующий атрибут, - сначала нужно создать атрибут нового класса, а потом и сам класс. Более того, по- сле создания атрибута сначала нужно перезагрузить схему, и лишь затем присту- пать к созданию класса. О том, что такое перезагрузка схемы и как она выполня- ется, рассказывается в рецепте 10.22. Назначение большинства атрибутов объекта attributeSchema очевидно, то есть понятно из их названий, но некоторые требуют пояснения. В частности, атрибу- ты attributeSyntax и oMSyntax совместно определяют тип данных, которые могут содержаться в определенном атрибуте. Допустимые сочетания значений указан- ных атрибутов приведены и описаны в табл. 10.3. Таблица 10.3. Сочетания значений атрибутов attributeSyntax и oMSyntax Тип данных Значение атрибута attributeSyntax Значение атрибута oMSyntax Описание AccessPointDN 2.5.5.14 127 Тип отличительного имени, определенный в стандарте Х.500 Boolean 2.5.5.8 1 Значение TRUE или FALSE CaseExactString 2.5.5.3 27 Строка, в которой учитывается регистр символов CaselgnoreStrlng 2.5.5.4 20 Строка, в которой не учитывается регистр символов Di rectorystring 2.5.5.12 64 Строка Unicode, в которой нс учитывается регистр символов DN 2.5.5.1 127 Строка, представляющая отличительное имя объекта DNWithBinary 2.5.5.7 127 Двоичная строка формата В;CharCount:BinaryVaiue:0bjectDN, где CharCount — количество шестнадцатеричных знаков в Binaryvalue, то есть в шестнадцатеричном представлении двоичного значения, a ObjectDN — отличительное имя объекта продолжение^
334 Глава 10. Схема Active Directory Таблица 10.3 (продолжение) Тип данных Значение атрибута attributesyntax Значение атрибута oMSyntax Описание DNWithString 2.5.5.14 127 Двоичная строка, содержащая строковое значение и отличительное имя. Значение данного типа имеет формат S:CharCount: StnngValue:ObjectDN, где CharCount — количество символов в строке Stringvalue, a OojectDN — отличительное имя объекта в Active Directory Enumeration 2.5.5.9 10 Тип, определенный как Х.500, а интерпретирующийся как целое число GeneralizedTime 2.5.5.11 24 Строковый формат для представления времени, определенный в стандарте ASN.1. См. стандарты ISO 8601 и Х.680 IA5String 2.5.5.5 22 Строка, содержащая символы из набора IA5, в которой учитывается регистр символов Integer 2.5.5.9 2 32-разрядное целое число Integers 2.5.5.16 65 64-разрядное целое число, называемое также большим целым NTSecurityDescri ptor 2.5.5.15 66 Шестнадцатеричная строка, содержащая дескриптор безопасности NumericString 2.5.5.6 18 Строка цифр Octetstring 2.5.5.10 4 Массив байтов, используемый для хранения двоичных данных OID 2.5.5.2 6 Строка, содержащая цифры (0-9) и десятичные точки (.) ORName 2.5.5.7 127 Тип данных, определенный в стандарте Х.400. Используется для обеспечения совместимости указанного стандарта со спецификацией RFC 822 Presentati onAddress 2.5.5.13 127 Строка, содержащая адреса презентации OSI (Open Systems Interconnection — модель взаимодействия открытых систем)
10.7. Добавление нового атрибута 335 Тип данных Значение атрибута attributesyntax Значение атрибута oMSyntax Описание PrintableString 2.5.5.5 19 Строка, содержащая печатаемые символы, в которой учитывается регистр символов ReplicaLink 2.5.5.10 127 Тип данных, предназначенный для внутреннего использования в Active Directory Sid 2.5.5.17 4 Двоичная строка, содержащая идентификатор безопасности (S1D) UTCTime 2.5.5.11 23 Определенный в стандарте ASN.1 строковый формат для представления времени Атрибут searchFlags представляет собой набор флагов, которые определяют свойства, связанные с поиском атрибутов. Его допустимые значения, являющиеся кумулятивными, приведены в табл. 10.4. Например, для индексирования атрибута и включения его в набор атрибутов, по которым может производиться поиск с ис- пользованием алгоритма ANR, необходимо присвоить атрибуту searchFlags зна- чение 5 (1 + 4). Таблица 10.4. Значения битов атрибута searchFlags Значение Описание 1 Проиндексировать атрибут. См. также рецепт 10.11 2 Проиндексировать атрибут и контейнер 4 Включить атрибут в набор атрибутов, к которым применим поиск с использованием алгоритма ANR. Данное значение может применяться совместно со значением 1. См. также рецепт 10.13 8 Сохранить атрибут в захороненные объекты 16 Скопировать атрибут при копировании объектов. См. также рецепт 10.12 32 Создать для этого атрибута кортежный индекс. Это позволит сократить время поиска в тех случаях, когда значение атрибута в строке поиска содержит символы подстановки, например: givenname-*on Смотрите также Из рецепта 4.12 (глава 4) вы узнаете, как выполнить поиск объектов на основе за- данного значения битового флага, из рецепта 10.9 — как создать новый класс, а из рецепта 10.22 — как перезагрузить схему.
336 Глава 10. Схема Active Directory 10.8. Просмотр свойств атрибута Проблема Требуется просмотреть свойства атрибута. Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Schema (Схема Active Directory). 2 На левой панели щелкните на контейнере Attributes (Атрибуты) 3 . На правой панели дважды щелкните на атрибуте, свойства которого хотите просмотреть. 4 Поочередно просмотрите содержимое каждой вкладки С помощью интерфейса командной строки В следующей команды замените <обычное_имя_атрибутд> обычным именем атрибу- та, свойства которого вы хотите просмотреть (не выводимым именем LDAP): > dsquery * cn-schema.cn-configuration.<корневое_ОИ_леса> -scope onelevel -attr *J -f i1ter "(&(objectcategory-attributeSchema)(сп~<обычное_имя_атрибута>))" С помощью сценария на языке VBScript ' Этот код выводит атрибуты заданного объекта attributeSchema ‘ Код функции DisplayAttributes!) приведен в рецепте 4 2 (глава 4) ----- SCRIPT CONFIGURATION -- Присвойте данной переменной обычное имя атрибута (не отображаемое имя LDAP) strAttrName - "<обычное_имя_агрибута>" ' Например: surname ’ -----END CONFIGURATION . .... set objRootDSE - GetObject!"LDAP://RootDSE") set objAttr - GetObject("LDAP-.//cn-" & strAttrName & & _ objRootDSE.Get("schemaNamingContext")) objAttr.Getlnfo WScript.Echo "Properties for " & strAttrName & D1splayAttributes(objAttr ADsPath) Комментарий В решениях с использованием командной строки и сценария на языке VBScript указывалось, что требуется задать обычное имя интересующего вас атрибута, то есть его относительное отличительное имя, представленное значением атрибута сп. Так, атрибут surname имеет в лесу га 11 encorp. com следующее отличительное имя: cn-surname.сп-schema.cn-configurati on,dc°ra11encorp.dc»com Однако у многих администраторов это вызывает затруднение. Дело в том, что большинство приложений ссылаются на атрибуты по их выводимым именам LDAP, которые определены в атрибуте IDAPDisplayName объекта attributeSchema. Значение атрибута IDAPDisplayName обычно отличается от значения атрибута сп — обычного
10.9. Добавление нового класса 337 имени требуемого атрибута. Например, обычным именем атрибута surname является surname, а выводимым его именем LDAP — sn. Если вместо обычного имени объекта вы захотите задать в командной строке его выводимое имя LDAP, просто замените строку сп-<обычное_имя_атрибута> стро- кой lDAPDisplayName-<LCWP-wM«_arpH6yra>. Правда, в сценарии на языке VBScript сде- лать это не так просто. При использовании обычного имени можно вызвать метод GetObject, поскольку известно отличительное имя объекта attributeSchema. Если же вместо этого нужно использовать значение атрибута 1DAPD1 spl ayName, придет- ся выполнить запрос ADO с критерием поиска, подобным указанному в команд- ной строке. Одним из важных атрибутов объекта attributeSchema является systemFlags — набор битовых флагов, которые представляют несколько дополнительных свойств атрибута. Назначение битов этого атрибута описано ниже в табл. 10.5. Свойства любого атрибута могут комбинироваться, о чем будут свидетельствовать значения атрибута systemFlags. Например, значение 17 (1 + 16) указывает, что атрибут являет- ся одним из стандартных атрибутов Active Directory и не реплицируется. Таблица 10.5. Значения битов атрибута systemFlags Значение Описание 1 Атрибут не реплицируется на контроллеры домена 4 Значение атрибута вычисляется Active Directory динамически 16 Стандартный атрибут Active Directory (устанавливается автоматически) Смотрите также В рецепте 4.2 (глава 4) рассказывается, как просмотреть атрибуты объекта, а в ре- цепте 4.9 (глава 4) — как выполнить поиск по значениям отдельных битов. 10.9. Добавление нового класса Проблема Требуется добавить в схему Active Directory новый класс. Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели щелкните правой кнопкой мыши на контейнере Classes (Классы) и выберите в контекстном меню команду Create Class (Создать класс). 3. Щелкните на кнопке Next (Далее), подтверждая тем самым свое намерение расширить схему. 1 В Windows 2000, прежде чем приступать к выполнению указанных в этом рецепте действий, нужно предоставить разрешение на изменение схемы. О том, как это сделать, рассказано в рецепте 10.2.
338 Глава 10. Схема Active Directory 4. Введите информацию о новом атрибуте. 5. Щелкните на кнопке Finish (Готово). С помощью интерфейса командной строки Для создания новых классов можно использовать утилиту Idifde, которая прочи- тает информацию о них из созданного вами LDIF-файла. Пример такого файла с именем create_dass.ldf, содержащего информацию о классе callencorp-Sa1 esUser, приведен ниже- dn : cn=ral1encorp-SalesUser.cn-schema.cn=configuration.<корневое_ОИ_лесд> changetype: add objectclass: classSchema 1DAPDi splayName: ral1encorp-SalesUser governsld: 1.3.6.1.4.1.999.1.1.28.4 objectClassCategory: 3 SubClassOf: top description: Auxiliary class for Sales user attributes adminDescription; Auxiliary class for Sales user attributes mayContain: rallencorp-Building mayContain. rallencorp-Theatre Создав файл, выполните указанную далее команду, и описанные в нем изме- нения будут внесены в схему: > Idifde -v -i -f create_class.ldf С помощью сценария на языке VBScript ' Этот код показывает, как создать атрибут с именем railencorp-SalesUser. ' Предполагается что данный сценарий выполняет пользователь. ’ входящий в группу Администраторы схемы set objRootDSE = GetObjecti"LDAP://RootDSE") set objSchemaCont = GetObjectCLDAP://" & _ objRootDSE.Get("schemaNamingContext") ) set objClass - objSchemaCont Create!"classSchema", "cn-rallencorp-SalesUser") objClass.Put "1DAPDisplayName". "rallencorp-SalesUser" objClass.Put "governsld". "1.3.6.1.4.1.999.1.1.28.4" objClass.Put "objectClassCategory", 3 objClass.Put "subClassOf". "top” objClass.Put "adminDescription". "Languages a user speaks” objClass.Put "mayContai n". Array("railencorp-Bui 1di ng”."railencorfr-Theatre") objClass.Setinfo WScrlpt.Echo "Class created" Комментарий Для создания класса нужно добавить в контейнер Schema (Схема) объект class- Schema. Важнейшими атрибутами, которые нужно установить для этого объекта являются: О governsld - OID класса; О objectClassCategory — тип класса; О subClassOf — родительский класс;
10.10. Просмотр атрибутов класса 339 О mayContain и mustContain — списки необязательных и обязательных атрибутов объектов данного класса. Кроме того, необходимо установить атрибут 1 DAPDi spl ayName, которому, как правило, присваивается обычное имя класса (значение атрибута сп) И хотя во многих стандартных классах значения этих двух атрибутов не совпадают, реко- мендуется делать их одинаковыми, что позволит избежать ошибок при ссылке на класс Имеет также смысл установить значение атрибута schemaIDGUID, особенно если вы намерены выполнять какие-либо операции с расширенными правами. Смотрите также В разделе 10.0 приведен перечень атрибутов объекта classSchema, в рецепте 10.3 рассказывается, как получить OID для нового класса, а в рецепте 10.4 — как сге- нерировать для него GUID Ознакомившись с рецептом 10.17, вы получите до- полнительные сведения об объектных классах, а из рецептов 1019и10 22 узнаете соответственно, как установить защиту класса по умолчанию и как выполнить перезагрузку схемы. 10.10. Просмотр атрибутов класса Проблема Требуется просмотреть в Active Directory список атрибутов класса. Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Schema (Схема Active Directory) 2. На левой панели щелкните на контейнере Classes (Классы). 3. На правой панели дважды щелкните на имени интересующего вас класса. 4. Поочередно просмотрите содержимое каждой вкладки. С помощью интерфейса командной строки В следующей команде замените <обычное_имя_класса> обычным именем интересую- щего вас класса (не выводимым именем LDAP): > dsquery * сг\~<обычное_иня_клдсса>.cn=schema.cn=configuration.<корневое_0И_лесд> -scope J base -attr * С помощью сценария на языке VBScript ' Этот код выводит атрибуты заданного объекта classSchema Код функции DisplayAttributes() приведен в рецепте 4.2 (глава 4) ’ ---- SCRIPT CONFIGURATION - ' Присвойте этой переменной обычное имя класса (не отображаемое имя LDAP) strCIassName - ‘'<обычное_имя_класса>'' ’ Например: user
340 Глава 10. Схема Active Directory ’ ---- END CONFIGURATION --- set objRootDSE - GetObject(“LDAP://RootDSE") set objClass - GetObjectC'LDAP://cn-" & strCIassName & & _ obj RootDSE.Get("schemaNamlngContext"У) objClass.Getlnfo WScrlpt.Echo "Properties for " & strClassName DisplayAttributes(objClass.ADsPath) Комментарий Список важнейших атрибутов объекта cl assSchema и их краткое описание приве- дены в табл. 10.1. Смотрите также Как просмотреть атрибуты объекта, вы узнаете из рецепта 4.2 (глава 4), а чем обычное имя отличается от выводимого — из рецепта 10 8. 10.11. Индексирование атрибута Проблема Требуется проиндексировать атрибут, для того чтобы ускорить поиск объектов по его значениям. Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2 На левой панели щелкните на контейнере Attributes (Атрибуты). 3. На правой панели дважды щелкните на атрибуте, который хотите проиндек- сировать. 4. Установите флажок Index this attribute (Индексировать этот атрибут в Active Directory). 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки Для индексирования атрибута можно использовать утилиту Idifde. Создайте LDIF-файл с именем index_attribute.ldf и следующим содержимым: dn: cn-<o6^woejMK_a грибу ra>.cn-schema.cn-conf1gurati on. «корневое 0И леса> changetype: modify replace: searchFlags searchFlags: 1 В Windows 2000, прежде чем приступать к выполнению указанных в этом рецепте действий, нужно разрешить изменение схемы О том, как это сделать, рассказывается в рецепте 10.2.
10.11. Индексирование атрибута Затем выполните такую команду: > Idifde -v -1 -f index_attribute.ldf С помощью сценария на языке VBScript ' Этот код индексирует заданный атрибут ' ----- SCRIPT CONFIGURATION ..... ' Присвойте данной переменной обычное имя атрибута (не выводимое имя LDAP) strAttrName - ~<обычное имя_атрибута>" ' Например: railencorp-LanguagesSpoken ' ----- END CONFIGURATION -------- set objRootDSE - GetObject("LDAP://RootDSE") set objAttr - GetObject("LDAP://err" & strAttrName & & objRootDSE.Get("schemaNamlngContext")) objAttr.Put “searchFlags". 1 objAttr SetInfo WScript Echo "Indexed attribute: “ & strAttrName ПРИМЕЧАНИЕ-------------------------------------------------------------------------------- В решениях с использованием командной строки и сценария на языке VBScript предполагается, что значение атрибута searchFlags не установлено. Поэтому в данный атрибут просто записывается но- вое значение, без учета заданных установок. В рецепте 4.12 (глава 4) приведено более удачное ре- шение, позволяющее заменять не все, а лишь отдельные биты. Комментарий Чтобы проиндексировать атрибут, нужно установить в атрибуте searchFlags объекта attributeSchema бит 1 (0001). Атрибут searchFlags — это набор флагов, представляющих особые свойства атрибута связанные с его поиском, в частности способ индексирования и воз- можность использовать при поиске алгоритм ANR. Список входящих в его состав флагов приведен в табл. 10.4 (см. рецепт 10.7). При указании значения атрибута searchFlags часто требуется установить сразу несколько битов. Например, для ин- дексирования какого-либо атрибута и включения его в набор атрибутов, по кото- рым может производиться поиск с применением алгоритма ANR, атрибуту search- Flags нужно присвоить значение 5 (1 + 4). Для того чтобы найти все индексируемые атрибуты схемы, поиск нужно вы- полнить по критериям, перечисленным ниже: О база — cn=Schema,cn=Conf1gurati on.<корневое_0И_леса>; О фильтр — (&(objectcategory=attnbuteSchema)(searchFlags:l.2.840.113556.1.4 803.=1)); О область поиска — onel evel. Если же нужно найти атрибуты, которые, наоборот, не индексируются, задайте такой фильтр: (&(objectcategory=attri buteSchema)(!(searchFlags:1.2.840 113556.1.4.803:-1))) Смотрите также Из рецепта 4.12 (глава 4) вы узнаете, как можно изменить отдельные флаги в ат- рибутах, представляющих собой набор флагов, а из рецепта W.7 — как добавить
л*ы Глава 10. схема Active Directory новые атрибуты. Ознакомьтесь и с документом MS КВ 243311 (Setting an attri- bute’s searchFlags Property to Be Indexed for ANR). 10.12. Выбор атрибутов, копируемых вместе с учетной записью пользователя Проблема Требуется добавить атрибут в список атрибутов, копируемых при копировании учетной записи пользователя с помощью оснастки Active Directory Users and Com- puters (Active Directory — пользователи и компьютеры). Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели щелкните на контейнере Attributes (Атрибуты). 3. На правой панели дважды щелкните на интересующем вас атрибуте. 4. Установите флажок Attribute is copied when duplicating a user (Копировать атрибут при копировании учетной записи) и щелкните на кнопке ОК. С помощью интерфейса командной строки Для того чтобы задать для атрибута установку, предписывающую копировать ат- рибут при копировании учетной записи, можно воспользоваться утилитой 1 di - fde. Создайте LDIF-файл с именем add_dup._user_attr.ldf и таким содержимым: dn: сп'га11encorp-LanguagesSpoken.cn-=schema,cn-=conf 1gurati on.<корневое_ОИ_леса> changetype-, modify replace: searchFlags searchFlags: 16 Затем выполните следующую команду: > Idifde -v -i -f add_dup_user_attr.ldf С помощью сценария на языке VBScript Этот код добавляет атрибут в список атрибутов. копируемых при копировании учетной записи пользователя ----- SCRIPT CONFIGURATION -- Присвойте данной переменной обычное имя атрибута (не выводимое имя LDAP) strAttrName - п<обычное имя атрибута^’ ' Например: rallencorp-LanguagesSpoken ' ....END CONFIGURATION -..... set objRootDSE - GetObjectC’LDAPJ/RootDSE”) set objAttr - GetObject("LDAP://cn-" & strAttrName & & objRootDSE.Get("schemaNami ngContext")) 1 В Windows 2000, прежде чем выполнять указанные в втом рецепте действия, нужно разрешить изме- нение схемы. О том, как это сделать, рассказывается в рецепте 10.2.
10.13. Выбор атрибутов, по которым будет выполняться ANR-поиск 343 objAttr.Put "searchFlags". 16 objAttr.SetInfо WScript.Echo "New copied attribute: ” & strAttrName ПРИМЕЧАНИЕ------------------------------------------------------------------- В решениях с использованием командной строки и сценария на языке VBScript предполагается, что значение атрибута searchFlags не установлено. Поэтому в данный атрибут просто записывается но- вое значение, без учета имеющихся установок. В рецепте 4.12 (глава 4) приведено более удачное решение, позволяющее заменять не все, а лишь отдельные биты. Комментарий Когда в оснастке Active Directory Users and Computers (Active Directory — пользова- тели и компьютеры) вы выбираете учетную запись пользователя и выполняете для нее команду Сору (Копировать), оснастка запрашивает из схемы список атри- бутов, подлежащих копированию. Включение атрибута в этот список не наклады- вает никаких ограничений и никак не отражается на содержимом каталога. Для того чтобы найти атрибуты, копируемые вместе с учетной записью поль- зователя, задайте критерии поиска, перечисленные ниже: О база — cn=Schema,cn=Configuration,<корневое_ОИ_леса>\ О фильтр — (&(objectcategory= attributeSchema)(searchFlags:l.2.840.113556.1.4.803:=16)); О область поиска — onel evel. Если же нужно найти атрибуты, которые, наоборот, не копируются вместе с учетной записью пользователя, задайте такой фильтр: (&(objectcategory-attri buteSchema)(!(searchFlags:1.2.840.113556.1.4.803:-16))) Смотрите также В рецепте 4.12 (глава 4) рассказывается, как изменять отдельные флаги в атрибу- тах, являющихся наборами флагов, а в рецепте 10.7 — как добавлять в схему но- вые атрибуты. 10.13. Выбор атрибутов, по которым будет выполняться ANR-поиск Проблема Требуется указать, по каким атрибутам можно выполнять поиск с использованием алгоритма ANR. Решение1 С помощью графического пользовательского интерфейса Проиндексируйте атрибут, затем выполните перечисленные далее действия. 1 В Windows 2000, прежде чем выполнять указанные в этом рецепте действия, нужно разрешить изме- нение схемы. О том, как это сделать, рассказано в рецепте 10.2.
344 Глава 10. Схема Active Directory 1. Откройте оснастку Active Directory Schema (Схема Active Directory) 2. На левой панели щелкните на контейнере Attributes (Атрибуты) 3. На правой панели дважды щелкните на атрибуте, который вы хотите отредак- тировать. 4. В окне его свойств установите флажок ANR (Выполнять разрешение неодно- значных имен (ANR)). 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем add_anr_attr.ldf и таким содержимым: dn: cn=*ral1encorp-LanguagesSpoken.cn-schema.cn-conf1gurati on,<корневое_ОИ_леса> changetype modify replace: searchFlags searchFlags: 5 Затем выполните следующую команду: > Idifde -v -i -f add_anr_attr.ldf С помощью сценария на языке VBScript ’ Этот код включает атрибут в список ANR ’ .....- SCRIPT CONFIGURATION --- ' Присвойте данной переменной обычное имя атрибута (не выводимое имя LDAP) strAttrName = "<обычное_иня_атрибута>" ' Например railencorp-LanguagesSpoken ' -----END CONFIGURATION -------- set objRootDSE - GetObjectCLDAP://RootDSE") set objAttr = GetObjectCLDAP://cn=" & strAttrName obj RootDSE.Get("schemaNamingContext")) objAttr.Put "searchFlags". 5 objAttr.Setinfo WScrlpt.Echo "New ANR attribute: " & strAttrName ПРИМЕЧАНИЕ-------------------------------------------------------------------------------- В решениях с использованием командной строки и сценария на языке VBScript предполагается, что значение атрибута searchFlags не установлено. Поэтому в данный атрибут просто записывается но- вое значение, без учета имеющихся установок. В рецепте 4.12 (глава 4) приведено более удачное решение, позволяющее заменять не все, а лишь отдельные биты Комментарий ANR - это эффективный алгоритм поиска с использованием сложных фильтров, содержащих единственный знак равенства. Например, ANR-фильтр (anr=Jim Smith) транслируется в три фильтра О фильтр OR, где каждый атрибут, для которого включен ANR-поиск, сравнивается со значением Jim Smith*;
10.13. Выбор атрибутов, по которым будет выполняться ANR-поиск 345 О фильтр givenName - Jim* AND sn - Smith*; О фильтр givenName - Smith* AND sn - Jim*. Все три фильтра объединяются с помощью операции OR, а результирующее выражение фильтрации испотьзуется Active Directory для выполнения операции поиска. Поскольку все атрибуты, для которых включен поиск с использованием алгоритма ANR, проиндексированы, запрос выполняется быстро Ниже приведен список атрибутов, для которых по умолчанию включается поиск с использованием алгоритма ANR. Первым указывается выводимое имя LDAP, а в скобках — обычное имя' О displ ayName (Di splay-Name); О givenName (Given-Name), О legacyExchangeDN (Legacy-Exchange-DN); О msDS-AdditionalSamAccountName (ms-DS-Additional -Sam-Account-Name); О physical DelIveryOfficeName (Physical-Delivery-Office-Name); О name (RDN); О sAMAccountName (SAM-Account-Name); О sn (Surname). ПРИМЕЧАНИЕ-------------------------------------------------------------------------- Атрибут msDS-AdditionalSamAccountName был включен в приведенный выше список только в Win- dows Server 2003. Но прежде чем включить атрибут в список ANR, его обязатетьно нужно про- индексировать. Поиск с использованием алгоритма ANR рассчитан на быстрое выполнение, и если какой-либо атрибут окажется не проиндексированным, это очень сильно замедлит поиск. Для того чтобы найти атрибуты, для которых включен поиск с использовани- ем алгоритма ANR, задайте следующие критерии отбора. О база — cn=Schema.cn=Configuration.<корневое 0И_леса>; О фильтр — (&(objectcategory-attributeSchema)(searchFlags T.2.840.113556 1 4.803:°4)); О область поиска — onel evel. Если же нужно найти атрибуты, для которых поиск с использованием алгоритма ANR не включен, задайте такой фильтр: (&(objectcategory=attributeSchema)(! (se- archFlags:!.2 840.113556.1.4.803.=4))) Смотрите также В рецепте 4.12 (глава 4) рассказывается, как можно изменить отдельные флаги в атрибутах, представляющих собой набор флагов, а в рецепте 10.7 — как доба- вить в схему новые атрибуты. Просмотрите документы MS КВ 243299 (Ambi- guous Name Resolution for LDAP in Windows 2000) и MS KB 243311 (Setting an attribute’s searchFlags Property to Be Indexed for ANR).
346 Глава 10. Схема Active Directory 10.14. Добавление или удаление атрибута из глобального каталога Проблема Требуется добавить атрибут в глобальный каталог или удалить его оттуда. Решение1 С помощью графического пользовательского интерфейса 1. Откроите оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели щелкните на контейнере Attributes (Атрибуты). 3 На правой панели дважды щелкните па нужном атрибуте 4. Установите флажок Replicate this attribute to the Global Catalog (Репликация этого атрибута в глобальный каталог), чтобы добавить атрибут в глобальный ката- лог, или снимите его - в таком случае атрибут будет удален из глобального ка- талога. 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки Атрибут можно добавить в глобальный каталог с помощью утилиты Idifde. Для этого нужно создать LDIF файл с таким содержимым: dn: сг\’‘<сбычное_имя_атрибута>.cn^schema.cn-configuration.<корневое_0И леса> changetype: modify repl асе: 1sMemberOfParti alAttributeSet isMemberOfPartialAttri buteSet: TRUE а затем выполнить следующую команду (предполагается что файл имеет имя add_gc_attr.ldf) > Idifde -v -i -f add_gc_attr.ldf С помощью сценария на языке VBScript Этот код добавляет атрибут в глобальный каталог ' ---- SCRIPT CONFIGURATION -- Присвойте данной переменной обычное имя атрибута (не зтображаемое имя LDAP) strAttrName - "<обычное_имя_атрибута>" ’ Например: surname Присвойте значение TRUE, чтобы добавить атрибут в глобальный каталог, или значение FALSE, чтобы его удалить - boolAddtoGC = TRUE ' ---- END CONFIGURATION -.... set objRootDSE - GetObject('LDAP://RootDSE") set objAttr - GetObjectCLOAP //cn-" & strAttrName & & _ objRootDSE.Get("schemaNamlngContext“)) 1 В Windows 2000, прежде чем выполнять указанные в этом рецепте действия, нужно разрешить из- менение схемы О том, как это сделать, рассказано в рецепте 10 2
10.14. Добавление или удаление атрибута из глобального каталога 347 objAttr.Put "isMemberOfPartialAttributeSet". boolAddtoGC objAttr.Setinfo WScrlpt.Echo "Added attribute to GC: " & strAttrName Комментарий Каждый контроллер домена в лесу содержит копию раздела своего домена, а также копии разделов конфигурации и схемы всего леса. Являясь же сервером глобаль- ного каталога, он содержит и частичные, доступные только для чтения, копии всех объектов других доменов леса. Глобальный каталог используется в тех случаях, когда нужно выполнить поиск по нескольким контекстам именования. Учтите, что в нем хранится подмножество атрибутов объектов, то есть частичная реплика. В набор атрибутов, реплицируемых в глобальный каталог, включают либо атрибуты, которые будут использоваться для отбора данных, либо те, которые должны быть возвращены в результате поиска в глобальном каталоге. Для того чтобы включить атрибут в глобальный каталог, нужно установить атрибут 1 sMemberOfParti tai Set объекта attributeSchema в значение TRUE, а для того чтобы удалить его из такового — в значение FALSE. ПРИМЕЧАНИЕ------------------------------------------------------------------------ В Windows 2000 после каждой операции добавления атрибута в каталог выполнялась полная син- хронизация содержимого глобального каталога на всех его серверах. В системах с большим числом доменов в этом случае между серверами передавалось огромное количество данных. В Windows Server 2003 указанный недостаток был исправлен и полная синхронизация более не выполняется. Отметим, что удаление атрибута из глобального каталога не вызывало полной синхронизации даже в Windows 2000. Для того чтобы найти атрибуты, относящиеся к глобальному каталогу, задайте критерии поиска, перечисленные ниже: О база — cn=Schema. cn=Confi gurati on, <корневое_0И_лесз>', О фильтр — (&(objectcategory=attributeSchema)(isMenterOfPartialAttributeSet-TRUE)); О область поиска — onelevel. Если же нужно найти атрибуты, которые не входят в глобальный каталог, задайте такой фильтр: (1sMemberOfParti а1Attr1buteSet-FALSE) Смотрите также Документы MS КВ 229662 (How to Control What Data Is Stored in the Global Ca- talog), MS KB 230663 (HOW TO: Enumerate attributes Replicated to the Global Catalog), MS KB 232517 (Global Catalog attributes and Replication Properties), MS KB 248717 (How to Modify attributes That Replicate to the Global Catalog), MS KB 257203 (Common Default attributes Set for Active Directory and Global Catalog) и MS KB 313992 (HOW TO: Add an Attribute to the Global Catalog in Windows 2000).
348 Глава 10. Схема Active Directory 10.15. Поиск нереплицируемых и вычисляемых атрибутов Проблема Требуется найти атрибуты, которые не реплицируются, или же атрибуты, значения которых не сохраняются в Active Directory, а вычисляются динамически. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя контроллера домена (или оставьте это поле пустым — в таком случае связь будет установлена без участия сервера). 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя данного домена, после чего щелкните на кнопке ОК. 7. Выполните команду Browse ► Search (Поиск ► Найти). 8. В поле BaseDN (Отличительное имя базы) введите отличительное имя контейнера Schema (Схема), например: cn-schema.cn-configuration, dc=ra11encorp,dc-com. 9. В области Scope (Область поиска) установите переключатель в положение One Level (Один уровень). 10. Найдите нереплицируемые атрибуты, воспользовавшись фильтром (&(object- category=attri buteSchema)(systemFlags:1.2.840.113556.1.4.803:=1)). И. Для поиска многозначных атрибутов введите фильтр (&(objectcategory=at- tributeSchema)(systemFlags:1.2.840.113556. 1.4.803:=4)). 12. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки Поиск нереплицируемых атрибутов выполняется с применением такой команды: > dsquery * cn-schema,cn-configuration.<KOpweBoe_0/0?eca> -scope onelevel -attr "cn"j -filter "(&(obj ectcategory=attri buteSchema)(systemF1ags:1.2.840 113556.1.4.803:-1))" Для поиска многозначных атрибутов введите следующую команду: > dsquery * cn=schema.cn-configuration,<корневое_ОИ_леса> -scope onelevel -attr "cn"J -filter “(&(objectcategory-attributeSchema)(systemFlags:1.2.840.113556.1.4.803:-4))" С помощью сценария на языке VBScript Этот код выводит список нереплицируемых и вычисляемых атрибутов set objRootDSE = GetObject(’,LDAP://RootDSE") strBase - ”<LDAP://" & objRootDSE.GetCSchemaNamingContext") & strFilter - ”(&(objectcategory-attributeSchema)" & "(systemFlags:1.2.840.113556.1.4.803:-1));"
хи.хэ. ионик ncpciи1ицируемыд и вычисляемых aipnuyioe strAttrs = "сп:" strScope "onelevel" set objConn » CreateObjectCADODB. Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS - objConn.ExecuteCstrBase & strFilter & strAttrs & strScope) objRS.MoveFirst WScript.Echo "Nonreplicated attributes: " while Not objRS.EOF Wscrlpt.Echo " ” & objRS.Flelds(O).Value objRS.MoveNext wend strFilter - "(&(objectcategory-attributeSchema) " & "(systemFlags: 1.2.840.113556.1.4.803-4));" set objRS - objConn.Execute(strBase & strFilter & strAttrs & strScope) ObjRS.MoveFirst WScript.Echo "" WScript.Echo "Constructed attributes: " while Not objRS.EOF Wscrlpt.Echo ” " & objRS.Fields(O).Value objRS.MoveNext wend Комментарий Атрибут systemFlags объекта attributeSchema содержит значения нескольких свойств атрибута, в том числе признак его репликации на контроллеры домена и флаг, указывающий, что значение атрибута вычисляется Active Directory динамически. После изменения значений большинство атрибутов объекта реплицируется на другие контроллеры домена. Однако есть и такие атрибуты, которые не репли- цируются, а хранятся только локально. Нереплицируемым, в частности, является атрибут lastLogon объектов user и computer, в котором хранится дата и время по- следнего подключения к домену. Когда пользователь или компьютер подключается к Active Directory, контроллер домена, выполнивший аутентификацию, записы- вает текущую дату и время в атрибут 1 astLogi п, но это значение не реплицируется на другие контроллеры домена. Значения составных атрибутов вычисляются Active Directory автоматически; их нельзя устанавливать вручную. В качестве примера в данном случае можно привести атрибут msDS-Approx-Immed-Subordinates, в котором содержится значение, определяющее приблизительное количество дочерних объектов в контейнере (вве- ден в Windows Server 2003). Если бы вам пришлось самостоятельно поддержи- вать указанный атрибут, работа всей системы сильно замедлялась бы, но, к сча- стью, Active Directory делает это автоматически. Один из недостатков вычисляемых атрибутов заключается в том, что по ним нельзя производить поиск. Например, невозможно найти все контейнеры, содер- жащие более 10 объектов (то есть выполнить поиск по критерию msDS-Approx-Im- med-Subordinates>10). Результатом такой попытки будет вывод сообщения об ошибке. А вот результат запроса может содержать значения вычисляемых атрибутов. Для того чтобы найти все нереплицируемые или вычисляемые атрибуты, нужно задать поразрядный фильтр LDAP, указав в нем значения соответствующих флагов
। лава iu. схема Mcuve uireciory из атрибута systemFlags объекта attributeschema. Значение 1 указывает, что атрибут не реплицируется, а значение 4 — что данный атрибут является вычисляемым. Смотрите также В рецепте 4 9 (глава 4) рассказывается о выполнении поразрядного поиска. 10.16. Поиск связанных атрибутов Проблема Требуется найти связанные между собой атрибуты. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP 2. Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя контроллера домена (или оставьте это поле пустым — в таком случае связь будет установлена без участия сервера). 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя данного домена и щелкните на кнопке ОК. 7. Выполните команду Browse > Search (Поиск ► Найти). 8. В поле BaseDN (Отличительное имя базы) введите отличительное имя контей- нера Schema (Схема), например: cn=schema.cn-configuration, dc=ral 1 encorp.dc-com. 9. В области Scope (Область поиска) установите переключатель в положение One Level (Один уровень). 10 Для поиска связанных атрибутов задайте фильтр’ (&(objectcategory-attributeSchema)(1i nki d-*)) И. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки > dsquery * cn-schema.cn=configuration.«корневоеJW_/?eca> -scope onelevel -fllteru "(&(objectcategory=attributeSchema)(11nkid=*))" -attr cn linkID С помощью сценария на языке VBScript Этот код выводит список связанных между собой атрибутов и соответствующие значения их атрибута linkID set ObjRootDSE = GetObjectCLDAP://RootDSE") strBase - "<LDAP://" & objRootDSE.GetC'SchemaNannngContext") & strFilter - "(&(objectcategory-attributeSchema)(linkid“*))," strAttrs •= "cn.linkid;" strScope = ’’onelevel" set objConn - CreateObjectC'ADODB.Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider"
1U. 1 /. 11ОИСК ClpyKiypHblX, dULipah.I ПЫХ И ULUUblX MOLLUD set objRS - objConn.Execute(strBase & strFilter & strAttrs & strScope) objRS.MoveFirst while Not objRS.EOF Wscript.Echo objRS.Fields(l).Value &“:'*& objRS.Fields(O).Value objRS.MoveNext wend Комментарий В Active Directory многие атрибуты связаны между собой. Поэтому, если вы при- своите, скажем, атрибуту manager одного объекта user отличительное имя другого объекта user, в атрибут reports второго объекта будет автоматически записано от- личительное имя первого Атрибуты manager и reports являются связанными ме- жду собой, причем первый из них, значение которого устанавливается вручную, на- зывается прямой ссылкой, а второй — обратной. Еще один характерный пример связан с членством объектов в группах Атрибут member объекта group представляет прямую ссылку, а атрибут memberOf объекта, входящего в группу (например, объекта user), — обратную ссылку. Для того чтобы найти связанные между собой атрибуты, нужно выполнить поиск по значению атрибута link ID объекта attributeschema. Если атрибут пред- ставляет прямую ссылку, его атрибут linkID содержит четное положительное число В атрибуте li nk ID парного ему атрибута содержится число, которое на еди- ницу больше. Например, атрибут linkID атрибута manager содержит значение 42, а атрибут linkID атрибута reports — значение 43. 10.17. Поиск структурных, абстрактных и особых классов, а также классов типа 88 Проблема Требуется просмотреть список структурных, абстрактных и особых классов, а также классов типа 88. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. Щелкните на левой панели на контейнере Classes (Классы), и на правой пане- ли отобразится список классов. Тип каждого класса будет указан в столбце Туре (Тип). Однако отсортировать классы по типам посредством щелчка на этом столбце невозможно. С помощью интерфейса командной строки > dsquery * cn-schema.cn-configuration,<корневое_ОИ_лесд> -limit 0 -scope onelevelJ -filter "(objectcategory-classSchema)" -attr 1DAPDisplayName objectclasscategory
I лова xu. uxeMd hl live uiieuiuiy С помощью сценария на языке VBScript ' Этот код выводит список классов заданного типа • ----- SCRIPT CONFIGURATION ------ ' Присвойте следующим константам значения TRUE или FALSE, в за1исикости от того. ‘ хотите ли вы включить в список классы соответствующего типа boolShowStructural - TRUE boolShowAuxiliary = TRUE boolShowAbstract - TRUE boolShow88 - TRUE ' ----- END CONFIGURATION --------- set objRootDSE •= GetObject("LDAP://RootDSE”) set objSchemaCont - GetObject(*'LDAP://cn-scherna," & _ obj RootDSE.Get("conf i gurati onNami ngContext“)) objSchemaCont.Filter = Array("classSchema”) WScript.Echo "Loading classes, this will take a few seconds." for each objClass in objSchemaCont WScript.StdOut WriteC.") if objClass.GetCobjectCl assCategory") » 0 then str88 E str88 & vbTab & objClass. GetC IDAPDi spl ayName") & vbCrlf el seif objClass.GetCobjectCl assCategory") - 1 then strStruct - strStruct & vbTab & _ objClass.Get("IDAPDisplayName”) & vbCrlf el seif objClass. GetCobjectCl assCategory”) - 2 then strAbst = strAbst & vbTab & objClass.Get("IDAPDisplayName") & vbCrlf el seif objClass. GetCobjectCl assCategory") - 3 then strAux = strAux & vbTab & objClass.GetClOAPDisplayName") & vbCrlf else WScrlpt.Echo "Unknown class type- ” & _ objClass.GetCIDAPDisplayName") & vbCrlf end if next WScript.Echo vbCrlf if boolShowStructural = TRUE then Wscript.Echo "Structural Classes: " WScrlpt.Echo strStruct '.’Seri pt. Echo end if if boolShowAbstract = TRUE then Wscript.Echo "Abstract Classes: ” WScript.Echo strAbst WScript.Echo end if If boolShowAuxiliary = TRUE then WScrlpt.Echo "Auxiliary Classes: ” WScript.Echo strAux WScript.Echo end if if boolShow88 = TRUE then WScript.Echo "88 Classes: " Wscript.Echo str88 Wscript.Echo end if
10.18. Поиск атрибутов класса 353 Комментарий Active Directory поддерживает четыре типа классов объектов: 88, Structural (Структурный), Abstract (Абстрактный) и Auxiliary (Особый). Их описание при- ведено в табл. 10.6. Тип конкретного класса указан в атрибуте objectCl assCategory соответствующего объекта cl assSchema. Таблица 10.6. Типы классов схемы Active Directory _ ________ Имя Значение Описание 88 0 Унаследованный тип классов, определенный в стандарте Х.500. Использовать его для создания новых классов не рекомендуется Structural 1 Предназначен для создания объектов. Может состоять из абстрактных, особых и других структурных классов Abstract 2 Используется для определения групп атрибутов, которые могут включаться в определения других абстрактных или структурных классов. Создавать на его основе объекты невозможно Auxiliary 3 Используется как набор атрибутов, который можно включать в абстрактные, структурные и другие особые классы 10.18. Поиск атрибутов класса Проблема Требуется просмотреть список обязательных или необязательных атрибутов класса. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели щелкните на контейнере Classes (Классы). 3. На правой панели дважды щелкните на имени интересующего вас класса. 4. В окне его свойств откройте вкладку Attributes (Атрибуты) и просмотрите атрибуты. С помощью интерфейса командной строки > dsquery * cne<o6b/</woe_wH«_x/7acca>,cn-schenia.cn-configuration.<KopweBoe_OH_neca> -1J -scope base -attr mayContain mustContain systemMayContain systemMustContain С помощью сценария на языке VBScript ' Этот код выводит список обязательных и необязательных атрибутов класса ' ..... SCRIPT CONFIGURATION - ' Присвойте данной переменной обычное имя класса (не выводимое имя ЮАР) strCIassName - "<обычное_иня_класса>" ' Например: Surname 1 ----- END CONFIGURATION ----
354 Глава 10. Схема Active Directory set objRootDSE - GetObjectC"LDAP://RootDSE") set objClass - GetObjectC"LDAP://cn-" & strCIassName & & _ objRootDSE.Get("schemaNami ngContext")) WScript.Echo "Class: " & strCIassName & vbCrlf ' На случай, если атрибут не установлен on error resume next WScript.Echo "mayContain:" for each strVal in objClass.Get("mayContain") WScript.Echo vbTab & strVal next WScript.Echo vbCrlf & "systemMayContain:" for each strVal in objClass.Get("systemMayContain") WScript.Echo vbTab & strVal next WScript.Echo vbCrlf & "mustContain:" for each strVal in objClass.Get("mustContain”) WScript.Echo vbTab & strVal next WScript.Echo vbCrlf & "systemMustContain:" for each strVal in objClass.Get("systemMustContain") WScript.Echo vbTab & strVal next Комментарий Атрибуты mayContain и systemMayContain содержат список необязательных атрибутов определенного класса, а атрибуты mustContain и systemMustContain — список его обязательных атрибутов. Значения атрибутов systemMayContain и systemMustContain Active Directory устанавливает автоматически, и изменять их самостоятельно вы не сможете. Добавляя имена атрибутов в атрибутmustContain существующего класса, будьте очень внимательны, поскольку объекты, в которых заданные вами атрибуты не установлены, становятся недействительными. Следует отметить, что в каждом из приведенных выше решений выводятся только те атрибуты, которые определены явно. Имена унаследованных атрибутов, определенных в классах-предках, не отображаются. 10.19. Изменение параметров безопасности класса Проблема Требуется изменить используемые по умолчанию параметры безопасности, уста- навливаемые для создаваемых объектов этого класса.
10.20. Деактивизация классов и атрибутов 355 Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели откройте контейнер Classes (Классы). 3. На правой панели выполните двойной щелчок на имени нужного класса. 4. В окне свойств класса откройте вкладку Default Security (Параметры безопас- ности по умолчанию) и произведите необходимые установки. 5. Щелкните на кнопке ОК. Комментарий С каждым создаваемым в Active Directory объектом связывается используемый 'по умолчанию дескриптор безопасности (Security Descriptor, SD), а кроме того, к нему применяются установки безопасности родительского контейнера. Ис- пользуемый по умолчанию дескриптор безопасности хранится в атрибуте defa- ultSecurityDescriptor объекта cl assSchema. Если изменить значение этого атрибута, каждый создаваемый объект будет получать заданный вами новый дескриптор безопасности, но у созданных ранее объектов дескриптор останется прежним. Смотрите также Документ MS КВ 265399 (HOW ТО: Change Default Permissions for Objects That Are Created in the Active Directory). 10.20. Деактивизация классов и атрибутов Проблема Требуется деактивизировать класс или атрибут в схеме Active Directory, поскольку он более не понадобится. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели откройте контейнер Classes (Классы) или Attributes (Атрибуты). 3. Дважды щелкните на имени класса или атрибута, который необходимо деак- тивизировать. 4. В диалоговом окне свойств на вкладке General (Общие) снимите флажок Class is active (Этот класс активен) или Attribute is active (Этот атрибут активен) и щелкните на кнопке ОК. 1 В Windows 2000, прежде чем выполнять указанные в этом рецепте действия, нужно разрешить изме- нение схемы. О том, как это сделать, рассказано в рецепте 10.2.
356 Глава 10. Схема Active Directory С помощью интерфейса командной строки Деактивизацию класса или атрибута можно выполнить с помощью утилиты 1 di fde. Создайте LDIF-файл с именем deactivate class.ldf и таким содержимым: dn- сп*<обычное_имя_клдссд или_атрибута> cn-schema cn-configuration <корневое_ОИ_леса> changetype: modify “ replace: isDefunct isDefunct: TRUE после чего выполните следующую команду: > Idifde -v -i -f deactivate_class.ldf С помощью сценария на языке VBScript ' Этот код деактивизирует класс или атрибут ' ..... SCRIPT CONFIGURATION . strName - "<обычное_имя_класса_или атрибута>" ' Например: railencorp-LanguagesSpoken .....END CONFIGURATION...--- set objRootDSE - GetObject!"LDAP://RootDSE") set objSchemaObject - GetObject!"LDAP://cn«" & strName & _ objRootDSE.Get("schemaNamlngContext")) objSchemaObject.Put "isDefunct". TRUE obj Schemaobject.SetInfо WScrlpt.Echo “Schema object deactivated “ & strName Комментарий Active Directory не позволяет удалять классы и атрибуты из схемы но дает воз- можность их деактивизировать, или отключать. Однако прежде чем это можно будет сделать, следует убедиться в отсутствии в каталоге объектов данного класса. Если нужно деактивизировать атрибут, следует проверить, не используется ли он в одном из классов — то ли как обязательный, то ли как необязательный. После этого класс или атрибут можно отключить, присвоив атрибуту 1 sDefunct представ- ляющего его объекта значение TRUE. Позднее при желании его можно будет снова активизировать, присвоив указанному атрибуту значение FALSE. В Windows Ser- ver 2003 Active Directory, если атрибут или класс отключен, вы можете его даже переопределить (Таким образом обеспечивается возможность повторного ис- пользования имен классов или атрибутов ) 10.21. Переопределение классов и атрибутов Проблема Требуется переопределить ранее созданный класс или атрибут. Решение1 Для того чтобы переопределить класс или атрибут, нужно сначала деактивизиро- вать таковой, присвоив атрибуту isDefunct представляющего его объекта значение 1 Для выполнения этого рецепта необходимо, чтобы функциональный уровень леса соответствовал Windows Server 2003
10.22. Перезагрузка схемы 357 TRUE (см. рецепт 10.20). Прежде чем деактивизировать класс, нужно убедиться в отсутствии в каталоге объектов этого класса, а прежде чем деактивизировать атрибут — проверить, не используется ли он в одном из классов (то есть не входит ли в списки systemMustContain, mustContain, systemMayContain и mayContain). После деактивизации класса или атрибута можно изменить выводимое имя LDAP, OID (атрибуты governsID и attribute ID), синтаксис (атрибуты attributeSyntax и oMSyntax) и значение атрибута schemalDGUID. Единственным атрибутом, не подлежащим из- менению, является обычное имя (сп) класса или атрибута. Комментарий Возможность переопределять объекты схемы появилась только в Windows Server 2003. Хотя удалять объекты из схемы по-прежнему нельзя1, в тех случаях, когда потребность в этом связана с необходимостью их переопределения, теперь это можно делать без выполнения операции удаления. Переопределение объекта выпол- няется, в частности, в том случае, если вы допустили ошибку при вводе OID (во вре- мя заполнения атрибутов governsID и attributed) либо выводимого имени LDAP или же когда известно, что созданный ранее атрибут более не понадобится. Имя такого (ненужного) атрибута можно использовать повторно, определив для него новый синтаксис. Смотрите также В рецепте 10.20 рассказывается, как деактивизировать классы и атрибуты. 10.22. Перезагрузка схемы Проблема Требуется выполнить перезагрузку кэша схемы, чтобы вступили в силу внесенные в нее изменения. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели щелкните правой кнопкой мыши на элементе Active Directory Schema (Схема Active Directory) и выберите в открывшемся контекстном меню команду Reload the Schema (Перезагрузить схему). 1 В Windows 2000 с пакетом Service Pack до версии 3 такая возможность существует. Более полную информацию об этом вы сможете найти по адресу. http-.//vww.wlnnefcmag.com/Artides/Index.cfm?Artide- ID=27096.
358 Глава 10. Схема Active Directory С помощью интерфейса командной строки Перезагрузку схемы можно выполнить с помощью утилиты Idifde. Создайте LDIF-файл с именем reload.ldf и таким содержимым: dn: changetype: modify add schemaUpdateNow schemaUpdateNow: 1 после чего выполните следующую команду: > Idifde -v -i -f reload.ldf С помощью сценария на языке VBScript set objRootDSE - GetObjectCLDAP://dcl/RootDSE") objRootDSE.Put "schemaUpdateNow". 1 objRootDSE.Setinfo WScript.Echo "Schema reloaded" Комментарий Каждый контроллер домена поддерживает в памяти полную копию схемы, благо- даря чему доступ к ней осуществляется намного быстрее. Эта копия называется кэшем схемы. Когда вы расширяете схему на хозяине схемы, вносимые изменения записываются в кэш, но не на диск. Запись на диск производится автоматически через каждые пять минут. Эту операцию можно выполнить и вручную либо про- граммным путем, установив атрибут schemaUpdateNow объекта RootDSE на хозяине схемы. Как только вы это сделаете, все внесенные в схему изменения будут запи- саны на диск. Ускорить процесс обновления схемы имеет смысл в том случае, если вы хотите дополнить схему еще одним расширением, в котором используются расширения, добавленные ранее (например, создать класс, содержащий только что созданный атрибут). Если ваш сценарий создаст атрибут и сразу же после этого создаст класс с его использованием, вы получите сообщение об ошибке, в котором будет сказано, что такого атрибута не существует Поэтому сначала нужно создать атрибут, пе- резагрузить схему, а уж затем создавать класс. Вот как выглядит LDIF-код, вы- полняющий такую работу: dn: cn-ral 1encorp-TestAttr.cn=schema.cn-confi guration,dc=ral1encorp.dc-com changetype: add objectclass: attributeschema iDAPDIsplayName: railencorp-TestAttr attributeld: 1.3 6 1.4.1.999 1 1.28.312 oMSyntax: 20 attributesyntax: 2.5.5.4 isSingleValued: FALSE searchFlags: 1 dn: changetype: modify add: schemaUpdateNow schemaUpdateNow: 1
10.22. Перезагрузка схемы 359 dn: cn-ral1encorp-TestClass.cn-schema.cn-configuration.dc-ral1encorp.dc-com changetype: add objectclass: classSchema 1DAPDi splayName ral1encorp-TestClass governsld: 1 3.6.1 4.1.999.1.1.28.311 subClassOf: top objectClassCategory: 3 mayContain: railencorp-TestAttr Смотрите также В рецепте 10.7 рассказывается о добавлении в схему нового атрибута, а в рецеп- те 10.9 — о добавлении в нее нового класса.
Топология сети 11.0. Введение Для того чтобы Active Directory могла оптимальным образом организовывать ре- пликацию информации между контроллерами домена, обеспечивать выбор кон- троллера для обслуживания очередного запроса от клиента на вход в систему, ей должна быть доступна информация о топологии сети. Такого рода данные пред- ставлены в системе в виде иерархии объектов, отражающей структуру сети. На основании этой информации генерируется топология репликации, то есть схема подключений контроллеров домена, используемая при обмене репликами данных каталога. На высшем уровне иерархии расположены объекты site, каждый из которых представляет сайт — группу высокоскоростных сегментов локальной сети Сайт может состоять из одной или нескольких подсетей, представленных объектами subnet — подразделениями сети IP, каждое из которых обладает уникальным сетевым адресом. Основываясь на IP-адресе клиентского компьютера, Active Di- rectory может определить, к какой подсети и к какому сайту относится опреде- ленный клиент. Сайты соединяются между собой посредством связей, представ- ленных объектами siteLink, которые являются аналогами соединений глобальной сети Наконец, каждый контроллер домена в составе сайта содержит один или не- сколько объектов connection, определяющих соединения с другими контроллерами домена, используемые для репликации. Описанные объекты топологии сайта содержатся в контейнере Sites (Сайты) раздела конфигурации. На рис. 11.1 иерархия топологии сайта показана в том виде, как она представлена в окне оснастки Active Directory Sites and Services (Active Directory — сайты и службы). Контейнер Sites (Сайты) содержит контейнеры отдельных сайтов и контейнеры, в которых хранятся объекты, определяющие связи сайтов (cn=Inter-site Transports), а также подсети (cn=Subnets) Каждый сайт представлен тремя объектами. Первый из них называется NTDS Site Settings (Параметры сайта NTDS), и его атрибуты представляют параметры репликации, действующие на уровне сайта. Второй объект, License Site Settings (Лицензионные параметры сайта), может использоваться для связи компьютеров, входящих в состав сайта, с определенными серверами лицензирования. В третьем, - контейнере, Servers (Серверы), содержатся объек- ты server, каждый из которых соответствует одному контроллеру домена, входя- щему в состав данного сайта, или другому серверу, который должен быть пред- ставлен в топологии сайта (например, серверу DFS).
11.0. Введение JOI Рис. 11.1. Иерархия топологии сайта Объект server может содержать объект NTDS Settings, или nTDSDSA (Параметры NTDS). Его наличие отличает контроллеры домена от рядовых серверов Атрибуты объекта NTDS Settings используются при настройке репликации для заданного контроллера домена. Он может содержать один или несколько объектов nTDSCon- nection, определяющих репликационные соединения между контроллерами домена. Анатомия объектов, представляющих топологию сайта Информация о важнейших атрибутах объектов, отражающих топологию сайта, представлена в табл. 11.1-11.7. Таблица 11.1. Атрибуты объекта site Атрибут Описание СП Относительное отличительное имя объекта. Этот атрибут содержит имя сайта (например; Raleigh) gpLink Список относящихся к сайту объектов групповой политики с указанием их приоритетов siteObjectBL Многозначный атрибут, содержащий список отличительных имен подсетей, которые связаны с данным сайтом Таблица 11.2. Атрибуты объекта nTDSSiteSettings Атрибут Описание сп Относительное отличительное имя объекта, всегда содержит строку NTDS Site Settings 1nterSiteTopologyGenerator Отличительное имя объекта NTDS Settings (Параметры NTDS) текущего генератора межсайтовой топологии (Inter-Site Topology Generator, ISTG) продолжение^
362 Глава 11. Топология сети Таблица 11.2 (продолжение) Атрибут Описание msDS-Preferred-GC-Site Если включено кэширование информации универсальных групп, данный атрибут содержит отличительное имя сайта, с которого контроллеры домена берут информацию для обновления кэша. Этот атрибут является нововведением Windows Server 2003. См. также рецепт 7.9 (глава 7) options Набор флагов, определяющих, включено ли кэширование информации универсальных групп, отключена ли транзитивность связей сайтов и игнорируется ли их расписание. См. также рецепт 11.11 schedule Двоичная строка, в которой хранится используемое по умолчанию расписание репликации Таблица 11.3. Атрибуты объекта subnet Атрибут Описание СП Относительное отличительное имя объекта. Этот атрибут содержит номер и битовую маску подсети (например 10 1.3 0/24) siteobject Отличительное имя объекта site, с которым связана подсеть Таблица 11.4. Атрибуты объекта siteUnk Атрибут Описание СП Относительное отличительное имя объекта. Данный атрибут содержит имя связи cost Число, определяющее стоимость связи сайтов. См. также рецепт 11,10 repl Interval Интервал репликации в минутах schedule Двоичная строка, содержащая расписание репликации для связей сайтов sitelist Многозначный атрибут для храпения списка отличительных имен сайтов, соединенных посредством данной связи. См также рецепт 11.8 Таблица 11.5. Атрибуты объекта server Атрибут Описание Ьг1dgeheadTransportLi st Многозначный атрибут, содержащий список транспортных протоколов (например, IP или SMTP), для которых данный сервер определен как главный СП Относительное отличительное имя объекта. Этот атрибут содержит имя хоста данного сервера dNSHostName Полное доменное имя сервера. Active Directory сама поддерживает данный атрибут serverReference Отличительное имя объекта computer, содержащегося в каталоге в одном из разделов домена
11.0. Введение зоз Таблица 11.6. Атрибуты объекта nTDSDSA Атрибут Описание СП Относительное отличительное имя объекта Этот атрибут всегда содержит строку NTDS Settings i invocation ID GUID, представляющий DIT-файл (ntds.dit) на контроллере домена hasMasterNCs Многозначный атрибут, содержащий список доступных для записи разделов каталога (за исключением разделов приложений), хранящихся на контроллере домена hasPartialReplicaNCs Многозначный атрибут, содержащий список доступных только для чтения разделов каталога, хранящихся на контроллере домена. Заполняется только в том случае, если контроллер домена является сервером глобального каталога msDS-Behavior-Version Число, представляющее функциональный уровень контроллера домена (то есть его операционную систему). Атрибут является нововведением Windows Server 2003 msDS-HasDcmannNCs Отличительное имя доступного для записи раздела домена, хранящегося на контроллере домена. Атрибут является нововведением Windows Server 2003 msDs-HasInstanti atedNCs Список всех разделов каталога, хранящихся на контроллере домена Атрибут является нововведением Windows Server 2003 msDS-hasPartlalReplicaNCs Многозначный атрибут, содержащий список отличительных имен доступных только для чтения разделов каталога, которые хранятся на контроллере домена. Заполняется только в том случае, если контроллер домена служит сервером глобального каталога. Атрибут является нововведением Windows Server 2003 msDS-hasMasterNCs Многозначный атрибут, содержащий список отличительных имен доступных для записи разделов каталога и разделов приложений, которые хранятся на контроллере домена. Атрибут является нововведением Windows Server 2003 options Набор битовых флагов, определяющих, в частности, является ли контроллер домена сервером глобального каталога queryPolicydbject Если этот атрибут установлен, он содержит отличительное имя объекта политики запросов LDAP, применяемой к контроллеру домена
JO4 Глава 11. Топология сети Таблица 11.7. Атрибуты объекта nTDSConnecbon Атрибут Описание СП Относительное отличительное имя объекта Для подключений, сгенерированных средством проверки согласованности знаний (Knowledge Consistency Checker, КСС), этот атрибут содержит идентификатор GUID enabledConnection Логическое значение, указывающее, что подключение доступно для использования fromServer Отличительное имя объекта NTDS Settings (Параметры NTDS) контроллера домена, который использует подключение для репликации ms -DS-ReplicatesNCReason Многозначный атрибут, содержащий список кодов причин создания данного подключения. На каждый раздел каталога, для которого используется данное подключение, в атрибуте задается по одному элементу options Битовый флаг, значение 1 указывает, что подключение создано с помощью КСС, а значение 0 — что подключение создано вручную. См также рецепт 11.22 schedule Двоичная строка представляющая расписание репликации для связи сайтов transportType Отличительное имя объекта transport (например: IP или SMTP), используемого для подключения и представляющего транспортный протокол 1.1. Создание сайта Проблема Требуется создать в Active Directory новый сайт. Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Sites and Services (Active Directory - сайты и службы). 2 . Щелкните правой кнопкой мыши на контейнере Sites (Сайты) и выберите в открывшемся контекстном меню команду New Site (Новый сайт) 3 В поле Name (Имя) введите имя нового сайта. 4 . В поле Link Name (Имя объекта связи) укажите объект связи сайтов 5 Дважды щелкните на кнопке ОК.
11.1. Создание сайта 365 С помощью интерфейса командной строки Создайте LDIF-файл с именем create_site.ldf и следующим содержимым: dn сл-<жя_сайга>.cn-sites,cn-configuration.<Kopwesoe_0/L./7eca> changetype: add objectclass: site dn cn-Licensing Site Settings,сп-<имя_сайга>.cn-sites cn-configyration. <хорневое_ОИ_леса> changetype: add objectci ass: 11censi ngS1teSetti ngs dn: cn-NTDS Site Settings,cn-<w«tf_catfra>,cn-sites,cn-configurat1on.<юрневое_ОИ_леса> changetype: add objectclass nTDSSiteSettings dn: cn-Servers.сп-<иня_сайта>,cn-sites,cn-conf1gyration.<корневое_ОИ_леса> changetype: add objectclass: serversContainer Затем выполните такую команду: > Idifde -v -i -f create_site.ldf С помощью сценария на языке VBScript ' Этот код создает объекты, составляющие сайт ’ ..... SCRIPT CONFIGURATION ----- strSiteName - "<имя_сайта>” * Напринер: Dallas 1 .....END CONFIGURATION......-- set objRootDSE - GetObject("LDAP://RootDSE") set objSitesCont - GetObject("LDAP://cn-sites." & _ objRootDSE.Get("conf1guratl onNami ngContext") ) ' Создание сайта set objSite - objS1te$Cont.Create("siteVen-" & strSiteName) objSIte Setinfo ' Создание объекта Licensing Site Settings set objLIcensing - objSite.Create("HcensingSiteSett1ngs", "cn-Licensing Site Settings") objLIcensing SetInfo * Создание объекта NTDS Site Settings set objNTDS - objSite.Create("nTDSSiteSettings’."cn-NTDS Site Settings") objNTDS.Setinfo ’ Создание контейнера Servers set obJServersCont - objSite.Create!"serversContainerVen-Servers") objServersCont.Setinfo WScrlpt.Echo "Successfully created site " & strSiteName Комментарий Сайт в Active Directory состоит из множества объектов, и именно с их создания следует начинать работу над сайтом. Главным из них является объект site, кото- рый будет содержать все остальные объекты.
366 Глава 11. Топология сети О 11 censi ngSI teSetti ngs — этот объект необязателен, но создается автоматически при создании сайта с помощью оснастки Active Directory Sites and Services (Ac- tive Directory — сайты и службы); используется как указатель на сервер ли- цензирования, связанный с данным сайтом. О nTDSSiteSettings — содержит свойства сайта, связанные с репликацией, такие как расписание репликации, имя текущего хозяина ISTG, признак кэширования информации универсальных групп. О serversContal пег — контейнер, который содержит объекты server, представляющие серверы в составе данного сайта; в частности, к нему относятся все контроллеры домена, входящие в состав сайта В результате создания перечисленных объектов будет получен пустой сайт. Далее с этим сайтом нужно связать объекты subnet, представляющие подсети (см. рецепт 11.4), добавить в него объект slteLink, который представляет связь сайтов (см. рецепт 11.7), и таким образом связать его с другими сайтами. Затем в состав сайта нужно включить контроллеры домена, после чего он будет готов к использованию. Смотрите также Документ MS КВ 318480 (HOW ТО: Create and Configure an Active Directory Site in Windows 2000). 11.2. Вывод списка сайтов Проблема Требуется просмотреть список имеющихся сайтов. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Щелкните на контейнере Sites (Сайты), и на правой панели отобразится спи- сок всех сайтов. 3. Для того чтобы просмотреть свойства сайта, дважды щелкните на его имени. С помощью интерфейса командной строки Приведенная ниже команда выводит список имеющихся сайтов: > dsquery site Следующая команда выводит свойства указанного сайта: > dsget site "<имя сайта>"
11.3. Удаление сайта 367 С помощью сценария на языке VBScript * Этот код выводит список объектов site set objRootDSE - GetObject("LDAP'//RootDSE") set objSitesCont - GetObject(’LDAP://cn-sites," & _ objRootDSE.Get("conf1gurationNamingContext") ) objSitesCont Filter - ArrayCsite") for each objSite in objSitesCont Wscrlpt.Echo " " & objSite.GetCcn") next Комментарий Объекты site хранятся в контейнере Sites (Сайты) раздела конфигурации, напри- мер в контейнере с именем cn-sites,cn-configuration,dc-rallencorp,dc-com. О том, как создать новый сайт, рассказывается в рецепте 11.1. 11.3. Удаление сайта Проблема Требуется удалить сайт из Active Directory Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Щелкните на контейнере Sites (Сайты). 3. На правой панели щелкните правой кнопкой мыши на имени удаляемого сайта и выберите в открывшемся контекстном меню команду Delete (Удалить). 4. Дважды щелкните на кнопке Yes (Да). С помощью интерфейса командной строки > dsrm <ОИ_сайта> -subtree -noprompt С помощью сценария на языке VBScript ' Этот код удаляет сайт и все его дочерние контейнеры 1 ---- SCRIPT CONFIGURATION - strSiteName - "<имя_сайта>" ' Напринер Dallas ' ----END CONFIGURATION ..... set objRootDSE - GetObjectC"LDAP://RootDSE") set objSite GetObjectC"LDAP://cn-" & strSiteName & ".cn-sites " & _ objRootDSE.Get("configurati onNamingContext") ) objSi te.DeleteObject(0) WScript.Echo "Successfully deleted site “ & strSiteName
368 Глава 11. Топология сети Комментарий Прежде чем удалять сайт, убедитесь, что он не содержит активных объектов server. Если вы удалите сайт, включающий контроллеры домена, это нарушит реплика- цию для всех входящих в его состав контроллеров домена. Более надежный сце- нарий на языке VBScript сначала должен был бы выполнить ADО-запрос на получение всех объектов server, где задано отличительное имя данного сайта, и только в том случае, если бы полученный им список оказался пустым, удалить сайт. Если сайт содержит объекты server, их нужно переместить в другие сайты. Следует отметить, что при удалении сайта все связанные с ним подсети и связи сохраняются. Поэтому в сценарий на языке VBScript можно добавить код, уда- ляющий соответствующие объекты перед удалением сайта. 11.4. Создание подсети Проблема Требуется создать в Active Directory подсеть. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Щелкните правой кнопкой мыши на контейнере Subnets (Подсети) и выбери- те в открывшемся контекстном меню команду New Subnet (Создание подсети). 3. Введите адрес подсети, ее маску, описывающую диапазон входящих в подсеть адресов, а затем выберите сайт, который следует связать с этой подсетью. 4. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем create_subnet.ldf и таким содержимым: dn: сп-<лодсеть>,cn-s ubnets.cn-s1tes.cn-confi gurat i on.<корневое_ОИ_леса> changetype: add objectclass: subnet slteObject: cn•<имя_сайта>.cn-sites.cn-configurati on.<корневое_ОИ_леса> Затем выполните следующую команду: > Idifde -v -i -f create_subnet.ldf С помощью сценария на языке VBScript Этот код создает объект subnet и связывает его с сайтом ‘ ----- SCRIPT CONFIGURATION - strSubnet - “<лодсеть>и ' Например: 10.5.3.0/24 strSite » "<имя_сайта>" ' Например: Dallas * ----- END CONFIGURATION ---- set objRootDSE - GetObjectCLDAP://RootDSE")
11.5. Вывод списка подсетей 369 set objSubnetsCont - GetObject("LDAP://cn-subnets.cn-sites." & _ objRootDSE.Get("configurationNamingContext") ) set objSubnet - objSubnetsCont.Create!"subnet”. "on-" & strSubnet) objSubnet.Put "siteObject". "cn-" & strSite & ".cn-s1tes,” & _ objRootDSE.Get("configurati onNami ngContext") objSubnet.SetInfo WScrlpt.Echo "Successfully created subnet ’ & strSubnet Комментарий Объекты subnet, представляющие подсети, расположены в контейнере Subnets (Подсети) раздела конфигурации, например: cn=subnets.cn-sites,cn=configuration. dc-ral 1 encorp.dc=com). Относительное отличительное имя подсети является соче- танием ее адреса и маски (например: 10.5.3.0/24). Еще одним важным атрибутом, Который следует установить при создании подсети, является siteObject - в него записывается отличительное имя сайта, с которым связана данная подсеть. Смотрите также Документ MS КВ 323349 (HOW TO: Configure Subnets in Windows Server 2003 Active Directory). 11.5. Вывод списка подсетей Проблема Требуется вывести список имеющихся в Active Directory объектов subnet. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Щелкните на контейнере Subnets (Подсети), и на правой панели отобразится список подсетей. 3. Для просмотра свойств конкретной подсети дважды щелкните на ее имени. С помощью интерфейса командной строки Следующая команда выводит список всех имеющихся подсетей: > dsquery subnet Ниже приведена команда, которая выводит свойства заданной подсети. Заме- ните элемент <подсеть> адресом и маской подсети (например: 10.5.3.0/24): > dsget subnet "<лодсегь>"
370 Глава 11. Топология сети С помощью сценария на языке VBScript ' Этот код выводит список всех подсетей, икеющихся в Active Directory. set objRootDSE - GetObject("LDAP://RootDSE") set objSubnetsCont - GetObject("LDAP://cn-subnets.cn-sites." & _ objRootDSE.Get("configurati onNamingContext“) ) objSubnetsCont.Filter - Array("subnet") for each objSubnet in objSubnetsCont Wscript Echo " " & objSubnet.Get("cn") next Комментарий Для того чтобы рядом с каждым именем подсети был указан сайт, к которому она относится, включите в возвращаемый запросом список атрибут siteObject. В при- веденном выше сценарии для этого нужно изменить предпоследнюю строку сле- дующим образом: Wscript.Echo “ " & objSubnet GetC'cn”) & " : " & objSubnet.Get("siteObject”) Смотрите также Документ MS KB 323349 (HOW TO: Configure Subnets in Windows Server 2003 Active Directory). 11.6. Поиск подсетей, не связанных с сайтом Проблема Требуется найти подсети, не представленные в топологии сайта. Отсутствие связи подсети с сайтом может повлечь за собой аутентификацию клиентов не на самых подходящих для этого контроллерах домена, а как следствие — снижение произ- водительности системы. Решение Очень важно, чтобы в Active Directory присутствовали объекты subnet для всех подсетей, поскольку клиент, пытающийся войти в систему из подсети, не связанной ни с одним из сайтов, может быть аутентифицирован любым контроллером домена. В результате, если выбор контроллера будет неудачным, процесс регистрации клиента в системе может занять много времени. К сожалению, Microsoft не разра- ботала простого способа решения этой проблемы. В Windows 2000 единственным источником информации об «отсутствующих» объектах subnet является системное событие 5778. Приведем фрагмент из журна- ла с записью об этом событии: Event Туре: Information Event Source: NETLOGON Event Category: None Event ID: 5778 Date: 1/27/2003
11.6. Поиск подсетей, не связанных с сайтом 371 Time. 12:07.04 AM User: N/A Computer: DC2 Description: 'JSMITH-W2K' tried to determine its site by looking up its IP address ('10.21.85.34') in the Conf1guration\Sites\Subnets container in the DS. No subnet matched the IP address. Consider adding a subnet object for this IP address. Для того чтобы автоматически выявить подсети, не связанные с сайтом, нужно опросить все контроллеры домена на предмет возникновения события 5778 и, воспользовавшись IP-адресами, указанными в записях об этом событии, добавить новые подсети в топологию сайта. Подобная проблема существует и в Windows Server 2003. Одним из побочных эффектов регистрации события 5778 в Windows 2000 было то, что записи о нем могли быстро переполнить журнал, если подсетей, не представленных в топологии ♦сайта, оказывалось слишком много. Поэтому в Windows Server 2003 компания Microsoft ввела итоговое событие 5807, означающее, что клиенты предприняли некоторое количество попыток подключения, но в топологии сайта не оказалось подсетей. Приведем фрагмент журнала с записью об этом событии Event Type: Warning Event Source: NETLOGON Event Category: None Event ID: 5807 Date: 1/10/2003 Time: 10:59:53 AM User: N/A Computer: DC1 Description: During the past 4.18 hours there have been 21 connections to this Domain Controller from client machines whose IP addresses don't map to any of the existing sites in the enterprise Those clients, therefore, have undefined sites and may connect to any Domain Controller including those that are 1n far distant locations from the clients. A client's site is determined by the mapping of its subnet to one of the existing sites. To move the above clients to one of the sites, please consider creating subnet object(s) covering the above IP addresses with mapping to one of the existing sites. The names and IP addresses of the clients in question have been logged on this computer 1n the following log file 'XSystemRootZ\debug\netlogon.log' and. potentially, in the log file '2SystemRootX\debug\ netlogon.bak' created if the former log becomes full. The log(s) may contain additional unrelated debugging information. To filter out the needed information please search for lines which contain text NO_CLIENT_SITE:'. The first word after this string is the client name and the second word is the client IP address The maximum size of the log(s) is controlled by the following registry DWORD value 'HKEY_LOCAL_MACHINE\SYSTEM\ CurrentcontrolSet\Services\Netlogon\Parameters\LogF11eMaxSize’; the default is 20000000 bytes. The current maximum size is 20000000 bytes. To set a different maximum size, create the above registry value and set the desired maximum size in bytes. For more information, see Help and Support Center at http://go.microsoft.com/fwli nk/events asp Вместо того чтобы запрашивать у всех контроллеров домена информацию из журналов событий, можно заглянуть на каждом из них в файл %SystemRoot%\de- bug\netlogon.log и поискать записи NO_CLIENT_SITE. Конечно, это не самое простое решение, но, по крайней мере, при его использовании журналы событий не будут заполняться записями о событии 5778.
372 Глава 11. Топология сети Ниже приведен фрагмент файла netlogon.log с записями NO_CLIENT_SITE: 01/16 15:50-07 RALLENCORP: NO CLIENT_SITE 01/16 15 50-29 RALLENCORP- NOJ1IENT_SITE 01/16 16:19:58 RALLENCORP' NO_CLIENT_SITE 01/16 16:20 07 RALLENCORP: NO CLIENT SITE 01/16 16:50 07 RALLENCORP: NO_CLIENT_SITE 01/16 16 57:00 RALLENCORP: NO CLIENT_SITE 01/16 17:20:08 RALLENCORP: NO CLIENT_SITE 01/16 17:50:08 RALLENCORP: NO_CLIENT_S1TE RALLEN-TEST4 164 2 45 157 SJC-BACKUP 44 25 26 142 RALLEN-TEST4 164 2 45.157 RALLEN-TEST4 164 2 45.157 RALLEN-TEST4 164 2 45 157 JSMITH-W2K1 10.61.80.19 RALLEN-TEST4 164 2 45.157 RALLEN-TEST4 164.2.45.157 Если вы захотите автоматизировать это решение, напишите сценарий, который подключается к каждому контроллеру домена открывает файл netlogon.log и счи- тывает из него записи NO_CLIENT_SITE. Затем он анализирует IP-адреса и создает в Active Directory подсети для их хранения. Все эти подсети можно связать с сайтом, используемым по умолчанию, или даже с сайтом Default-First-Site-Name. Тогда, скажем, раз в неделю можно будет просматривать список созданных сайтов или подсетей, которые связаны с сайтом, используемым по умолчанию, и вносить необ- ходимые коррективы. 11.7. Создание связи сайтов Проблема Требуется создать в Active Directory связь для соединения нескольких сайтов. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Поочередно откройте контейнеры Sites (Сайты) и Inter-Site Transports (Межсай- товые транспорты). 3. Щелкните правой кнопкой мыши на межсайтовом транспортном протоколе, который нужно использовать для связи сайтов (IP или SMTP), и выберите в открывшемся контекстном меню команду New Site Link (Новая связь сайтов) 4. В поле Name (Имя) введите имя создаваемой связи. 5. Отметьте сайты, которые будет соединять новая связь, и щелкните на кнопке Add (Добавить) 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки Для создания связи сайтов можно воспользоваться утилитой Idifde Например, для того чтобы связать между собой сайты SJC и Dallas, создайте LDIF-файл с именем create_site_link.ldf и таким содержимым: dn cn-Dal1 as-SJC.cn-IP.cn-i nter-s1te transports cn-s tes.cn-confIguration.<корневое_ОИ_леса>
11.7. Создание связи сайтов 313 changetype, add objectclass: siteLink siteObject: cn-SJC.cn=s1tes.cn-configuration.<корневое_рИ_леса> siteObject: cn=Dal1 as.cn=sites.cn-confIguration.<корневое_ОИ_леса> Затем выполните следующую команду: > Idifde -v -1 -f create_site_link.ldf С помощью сценария на языке VBScript ' Этот код создает связь сайтов -----SCRIPT CONFIGURATION -...... intCost = 100 1 Стойкость связи сайтов intReplInterval - 180 * Период репликации в минутах strSitel - "<сайг1>" * Напринер: SJC €trSite2 - "<сайг?>" ‘ Напринер: Dallas strLinkName - strSitel & " - " & strSite2 ’ ------ END CONFIGURATION --------- ' Данная константа взята из перечисления ADS_PROPERTY_OPERATION_ENUM const ADS_PROPERTY_UPDATE - 2 set objRootDSE - GetObject("LDAP://RootDSE'’) set objLinkCont = GetObjectC _ "LDAP://cn=IP.cn»Inter-site Transports.cn-sites," & _ objRootDSE.Get("configurationNamingContext") ) set objLink - objLinkCont.Create!"slteLink" "сп-" & strLinkName) strSitelDN - "сп-" & strSitel & ‘.сп-sites." & _ objRootDSE.Get("conf1gurat ionNami ngContext") strSiteZDN - "сп-" & strSite2 & “.cn-sites." & _ objRootDSE.Get("configurati onNami ngContext") objLink.PutEx ADS_PROPERTY_UPDATE. "siteList". Array(strSitelDN.strSite2DN) objLink.Put "cost", intCost objLink Put "repl Interval", intReplInterval objLink Setinfo WScript.Echo "Successfully created link: " & strLinkName Комментарий При отсутствии связей сайтов контроллеры домена не могут оптимальным образом определить для себя партнеров по репликации. Каждая связь характеризуется та- ким параметром, как стоимость связи, или стоимость репликации, величина ко- торого обратно пропорциональна полосе пропускания. Смотрите также Документ MS КВ 316812 (HOW ТО: Create and Configure a Site Link in Active Directory in Windows 2000)
Глава 11. Топология сети 11.8. Поиск связей указанного сайта Проблема Требуется просмотреть список связей определенного сайта. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP и выберите из ее меню команду Con- nection ► Connect (Подключение ► Подключиться). 2. В поле Server (Сервер) введите имя контроллера домена (или оставьте это поле пустым, чтобы установить связь без сервера). 3 В поле Port (Порт) введите значение 389. 4. Щелкните на кнопке ОК. 5 Выполните команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя домена, после чего щелкните на кнопке ОК. 7 Выполните команду Browse ► Search (Поиск ► Найти). 8. В поле BaseDN (Отличительное имя базы) введите отличительное имя кон- тейнера Inter-Site Transports (Межсайтовые транспорты), например: сп=1п- ter-site Тransports.cn=sites.cn=confi guration dc=ra11encorp,dc-com. 9. В области Scope (Область поиска) установите переключатель в положение Subtree (Поддерево). 10. В поле Filter (Фильтр) введите следующий фильтр: (&(objectcategory-si teLink)(si teLi st-cn-<w»?_ca*?Ta>.J cn-si tes.cn-confi gurati on.<корневое_ОИ_песа>)) И. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки > dsquery * "cn-inter-slte transports.cn-sites.cn-configuration,<корневое_Ш_леса>“Д -filter "(&(objectcategory-siteLink)(siteLi$Ъ=сп-<имя_сайта>.J cn-sites.cn-configuration.<Kopweeoej7J/_neca>))" -scope subtree -attr name С помощью сценария на языке VBScript Этот код выводит список связей определенного сайта ' ---- SCRIPT CONFIGURATION ---- strSiteName - "<иня_сайта>’‘ ' Напринер: Raleigh • ---- END configuration ------- set objRootDSE - GetObjectCLDAP://RootDSE") strSiteDN - "cn-" & strSiteName & ".cn-sites." & _ objRootDSE.Get("Configurat1onNami ngContext”) strBase - "<LDAP://cn-Inter-site Transports.cn-sites.” _ & objRootDSE.Get("ConfigurationNamingContext") & strFilter = "(&(objectcategory-siteLink)" & _ "(siteList-" & strSiteDN & "));"
11.9. Изменение набора сайтов, соединенных посредством указанной связи 375 strAttrs “ "name;" strScope - "subtree" set objConn - CreateObject("ADODB.Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS - objConn.Execute(strBase & strFilter & strAttrs & strScope) WScript.Echo "Total site links for " & strSiteName & " & objRS.RecordCount if objRS.RecordCount > 0 then objRS.MoveFirst while Not objRS.EOF Wscript.Echo vbTab & objRS.Fields(O).Value objRS.MoveNext wend end if Комментарий С сайтом обычно ассоциируются одна или несколько связей. Если сайт вообще не имеет связей, контроллеры домена не могут определить, какое место он занимает в общей топологии. Сайты региональных офисов нередко имеют по одной связи, представляющей соединение с концентраторным сайтом, тогда как с последним может ассоциироваться множество связей, соединяющих его со всеми офисами. Для того чтобы обнаружить все связи конкретного сайта, нужно выполнить запрос на получение всех объектов si teLi nk, у которых в атрибуте si teLi st указы- вается отличительное имя сайта. Данный атрибут, являющийся многозначным, содержит имена всех сайтов, соединенных с помощью определенной связи. 11.9. Изменение набора сайтов, соединенных посредством указанной связи Проблема Требуется изменить набор сайтов, соединенных посредством определенной связи. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory - сайты и службы). 2. На левой панели поочередно откройте контейнеры Sites (Сайты) и Inter-Site Transports (Межсайтовые транспорты). 3. Откройте контейнер IP или SMTP, в зависимости от того, где хранится требуе- мая связь сайтов. 4. На правой панели дважды щелкните на имени связи, которую надо изменить.
376 Глава 11. Топология сети 5. Воспользовавшись вкладкой General (Общие), добавьте или удалите сайты, соединенные данной связью. 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем modify_site_link.ldf и указанным ниже содержимым.. Замените <имя_связи> именем связи, а <имя_сайтд> — именем сайта, который вы хо- тите соединить с другими посредством заданной связи. dn: сп-<имя_связи>,cn-IP. cn-i nter-site transports, cn-sites.cn-conf1 guration. <корневое_ОИ_леса> changetype: modify add: siteList s1teList: сп=<имя_сайта>.cn-sites.cn=configuration.<корневое_ОИ_леса> Затем выполните такую команду: > Idifde -v -1 -f mod1fy_site_Hnk.ldf С помощью сценария на языке VBScript ’ Этот код добавляет сайт в список сайтов, соединенных посредством заданной связи ’ ----- SCRIPT CONFIGURATION ---- strSite "<имя_сайта>“ ‘ Например: Burlington strLink = *<имя_связи>" ' Например: DEFAULTIPSITELINK ' ----- ENO CONFIGURATION ------- ' Данная константа взята из перечисления ADS_PROPERTY_OPERATION_ENUM const ADS_PROPERTY_APPEND - 3 set objRootDSE = GetObject("LDAP://RootDSE”) set objLink - GetObject("LDAP://cn-" & strLink & _ ",cn-IP.cn=Inter-site Transports.cn-sites." & _ objRootDSE.Get(“configurationNamingContext”) ) strSiteDN - ’cn-" & strSite & ".cn-sites." & _ objRootDSE.GetC“configurationNamingContext”) objLink.PutEx ADS_PROPERTT_APPEND. "siteList". Array(strSiteDN) objLink.Setinfo WScrlpt.Echo "Successfully modified link: " & strLink Комментарий Для того чтобы ассоциировать сайт с конкретной связью сайтов, нужно добавить его отличительное имя в атрибут siteList объекта siteLink, представляющего эту связь. При необходимости удалить сайт из списка сайтов, соединенных при помощи заданной связи, выполняется обратное действие: его отличительное имя удаляется из атрибута siteList. Смотрите также В рецепте 11.8 рассказывается, как найти все связи определенного сайта.
11.10. Изменение стоимости связи сайтов 377 11.10. Изменение стоимости связи сайтов Проблема Требуется изменить стоимость связи сайтов. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. На левой панели поочередно откройте контейнеры Sites (Сайты) и Inter-Site Transports (Межсайтовые транспорты). 3. Щелкните на контейнере IP или SMTP, в зависимости от того, где расположена интересующая вас связь. 4. На правой панели дважды щелкните на имени связи. 5. Перейдите на вкладку General (Общие) и измените стоимость связи. 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем modlfy_site_link_cost.ldf и указанным ниже содержи- мым. Замените <стоимость_связи> нужным значением: dn: cn-DEFAULTIPSITELINK.cn-IP,cn-inter-s1te transports.cn-s i tes.cn-conf1gurati on.<корневое_ОИ_леса> changetype: modify replace: cost cost: <стоимость_связи> После этого выполните такую команду: > Idifde -v -i -f modify_site_link_cost.ldf С помощью сценария на языке VBScript ' Этот код изменяет стоимость связи сайтов ' ---- SCRIPT CONFIGURATION -- strLink - "<связь_сайтов>" ' Например: DEFAULTIPSITELINK intCost - <стоимость_связи> * Например: 200 ' ---- END CONFIGURATION ----- set objRootDSE - GetObject("LDAP://RootDSE") set objLink - GetObject("LDAP://cn-" & strLink & _ ".cn-IP,cn=Inter-site Transports,cn-sites." & _ objRootDSE.Get("configurationNamingContext”) ) objLink.Put "cost". intCost objLink.Setinfo WScript.Echo "Successfully modified link: " & strLink
378 Глава 11. Топология сети Комментарий Атрибут cost является одним из наиболее важных атрибутов объекта siteLink. В средстве проверки согласованности знаний (Knowledge Consistency Checker, КСС) он используется для определения объектов connection, которые необходи- мо создать для того, чтобы контроллеры домена могли реплицировать данные. Значение атрибута cost должно быть обратно пропорционально полосе пропуска- ния соединения: чем оно ниже, тем шире полоса пропускания. По умолчашпо оно равно 100. Атрибуту cost можно присвоить любое значение в диапазоне от 100 до 1000, или же от 1 до 10. Реальное число не имеет значения — главное, чтобы соот- ветствовало действительности соотношение стоимости всех связей сайтов. 11.11. Отключение расписаний и транзитивности связей Проблема Требуется отключить расписания, используемые для управления репликацией, или транзитивность связей сайтов. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. На левой панели поочередно откройте контейнеры Sites (Сайты) и Inter-Site Transports (Межсайтовые транспорты). 3. Щелкните правой кнопкой мыши на контейнере IP или SMTP, в зависимости от того, для каких связей нужно задать новые установки 4. Выберите в открывшемся контекстном меню команду Properties (Свойства) 5. Для отключения транзитивности связей снимите флажок Bridge all site links (Установить мост для всех связей сайтов). 6 Для того чтобы все расписания, регулирующие возможность работы со связя- ми сайтов игнорировались, то есть, все связи сайтов были доступны для реп- ликации, установите флажок Ignore schedules (Игнорировать расписания). 7. Щелкните на кнопке ОК. С помощью интерфейса командной строки Значение атрибута options объекта связи сайта можно изменить с помощью утилиты Idifde, создав соответствующий LDIF-файл. Однако поскольку этот атрибут со- держит набор битовых флагов, его значение лучше изменять посредством графи- ческого пользовательского интерфейса или сценария на языке VBScript, который прочитает текущее значение атрибута opti ons и модифицирует его, изменив толь- ко один флаг Утилита 1 di fde не позволяет реализовать такую сложную логику.
11.11. Отключение расписаний и транзитивности связей 379 С помощью сценария на языке VBScript ' Данный код отключает транзитивность связей сайтов и расписания. ' используемые для управления репликацией для всех связей транспортного протокола IP ' Код функции CalcBit приведен в рецепте 4.12 (глава 4) ’ .....- SCRIPT CONFIGURATION ------ boolDisableTrans - <TruejMH_False> ' Напринер: TRUE boolIgnoreSchedules - <True_wiH_False> ' Напринер: FALSE * .....- END CONFIGURATION --------- set objRootDSE - GetObject("LDAP://RootDSE’) set objLink - GetObject( "LDAP://cn-IP,cn-Inter-site Transports,cn=sites," & _ objRootDSE Get("configurationNamingContext") ) intBitsOrg - objLink.Get("options") IntBits - CalcBit(intBitsOrig. 2. boolDisableTrans) intBits - CalcBit(intBitsOrig. 1, boolIgnoreSchedules) if objLink Get("options") о intBits then objLink.Put "options", intBits objLink.Setinfo WScript.Echo "Successfully modified link transitivity for " & strLink else WScript.Echo "Did not need to modify link transitivity for " & strLink end if Комментарий Связи сайтов Active Directory транзитивны. Это означает, что если сайт А связан с сайтом Б, а сайт Б связан с сайтом В, значит, и сайт А связан с сайтом В (через сайт Б). Средство проверки согласованности знаний использует такое свойство (по умолчанию оно включено) для принятия решений о необходимости создания объектов connection. При желании свойство транзитивности можно отключить, хотя делать это без веских на то оснований не рекомендуется Отключение свой- ства транзитивности может быть целесообразным лишь в некоторых системах на базе Windows 2000, когда сайтов слишком много, а следовательно, КСС затрачи- вает на их анализ много времени. В Windows Server 2003 данное средство значи- тельно усовершенствовано, благодаря чему транзитивность связей теперь не вы- зывает каких-либо проблем. Еще одна причина, по которой вам, возможно, потребуется отключить тран- зитивность связей, — это необходимость сделать репликацию более детерминирован- ной. Когда транзитивность отключена, гораздо легче определить, где КСС бу- дет создавать объекты connection, поскольку это средство не может обмениваться репликами с контроллерами домена, сайты которых не имеют непосредственных связей с сайтами, откуда производится репликация. О том, как отключить расписание доступности связей сайтов, рассказывается в этом же рецепте по той причине, что атрибут options, определяющий транзитивность связей сайтов, управляет и расписанием их доступности. Если для транспортного протокола (IP или SMTP) установлен параметр Ignore schedules (Игнорировать расписания), то КСС игнорирует все настроенные расписания доступности связей
380 Глава 11. Топология сети сайтов. Если позднее этот параметр отключить, такие расписания доступности связей снова начнут действовать. Смотрите также В рецепте 4.12 (глава 4) рассказывается, как устанавливаются флаги, которые входят в состав значений свойств, представляющих собой набор битовых флагов. 11.12. Создание моста связей сайтов Проблема Требуется создать мост связей сайтов, поскольку транзитивность связей отключена. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. На левой панели поочередно откройте контейнеры Sites (Сайты) и Inter-Site Transports (Межсайтовые транспорты). 3. Щелкните правой кнопкой мыши на контейнере IP или SMTP, в зависимости от того, для каких связей создается мост. 4. Выберите в открывшемся контекстном меню команду New Site Link Bridge (Новый мост связей сайтов). 5. Выделите связи сайтов, которые необходимо соединить мостом, затем щелк- ните на кнопке Add (Добавить). 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем create_site_link_bridge.ldf и следующим содержимым (замените <связь1> и <связь2> именами связей сайтов, между которыми создается мост): dn: сп-<иня_носта>.сп-1Р.сп-1nter-s i te transports.cn=sites,cn-configuration.<корневое_ОИ_лесд> changetype: add objectclass: siteLinkBridge siteLinkList: сп-<связь1>.cn=IP.cn-Inter-s1te Transports,cn-sites.cn=configuration. <корневое_ОИ_лесд> siteLi nkLi st: сп-<связь2>.cn=IP.cn-Inter-s1te Transports,cn-si tes.cn=configurati on, <корневое_ри_леса> Затем выполните такую команду: * Idifde -v -i -f create_site_link_bridge.ldf
11.13. Поиск серверов-плацдармов 381 С помощью сценария на языке VBScript ‘ Данный код создает ноет между двумя связями сайтов • ------ SCRIPT CONFIGURATION ------- strLInkl - “<связь1>" ’ Например: AMS-LON strLink2 - "<связь2>" ’ Например: SJC-RTP strBridge - "<иня_моста>“ ’ Например: AMER-EUR ‘ ------END CONFIGURATION........— - set objRootDSE - GetObjectCLDAP://RootDSE") set objLinkCont - GetObject( "LDAP://cn=IP.cn*=Inter-site Transports.cn-sites." & objRootDSE.Get(“conf1gurationNami ngContext") ) set objBridge - objLinkCont.CreateCsiteLinkBridge". "cn-” & strBridge) strLinklDN - "cn-" & strLinkl & _ ".cn-IP.cn-Inter-site Transports.cn-sites." & _ ob j RootDSE. Get (''configurationNamingContext'') strLink2DN - "cn-" & strLink2 & _ ".cn-IP.cn-Inter-site Transports.cn-sites.” & _ objRootDSE.Get("confi gurati onNami ngContext”) objBridge.Put "siteLinkList", Array(strLinklDN,strLink2DN) objBridge.Setinfo WScript.Echo "Successfully created bridge: " & strBridge Комментарий Если вы отключили свойство транзитивности связей сайтов или если сеть не содержит непосредственных соединений между сайтами, нужно создать меж- ду ними мосты. Процесс создания моста связей сайтов, соединяющего несколь- ко связей, аналогичен процессу создания связи, соединяющей несколько сайтов. Давайте рассмотрим пример топологии сети, когда свойство транзитивности от- ключено и имеется четыре сайта: сайт А связан с сайтом Б, а сайт В — с сайтом Г. Если нужно, чтобы контроллеры домена, входящие в состав сайтов А и Б, обме- нивались репликами с контроллерами домена, входящими в состав сайтов В и Г, необходимо создать мост, соединяющий связь А-Б со связью В-Г. Смотрите также В рецепте 11.11 рассказывается, как отключить свойство транзитивности связей сайтов. 11.13. Поиск серверов-плацдармов Проблема Требуется определить, какие серверы-плацдармы входят в состав заданного сайта.
382 Глава 11. Топология сети Решение С помощью графического пользовательского интерфейса 1. Запустите утилиту Replication Monitor из пакета Support Tools (replmon.exe). 2. Выполните команду View ► Options (Вид ► Параметры). 3. На левой панели щелкните правой кнопкой мыши на элементе Monitored Servers (Опрашиваемые серверы) и выберите в открывшемся контекстном меню команду Add Monitored Server (Добавить опрашиваемый сервер). 4. Воспользовавшись мастером, который будет запущен в результате выполне- ния перечисленных действий, укажите сервер, входящий в состав сайта, где вы рассчитываете найти серверы-плацдармы. 5. На левой панели щелкните правой кнопкой мыши на имени нужного сервера и выберите в контекстном меню команду Show Bridgehead Servers ► In This Server's Site (Показать серверы-плацдармы > В составе сайта этого сервера). С помощью интерфейса командной строки > repadmin /bridgeheads [<имя_сервера>] [/verbose] Ключ /bridgeheads используется только в версии утилиты repadmin для Windows Server 2003. В Windows 2000 такой ключ отсутствует. С помощью сценария на языке VBScript ’ Этот код находит все серверы-плацдармы указанного сайта 1 ----- SCRIPT CONFIGURATION -- strServer - "<иня_сервера>" ’ Сервер, которому будет направлен запрос, например: dcOl strSite - "<имя_сайта>" ' Имя опрашиваемого сайта, например: Default-First-Site-Nasie 1 ----- END CONFIGURATION ..... set objladsTools - CreateObjectCIADsTools.DCFunctions") intRes - objladsTools.GetBridgeHeadsInSiteCCstr(strServer),Cstr(strSite).0) if intRes - -1 then Wscript.Echo “Error bridge heads: " & objladsTools.LastErrorText WScript.Quit end 1f for count - 1 to intRes WScrlpt.Echo vbTab & objladsTools.BridgeHeadName(count) next Комментарий Сервером-плацдармом (bridgehead server) называется контроллер домена, отве- чающий за репликацию данных между сайтами. Чтобы контроллеры домена не передавали реплики одних и тех же разделов каталога за пределы сайта, эта обя- занность возлагается на выделенные серверы-плацдармы. Плацдармом может служить любой контроллер домена. Средство проверки согласованности знаний назначает плацдарм каждому доступному для записи разделу сайта, и вы .можете повлиять на его выбор, определив предпочтительные плацдармы. Более подробно об этом рассказывается в рецепте 11.14.
11.14. Выбор для сайта предпочтительного сервера-плацдарма 383 Смотрите также Документ MS КВ 271997 (Description of Bridgehead Servers in Windows 2000). 11.14. Выбор для сайта предпочтительного сервера-плацдарма Проблема Требуется указать для сайта предпочтительный сервер-плацдарм. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. На левой панели откройте контейнер Sites (Сайты), сайт, для которого хотите определить сервер-плацдарм, и контейнер Servers (Серверы). 3. Щелкните правой кнопкой мыши на имени сервера, который решили назна- чить плацдармом, и выберите в открывшемся контекстном меню команду Pro- perties (Свойства). 4. На вкладке General (Общие) выберите один или несколько межсайтовых транспортных протоколов, для которых данный компьютер будет основным сервером-плацдармом, и щелкните на кнопке Add (Добавить). 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем set_bridgehead_server.ldf и таким содержимым: dn: сп-<имя_контроллераломена>.observers,спш<иня_сайта>. cn-sites.cn-conf1guration,<корневое_ОИ_леса> changetype: modify add: bridgeheadTransportList bri dgeheadTransportLi st: cn-IP,cn=Inter-s1te Transports.cn=sites .cn-configuration.<KOpHeBoe_CMneca> Затем выполните данную команду: > Idifde -v -i -f set_bridgehead_server.ldf С помощью сценария на языке VBScript ' Этот код задает предпочтительный сервер-плацдарм для указанного транспортного протокола ' ----- SCRIPT CONFIGURATION ---- strServer - К<имя_контроллера_домена>а ' Например: del strServerSite - "<имя_сайта>" ' Например: Default-First-Site-Name strTransport ° п<имя_гранспортного протокола^' ' Например: either IP or SMTP ' -.... ENO CONFIGURATION --------7 set objRootDSE - GetObject("LDAP://RootDSE")
384 Глава 11. Топология сети set objServer = GetObjectC"LDAP://сп-" & strServer & ".cn-Servers.cn=" & _ strServerSite & ".cn»sites." & _ objRootDSE.GetC’configurationNamingContext") ) objServer.Put "bridgeHeadTransportList". "cn=" & strTransport & ".cn-Inter-site Transports.cn-sites.” _ & objRootDSE.Get("configurationNamingContext") objServer.SetInfo WScript.Echo “Successfully set bridgehead server: " & strServer Комментарий Установка предпочтительного сервера-плацдарма, обеспечивая контроль над вы- бором контроллеров домена, участвующих в межсайтовой репликации, налагает на этот процесс определенные ограничения. Средство проверки согласованности знаний обычно определяет серверы-плацдармы автоматически, но если вы ука- жете, какие серверы желательно использовать, КСС не сможет выбрать другие, когда указанные вами серверы окажутся недоступны. Поэтому следует назначать на роль плацдармов для заданного раздела каталога как минимум два сервера — на случай выхода из строя одного из них. ПРИМЕЧАНИЕ---------------------------------------------------------------------------- Указывать отдельные серверы-плацдармы в качестве предпочтительных не рекомендуется. Смотрите также Документ MS КВ 271997 (Description of Bridgehead Servers in Windows 2000). 11.15. Вывод списка серверов Проблема Требуется вывести список серверов, входящих в состав указанного сайта. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя контроллера домена (или оставьте это поле пустым — в таком случае связь будет установлена без участия сервера). 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя данного домена. 7. Щелкните на кнопке ОК. 8. Выполните команду Browse ► Search (Поиск ► Найти).
лл.ло. 11 ерем еще мне конiроллера домена в дру| ои cam JO9 9. В поле BaseDN (Отличительное имя базы) введите отличительное имя контей- нера Sites (Сайты), например: cn“Sites,cn=configuration.dc=rallencorp,dc=com. 10. В области Scope (Область поиска) установите переключатель в положение Subtree (Поддерево). И. В поле Filter (Фильтр) введите (objectcategory»server). 12. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки > dsquery server [-site <имя_сдйта>] С помощью сценария на языке VBScript ’ Данный код выводит список всех объектов server в составе заданного сайта set objRootDSE - GetObject("LDAP://RootDSE") strBase - "<LDAP://cn=sites." & _ objRootDSE.Get("ConfigurationNamingContext") & strFilter - "(objectcategory=server);" strAttrs - "distinguishedName;” strScope = "subtree" set objConn = CreateObjectC'ADODB.Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS - objConn.Execute(strBase & strFilter & strAttrs & strScope) objRS.MoveFirst while Not objRS.EOF Wscrlpt.Echo objRS.Fields(O).Value objRS.MoveNext wend Комментарий Каждый контроллер домена Active Directory представлен в топологии сайта объектом server, связанным с конкретным сайтом. Топология репликации выби- рается с учетом связей данного сайта с другими сайтами, содержащими контрол- леры домена. Существует целый ряд служб, которые могут добавлять в топологию сайта объек- ты server. Объекты, представляющие контроллеры домена, отличаются от прочих объектов server тем, что в их состав в качестве дочернего входит объект NTDS Set- tings (Параметры NTDS). 11.16. Перемещение контроллера домена в другой сайт Проблема Необходимо переместить контроллер домена в какой-либо иной сайт. Такого рода потребность может возникнуть в том случае, если вы повысите роль сервера до роли контроллера домена, не определив при этом предварительно его подсеть
UIQDQ 1А, | Ul IVUIVI ИЯ VC I И в Active Directory. В результате контроллер домена будет включен в сайт De- faul t-F1 rst-S1 te-Name. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory - сайты и службы). 2. На левой панели поочередно откройте контейнер Sites (Сайты), сайт, где со- держится контроллер домена, который вы хотите переместить, и, наконец, контейнер Servers (Серверы). 3. Щелкните правой кнопкой мыши на сервере, подлежащем перемещению, и выберите в открывшемся контекстном меню команду Move (Переместить) 4. Укажите сайт, куда следует переместить сервер и щелкните на кнопке ОК. ПРИМЕЧАНИЕ---------------------------------------------------------------- В оснастке Active Directory Sites and Services (Active Directory — сайты и службы) для Windows Server 2003 перемещение объектов можно выполнять путем их перетаскивания. С помощью интерфейса командной строки > dsmove "cn-<HW_cepeepa>.cn-servers.cn-<reKww_ca«T>.J cn-sites.cn-configuration.<корневое_0И_леса>" -newparent "cn^servers,сп=<новый_сайт>,J cn-sites.cn-configuration,<корневое_ОИ_леса>п С помощью сценария на языке VBScript ' Код перемещает сервер в другой сайт • ----- SCRIPT CONFIGURATION ---- Эта переменная должна содержать обычное имя объекта server strDC - ”<имя_контроллераломена>" ' Например: dc02 ’ Имя текущего сайта сервера strCurrentSIte - "<текуший_сайт>я ' Например Default-First-Site-Name Имя сайта, в который вы хотите переместить сервер strNewSite - "<новый_сайт>" ' Например: Raleigh ’ -----END CONFIGURATION --....- strConfigDN = GetObjectCLDAP://RootDSE") .GetCconfigurationNamingContext") strServerDN - "LDAP://cn-" & strDC & ",cn=servers.cn=“ & _ strCurrentSIte & ".cn-sites." & strConfigDN strNewParentON - "LDAP://cn=servers.cn-" & strNewSite & ".cn-sites." & strConfigDN Set objCont - GetObjectfStrNewParentON) objCont.MoveHere strServerDN. "cn=" & strDC Комментарий После перемещения сервера в новый сайт имеет смысл проанализировать топо- логию репликации, с тем чтобы выяснить, все ли необходимые подключения созданы. Подробнее о том, как можно просмотреть информацию о репликации, связанную с конкретным сервером, рассказывается в рецепте 12.2 (глава 12)
Alii/ . FQU 1|ЛЛ- I рапсппс WJ IUV I Ft I OFIZ1 l\uni^rvn/IV^U ^vri4.nw Смотрите также Документ MS KB 214677 (Automatic Detection of Site Membership for Domain Controllers). 11.17. Распространение области действия контроллера домена на несколько сайтов Проблема Необходимо настроить контроллер домена таким образом, чтобы его область действия распространялась на несколько сайтов и чтобы клиенты из этих сайтов могли использовать его для аутентификации и поиска данных в каталоге Решение С помощью графического пользовательского интерфейса 1. Выполнив команду Start ► Run (Пуск ► Выполнить), откройте окно командной строки и запустите редактор системного реестра regedit.exe. 2. В окне редактора системного реестра на левой панели поочередно откройте разделы HKEY_LOCAL_MACHINE ► SYSTEM ► CurrentControlSet > Services ► Netlogon ► Parameters. 3. Если параметр SiteCoverage отсутствует, на левой панели щелкните правой кнопкой мыши на разделе Parameters и выберите в контекстном меню команду New ► Multi-String Value (Создать ► Мультистроковый параметр). В поле Name (Имя) введите Si teCoverage. 4. На правой панели дважды щелкните на имени нового параметра и в открыв- шемся окне для редактирования его значения введите имена сайтов, на кото- рые должна распространяться область действия контроллера домена (каждое с новой строки). 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки > reg add HKLM\System\CurrentCoritrolSet\Services\Netlogon\Paranieters /v л "SiteCoverage" /t REG_MULTI_SZ /d <сайт1>\С<сайт2> С помощью сценария на языке VBScript ’ Этот код настраивает контроллер донена таким образом, чтобы ' его область действия распространялась на несколько сайтов ' ---- SCRIPT CONFIGURATION - strDC = "<имя_контроллера_домеиа>" ' Например dcOl arrSites - Аггау("<сайт2>","<сайт2>‘") ’ Массив имен сайтов ’ .... END CONFIGURATION ---- strNTDSReg - "SYSTEM\CurrentControlSet\Services\Netlogon\Pararneters"
const HKLM - &H8D000002 set ObjReg - GetObjectC"winmgmtsAV & strDC & “\root\default-StdRegProv") objReg.SetMultiStringvalue HKLM. strNTDSReg. "SiteCoverage". arrSites WScript.Echo "Site coverage set for " & strDC Комментарий Нс все сайты имеют собственные контроллеры домена. В частности, таковые от- сутствуют у сайтов, топология которых строится по модели реальной сети. В таком случае, только просмотрев связи, можно определить, какие контроллеры домена должны обслуживать сайты, не имеющие собственных контроллеров Когда область действия контроллера домена распространяется на удаленные сайты, он должен опубликовать в DNS связанные с этими сайтами записи ресурсов, чтобы клиенты могли использовать их для поиска контроллера домена Для сайтов, не имеющих котроллеров домена, Active Directory выбирает их автоматически, но существует возможность сделать это путем внесения изменений в реестр, как описано выше, задать список сайтов, на которые будет распространяться область действия ука- занного контроллера домена Смотрите также Документ MS КВ 200498 (Configure a Domain Controller for Membership m Mul- tiple Sites). 11.18. Просмотр списка сайтов, на которые распространяется область действия контроллера домена Проблема Требуется просмотреть список сайтов, на которые распространяется область действия контроллера домена. Решение С помощью интерфейса командной строки В приведенной ниже команде замените <иня_контроллерд_доменд> именем того кон- троллера домена, область действия которого вас интересует: > nltest /server:<имя_контроллера_донена> /DsGetSiteCov С помощью сценария на языке VBScript Microsoft предоставляет в ваше распоряжение метод DsGetDcSi teCoverage, с помощью которого можно получить информацию об области действия контроллера домена. К сожалению, этот метод не поддерживается языками сценариев и в частности
11.1У. играничениола 1и деиньия кин poj лера ди епа VBScript, но зато его можно использовать в языках программирования, например в Visual Basic и C++. Команда nl test, использовавшаяся в решении с применением командной строки, является оболочкой этого метода. Комментарий В рецепте 11.17 рассказывается, как расширить область действия контроллера домена на несколько сайтов, а в рецепте 11.19 — как ограничить его область дей- ствия одним сайтом, в состав которого входит этот контроллер Смотрите также Документ MSDN: DsGetDcSiteCoverage. 11.19. Ограничение области действия контроллера домена Проблема Требуется ограничить область действия контроллера домена одним сайтом, в состав которого он входит. Решение С помощью графического пользовательского интерфейса 1 С помощью команды Start ► Run (Пуск ► Выполнить) откроите окно командной строки и запустите редактор системного реестра regedit.exe. 2 . В окне редактора системного реестра на левой панели поочередно откроите разделы реестра HKEY_LOCAL_MACHINE ► SYSTEM ► CurrentContro Set ► Services ► Netlogon ► Parameters. 3 Щелкните правой кнопкой мыши на разделе Parameters и выберите в контекст- ном меню команду New ► DWORD Value (Создать ► Параметр DWORD). 4 . Введите для нового параметра имя AutoSiteCoverage 5 Дважды щелкните на имени этого параметра, введите в поле Value data (Зна- чение) значение 0 и щелкните на кнопке ОК. С помощью интерфейса командной строки > reg add HKLM\System\CurrentControlSet\Services\Netlogon\Parameters /v J AutoSiteCoverage /t REG_DWORD /d 0 С помощью сценария на языке VBScript ' Этот код ограничивает область действия контроллера домена его собственным сайтом strNetlogonReg - "SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" const HKLM - &H80( 00002 Set objReg - GetObjectC'winmgmts-rootXdefault StdRegProv") objReg.SetDWORDValue HKLM. strNetlogonReg. "AutoSiteCoverage". 0 WScript Echo "Site coverage disabled"
J3U । лава ii. юпология сети Комментарий Если вы хотите снизить нагрузку на контроллер домена, это можно сделать, на- пример, путем сужения его области действия. Смотрите также В рецепте 11.18 рассказывается, как вывести список сайтов, на которые распро- страняется область действия контроллера домена. 11.20. Поиск сайта клиента Проблема Требуется узнать, в состав какого сайта входит клиентский компьютер. Решение С помощью интерфейса командной строки В следующей команде замените <имя_хоста> именем того хоста, для которого вы хотите найти сайт: > nltest /server <имя хоста> ZDsGetSite С помощью сценария на языке VBScript Информацию об области действия контроллера домена можно получить, вос- пользовавшись методом DsGetDcSi teCoverage. К сожалению, в VBScript этот метод не поддерживается, но зато его можно применить в Visual Basic, C++ и ряде других языков программирования. Команда nltest, использовавшаяся в решении с за- действованием командной строки, является оболочкой данного метода. Еще одну оболочку указанного метода включает интерфейс lADsTool: set objladsTools - CreateObjectCIADsTools.DCFunctions’1) strSite - objIadsToo1s.DsGetSiteName("<MHfl_xocT<3>") Wscript Echo “Site: " & strSite Комментарий Каждый контроллер домена представлен объектом server, входящим в состав объекта site. Клиенты связаны с сайтами иначе — через IP-адреса и соответствующие объекты subnet в контейнере Subnets (Подсети). Информация о том, к какому сайту относится клиент, очень важна, поскольку позволяет правильно выбрать контроллер домена для его аутентификации. Если IP-адрес клиента не указан ни в одном объекте subnet, сайт для этого клиента будет выбираться случайным образом, а следовательно, случайным будет и выбор контроллера домена, выполняющего аутентификацию. О том, как связать сайт с клиентом, вы узнаете из рецепта 11.21.
11.21. Связывание клиента с конкретным сайтом Л7Л Смотрите также В рецепте И 21 рассказывается, как ограничить область действия контроллера домена одним сайтом, в состав которого он входит. Кроме того, ознакомьтесь с документами MS КВ 247811 (How Domain Controllers Аге Located in Windows) и MSDN- DsGetSiteName 11.21. Связывание клиента с конкретным сайтом Проблема Необходимо связать клиента в Active Directory с конкретным сайтом. Решение С помощью графического пользовательского интерфейса 1. С помощью команды Start ► Run (Пуск ► Выполнить) откройте окно командной строки и запустите из него редактор системного реестра regedit.exe, 2. В окне редактора системного реестра на левой панели поочередно откройте разделы реестра HKEY_LOCAL_MACHINE ► SYSTEM ► CurrentControlSet ► Services ► Netlogon ► Parameters. 3. Щелкните правой кнопкой мыши на разделе Parameters и выберите в контекст- ном меню команду New ► String Value (Создать ► Строковый параметр) 4. Присвойте новому параметру имя SiteName. 5. Дважды щелкните на имени этого параметра, введите в поле Value data (Зна- чение) имя сайта и щелкните на кнопке ОК. С помощью интерфейса командной строки > reg add HKLM\S,yste<n\CiirrentControlSet\Services\Netlogon\Parameters /v SiteName /t J REGSZ /d <имя_сайта> С помощью сценария на языке VBScript Код связывает хост на котором выполняется сценарий. с заданным сайтом ’ ---- SCRIPT CONFIGURATION -- strSite - "<имя сайгак ' Например: Raleigh ' ---- END CONFIGURATION ----- strNetlogonReg - "SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" const HKLM - &H80000002 set objReg - GetObjectCwInmgmts root\default:StdRegProv") objReg.SetStrlngValue HKLM. strNetlogonReg. “SiteName". strSite WScrlpt.Echo “Set SiteName to " & strSite
Комментарий Для того чтобы процессу-локатору контроллера домена, выполняющемуся на клиентском компьютере, не приходилось искать сайт, с помощью которого он сможет подключиться к Active Directory, имя такого сайта можно указать в сис- темном реестре. Правда, делать так не рекомендуется — данное решение приведено скорее как средство разрешения возникших проблем. Если аутентификация кли- ентов проходит при больших задержках, вызванных тем, что объект site или subnet не настроен, можно, временно записав имя сайта в реестр, оптимизировать подключение. Смотрите также В рецепте 11.20 рассказывается, как определить, в состав какого сайта входит клиент Просмотрите документ MS КВ 247811 (How Domain Controllers Are Lo- cated in Windows). 11.22. Создание объекта connection Проблема Требуется создать объект connection, позволяющий вручную настраивать репли- кацию между двумя сайтами. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory - сайты и службы). 2 На левой панели поочередно откройте контейнер Sites (Сайты), сайт, где будет создан объект connection, контейнер Servers (Серверы) и, наконец, сервер ко- торому должен принадлежать этот объект 3. Щелкните правой кнопкой мыши на объекте NTDS Setti ngs (Параметры NTDS) и выберите в открывшемся контекстном меню команду Create New Active Direc- tory Connection (Новое подключение Active Directory). 4. Укажите имя партнера по репликации и щелкните на кнопке ОК. 5. Введите имя подключения и щелкните на кнопке ОК. С помощью интерфейса командной строки > repadnnn /add <И0_раздела> <0№>-имя_сервера1> <0№-имя_сервера2> Комментарий Вообще говоря, объекты connection вручную создавать не понадобится — это работа средства проверки согласованности знаний. Поддерживать актуальность их дан- ных, особенно в большой сети, — задача очень непростая. КСС на основе сложного
11.23. Вывод списка объектов connection для указанного сервера 393 алгоритма определяет, какие контроллеры домена являются наилучшими парт- нерами для выполнения репликации, и создает объекты связи connection между ними. В Windows 2000 функционирование данного средства в большой сети было не вполне удовлетворительным, но в Windows Server 2003 ряд его недостатков устранен. Однако проблемы по-прежнему возникают — в таком случае репликацию между несколькими сайтами приходится выполнять повторно. Создайте подклю- чение, представленное объектом connect! on, и серверы быстро произведут синхро- низацию. Смотрите также В рецепте 11.23 речь идет о выводе списка объектов connection для заданного кон- троллера домена. 11.23. Вывод списка объектов connection для указанного сервера Проблема Требуется вывести список объектов connection, связанных с определенным кон- троллером домена. Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Sites and Services (Active Directory - сайты и службы) 2. На левой панели поочередно откройте контейнер Sites (Сайты), сайт, где на- ходятся объекты connection, контейнер Servers (Серверы) и, наконец, сервер, подключения которого вы хотите просмотреть. 3. Щелкните на объекте NTDS Settings (Параметры NTDS). На правой панели бу- дет выведен список подключений, сгенерированных автоматически (средст- вом КСС) и вручную. С помощью интерфейса командной строки > repadmin /showconn [<иня^онтроллера_домена>] С помощью сценария на языке VBScript Этот код выводит слисок объектов connection, связанных с данным сервером • ---- SCRIPT CONFIGURATION . strServer - “<иня_сервера>" ‘ Например: dcOl strSite - "<имя сайта>" ' Например: MySItel 1 -... END CONFIGURATION ---- set objRootDSE * GetObjectCLDAP://RootDSE")
394 Глава 11. Топология сети set objNTDSCont - GetObjectC"LDAPr/Zcn^NTDS Settings.cn-" & strServer & _ “.cn-servers.cn-" & strSite & ".cn-sites.” & _ bjRootDSE GetCconfigurationNamingContext") ) objNTDSCont.Filter - Array("ntdsConnection") WScript.Echo "Connection objects for ” & strSite & "\” & strServer for each objConn in objNTDSCont if objConn.Get(“options") - 0 then Wscrlpt.Echo “ “ & objConn.Get(”cn“) & ” (MANUAL)" else Wscript Echo " " & objConn.Get("cn") & " (AUTO)’ end if next ПРИМЕЧАНИЕ---------------------------------------------------------------------------------- Слисок объектов connection для определенного сервера можно получить и другим программным способом, а именно с помощью метода GetDSAConnecbons из интерфейса IADsTooI. Комментарий Объекты connect! on используются для репликации изменений на контроллер домена. Просмотрев список таких объектов, связанных с определенным сервером, вы узнаете, с каких контроллеров домена он получает обновления Объекты connection автоматически создаются средством проверки согласованности знаний (КСС), но при необходимости их можно создать и вручную. Смотрите также В рецепте 11 22 рассказывается о создании объекта connecti on. 11.24. Распределение нагрузки между серверами-плацдармами Проблема Требуется равномерно распределить объекты connection между серверами-плац- дармами сайта. Решение С помощью интерфейса командной строки Для того чтобы узнать, какие изменения внесет приведенная ниже команда, вы- полните ее без ключа /comnit (этот ключ используется для записи изменений в Active Directory). > adlb /server:<имя_контроплера_ромена> -^1е:<иня_сайта> [/commit] [/verbose] ПРИМЕЧАНИЕ--------------------------------------- Утилита adlb входит в состав пакета Windows Server 2003 Resource Kit.
11.25. Поиск генератора межсайтовой топологии для указанного сайта 395 Комментарий Не исключено, что при наличии нескольких серверов-плацдармов одни из них будут загружены больше других. Равномерно распределить объекты connection между серверами-плацдармами сайта позволяет утилита ADLB (Active Directory Load Balancing — балансирование нагрузки в Active Directory). Для этой цели го- раздо больше подходят алгоритмы, разработанные для Windows Server 2003, не- жели алгоритмы из Windows 2000, но и в том и в другом случае утилита «срабо- тает» лишь при условии, что будут добавлены новые объекты connection. Прежде чем запускать утилиту adlb с ключом /commit, желательно сначала за- пустить ее без ключа и посмотреть, не нарушится ли при этом топология репли- кации сайта. 11.25. Поиск генератора межсайтовой топологии для указанного сайта Проблема Необходимо найти для заданного сайта генератор межсайтовой топологии (Inter- Site Topology Generator, ISTG). Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Щелкните па имени интересующего вас сайта. 3 На правой панели дважды щелкните на объекте NTDS Site Settings (Парамет- ры сайта NTDS). Генератор межсайтовой топологии, если таковой имеется будет указан в поле с соответствующим названием. С помощью интерфейса командной строки > repadmin /istg <имя_контроллера_ромена> Данная команда имеется только в Windows Server 2003. С помощью сценария на языке VBScript Код находит ISTG для заданного сайта ' ----- SCRIPT CONFIGURATION - strSiteName - <нмя_сайта> ' Например: Raleigh ' ---- END CONFIGURATION ---- set objRootDSE - GetObject("LDAP://RootDSE") set objSiteSettings - GetObjectC"LDAP://cn-NTDS Site Settings.cn-" & strSiteName & ".cn=sites." & _ obj RootDSE.Get("Configurati onNamingContext")) on error resume next strlSTGON = objSiteSettings.GetC'interSiteTopologyGenerator")
396 Глава 11. Топология сети if (strlSTGDN <> "") then set objNTDSSettings - GetObject("LDAP://’ & strlSTGDN) set objServer - GetObjectC objNTDSSettings.Parent ) WScnpt.Echo "ISTG for site " & strSiteName & " is " & _ objServer Get("dnsHostName”) else WScrlpt.Echo "No ISTG found for site " & strSiteName end if Комментарий Каждый сайт содержит один контроллер домена, выполняющий роль генератора межсайтовой топологии. В отличие от всех прочих контроллеров домена, кото- рые генерируют собственные межсайтовые подключения, генератор межсайтовой топологии отвечает за создание межсайтовых подключений для серверов-плацдар- мов сайта В атрибуте interSiteTopologyGenerator объекта NTDS Site Settings (Параметры сайта NTDS), связанного с данным сайтом, хранится имя объекта NTDS Setti ngs (Параметры NTDS) текущего генератора межсайтовой топологии. Отключение генератора межсайтовой топологии для данного сайта эквива- лентно отключению средства проверки согласованности знаний. О том, как от- ключить КСС, вы узнаете из рецепта 11.29. Смотрите также В рецепте 11.26 речь идет о передаче роли генератора межсайтовой топологии другому контроллеру домена. Кроме того, рекомендуем ознакомиться с докумен- тами MS КВ 224815 (The Role of the Inter-Site Topology Generator in Active Direc- tory Replication) и MS KB 224599 (Determining the Inter-Site Topology Generator (ISTG) of a Site in the Active Directory). 11.26. Передача роли генератора межсайтовой топологии другому контроллеру домена Проблема Требуется передать роль генератора межсайтовой топологии указанного сайта дру- гому контроллеру домена. При отключении текущего генератора мсжсайтовой топологии передача производится автоматически, но ее можно выполнить и вруч- ную — в таком случае эту роль можно передать более подходящему серверу Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Если раздел конфигурации здесь не представлен, подключитесь к нему.
11.26. Передача роли генератора межсайтовой топологии 397 3. На левой панели поочередно откройте контейнеры Configuration ► Sites (Кон- фигурация ► Сайты). 4. Щелкните на имени сайта, для которого решили задать другой генератор меж- сайтовой топологии. 5. На правой панели дважды щелкните на элементе CN4ITDS Si te Setti ngs. 6. Запишите в атрибут InterSiteTopologyGenerator имя объекта NTDS Settings (Па- раметры NTDS) контроллера домена, который вы хотите назначить на роль генератора межсайтовой топологии. 7. Щелкните на кнопке ОК. С помощью сценария на языке VBScript ' Этот код задает для сайта новый генератор межсайтовой топологии . ’ ----SCRIPT CONFIGURATION....... ' Имя сайта, для которого должен быть установлен новый генератор межсайтовой топологии strSiteName - "<иня_сайта>" ' Например: Raleigh ’ Имя сайта, в состав которого входит новый генератор межсайтовой топологии strNewlSTGSIte - ''<1$ТС-имя_сайта>" ' Например: Raleigh ’ Обычное имя объекта server нового генератора мексайтовой топологии strNewISTGName - "<имя_контроллера_ромена>'' ' Например; dcOl 1 ------ END CONFIGURATION -------- set objRootDSE - GetObject("LDAP://RootDSE") set objSiteSettings - GetObject("LDAP://cn-NTDS Site Settings.cn-" & _ strSiteName & ".cn-s1tes." & _ objRootDSE.Get("Confi gurati onNami ngContext")) strCurrentlSTG - objSiteSettings.Get("InterSiteTopologyGenerator") objSiteSettings.Put "interSiteTopologyGenerator", "cn-NTDS Settings.cn-" & strNewISTGName & _ ".cn-servers.cn-" & strNewlSTGSIte & ".cn-sites." & _ objRootDSE.Get("Conf1gurati onNami ngContext") ObjSiteSettings.SetInfo WScript Echo "ISTG for " & strSiteName & " changed from:’ WScrlpt.Echo " " & strCurrentlSTG WScrlpt.Echo "To" WScrlpt.Echo " " & objSiteSettings.GetC’interSiteTopologyGenerator") Комментарий В атрибуте interSiteTopologyGenerator объекта NTDS Site Settings (Параметры сайта NTDS), связанного с сайтом, хранится отличительное имя объекта NTDS Settings (Параметры NTDS) текущего генератора межсайтовой топологии этого сайта. Выполняя роль генератора межсайтовой топологии, контроллер домен пери- одически перезаписывает значение атрибута InterSiteTopologyGenerator. Если вы захотите назначить на эту роль другой контроллер домена, запишите в данный атрибут отличительное имя объекта NTDS Settings (Параметры NTDS) этого кон- троллера. С регистрацией генератора межсайтовой топологии связаны два параметра системного реестра, хранящиеся в разделе HKEY_LOCAL_MACHINE\System\Current- ControlSet\Services\NTDS\Parameters. Первый из них представляет длительность
398 Глава 11. Топология сети интервалов (измеряется в минутах), через которые текущий генератор межсайто- вой топологии обновляет значение атрибута Inters it eTopol ogyGenerator, показы- вая тем самым другим контроллерам домена, что он по-прежнему выполняет на- значенную ему роль. Этот параметр называется КСС site generator renewal interval (minutes) и по умолчанию содержит значение 30. Второй параметр, КСС site gene- rator fail - over (minutes), содержит время, в течение которого каждый контроллер домена должен ждать обновления атрибута interSiteTopologyGenerator, прежде чем предпринять попытку самому зарегистрироваться на данную роль По умолчанию это время составляет 60 мин. Смотрите также Документ MS КВ 224815 (The Role of the Inter-Site Topology Generator in Active Directory Replication). 11.27. Запуск средства проверки согласованности знаний Проблема Требуется запустить в системе Active Directory средство проверки согласованности знаний Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку Active Directory Sites and Services (Active Directory - сайты и службы). 2. На левой панели выберите объект NTDS Settings (Параметры NTDS) того сер- вера, для которого вы решили запустить средство проверки согласованности знаний. 3. Щелкните правой кнопкой мыши на объекте NTDS Setti ngs (Параметры NTDS), выберите в открывшемся контекстном меню команду All Tasks ► Check Replication Topology (Все задачи ► Проверка топологии репликации). 4. Щелкните на кнопке ОК С помощью интерфейса командной строки > repadnrin /ксс <имя_контроллера_домена> С помощью сценария на языке VBScript Этот код запускает КСС на контроллере донена ’ SCRIPT CONFIGURATION strDC - "<имя_контроллера_ромена>" ' Например: dcOl ‘ END CONFIGURATION - set objladsTools = CreateDbject("IADsTools.DCFunctions")
11.28. Контроль функционирования средства проверки согласованности знаний 399 intRes - objladsTools.TriggerKCC(Cstr(strDC).O) if IntRes - -1 then Wscript.Echo objIadsTools.LastErrorText else Wscript.Echo "KCC successfully triggered'* end if Комментарий По умолчанию средство проверки согласованности знаний каждые 15 мин вы- полняет свою задачу — анализирует топологию сайтов и генерирует межсайтовые подключения На сервере, выбранном в качестве генератора межсайтовой топо- логии, КСС создает подключения серверов-плацдармов к контроллерам домена других сайтов В некоторых случаях, например при создании нового сайта, связи сайтов или подсети, это средство необходимо запустить вручную, с тем чтобы создать новые подключения между контроллерами домена. Смотрите также В рецепте 11.28 рассказывается, как узнать, успешно ли КСС выполняет свою ра- боту. Информация об интерфейсе lADsTools приведена в файле iadstools.doc, вхо- дящем в состав пакета Support Tools. Просмотрите документ MS КВ 224815 (The Role of the Inter-Site Topology Generator in Active Directory Replication). 11.28. Контроль функционирования средства проверки согласованности знаний Проблема Требуется узнать, успешно ли КСС выполняет свои функции Решение С помощью графического пользовательского интерфейса 1 Откройте на контроллере домена служебную программу Event Viewer (Про- смотр событий). 2 Выберите журнал службы каталогов 3 На правой панели щелкните на заголовке Source (Источник), чтобы отсортировать записи журнала по этому столбцу 4 . Найдите события, источником которых является объект NTDS КСС. С помощью интерфейса командной строки Следующая команда выводит из журнала службы каталогов список ошибок, до- пущенных средством КСС: > dcdiag /v /test kccevent /s <имя_контроллерд_ромена>
400 Глава 11. Топология сети Комментарий Единственный способ обнаружить проблемы, связанные с работой средства про- верки согласованности знаний, заключается в просмотре списка событий NTDS КСС в журнале службы каталогов. Если у вас создалось впечатление, что что-то идет не так, если система выводит сообщения об ошибках, увеличьте количество про- токолируемых событий, включив диагностическое протоколирование КСС. В этом случае для каждого исключения средства проверки согласованности знаний в жур- нал будет записываться подробная информация, что поможет вам выявить источ- ник проблемы. О том, как включить диагностическое протоколирование, расска- зывается в рецепте 15.2 (глава 15). 11.29. Отключение средства проверки согласованности знаний для указанного сайта Проблема Требуется отключить средство проверки согласованности знаний для заданного сайта и самостоятельно создать подключения для выполнения репликации меж- ду контроллерами домена. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Если раздела конфигурации на левой панели нет, подключитесь к нему. 3. На левой панели в разделе конфигурации откройте контейнер Sites (Сайты). 4. Щелкните на имени сайта, для которого вы хотите отключить средство провер- ки согласованности знаний. 5. На правой панели дважды щелкните на объекте CN=NTDS Site Settings (Пара- метры сайта NTDS). 6. Отредактируйте значение атрибута options. Для того чтобы отключить только генерацию внутрисайтовой топологии, задайте значение этого атрибута рав- ным 1 (00001), при необходимости отключить только генерацию межсайтовой топологии — равным 16 (10000), а для отключения обеих топологий — равным 17 (10001). 7. Щелкните на кнопке ОК. С помощью интерфейса командной строки Отключить КСС для сайта <имя_сдйга> вам поможет утилита Idifde. Создайте LDIF-файл с именем disable_kcc.ldf и таким содержимым: dn: cn-NTDS Site Settings.<w«fl_cawra>.cn=sites.cn-configurat1on.<Kopwesoe_(W_neca> changetype: modify
11.29. Отключение средства проверки согласованности знаний 401 replace: options options <значение> Затем выполните следующую команду: > Idifde -v -1 -f dlsable_kcc.ldf С помощью сценария на языке VBScript 1 Данный код отключает КСС для определенного сайта • ------ SCRIPT CONFIGURATION ----- strSiteName - "<имя_сайта>“ ' Напринер: Default-First-Site-Name bool Disablelntra TRUE ' Присвойте этой переменной значение TRUE или FALSE. * чтобы отключить или включить КСС внутри сайта boolDlsablelnter - TRUE * Присвойте этой переменной значение TRUE или FALSE. * чтобы отключить или включить КСС между сайтами ' ------END CONFIGURATION.......- strAttr - "options" set objRootDSE - GetObject("LDAP://RootDSE") set objObject - GetObjectC"LDAP //cn-NTDS Site Settings cn-1 _ & strSiteName & ''.cn-sites." & _ objRootDSE Get("conf1gurationNamingContext") ) IntBitsOrig - objObject.Get(strAttr) IntBItsCalc CalcB1t(IntBitsOrig. 1. boolDisablelntra) WScript.Echo "Checking the KCC Intra-site generation flag-" if intBitsOrig <> intBItsCalc then objObject Put strAttr. IntEitsCalc objObject Setinfo WScript Echo " Changed " & strAttr & " from " & _ intBitsOrig & " to " & intBItsCalc else WScript.Echo " Did not need to change " & strAttr & " (" & intBitsOrig & ")" end if IntBitsOrig - objObject Get(strAttr) intBItsCalc - CalcBitdntBitsOrig 16. boolDlsablelnter) WScript.Echo "Checking the KCC Inter-site generation flag:" 1f intBitsOrig <> intBItsCalc then objObject.Put strAttr, IntBItsCalc objObject.Setinfo WScript.Echo " Changed " & strAttr & " from " & intBitsOrig & _ " to " & intBItsCalc else WScript.Echo " Did not need to change " & strAttr & " (" & _ intBitsOrig & ")“ end if Комментарий В некоторых ситуациях администраторам сетей приходится отказываться от соз- дания подключений внутри сайта, между сайтами или вообще любых подключе- ний при помощи средства проверки согласованности знаний. Объекты connection, динамически создаваемые данным средством, представляют подключения между
402 Глава 11. Топология сети контроллерами домена, используемые для обмена репликами. При работе с Win- dows 2000 данное средство рекомендуется отключать во время возникновения в очень больших сетях проблем, связанных со скоростью репликации. В Windows Server 2003 средство проверки согласованности знаний было значительно усо- вершенствовано, и теперь, по всей видимости, отключать его не требуется. По крайней мере, автор не рекомендовал бы его отключать без веских на то причин, поскольку это требует постоянного отслеживания изменений в топологии сайта и соответствующей настройки объектов connection. Отключать КСС можно только на уровне сайта. Для этого необходимо изме- нить значение атрибута options объекта NTDS Site Settings (Параметры сайта NTDS), связанного с данным сайтом. Если в этом атрибуте установлено значение 1 (0С001), значит, отключена функция автоматического создания внутрисайтовых объектов connection, а если установлено значение 16 (10000) — функция создания межсайто- вых объектов connection. Смотрите также В рецепте 4.12 (глава 4) рассказывается об установке битовых флагов, входящих в состав значений атрибутов, а в рецепте 11.22 — о том, как вручную создаются объекты connection. Кроме того, ознакомьтесь с документами MS КВ 242780 (How to Disable the Knowledge Consistency Checker From Automatically Creating Replication Topology) и MS KB 245610 (HOW TO: Disable the Knowledge Consistency Checker Inter-Site Topology Generation for All Sites). 11.30. Изменение периода работы средства проверки согласованности знаний Проблема Требуется изменить период работы средства проверки согласованности знаний. Решение С помощью графического пользовательского интерфейса 1. Из диалогового окна, открываемого в результате выполнения команды Start ► Run (Пуск ► Выполнить), запустите программу regeditexe. 2. Затем на левой панели редактора реестра поочередно откройте разделы HKEY_ LOCAL_MACHINE ► SYSTEM ► CurrentControlSet ► Services ► NTDS ► Parameters. 3. Щелкните правой кнопкой мыши на разделе Parameters и выберите в контек- стном меню команду New ► DWORD Value (Создать ► Параметр DWORD). 4. Введите имя параметра Repl topology update period (secs). 5. Дважды щелкните на имени созданного параметра и в поле Value data (Значе- ние) укажите период работы КСС в секундах (по умолчанию данное средство выполняет свою задачу каждые 900 с). 6. Щелкните на кнопке ОК.
11.30. Изменение периода работы средства проверки согласованности знаний 403 С помощью интерфейса командной строки > reg add HKLM\System\CurrentControlSet\Services\NTDS\Paranieters /v “Repl topology J update period (secs)" /t REGJMJRD /d <число_секунд> С помощью сценария на языке VBScript ’ Этот код изменяет период работы КСС 1 ..... SCRIPT CONFIGURATION --- intNumSecs - <число_секунд> ' Величина периода в секундах, (по умолчанию равна 900 с) ' ----- END CONFIGURATION ------ strNetlogonReg - "SYSTEM\CurrentControlSet\Services\NTDS\Parameters" const HKLM - &H80000002 Set objReg - GetObject("winmgmtSirootXdefaultzStdRegProv") objReg.SetDUORDValue HKLM. strNetlogonReg. "Repl topology update period (sees)", intNumSecs WScript.Echo "KCC interval set to " & intNumSecs Комментарий По умолчанию средство проверки согласованности знаний выполняет свою зада- чу — анализирует топологию сайта и вносит необходимые изменения в топологию репликации, создавая и удаляя объекты connection, — каждые 900 с, или 15 мин. Этот интервал можно изменить, внеся соответствующие изменения в системный реестр. Такая необходимость часто возникала в Windows 2000 при работе с боль- шой сетью, когда КСС выполняло свою задачу более 15 мин, или монополизиро- вало центральный процессор. В подобных случаях оптимальный интервал обычно составлял около 1 ч. В Windows Server 2003 данное средство значительно усовер- шенствовано, в частности относительно масштабируемости, поэтому теперь из- менять период его функционирования, заданный по умолчанию, не рекомендуется. Существует еще один важный параметр реестра, связанный с работой КСС. По умолчанию средство начинает работу через 5 мин после запуска Active Directory. Для того чтобы изменить это время, нужно добавить в реестр параметр типа REG DWORD с именем Repl topology update delay (secs), поместив его в раздел HKLM\System\Cur- rentControlSet\Services\NTDS\Parameters\. Значением данного параметра является время с момента запуска Active Directory и до активизации КСС. Смотрите также Документ MS КВ 271988 (Replication Topology Updates).
12 Репликация 12.0. Введение Репликация - это одна из важнейших и наиболее сложных функций Active Di- rectory Необходимая для ее поддержки инфраструктура, в частности информация о топологии сети, объекты подключений и средство проверки согласованности знаний, рассматривается в главе 11. В настоящей главе мы сосредоточимся на за- дачах и процессах, связанных с репликацией данных и проверкой ее результатов. 12.1. Проверка синхронизации двух контроллеров домена Проблема Требуется определить, синхронизированы ли два контроллера домена, то есть не содержатся ли на них объекты, подлежащие репликации. Решение С помощью интерфейса командной строки Приведенные ниже команды позволяют сравнить векторы актуальности на двух контроллерах домена > repadmin /showutdvec <имя_контротера_домена1> <ОИ_контекста_именования> > repadmln /showutdvec <имя_контро/1лера_домена2> <ОИ_контенста_инеиования> Утилита repadmin для Windows 2000 имеет иной синтаксис. С ее помощью та же задача выполняется следующим образом: > repadmin /showvector <ОИ_контекста_имеиования> <имя_контроллера_домена1> > repadmln /showvector <ОИу<онтекста_именования> <имя_нонтроллера_доненаВ> С помощью сценария на языке VBScript Этот код вьводит вектор актуальности для двух контроллеров домена в виде массива arrDCList для контекста именования, заданного в переменной strNCDN — SCRIPT CONFIGURATION — Данной переменной присваивается отличительное имя контекста именования для которого проверяется, выполнена ли синхронизация двух контроллеров домена strNCDN - "<ОИ_коитекста_именования>“ ' Например dc-amer.dc-ra11encorp,dc=com В этом массиве задаются имена контроллеров домена
12.2. Просмотр сведений о репликации для нескольких контроллеров домена 405 arrDCList - Ьггау("<иня^онтроллера_дсмена1>'."<имя_кснтроллера_донена^>") ’ -----END CONFIGURATION —...... set objladsTools - CreateObjectC'lADsTools.DCFunctions") for each strDC in arrDCList WScript Echo "Replication partner USNs for " & strDC & IntUSN - objladsTools.GetHighestComittedUSN(Cstr(strDC).0) if intUSN - -1 then Wscript.Echo "Error retrieving USN: " & objladsTools.LastErrorText WScript.Quit end if WScript Echo vbTab & strDC & " = " & IntUSN IntRes = objladsTools.GetRepl1cationUSNState(Cstr(strDC). Cstr(strNCDN).O.O) if IntRes - -1 then , Wscript.Echo "Error retrieving USNs: " & objladsTools.LastErrorText WScript.Quit end if for count = 1 to intRes WScript Echo vbTab & objladsTools.ReplPartnerName(count) & " " & objladsTools ReplPartnerUSNCcount) next WScript Echo next Комментарий Для того чтобы выяснить, синхронизированы ли реплики данных Active Directory на двух контроллерах домена, нужно сравнить их векторы актуальности. Каждый контроллер домена хранит для каждого из своих партнеров по репликации мак- симальное значение, называемое последовательным номером обновления (Update Sequence Number, USN) Набор таких значений называется вектором актуальности. Для того чтобы проверить, синхронизированы ли контроллеры домена DC1 и DC2, нужно сначала прочитать вектор актуальности DC1, а затем сравнить содержа- щийся в нем максимальный USN со значением, которое DC2 считает максимальным номером обновления для DC1. Если они не совпадут, это будет означать, что DC2 еще не получил всех измененных данных от DC1 Затем выполняется обратное сравнение, которое должно показать, реплицированы ли па DC1 все изменения, внесенные в каталог на DC2. Смотрите также В документе IadsTools.doc, входящем в состав пакета Support Tools, приведена до- полнительная информация об интерфейсе lADsTools. 12.2. Просмотр сведений о репликации для нескольких контроллеров домена Проблема Требуется просмотреть сведения о текущих процессах репликации, выполняемых на одном или нескольких контроллерах домена.
406 Глава 12. Репликация Решение С помощью интерфейса командной строки Следующая команда выводит информацию о процессах репликации, выполняемых на всех контроллерах домена, которые входят в состав леса: > repadmin /repl sum В ней можно использовать символ подстановки *, позволяющий просматри- вать сведения о состоянии репликации для заданного подмножества доменов. На- пример, приведенная ниже команда выводит такого рода данные только для тех серверов, имена которых начинаются с dc-rtp: > repadmin /replsum dc-rtp* ПРИМЕЧАНИЕ-------------------------—--------------------------— Команда repadmin поддерживается только в Windows Server 2003. Комментарий Ключ / repl sum команды repadmin позволяет быстро получить сведения о текущем состоянии репликации. Когда у вас складывается впечатление, что возникли ка- кие-либо проблемы, первым делом выполшлте эту команду. Если команда repadmin с ключом / repl sum используется для запроса сведений о большом числе контроллеров домена, то, добавив в нее ключ /sort, можно упорядочить результирующую таблицу по одному из столбцов. Еще один полезный ключ, /errorsonly, позволяет вывести сведения только о тех контроллерах домена, с которыми связаны ошибки репликации. 12.3. Просмотр нереплицированных изменений в каталогах двух контроллеров домена Проблема Требуется просмотреть все нереплицированные изменения, внесенные в реплики каталога на каждом из двух указанных контроллеров домена. Решение С помощью графического пользовательского интерфейса 1. Запустите утилиту Replication Monitor из пакета Support Tools (replmon.exe). 2. Выполните команду View ► Options (Вид ► Параметры). 3. На вкладке General (Общие) установите флажок Show Transitive Replication Part- ners and Extended Data (Показать партнеров по транзитивной репликации и рас- ширенные данные), щелкните на кнопке ОК. 4. На левой панели щелкните правой кнопкой мыши на элементе Monitored Servers (Серверы для анализа) и выберите команду Add Monitored Server (Добавить сер- вер для анализа). Запущенный в результате этого мастер Add Monitored Ser-
12.3. Просмотр нереплицированных изменений 407 ver Wizard поможет вам указать первый из двух контроллеров домена (назо- вем его DC1) — тот, на котором будет производиться мониторинг. 5. На левой панели в контейнере указанного вами сервера откройте раздел каталога, информацию о котором вы хотите просмотреть. 6. Щелкните правой кнопкой мыши на втором контроллере домена (назовем его DC2) и выберите в контекстном меню команду Check Current USN and Un-replicated Objects (Проверить текущие USN и нереплицированные объекты) 7. Если понадобится, введите имя и пароль пользователя, после чего щелкните на кнопке ОК. 8. Если какие-либо изменения еще не реплицированы с DC2 на DC1, откроется окно, в котором будет представлен список нереплицированных объектов 9. Для получения списка изменений, еще не реплицированных с DC1 на DC2, пов- торите те же действия, но в качестве анализируемого укажите сервер DC2, а в качестве сравниваемого с ним — сервер DC1. С помощью интерфейса командной строки Для того чтобы обнаружить все отличия между репликами каталога, хранящимися на двух контроллерах домена, выполните указанные ниже команды. Воспользо- вавшись ключом /statistics, вы сможете просмотреть общие сведения о произве- денных изменениях: > repadmin /showchanges <имя_нонтроллера_домена1> <DC2GUID> ОИ_контенста_имеиования> > repadmin /showchanges <иняу<онтроллера_домена2> <DC1GUID> <ОИ_контекста_именования> Версия утилиты repadmin для Windows 2000 имеет иной синтаксис. С се помощью та же задача решается следующим образом: > repadmin /getchanges <ОИ_контекста_иненования> <иня__контроллера_ролена1> <DC2GUID> > repadmin /getchanges ОИ_контекста_иненования> <иня_контроллера_донена2> <DC1GUID> С помощью сценария на языке VBScript ' Данный код с помощью интерфейса lADsTools выводит список нереплицированных 1 изменений в разделе каталога strNCDN для двух контроллеров докена, имена которых заданы в переменных strDCIName и strDC2Name 1 — SCRIPT CONFIGURATION — strNCDN - "<ОИ_контекста_именования>" ' Например: dc-raИencorp.dc-com strDCIName - "<имя_контроллера_домена1>“ ' Например: dcl.rallencorp.com strOC2Name = "<имя контроллера_домена2>'' ’ Например: dc2.railencorp.edm * — END CONFIGURATION ------ set objIadsTools - CreateObjectC'IADsTools.OCFunctions”) ' Для того чтобы правильно идентифицировать партнера в вызове метода GetReplicationUSNState, ' нужно получить GUID обоих серверов strDCIGUID = objIadsTools.GetGuidForServer(Cstr(strDClName). Cstr(strDClName).O) strDC2GUID - objIadsTools.GetGuidForServer(Cstr(strDC2Name). Cstr(strDC2Name).O) Теперь для каждого сервера необходимо получить значение USN другого сервера, которое он считает максимальным. Эти данные передаются методу GetMetaDataDifferences. возвращающему сведения о нереплицируемых изменениях
408 Глава 12. Репликация IntRes = objladsTools.GetReplicationUSNState(Cstr(strDClName). Cstr(strNCDN).O.O) if intRes = -1 then Wscri pt.Echo objIadsTools.LastErrorText WScript.Quit end if for count - 1 to intRes if strDC2GUID = objladsTools.ReplPartnerGuid(count) then 1ntDC2USN - objIadsTools.ReplPartnerUSNtcount) end if next if 1ntDC2USN = "" then WScript.Echo strDC2Name & ” is not a replication partner with " & strDCIName end if intRes = objladsTools.GetReplicationLISNState(Cstr(strOC2Name). Cstr(strNCDN).O.O) if intRes = -1 then Wscri pt.Echo objladsTools.LastErrorText WScript.Quit end if for count = 1 to intRes if strDCIGUID = objladsTools.ReplPartnerGuid(count) then intDClUSN - objladsTools.ReplPartnerUSN(count) end if next if intDC2USN - "" then WScript.Echo strDCIName & ” is not a replication partner with " & strDC2Name end if ’ Теперь, получив максимальные значения USN иля обоих партнерев,можно передать их методу ' GetMetaDataDifferences. чтобы получить сведения о нереплицированных изменениях intRes - objladsTools.GetMetaDataDifferences(Cstr(strDClName). Cstr(intDClUSN), Cstr(strNCDN).0) if intRes - -1 then Wscri pt.Echo objIadsTools.LastErrorText WScript.Quit end if WScript.Echo "Data on " & strDCIName & " but not " & strDC2Name & for count - 1 to intRes WScript.Echo count & ". " & _ objIadsTools.MetaDataDi fferencesObjectDN(count) WScript.Echo vbTab & ” Attribute: " & _ objladsTools.MetaDataDifferencesAttribute(count) WScript.Echo vbTab & " Write time: " & _ objladsTools.MetaDataDifferencesLastWriteTime(count) WScrlpt.Echo vbTab & “ Orig Server: ” & _ objladsTools.MetaDataDi fferencesOri gServer(count) WScript.Echo vbTab & “ Orig USN: " & _ objladsTools.MetaDataDi fferencesOri gUSN(count) next WScript.Echo intRes - objladsTools.GetMetaDataDifferences(Cstr(strDC2Name). Cstr(intDC2USN), Cstr(strNCDN). 0) if intRes - -1 then Wscri pt.Echo objIadsTools.LastErrorText WScript.Quit
12.4. Принудительная репликация с одного контроллера домена на другой 409 end if WScnpt.Echo "Data on " & strDC2Name & " but not " & strDCIName & for count - 1 to intRes Wscript.Echo count & ". " & _ ob jladsTools.MetaDataDi fferencesObjectDN(count) WScrlpt.Echo vbTab & ” Attribute: " & _ objIadsTools.MetaDataDifferencesAttri bute(count) Wscript.Echo vbTab & " Write time: " & _ objIadsTools.MetaDataDifferencesLastWriteTime(count) WScrlpt.Echo vbTab & “ Orig Server: " & _ objIadsTools.MetaDataDi fferencesOri gServer(count) WScnpt.Echo vbTab & " Orig USN: " & _ objladsTools.MetaDataDi fferencesOrigUSN(count) next Комментарий Во всех трех решениях показывается, как вывести сведения о нереплицирован- ных изменениях, внесенных в реплики каталога на каждом из двух контроллеров домена. Команда repadmin /showchanges, имеющая несколько дополнительных ключей, может, в частности, сохранять выводимые данные в файле для дальней- шего анализа, а также выводить общие сведения о произведенных изменениях. Смотрите также В документе IadsTools.doc, входящем в состав пакета Support Tools, приведена до- полнительная информация об интерфейсе lADsTools. 12.4. Принудительная репликация с одного контроллера домена на другой Проблема Необходимо выполнить принудительную репликацию данных каталога с одного контроллера домена на другой. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Найдите объект NTDS Settings (Параметры NTDS) контроллера домена, на кото- рый вы решили реплицировать изменения. 3. На правой панели щелкните правой кнопкой мыши на объекте connection, представляющем подключение к тому контроллеру домена, с которого вы хотите реплицировать изменения, и выберите в открывшемся контекстном меню ко- манду Replicate Now (Реплицировать сейчас).
410 Глава 12. Репликация С помощью интерфейса командной строки Приведенная ниже команда выполняет синхронизацию реплик контекста имено- вания <ОИ_контекста_именования> с контроллера <имя_контроллера_домена2> на контрол- лер <имя_контроллера_домена1>: > repadmin /replicate <иня^онтроллера_домена1> <имя_контроллера_домена2> <ОИ_контекста_иненования> Утилита repadmin для Windows 2000 имеет иной синтаксис вызова. С ее помо- щью та же задача выполняется по-другому: > repadmin /sync <ОИ_контекста_именования> <имя_контроллера_домена1> <DC2GUID> С помощью сценария на языке VBScript ' Этот код выполняет принудительную репликацию между двумя ' контроллерами домена для заданного контекста именования • -.... SCRIPT CONFIGURATION --- strOCIName = "<имя_контроллера_домена1>“ ' Напринер: del strDC2Name - ''<имя_контроллера_домена2>“ ' Например: dc2 strNamingContextDN - "<СИ_контекста_именования>н ' Например: dc-ral1encorp.dc-com • END CONFIGURATION -------- set objladsTools - CreateObjectC"lADsTools DCFunctions") intRes = objladsTools ReplicaSync(Cstr(strOClName).Cstr(strNamingContextDN),_ Cstr(strDC2Name). 0. 0) if intRes - -1 then Wscript.Echo "Error: " & objladsTools.LastErrorText else WScript.Echo "Replication intitiated from “ & strDC2Name & " to " & strDClName end if Комментарий В представленных выше решениях показано, как можно передать все нереплици- рованные изменения каталога с одного контроллера домена на другой. Как из- вестно, синхронизация является однонаправленным процессом. Для того чтобы обеспечить полную синхронизацию двух контроллеров домена, нужно произвести те же действия, поменяв контроллеры домена местами. ПРИМЕЧАНИЕ----------------------------------------------------------------------------- Утилита repadmin предоставляет еще одну возможность: реплицировать лишь один объект, а не все нереплицированные объекты заданного контекста именования. Для этого нужно добавить в ее вы- зов ключ /replsingleobj (поддерживается только в Windows Server 2003). Смотрите также Из рецепта 12.3 вы узнаете, как просмотреть сведения о нереллицированных из- менениях, имеющихся на двух контроллерах домена В документе IadsTools.doc, входящем в состав пакета Support Tools, приведена дополнительная информация об интерфейсе lADsTools. Рекомендуем просмотреть документ MS КВ 232072 (Ini- tiating Replication Between Active Directory Direct Replication Partners), за допол- нительной информацией об интерфейсе lADsTools обратитесь к уже упоминавшемуся файлу IadsTools.doc из пакета Support Tools.
iz.b. изменение периода внутрисайтовой репликации 411 12.5. Изменение периода внутрисайтовой репликации Проблема Требуется изменить период внутрисайтовой репликации, то есть продолжительность интервала времени в секундах, который проходит от момента получения изме- ненных данных контроллером домена до инициирования им репликации на дру- гие контроллеры домена. Решение С помощью графического пользовательского интерфейса 1. Из окна, открываемого с помощью команды Start ► Run (Пуск ► Выполнить), запустите программу regedit.exe. 2. Откройте на левой панели раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl- Set\Services\NTDS\Parameters. 3 Найдите параметр Replicator notify pause after modify (secs). Если таковой отсутствует, щелкните правой кнопкой мыши на разделе Parameters, выберите в открывшемся контекстном меню команду New ► DWORD Value (Создать ► Пара- метр DWORD) и введите для нового параметра имя Replicator notify pause after modify (secs). 4. Дважды щелкните на имени нового параметра и укажите продолжительность интервала времени в секундах, который проходит от момента получения из- менений контроллером домена до инициирования им репликации на другие контроллеры домена 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки В следующей команде замените элемент <число_секунд> значением, определяющим период внутрисайтовой репликации: > reg add HKLM\System\CurrentControlSet\Services\NTDS\Parameters /v "Replicator notify pause after modify (secs)" /t REG_CWORD /d <число_секунд> С помощью сценария на языке VBScript ' Данный код устанавливает период внутрисайтовой репликации ’ ---- SCRIPT CONFIGURATION - strDC - "<имя_контроллера_домена>“ ' Контроллер донена. который нужно настроить intNumSeconds - <число_секунд> ‘ Задержка в секундах 1 .... END CONFIGURATION ---- const HKLM - &H80000002 strNTDSReg = "SYSTEMXCurrentControl SetXServi ces\NTDS\Paraпleters,, set objReg = GetObject("winmgmts:\\" & strDC & “\root\default:StdRegProv")
412 Глава iz. репликация objReg.SetOWORDValue HKLM. strNTDSReg. "Replicator notify pause after modify (secs)". IntNumSeconds WScript Echo "Intra-site replication delay set to " & IntNumSeconds Комментарий После внесения изменений в локальную копию данных каталога и истечения за- данного периода времени контроллер домена отправляет запросы на репликацию своим партнерам, входящим в состав того же сайта. По умолчанию задержка со- ставляет 15 с, но ее продолжительность можно изменить как рассказывается выше, задав повое значение в параметре Replicator notify pause after modify (secs), хра- нящемся в системном реестре контроллера домена. ПРИМЕЧАНИЕ----------------------------------------------------------- Если данная установка изменена на контроллере домена, работающем под управлением Windows 2000, Microsoft рекомендует удалить ее после обновления до Windows Server 2003, для того чтобы вступи- ла в действие установка по умолчанию (15 с). Смотрите также Документ MS КВ 214678 (Howto Modify the Default Intra-Site Domain Controller Replication Interval). 12.6. Изменение периода межсайтовой репликации Проблема Требуется настроить расписание репликации для связи сайтов. Решение В данном решении мы будем считать, что взаимодействие серверов в сети осуще- ствляется в соответствии с транспортным протоколом IP При использовании протокола SMTP решение будет аналогичным. С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Sites and Services (Active Directory — сайты и службы). 2. Откройте контейнер Inter-Site Transport (Межсайтовые транспорты) и щелкните на контейнере IP. 3. На правой панели дважды щелкните на объекте, представляющем связь между сайтами, которую вы хотите настроить. 4. В поле Replicate every (Рептицировать каждые) задайте новое значение периода репликации. 5. Щелкните на кнопке ОК.
it,./. vtiuriuMcrim: режима ежаiим i рафика репликации иилшу <-аи1аии •fAJ С помощью интерфейса командной строки Для того чтобы изменить период репликации, создайте LDIF-файл с именем set_ link_rep_interval.ldf и таким содержимым: dn: cn=<MH»_cB^3M>,cn-ip,cn-Inter-Site Transports,cn=sites. cn-confi gurati on.<корневое_ОИ_леса> changetype: modify replace: repl Interval repl Interval: <новый_интервал> Затем выполните команду: > Idifde -v -1 -f set_link_rep_interval.Idf С помощью сценария на языке VBScript ' Этот код устанавливает период репликации для связи сайтов • -.... SCRIPT CONFIGURATION ---- strLinkName - "<иня_связи>" ' Обычное мня связи, которую вы хотите настроить intNewInterval = <новый_интервал> ' Период репликации в минутах 1 ----- END CONFIGURATION ------- set objRootDSE - GetObject("LDAP://RootDSE") set objLink - GetObject(“LOAP://cn=" & strLinkName & _ ".cn-IP.cn-Inter-site Transports.cn=sites.” & _ objRootDSE.Get("confi gurationNamingContext") ) objLink.Put "replInterval”. intNewInterval objLink.SetInfo WScnpt.Echo "Set interval for link " & objLink.GetC'cn") & _ " to “ & intNewInterval Комментарий Для того чтобы задать интервал репликации между двумя сайтами, нужно указать новое значение атрибута repl Interval объекта siteLi nk, представляющего их связь. В этом атрибуте определяется длительность периода репликации. По умолчанию она составляет 180 мин (3 ч), ее минимальное значение — 15 мин. 12.7. Отключение режима сжатия трафика репликации между сайтами Проблема Требуется отключить в Active Directory режим сжатия трафика репликации между сайтами. Решение Для того чтобы отключить режим сжатия трафика репликации между сайтами, нужно изменить значение атрибута options объекта siteLink, представляющего связь, которой соединены эти сайты. Объект siteLink хранится в контейнере сп-1Р.cn=Inter-site Тransports.cn-Sites.cn-Configurati on,<корневое_ОИ_леса>.
пл*» Hidbc 14. rci шикация Атрибут options — это не что иное, как набор битовых флагов Для отключе- ния режима сжатия нужно установить в нем бит 0100 (десятичное значение 4). Если данный атрибут еще не задан (пуст), вы можете просто присвоить ему зна- чение 4. Однако если он уже содержит какое-то значение, в нем необходимо уста- новить указанный выше флаг, не меняя других установок. О том, как это сделать, рассказывается в рецепте 4 12 (глава 4) Комментарий По умолчанию реплицируемые между сайтами данные сжимаются, а данные, ре- плицируемые в пределах сайта - нет. Сжатие данных, передаваемых между сай- тами, рекомендуется производить в тех случаях, когда трафик идет по глобальной сети и желательно предельно уменьшить его объем. Однако имейте в виду, что сжатие повышает нагрузку на центральный процессор на серверах-плацдармах репликации. И если освобождение центрального процессора является более важной для вас задачей, чем снижение трафика, режим сжатия следует отключить. Смотрите также В рецепте 4.12 (глава 4) речь идет об установлении отдельных битовых флагов, входящих в состав значений атрибутов. 12.8. Выявление неполадок, связанных с репликацией Проблема Необходимо узнать, успешно ли выполняется репликация. Решение Выявить неполадки, связанные с репликацией на контроллере домена, который передает изменения, вам помогут такие команды: > dcdiag /test-replications > repadmin /showrep1 /errorsonly Комментарий Более подробный отчет о результатах репликации можно получить с помощью утилиты Replication Monitor (replmon.exe) Установите параметр Generate Status Report (Общий отчет о состоянии), и она сгенерирует длинный отчет, содержа- щий сведения о топологии и результатах репликации, а также о произошедших ошибках. Еще одним важным источником информации о проблемах репликации и проблемах, связанных с согласованием данных, является журнал событий службы каталогов Смотрите также Из рецепта 12.2 вы узнаете, как просмотреть информацию о реппикации для не- скольких контроллеров домена.
12.9. Включение режима расширенного протоколирования событий репликации Проблема Требуется включить режим расширенного протоколирования событий репликации Решение Включите режим диагностического протоколирования для пяти событий репли- кации За дополнительными сведениями можно обратиться к рецепту 15 2 (глава 15) Смотрите также Документ MS КВ 220940 (How to Enable Diagnostic Event Logging for Active Di- rectory Services) 12.10. Установка режима строгой или слабой согласованности репликации Проблема Требуется установить режим строгой или слабой согласованности репликации. Решение С помощью графического пользовательского интерфейса 1. Из окна, открываемого с помощью команды Start ► Run (Пуск ► Выполнить), запустите программу regeditexe. 2. Откройте на левой панели раздел реестра HKEY_LOCAL_MACHINE\SYSTEM\Cur- rentControlSet\Services\NTDS\Parameters. 3. Если параметр Strict Replication Consistency в этом разделе отсутствует, необ- ходимо щелкнуть правой кнопкой мыши на разделе Parameters и выбрать в от- крывшемся контекстном меню команду New ► DWORD Value (Создать ► Пара- метр DWORD). Затем следует ввести для нового параметра имя Replicator notify pause after modify (secs). 4 Дважды щелкните на имени созданного параметра и задайте для него значе- ние 1 (в гаком случае будет установлен режим строгой согласованности реп- ликации) или 0 (будет установлен режим слабой согласованности репликации). 5. Щелкните на кнопке ОК С помощью интерфейса командной строки Для того чтобы установить режим строгой согласованности репликации, выполните следующую команду: > reg add HKLM\System\CurrentControlSet\Serv1ccs\NTDS\Paranieters /v "Strict Replication Consistency" /t REGJJWDRD /d 1
N' । лава iz. непликац я Режим слабой согласованности устанавливается такой командой: > reg add HKLM\System\CurrentControlSet\Services\NTOS\Parameters /v “Strict Replication Consistency" /t REG_DWORD /d 0 С помощью сценария на языке VBScript 1 Код устанавливает режим строгой или слабой согласованности репликации ‘ для заданного контроллера домена • ----- SCRIPT CONFIGURATION .... intEnableStrict = 1 ‘ 1 - строгая согласованность. О - слабая согласованность strDC - “<имя_контроллера_домена>" ' ----- END CONFIGURATION ------- const HKLM = 8H80000002 str.NTDSReg - "SYSTEMXCurrentControlSetXServicesXNTDSXParameters" set objReg = GetObject(nwinmgmts:\\" & strDC & _ “\root\default:StdRegProv") objReg.SetDWORDVaiue HKLM. strNTDSReg, “Strict Replication Consistency". intEnableStrict WScrlpt.Echo "Strict Replication Consistency value set to " & _ intEnableStrict Комментарий До выхода Windows 2000 Service Pack 3 контроллеры домена функционировали в соответствии с моделью слабой согласованности репликации, при которой вос- становленные объекты повторно включались в каталог и реплицировались на все контроллеры домена. Восстановленным (lingering) называется объект, который был удален, но потом восстановлен (в исходном состоянии), так как контроллер домена не смог реплицировать информацию о его удалении в течение времени, заданного в атрибуте tombStoneLi fetime, или же объект, который был восстановлен из резервной копии, созданной до того, как истекло время, определяемое атрибу- том tombStoneLi feti me. Подробнее об этом атрибуте рассказывается в рецепте 16.0 (глава 16). Контроллеры домена, работающие под управлением операционной системы Windows 2000 с установленным в ней пакетом Service Pack 2 и более ранних вер- сий операционной системы, реплицируют все восстановленные объекты. Однако это сопряжено с определенным риском, поскольку объекты, которые администратор или пользователь считает удаленными, снова появляются в каталоге. В некоторых пакетах исправлений, вышедших после Service Pack 2, а затем в пакете Service Pack 3 был введен метод строго согласованной репликации. При соблюдении строгой согласованности контроллер домена, передающий данные, прекращает репликацию как только встречает восстановленный объект. Он запи- сывает в журнал службы каталогов информацию о событии 1084, указывая тем самым, что не может реплицировать восстановленный объект. Хотя строгая реп- ликация может быть прервана, не завершившись, данный метод предпочтителен, поскольку гарантирует, что удаленные объекты не появятся в каталоге. При этом администратору нужно постоянно проводить мониторинг работы контроллеров домена, следя за тем, чтобы репликация выполнялась регулярно, а журналы не содержали записей о событии 1084.
Смотрите также В рецепте 16.0 довольно подробно рассказывается об атрибуте tombStoneLi feti те. Кроме того, рекомендуем ознакомиться с документами MS КВ 317097 (Lingering Objects Prevent Active Directory Replication from Occurring) и MS KB 314282 (Lingering Objects May Remain After You Bring an Out-of-Date Global Catalog Ser- ver Back Online). 12.11. Поиск конфликтующих объектов Проблема Требуется определить, какие объекты вызвали конфликты репликации. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выберите в меню команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя контролера домена (или оставьте это поле пустым — в таком случае связь будет установлена без участия сервера). 4. Для того чтобы подключиться к обычному контроллеру домена, введите в по- ле Port (Порт) значение 389, а для подключения к серверу глобального катало- га — значение 3268. Щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать). 6. Если нужно, введите имя и пароль пользователя, которому разрешен просмотр объектов, и щелкните на кнопке ОК. 7. Выполните команду Browse ► Search (Поиск ► Найти). 8. В поле BaseDN (Отличительное имя базы) введите отличительное имя объекта, с которого следует начинать поиск. 9. Укажите в области Scope (Область поиска) подходящую область поиска. 10. В поле Filter (Фильтр) введите следующую спецификацию фильтра: (| (сп= *\OACNF:*)(ou=*\OACNF:*)). 11. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки Приведенная ниже команда находит все конфликтующие объекты указанного леса: > dsquery * forestroot -дс -attr dist1nguishedName -scope subtree -filter *' (| (cn-*\OACNF: *) (ou-*\OACNF: *)) ” С помощью сценария на языке VBScript ' Этот код находит все конфликтующие объекты в составе определенного леса. ’ В случае тайм-аута при поиске можно изменить значение параметра strBase. ’ задав конкретное подразделение или указав контейнер ‘ ---- SCRIPT CONFIGURATION .
strBase - ”<GC://" & “<корневое_ОИ_леса>" & ’ .....END CONFIGURATION.....— strFilter - "(|(cn-*\0ACNF:*)(ou-*\0ACNF:*)):" strAttrs - "distinguishedName:" strScope - "Subtree" set objConn - CreateObjectC’ADOOB.Connect!on") objConn.Provider - "ADsDSOObject" objConn.Open Set objRS e objConn.Execute(strBase & strFilter & strAttrs & strScope) WScript.Echo objRS.RecordCount & " conflict objects found" while not objRS.EOF Wscript.Echo objRS.Fields.Item("distinguishedName").Vaiue objRS.MoveNext wend Комментарий Конфликты репликации могут возникать в любой распределенной многопользо- вательской системе, и Active Directory не является исключением. В частности, конфликт происходит в том случае, если на одном контроллере домена создается объект и, прежде чем он реплицируется на другие контроллеры, объект с таким же именем создается на еще одном контроллере домена. Какой объект победит в подобной ситуации, то есть какой из двух будет оставлен без изменений, а какой будет переименован? В Active Directory «побеждает» объект, созданный послед- ним, а другой объект получает следующее имя: <имя_о5ьекга>\0СКЕ: <GUID_c6beKra> где <имя_объекта> — это исходное имя переименованного объекта, за которым сле- дует нуль-терминатор (символ с кодом 0, которым часто обозначают конец строки), затем строка CNF: и, наконец, GUID объекта. Имеет смысл периодически просматривать дерево Active Directory с целью обнаружения переименованных конфликтующих объектов. Найти такие объекты с помощью одного запроса непросто, поскольку средства фильтрации плохо при- способлены для подобного поиска. Во всех трех решениях используется по два символа * — в начале и в конце шаблона поиска, из-за чего при наличии большого количества объектов поиск может завершиться тайм-аутом. В подобных случаях его можно ограничить несколькими контейнерами или подразделениями, например теми, в которых содержатся объекты computer, поскольку среди объектов данного типа конфликты происходят наиболее часто. Рассмотрим такой пример. Создается новая учетная запись компьютера, затем она присоединяется к домену, после чего компьютер перезагружается. Если после загрузки компьютер пытается подклю- читься к Active Directory через контроллер домена, на который еще не реплици- рован новый объект computer, этот контроллер добавляет новый объект, в резуль- тате чего между двумя объектами возникает конфликт. Смотрите также Рекомендации по поводу того, что делать с обнаруженными конфликтующими объектами, вы найдете в документе MS КВ 297083. Обратите внимание на доку-
менты MS КВ 218614 (Replication Collisions in Windows 2000) и MS KB 297083 (How to Rename an Object After a Replication Collision Has Occurred). 12.12. Просмотр метаданных объекта Проблема Требуется просмотреть метаданные объекта, содержащиеся в его атрибуте repl - PropertyMeta ata. В указанном атрибуте хранится информация о последних об- новлениях других атрибутов объекта Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP 2. Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя контроллера домена или домена, в состав которого входит интересующий вас объект. 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать). 6. Если нужно, введите имя и пароль пользователя, которому разрешен просмотр объекта, и щелкните на кнопке ОК. 7. Выполните команду Browse ► Replication ► View Metadata (Поиск ► Реплика- ция ► Просмотр метаданных). 8. В поле Object DN (Отличительное имя объекта) введите отличительное имя объекта, метаданные которого хотите просмотреть. 9. Щелкните на кнопке ОК. С помощью интерфейса командной строки В следующей команде замените ОИ_обьекта> отличительным именем объекта, ме- таданные которого необходимо просмотреть. > repadmin /showobjmeta <имя_контроллера_домена> <ОИ_объекта> В Windows 2000 используемый в этой команде ключ назывался Zshowneta, а ее параметры задавались в обратном порядке: <0И_объекта> <имя_контроллера_ромена>. С помощью сценария на языке VBScript ’ Код выводит метаданные заданного объекта ---- SCRIPT CONFIGURATION - strObjectDN - "<0И_объекта>" ' Например: dc=rallencorp,dc=com strDC - "<имя_контроллера домена>" ' Например: del ‘ ---- END CONFIGURATION ---- set objladsTo Is - CreateObjectCIADsTools.DCFunctions") IntRes - objIadsTools.GetMetaData(Cstr(strDC).Cstr(strObjectDN),0) if intRes - -1 then
Wscript Echo objladsTools.LastErrorText WScrlpt.Quit end if for count - 1 to intRes WScrlpt.Echo count & ". " & objladsTools.MetaDataName(count) WScrlpt.Echo vbTab & " Version: “ & _ objIadsTools MetaDataVersi onNumber(count) WScrlpt.Echo vbTab & ” Last Write: “ & _ objIadsTools.MetaDataLastWri teT i me(count) WScrlpt.Echo vbTab & " Local USN ” & _ objIadsTools.MetaDataLocalUSN(count) WScrlpt.Echo vbTab & " Source USN: " & _ objladsTools.MetaOataSourceUSN(count) WScrlpt.Echo vbTab & " Server: " & _ objladsTools.MetaDataServerName(count) next Комментарий Метаданные объекта являются важным источником информации, необходимой для разрешения проблем, возникающих во время репликации, или для определе- ния времени последнего изменения значения какого-либо атрибута объекта. Про- стейший способ убедиться, что два контроллера домена содержат одинаковые ко- пии объекта, — просмотреть метаданные этого объекта на обоих контроллерах. К сожалению, атрибут replPropertyMetaData хранится в виде двоичной строки, поэтому его значение нельзя просто прочитать. В приведенном выше сценарии на языке VBScript используется метод GetMetaData, входящий с состав интерфейса lADsTool и являющийся оболочкой для метода DsReplicaGetlnfo. Этот последний метод «понимает» формат атрибута repl PropertyMetaData и возвращает содержащиеся в нем сведения в читабельной форме. Для каждого измененного атрибута объекта в атрибуте replPropertyMetaData хранится следующая информация: О Attribute ID (идентификатор атрибута) — идентификатор измененного атрибута; О Attribute version (версия атрибута) — количество операций записи атрибута; О Local USN (локальный USN) — USN атрибута на локальном контроллере домена; О Originating USN (исходный USN) — USN данного атрибута на момент внесе- ния изменений на исходном контроллере домена; О Originating DC (исходный контроллер домена) — контроллер домена, на кото- ром было внесено изменение; это может быть имя локального или другого сервера; О Time/Date (время и дата) — время и дата в переводе на UTC (Universal Coordi- nated Time — всемирное координированное время) Смотрите также В документе IadsTools.doc, входящем в состав пакета Support Tools, приведена до- полнительная информация об интерфейсе lADsTools.
13 Система доменных имен 13.0. Введение Active Directory тесно связана с очень важной системной службой, называемой DNS (Domain Name System — система доменных имен) Клиенты и контроллеры домена используют DNS для поиска контроллеров домена указанного сайта или контроллеров, выполняющих определенную функцию. С каждым контроллером домена в DNS связан целый ряд записей о ресурсах, в которых указывается, что он предоставляет услуги контроллера домена, сервера глобального каталога, эму- лятора PDC (Primary Domain Controller — основной контроллер домена) и т. п. Одна из особенностей Active Directory заключается в том, что в ее каталоге хранятся данные DNS. Вместо того чтобы использовать для репликации зоны ме- жду серверами устаревший метод передачи основной и дополнительной зон или даже более современный метод NOTIFY (RFC 1996), Active Directory сама хранит данные зоны и применяет стандартный механизм репликации между контролле- рами домена Единственным неудобством, связанным с использованием интегри- рованных зон, является то, что сервер DNS должен быть контроллером домена. Однако перегружать его функциями контроллера домена нежелательно, особен- но если планируется обработка большого числа запросов к DNS. Анатомия объектов DNS Данные DNS хранятся в Active Directory только в том случае, если в самой сис- темной службе определена зона, интегрированная со службой каталогов. При ис- пользовании основных и дополнительных зон, не интегрированных со службой каталогов, данные службы доменных имен хранятся локально в файловой систе- ме каждого сервера DNS. При наличии зоны, интегрированной с Active Directory, в Windows 2000 создается контейнер с именем cn=<HH^_3OHw>.cn=MicrosoftDNS.cn= System.<0И_домена>. В Windows Server 2003 в подобном случае для хранения дан- ных DNS можно использовать разделы приложений. В частности, их можно хранить: О на всех контроллерах домена, входящих в состав указанного домена (только Windows 2000); О на всех контроллерах домена, которые являются серверами DNS и входят в состав заданного домена; О на всех контроллерах домена, входящих в состав указанного леса.
422 Глава 13. Система доменных имен Во втором случае по умолчанию данные DNS записываются в раздел dc=Do- mainONSZones <0И донена>, а в третьем — в раздел dc-ForestONSZones,<OH_neca>. Оба эти раздела приложений реплицируются только на те контроллеры домена в со- ставе леса или домена которые являются серверами DNS. В контейнере MicrosoftDNS для каждой зоны, интегрированной с Active Direc- tory, имеется контейнер dnsZone, содержащий объекты dnsNode. В каждом таком объекте хранятся записи ресурсов, связанные с конкретным узлом. Ниже приве- дено текстовое представление записи А; имя del.rallencorp.com считается именем узла (обычно оно задается в левой части записи ресурса): del rallencorp com 600 IN A 6.10 57.21 Поскольку с именем вроде dcl.rallencorp.com может быть связано несколько записей ресурсов, Microsoft решила создавать для каждого имени отдельный объект dnsNode. Этот объект имеет многозначный атрибут dnsRecord, в котором содержатся все записи ресурсов, связанные с данным узлом. К сожалению, содержимое дан- ного атрибута хранится в двоичном формате, а следовательно, вы не сможете его прочитать. Важнейшие атрибуты объектов dnsZone и dnsNode описаны в табл. 13 1 и 13 2 Таблица 13.1. Атрибуты объекта dnsZone Атрибут Описание de Относительное отличительное имя зоны dnsProperty Двоичная строка, в которой содержится конфигурационная информация о зоне msDS-Approx-Immed-Subordinates Приблизительное количество узлов в составе зоны Этот атрибут является нововведением Windows Server 2003 Таблица 13.2. Атрибуты объекта dnsNode Атрибут Описание de dnsRecord Относительное отличительное имя узла Многозг ачный двоичный атрибут, в котором хранятся записи ресурсов dnsTorrbstoned Логическое значение, указывающее, помечен ли узел для удаления. Значение FALSE означает что узел не помечен, а значение TRUE — что помечен 13.1. Создание зоны прямого просмотра Проблема Требуется создать зону прямого просмотра (forward lookup). В такой зоне имена отображаются на другие имена или IP-адреса.
13.1. Создание зоны прямого просмотра та? Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку DNS. 2. Если имя сервера на левой панели консоли отсутствует, щелкните правой кнопкой мыши на элементе DNS и выберите в контекстном меню команду Connect to DNS Server (Подключение к серверу DNS). Установите переключа- тель в положение This computer (этот компьютер) или The following computer (другой компьютер), введите, если нужно, имя сервера, к которому хотите подключиться, и щелкните на кнопке ОК. 3. На левой панели найдите в подразделе сервера контейнер Forward Lookup Zones (Зоны прямого просмотра). 4. Щелкните на нем правой кнопкой мыши и выберите в открывшемся контек- стном меню команду New Zone (Создать зону). 5. Щелкните на кнопке Next (Далее) 6. Выберите тип зоны и щелкните на кнопке Next (Далее). 7. Если вы решили, что данные зоны будут храниться в Active Directory, вам бу- дет предложено указать, на какие серверы следует реплицировать данные DNS. Сделав выбор, щелкните на кнопке Next (Далее). (Такая возможность сущест- вует лишь в Windows Server 2003.) 8. Введите имя зоны и щелкните на кнопке Next (Далее). 9. Следуйте дальнейшим указаниям мастера. Они будут различаться в зависимо- сти от того, какую зону вы создаете: основную, дополнительную или зону-за- глушку. С помощью интерфейса командной строки Приведенная ниже команда создает зону, интегрированную с Active Directory: > dnsend <nM«_cepBepa_DNS> /zoneadd <иня_зоны> /DsPrimary С помощью сценария на языке VBScript ' Этот код создает интегрированную с Active Directory зону прямого просмотра 1 ---- SCRIPT CONFIGURATION - strServer - "<иня_сердера_Ш$>’ ' Например: del rallencorp.com strNewZone = "<иня_зоньг>" ' Например: othercorp.com ' ----END CONFIGURATION...... set objDNS - GetObjectC’winMgmtsAV & strServer & "\root\MicrosoftDNS") set objDNSZone » objDNS.Get("MicrosoftONS_Zone") strNull - objDNSZone.CreateZone(strNewZone, 0 . True) WScrlpt.Echo "Created zone " & strNewZone Комментарий К решению с помощью интерфейса командной строки При создании интегрированной с Active Directory зоны DNS команду dnscmd можно использовать не только с ключом /DsPrimary, но и с ключом /dp, который
424 Глава 13. Система доменных имен позволяет указать, в какой раздел приложений будут помещены данные этой зоны. Например: > dnscmd /zoneadd <имя зоны> /DsPrimary /dp domaindnszones rallencorp.com К решению с помощью сценария на языке VBScript Вам следует воспользоваться DNS WMI Provider — первым приемлемым интер- фейсом прикладного программирования, разработанным Microsoft для поддержки DNS. С его помощью можно создавать и изменять зоны, запрашивать записи ре- сурсов и управлять ими, настраивать конфигурацию сервера DNS. В представ- ленном выше сценарии на языке VBScript для создания зоны применен метод CreateZone класса MicrosoftONS_Zone. Смотрите также В рецепте 13.2 рассказывается о создании зоны обратного просмотра. Кроме того, ознакомьтесь с документами MS КВ 323445 (HOW ТО: Create a New Zone on а DNS Server in Windows Server 2003), MSDN: DNS WMI Provider и MSDN: Cre- ateZone Method of the MicrosoftDNS_Zone Class. 13.2. Создание зоны обратного просмотра Проблема Требуется создать в Active Directory зону обратного просмотра, то есть зону, в которой IP-адреса отображаются на имена Решение С помощью графического пользовательского интерфейса 1 Откройте оснастку DNS. 2. Если имя сервера на левой панели консоли отсутствует, щелкните правой кнопкой мыши на элементе DNS и выберите в контекстном меню команду Connect to DNS Server (Подключение к серверу DNS). Установите переключа- тель в положение This computer (этот компьютер) или The following computer (другой компьютер), введите, если нужно, имя сервера, к которому хотите под- ключиться, и щелкните на кнопке ОК. 3. Разверните ветвь сервера на левой панели и найдите контейнер Reverse Lookup Zones (Зоны обратного просмотра). 4 Щелкните на контейнере правой кнопкой мыши и выберите в открывшемся контекстном меню команду New Zone (Создать новую зону) 5. Щелкните на кнопке Next (Далее). 6. Выберите тип зоны и щелкните на кнопке Next (Далее). 7. Если вы решили, что данные зоны должны храниться в Active Directory, вам будет предложено указать, на какие серверы следует реплицировать данные
13.3. Просмотр зон на сервере *ЪСЭ DNS Сделав выбор, щелкните на кнопке Next. (Описываемая возможность существует только в Windows Server 2003.) 8 Введите в поле Network ID (Код зоны (ID)) сетевой идентификатор или имя зоны и щелкните на кнопке Next (Далее). 9. Следуйте указаниям мастера. Они будут различаться в зависимости от того, какую зону вы создаете- основную, дополнительную или зону-заглушку С помощью интерфейса командной строки Следующая команда создает зону с обратным просмотром, интегрированную с Active Directory: > dnscmd <nMa_cepBepa_DNS> /zoneadd <имя_зоны> /DsPrimary С помощью сценария на языке VBScript ' Этот код создает зону обратного просмотра, интегрированную с Active Directory ' -- SCRIPT CONFIGURATION —- strServer - “<иня_сервера_0М5>" ’ Например: dcl.rallencorp.com strNewZone - "<имя зоны>“ ' Например. 8 10.192 in-addr.arpa 1 -— ENO CONFIGURATION - set objDNS - GetObjectCwinMgmts:\\" & strServer & "\root\MicrosoftDNS") set objDNSZone - objDNS.GetC"MicrosoftDNS_Zone") strNull - objDNSZone.CreateZoneCstrNewZone. 0 . True) WScript Echo "Created zone " & strNewZone Комментарий Зона обратного просмотра создается практически таким же образом, как и зона прямого просмотра. За дополнительными сведениями обращайтесь к рецепту 13.1 Смотрите также Документы MS КВ 323445 (HOW ТО: Create a New Zone on a DNS Server in Win- dows Server 2003) и MSDN: CreateZone Method of the MicrosoftDNS Zone C ass. 13.3. Просмотр зон на сервере Проблема Требуется просмотреть список зон, данные которых хранятся на сервере Решение С помощью графического пользовательского интерфейса 1 . Откройте оснастку DNS. 2 На левой панели щелкните правой кнопкой мыши на элементе DNS и выберите в меню команду Connect to DNS Server (Подключение к серверу DNS).
Глава 13. система доменных имен 3. Введите имя сервера, к которому хотите подключиться после чего щелкните на кнопке ОК 4. На левой панели откройте контейнер этого сервера и, чтобы просмотреть список нужных зон, щелкните на контейнере Forward Lookup Zones (Зоны пря- мого просмотра) или Reverse Lookup Zones (Зоны обратного просмотра). С помощью интерфейса командной строки > dnscmd <нмя сервера_DNS> /enumzones С помощью сценария на языке VBScript ' Код выводит список зон. данные которых хранятся на заданной сервере ’ —- SCRIPT CONFIGURATION —- strServer - "<имя_сервера_0Н5>" ' Например: del.га11encorp.com 1 END CONFIGURATION —- set objDNS = GetObjectCwinMgmts W & strServer & "\root\Micros jftDNS”) set objDNSServer - objDNS.Get('T1icrosoftDNS_Server.Name-"".""") set objZones - objDNS.ExecQuery("Select * from MicrosoftDNS_Zone " & _ "Where OnsServerName - _ objDNSServer.Name & WScript.Echo "Zones on “ & objDNSServer.Name for each objZone in objZones WScript.Echo “ " & objZOne Name next Комментарий К решению с помощью графического пользовательского интерфейса Если на левой панели щелкнуть на элементе Forward Lookup Zones (Зоны прямого просмотра) или Reverse Lookup Zones (Зоны обратного просмотра), на правой па- нели будет выведен список всех зон с указанием типа каждой из них. К решению с помощью интерфейса командной строки При выполнении команды dnscmd с ключом /enumzones и без других параметров выводится список зон, данные которых хранятся на сервере. Можно задать в этой команде фильтры, чтобы отобрать для вывода только зоны указанных типов. В Windows 2000 команда dnscmd позволяет задать не более двух фильтров: Filterl: /Primary /Secondary /Cache /Auto-Created Filter2: /Forward /Reverse В Windows Server 2003 способ фильтрации изменен Вместо определения двух уровней отбора можно задать один из следующих ключей. /Primary /Secondary /Forwarder
13.4. Преобразование обычной зоны DNS в зону 4Z/ /Stub /Cache /Auto-Created /Forward /Reverse /Ds /File /DornainDirectoryParti ti on /ForestDirectoryPartition /CustomDirectoryPartition /LegacyDirectoryPartition /01rectoryPartition <имя_раздела> К решению с помощью сценария на языке VBScript Поиск объектов MicrosoftDNS Zone в приведением сценарии производится с помо- щью запроса на языке WQL. В инструкции Select можно задать дополнительные критерии отбора, ограничив тем самым список возвращаемых зон Смотрите также Рекомендуем ознакомиться с документом MSDN: MicrosoftDNS_Zone. 13.4. Преобразование обычной зоны DNS в зону, интегрированную с Active Directory Проблема Требуется преобразовать основную зону DNS в зону, интегрированную с Active Directory, с тем чтобы ее содержимое хранилось не в текстовом файле, а в службе каталогов, и реплицировалось этой службой. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку DNS. 2. На левой панели щелкните правой кнопкой мыши на элементе DNS, а затем выберите в контекстном меню команду Connect to DNS Server (Подключение к серверу DNS) 3. Введите имя сервера, к которому хотите подключиться, после чего щелкните на кнопке ОК. 4. Если нужно преобразовать зону прямого просмотра, откройте контейнер Forward Lookup Zones (Зоны прямого просмотра), а если зону обратного просмотра — контейнер Reverse Lookup Zones (Зоны обратного просмотра). 5. Щелкните правой кнопкой мыши на зоне, которую хотите преобразовать, и выберите в открывшемся контекстном меню команду Properties (Свойства).
^£S Глава 13. Система доменных имен 6. Щелкните на кнопке Change (Изменить), которая расположена рядом с полем Туре (Тип). 7. Установите флажок Store the zone in Active Directory (Интегрированная c Active Directory). 8. Дважды щелкните на кнопке OK. С помощью интерфейса командной строки > dnscmd <иня_серверд> /zoneresettype <имя_зоны> /DsPrimary С помощью сценария на языке VBScript ’ Этот код преобразует заданную зону в интегрированную с Active Directory ’ -— SCRIPT CONFIGURATION —- strZone - "<иня_зонъ[>" ' Например: rallencorp.com strServer - ”<имя_сервера>" ' Например: dcl.rallencorp.com 1 —- END CONFIGURATION -- set objDNS - GetObjectCwinNgmts. W & strServer & “\root\MicrosoftDNS") set obJONSServer - objDNS.Get("Mi crosoftDNS_Server.Name-"".”"”) set objDNSZone - objDNS.Get(“MicrosoftDNS_Zone.ContainerNante«=... & _ strZone & ...DnsServerName-""" & obJONSServer.Name & .... Name-”'" & strZone & ....) strNull objDNSZone.ChangeZoneTypeCO, True) objDNSZone.Put_ WScript.Echo “Converted " & strZone & " to AO-Integrated" Комментарий Подробнее о зонах, интегрированных с Active Directory, рассказывается в рецеп- тах 13.0 и 13.5. Смотрите также Документы MS КВ 198437 (How to Convert DNS Primary Server to Active Di- rectory Integrated), MS KB 227844 (Primary and Active Directory Integrated Zones Differences) и MSDN ChangeZoneTvpe Method of the MicrosoftDNS Zone Class 13.5. Перемещение зон, интегрированных c Active Directory, в раздел приложений Проблема Необходимо переместить зоны, интегрированные с Active Directory, в раздел приложений. Решение1 С помощью графического пользовательского интерфейса 1. Откройте оснастку DNS. Данный рецепт можно использовать лишь при условии, что функциональный уровень домена соот- ветствует Windows Server 2003.
13.5. Перемещение зон, интегрированных с Active Directory 429 2. Если имя сервера на левой панели консоли отсутствует, щелкните правой кнопкой мыши на элементе DNS и выберите в контекстном меню команду Connect to DNS Server (Подключение к серверу DNS). В открывшемся окне ус- тановите переключатель в положение This computer (этот компьютер) или The following computer (другой компьютер), введите, если нужно, имя сервера, к ко- торому хотите подключиться, и щелкните на кнопке ОК. 3. На левой панели откройте контейнер интересующего вас сервера, а в нем — контейнер Forward Lookup Zones (Зоны прямого просмотра) или Reverse Lookup Zones (Зоны обратного просмотра). 4. Щелкните правой кнопкой мыши на имени зоны и выберите в открывшемся контекстном меню команду Properties (Свойства). 5. Рядом с полем Replication (Репликация) щелкните на кнопке Change (Изме- нить). 6. Выберите раздел приложений, в который следует переместить зону. 7. Дважды щелкните на кнопке ОК. С помощью интерфейса командной строки Следующая команда перемещает зону в используемый по умолчанию раздел при- ложений, реплицируемый на все контроллеры текущего домена, которые являются серверами DNS: > dnscmd <MMB_cepBepa_DNS> /zonechangedirectorypartition <иня_зоны> /domain С помощью сценария на языке VBScript На момент выхода настоящей книги интерфейс DNS WMI Provider не поддержи- вал возможность перемещения зон в раздел приложений с помощью программно- го кода. Комментарий В Windows 2000 зоны, интегрированные с Active Directory, реплицировались на все контроллеры того домена, в котором они хранились. Однако часто бывает, что не все контроллеры домена являются серверами DNS, из-за чего трафик между ними и нагрузка на них неоправданно возрастают. В Windows Server 2003 было предложено изящное решение этого вопроса с использованием разделов приложений — определяемых пользователем разделов, которые можно настроить для репликации на любой контроллер домена в лесу. Их применение обеспечивает большую гибкость в выборе места хранения и реп- ликации зон, интегрированных с Active Directory. Смотрите также О разделах приложений довольно подробно рассказывается в главе 17.
430 Глава 13. Система доменных имен 13.6. Делегирование управления зоной Проблема Требуется делегировать управление записями ресурсов, хранящимися в указанной зоне, определенному пользователю или группе пользователей. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку DNS. 2. Если имя сервера на левой панели консоли отсутствует, щелкните правой кнопкой мыши на элементе DNS и выберите в контекстном меню команду Connect to DNS Server (Подключение к серверу DNS). В открывшемся окне ус- тановите переключатель в положение This computer (этот компьютер) или The following computer (другой компьютер), введите, если нужно, имя сервера, к ко- торому хотите подключиться, и щелкните на кнопке ОК. 3. На левой панели откройте контейнер интересующего вас сервера, а в нем — контейнер Forward Lookup Zones (Зоны прямого просмотра) или Reverse Lookup Zones (Зоны обратного просмотра), что зависит от типа зоны. 4. Щелкните правой кнопкой мыши на имени зоны и выберите в открывшемся контекстном меню команду Properties (Свойства). 5. Откройте вкладку Security (Безопасность) и щелкните на кнопке Add (Добавить). 6. Укажите пользователя (или группу), которому хотите делегировать управление. 7. В области Permissions (Разрешения) установите флажок Full Control (Полный доступ). 8. Щелкните на кнопке ОК. С помощью интерфейса командной строки Приведенная ниже команда предоставляет пользователю или группе полный доступ к записям ресурсов указанной зоны: > dsacls dc-<HW!_30Hb/>.cn-MicrosoftDNS.<Mj70MeHa_;f/7H_раздела_приложений> /G J <лользователь_или_группа>:£к.; С помощью сценария на языке VBScript Код предоставляет пользователю или группе полный доступ к записям ресурсов указанной зоны ‘ —- SCRIPT CONFIGURATION —- strZoneDN - "dc=<wwfl_30HW>,cn-=MicrosoftDNS.<C|Hj70HeHa_^w_раздела_приложений>" strUserOrGroup = "пользователь или группа>" ' Например: joe@rallencorp.com or RALLENCORP\joe ' - END CONFIGURATION - set objZone = GetObject("LDAP://" & strZoneDN) Константы Из перечисления ADS_ACETYPE_ENUM
13.7. Создание и удаление записей ресурсов 431 Const ADS_ACETYPE_ACCESS_ALLOWED_OBJECT - &h5 ’ Из перечисления ADS_FLAGTYPE ENUM Const ADS_FLAG_OBJECT_TYPE_PRESENT - &hl ' Из перечисления ADS_RIGH7S_ENUM Const ADS_RIGHT_GENERIC_ALL - &hl0000000 * а амт&а« ‘ч-тиши 7г ft и П “ " if if и л ” I' I» " Я и и п л н п н I» " я П t. ' Создание списка контроля доступа (ACL) sjLa а" aw "11 н п ft “ W W л It ft U л If 1иГfi" и г; гг п ли я п /г set objSD - objZone.GetC'ntSecurityDescriptor") set objDACL - objSD.DiscretionaryAcl ’ Полный доступ set objACEl - CreateObjectCAccessControlEntry") objACEl.Trustee - strUserOrGroup objACEl AccessMask - ADS_RIGHT_GENERIC_ALL objACEl AceFlags - 0 objACEl.Flags - ADS FLAG OBJECT TYPE_PRESENT objACEl AceType - ADS^ACETYPE_ACCESS_ALLOWED_OBJECT objDACL.AddAce objACEl • J « » «IIОUUjU-V-УV V»4 л ft it p ft jFi! я плТГн n n ft Tfft “, гПгнлптПГТТг ’ Установка списка контроля доступа (ACL) ’ ИЛИ1! ЛЛЛЛЛХ11" “!! Suuu "ИНЛМ ft ir i,'.1 ir i, г.' Л И и i'i .'i ч i " h ir - и i. i? objSD.01scretlonaryAcl - objDACL objZone.Put "ntSecumtyDescrlptor". objSD objZone SetInfo WScrlpt.Echo "Delegated control of " & strZoneDN & " to ” & strUserOrGroup Комментарий По умолчанию члены группы DNSAdml ns (Администраторы DNS) имеют полный контроль над конфигурацией сервера и зоны DNS Существует возможность де- легировать управление отдельными зонами, интегрированными с Active Direc- tory, другим пользователям или группам, изменив в службе каталогов разрешения на объект, представляющий зону. В предлагаемых выше решениях показано, как предоставить пользователю или группе разрешение Ful 1 Control (Полный доступ) на операции с заданной зоной. Смотрите также Документ MS КВ 256643 (Unable to Prevent DNS Zone Administrator from Cre- ating New Zones). 13.7. Создание и удаление записей ресурсов Проблема Требуется создать или удалить записи ресурсов.
432 Глава 13. Система доменных имен Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку DNS. 2. Если имя сервера отсутствует на левой панели консоли, щелкните правой кнопкой мыши на элементе DNS и выберите в контекстном меню команду Connect to DNS Server (Подключение к серверу DNS). В открывшемся окне ус- тановите переключатель в положение This computer (этот компьютер) или The following computer (другой компьютер), укажите, если нужно, имя сервера, к которому хотите подключиться, и щелкните на кнопке ОК. 3. На левой панели откройте контейнер интересующего вас сервера, а в нем — контейнер Forward Lookup Zones (Зоны прямого просмотра) или Reverse Lookup Zones (Зоны обратного просмотра), в зависимости от того, с записями какой зоны вы намерены работать. 4. Создайте запись ресурса, последовательно выполняя следующие действия: на левой панели щелкните правой кнопкой мыши на имени зоны, выберите в кон- текстном меню команду, соответствующую типу создаваемой записи, напри- мер New Host (А) (Новый хост (А)), заполните необходимые поля и щелкните на кнопке ОК. 5. Если запись ресурса нужно удалить, выполните такие действия: на левой панели щелкните на имени зоны, где находятся записи, на правой панели щелкните правой кнопкой мыши на записи, которую хотите удалить, выберите в кон- текстном меню команду Delete (Удалить) и подтвердите необходимость дан- ной операции, щелкнув на кнопке Yes (Да). С помощью интерфейса командной строки Для того чтобы добавить запись ресурса, выполните приведенную ниже команду: > dnscmd <имя_сервера_0Н5> /recordadd <иня_зоны> <имя_узпа> <тип_записи> <данные_записи> Например, такая команда добавляет в зону га 1 lencorp.com запись типа А: > dnscmd del /recordadd rallencorp.com winsOl A 19.25.52.2.25 Если же вам необходимо удалить записи ресурсов, воспользуйтесь такой ко- мандой: > dnscmd <иня_сервера_DNS> /recorddelete <имя_зоны> <имя_узпа> <тип_залиси> <данные_записи> Например, следующая команда удаляет запись типа А из зоны га 11 encorp. com: > dnscmd del /recorddelete rallencorp.com winsOl A 19.25.52.2.25 С помощью сценария на языке VBScript Код показывает, как с помощью DNS ‘«Ml Provider добавить в зону записи типа А и PTR ' —- SCRIPT CONFIGURATION —- strForwardRRAdd » "test-xp.rallencorp.com. IN A 192.32.64.13” strReverseRRAdd - "13.64.32.192.in-addr.arpa IN PTR test-xp.rallencorp.com" strForwardDomain - “rallencorp.com'' strReverseDomain - "192.in-addr.arpa."
13.7. Создание и удаление записей ресурсов 433 ’ —- END CONFIGURATION —- set objDNS - GetObject("winMgmts:root\MicrosoftDNS") set objRR - objDNS.Get("MicrosoftDNS_ResourceRecord") set objDNSServer - objDNS Get("MicrosoftDNS_Server Name-""....) ' Создание записи типа A strNull - objRR.CreateInstanceFromTextRepresentation( _ objDNSServer.Name. strForwardDomaln, strForwardRRAdd, objOutParam) set objRR2 - objDNS Get(objOutParam) WScript Echo "Created Record " & objRR2.TextRepresentation ' Создание записи типа PTR strNull - objRR CreateInstanceFromTextRepresentat1on( _ objDNSServer Name, strReverseDomain. strReverseRRAdd objOutParam) set objRR2 - objDNS Get(objOutParam) WScript.Echo "Created Record " & objRR2 TextRepresentatlon ‘ Этот код показывает, как удалить из зоны записи типа А и PTR, * созданные в предыдущем примере strHostName - "test-xp rallencorp.com " set objDNS - GetObject("winMgmts:root\M1crosoftONS") set objDNSServer - objDNS.Get("M1crosoftDNS_Server.Name-"".""") set objRRs - objDNS ExecQueryC select * " & _ " from MicrosoftDNS_ResourceRecord " & _ " where OwnerName - """ & strHostName & """" & " Or RecordData - ",,и & strHostName & 1f objRRs.Count < 1 then WScript.Echo "No matches found for " & strHostName el se for each objRR in objRRs objRR.Delete_ WScript.Echo "Deleted " & objRR TextRepresentatlon next end if Комментарий К решению с помощью графического пользовательского интерфейса Оснастка DNS удобна для работы с небольшим количеством записей, но если вам нужно добавить или удалить несколько десятков записей, имеет смысл создать пакетный файл, содержащий команды dnscmd, а еще лучше — написать сценарий с использованием интерфейса DNS WMI Provider.
434 Глава 13. Система доменных имен К решению с помощью интерфейса командной строки Добавление записей типа A, CNAME и PTR производится достаточно просто, но создание других записей, например SRV, требует ввода значительного объема данных. В справке по ключам /recordadd и /recorddelete указано, какие данные требуются для создания записи каждого типа. К решению с помощью сценария на языке VBScript Приведенный в этом рецепте сценарий на языке VBScript содержит два примера В одном из них создаются записи типа А и PTR. Делается это с помощью метода CreatelnstanceFromTextRepresentation объекта MicrosoftDNS_ResourceRecord, который позволяет создать запись ресурса, задав ее текстовое представление. Вот какое текстовое представление записи А использовалось в данном примере. test-xp.rallencorp.com IN А 192.32.64.13 В первом параметре указанному методу передается имя сервера DNS, во втором — имя домена, куда следует добавить запись, в третьем — сама запись, а четвертый параметр возвращает ссылку на новую запись. Другой пример демонстрирует, как производятся поиск записей ресурсов по указанному имени хоста и их удаление. Для этого сначала формируется WQL-запрос на отбор всех записей, в которых поля OwnerName и RecordData содержат заданное имя хоста (эти условия служат для отбора записей типа А и PTR соответственно). После выполнения запроса для каждой найденной записи вызывается метод De- lete, удаляющий ее с сервера DNS. Смотрите также Документ MSDN: MicrosoftDNS_ResourceRecord. 13.8. Поиск записей ресурсов Проблема Требуется выполнить запрос на получение определенных записей ресурсов. Решение С помощью графического пользовательского интерфейса Оснастка DNS не содержит интерфейса для поиска записей ресурсов. С помощью интерфейса командной строки В следующей команде замените <тип_записи> обозначением типа искомых записей ресурсов (например: A, CNAME или SRV), а <имя_записи> — именем или IP-адресом ис- комых записей: > nslookup -1уре-<тип_записн> <имя_записи>
13.9. Изменение конфигурации сервера DNS 435 С помощью сценария на языке VBScript ‘ Этот код выводит записи ресурсов с указанным именем ' ..... SCRIPT CONFIGURATION ...... strQuery - "<иня записи>" 1 ..... END CONFIGURATION ......... set objDNS - Get0bject("w1nMgmts rootXMicrosoftDNS") set objDNSServer - objDNS Get("M1crosoftDNS_Server.Name""".""") set objRRs - objDNS. ExecQueryC select * " & _ " from MicrosoftDNS_ResourceRecord" & _ " where OwnerName - """ & strQuery & ... & " Or DomainName - ... & strQuery & & _ " Or RecordData - ... & strQuery & ..) 1f objRRs Count < 1 then hScript Echo "No matches found for " & strHostName & " of " _ & strRecordType & " type" else for each objRR 1n objRRs WScr1pt.Echo objRR.TextRepresentati on next end if Комментарий К решению с помощью интерфейса командной строки Если удалить ключ -type и соответствующий ему параметр, указанная команда найдет все записи типа A, PTR и CNAME с именем <имя_записи>. Утилиту ns lookup мож- но запустить и в интерактивном режиме, для чего нужно ввести в командной строке ее имя без параметров. К решению с помощью сценария на языке VBScript В сценарии на данном языке для поиска записей используется WQL-запрос. Этот пример показывает, каким мощным средством является DNS WMI Provider. За- прос содержит условие отбора объектов класса MicrosoftDNS_ResourceRecord, в которых атрибут OwnerName, DomainName или RecordData содержит значение <имя_записи>. Если сервер поддерживает несколько больших зон, такой запрос будет выполняться слишком долго. В подобных случаях область поиска можно ограничить опреде- ленным типом записей, добавив условие RecordType = <тип_записи>. Смотрите также Документ MSDN: MicrosoftDNS ResourceRecord. 13.9. Изменение конфигурации сервера DNS Проблема Требуется изменить параметры сервера DNS
436 Глава 13. Система доменных имен Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку DNS. 2. Если имя сервера на левой панели консоли отсутствует, щелкните правой кнопкой мыши на элементе DNS и выберите в контекстном меню команду Connect to DNS Server (Подключение к серверу DNS). В открывшемся окне вы- берите установку This computer (этот компьютер) или The following computer (другой компьютер), введите, если нужно, имя сервера, к которому хотите подключиться, и щелкните на кнопке ОК. 3. Щелкните правой кнопкой мыши на имени сервера и выберите в открывшемся контекстном меню команду Properties (Свойства). 4. Параметры сервера задаются на нескольких вкладках. Отредактируйте их и щелкните на кнопке ОК, чтобы сохранить изменения. С помощью интерфейса командной строки В следующей команде замените <параметр> именем параметра, значение которого нужно изменить, а <значение> — его новым значением: > dnscmd <иня^сервера_DNS> /config /<параметр> <значение> С помощью сценария на языке VBScript set objDNS - GetObject("w1nMgmts:root\M1crosoftDNS") set objDNSServer - objDNS.Get("M1crosoftDNS_Server.Name-" objDNSServer.<паранетр> - <значение> ' Например: objDNSServer.AllowUpdate - TRUE objDNSServer.Put_ Комментарий Для настройки серверов DNS в среде Microsoft определено множество парамет- ров. В оснастке DNS они задаются на нескольких вкладках окна свойств сервера. Для того чтобы получить их полный список, выполните из командной строки ко- манду dnscmd /config. В решениях с использованием командной строки и сценария на языке VBScript имена практически всех свойств совпадают. Если вы будете вносить изменения с помощью сценария, не забудьте вызвать метод Put_, чтобы их сохранить. Смотрите также Документ MSDN: MicrosoftDNS_Server. 3.10. Выполнение очистки с целью удаления старых записей ресурсов Проблема Требуется удалить старые записи ресурсов. Служба DNS поддерживает специаль- ную процедуру, называемую очисткой или сборкой мусора, с помощью которой
13.10. выполнение очистки с целью удаления старых записей ресурсов 4J/ удаляются все записи ресурсов, не обновлявшиеся в течение заданного време- ни. Обычно это относится только к записям, добавленным посредством DDNS, но вы можете удалить и те из них, которые были добавлены вручную, так называе- мые статические записи. Рекомендуется периодически выполнять очистку зон DNS, так как они не должны содержать неиспользуемые записи. Решение Ниже показано, как включить автоматическую сборку мусора для всех зон, инте- грированных с Active Directory. С помощью графического пользовательского интерфейса 1. Откройте оснастку DNS. 2. Если имя сервера на левой панели консоли отсутствует, щелкните правой кнопкой мыши на элементе DNS и выберите в контекстном меню команду Connect to DNS Server (Подключение к серверу DNS). В открывшемся окне ус- тановите переключатель в положение This computer (этот компьютер) или The following computer (другой компьютер), введите, если нужно, имя сервера, к ко- торому хотите подключиться, и щелкните на кнопке ОК. 3. Щелкните правой кнопкой мыши на имени сервера и выберите в контекст- ном меню команду Set Aging/Scavenging for all zones (Установить свойства очи- стки для всех зон). 4. Установите флажок Scavenge stale resource records (Удалять устаревшие записи ресурсов). 5. Настройте параметры No-Refresh (Интервал блокирования) и Refresh (Интервал обновления) и щелкните на кнопке ОК. 6. Для того чтобы подтвердить произведенные настройки, установите флажок Apply these settings to the existing Active Directory-integrated zones (Применить эти установки к существующим зонам, интегрированным с Active Directory) и щелкните на кнопке ОК. 7. Щелкните правой кнопкой мыши на имени сервера и выберите в контекст- ном меню команду Properties (Свойства). 8. Откройте вкладку Advanced (Дополнительно) и установите флажок Enable automatic scavenging of stale resource records (Разрешить автоматическое удале- ние устаревших записей). 9. Задайте подходящий период очистки. 10. Щелкните на кнопке ОК. С помощью интерфейса командной строки > dnscmd <имя_сервера_0Н5> /config /Scavenginginterval <период_очистхи_в_минутах> > dnscmd <иня_сервера_РЫ5> /config /DefaultAgingState 1 > dnscmd <мня_сервера_DNS> /config /DefaultNoRefreshlnterval <интервал_блокирования_В-Минутах> > dnscmd <HMB_cepeepa_DNS> /config /DefaultRefreshlnterval <иитервал_обновления_в_нинутах> > dnscmd <MMB_cepBepa_DNS> /config ..AllZones /aging 1
43В Глава 13. Система доменных имен С помощью сценария на языке VBScript * Этот код включает автоматическую очистку для всех зон. ' интегрированных с Active Directory • ------ SCRIPT CONFIGURATION ----- strServer = "<ння_сервера_рыЗ>'' intScavenginglnterval - <период_очистки_в_минутах> intNoRefreshlnterval <интервал_бпокирования_в_минутах> intRefreshlnterval = <интервал_обновленмя_в_минугах> ------ ENO configuration -------- set objDNS - GetObject("winMgmts:\\" & strServer & "\root\MicrosoftDNS") set objDNSServer - objDNS.Get("MicrosoftDNS_Server.Name-"".""") objDNSServer Scavenginginterval - intScavenginglnterval objDNSServer.DefaultNoRefreshlnterval - intNoRefreshlnterval objDNSServer.DefaultRefreshlnterval - intRefreshlnterval objDNSServer.OefaultAgingState - TRUE objDNSServer.Put_ WScript.Echo "Configured server scavenging settings" set objZones ° objDNS.ExecQueryCSelect * from HicrosoftDNS_Zone " & _ "Where DnsServerName *•*"&_ objDNSServer.Name & & _ " And Dslntegrated - TRUE") WScrlpt.Echo "Configuring AD-integrated zones: " for each objZone in objZones WScrlpt.Echo " " & objZone.Name & " HERE: " & objZone.Aging objZone.Aging = 1 objZone.Put_ next Комментарий Прежде чем включить автоматическую очистку, необходимо проверить установки четырех указанных ниже параметров. Помните, что некорректная настройка дан- ной функции может привести к удалению нужных записей, поэтому пользоваться ею следует очень осторожно Первым параметром, который вам следует настроить, является Scavenging- Interval (период очистки) — интервал времени между моментами начала двух последовательных процедур очистки. По умолчанию автоматическая очистка от- ключена. Если ее включить, данному параметру будет присвоено значение, соот- ветствующее 168 ч, то есть 7 дням. Второй параметр, OefaultAgingState, определяет установки автоматической очистки для новых зон. Если вы хотите, чтобы автоматическая очистка включа- лась для всех создаваемых зон, присвойте этому параметру значение 1. Следующие два параметра управляют процессом очистки. Параметр Default- NoRefreshlnterval (интервал блокирования) определяет, как часто могут обновляться динамически обрабатываемые записи. Эта установка используется при необходи- мости уменьшить в записи ресурса частоту обновления сервером DNS даты и времени. По умолчанию значение данного параметра также соответствует 168 ч (7 дней). Иными словами, после динамического обновления записи ресурса сервер не станет в течение последующих 7 дней выполнять обновление той же записи.
13.11. очистка кэша DNb Однако если будут изменены IP-адрес или какие-либо другие данные записи, сервер это изменение примет. В параметре DefaultRefreshlnterval (интервал обновления) задается время по окончании интервала DefaultNoRefreshlnterval, спустя которое не обновленная запись начнет считаться устаревшей По умолчанию значение данного параметра соответствует 168 ч (7 дней). Если параметры DefaultRefreshlnterval и Default- NoRefreshlnterval содержат значения, заданные по умолчанию, динамически обновляе- мая запись не считается устаревшей в течение 14 дней со времени последнего об- новления. На практике до удаления записи может пройти даже 21 день, если эта запись не менялась с момента последней очистки: 7 дней (DefaultNoRefreshlnterval) плюс 7 дней (DefaultRefreshlnterval) плюс 7 дней (очистка). 13.11. Очистка кэша DNS Проблема Требуется очистить кэш DNS. Этот кэш содержит записи ресурсов, кэшируемые в памяти в течение некоторого времени, благодаря чему повторные обращения обрабатываются быстрее. Существует два вида кэша DNS. Один из них использу- ется процессом resolver на клиентском компьютере, работающем под управлением Windows (на сервере или рабочей станции), а другой — сервером DNS. Решение Для очистки клиентского кэша процесса resolver выполните такую команду: > Ipconfig /flushdns Очистка кэша сервера DNS производится одним из описанных ниже способов. С помощью графического пользовательского интерфейса 1. Откройте оснастку DNS. 2 На левой панели щелкните правой кнопкой мыши на элементе DNS, выберите в контекстном меню команду Connect to DNS Server (Подключение к серверу DNS). 3. Введите имя сервера, к которому хотите подключиться, и нажмите клавишу Enter. 4. Щелкните правой кнопкой мыши на имени сервера и выберите команду Clear Cache (Очистить кэш). С помощью интерфейса командной строки Следующая команда очищает кэш на сервере <имя_серверд> (если вы не зададите параметр <имя_серверд_О№>, она очистит кэш локального сервера): > dnscmd <иня_сервера_О№> /clearcache С помощью сценария на языке VBScript ' Этот код очищает кзш заданного сервера DNS ‘ -— SCRIPT CONFIGURATION -—
440 Глава 13. Система доменных имен strServer = ’<имя_сервера DNS>“ ' Например: del ral1encorp.ccm 1 —- END CONFIGURATION -— set objDNS = GetObject!"winmgints:\\" & strServer & "\root\MicrosoftDNS") set objDNSServer - objDNS.Get("M1crosoftDNS_Server Name-"*..) set objDNSCache = objDNS.Get("MicrosoftDNS_Cache.ContainerName-""..Cache""" & _ ".DnsServerName-*""' & objDNSServer.Name & _ """.Name=""..Cache""") objDNSCache.ClearCache WScript Echo "Cleared server cache" Комментарий Когда приложению (например, утилите nslookup) необходимо произвести поиск информации в DNS, оно обращается к локальному процессу resol ver, отвечающему за преобразование DNS имен в IP-адреса и IP-адресов в DNS-имена, а уж тот об- ращается к удаленному серверу DNS. Для того чтобы ускорить повторный поиск той же информации, процесс resolver сохраняет результаты в своем локальном кэше. На серверах Microsoft DNS также имеется свой кэш, куда записываются DNS-запросы, получаемые от клиентов, и их результаты. Его содержимое можно просмотреть с помощью оснастки DNS, открыв контейнер интересующего вас сер- вера, а в нем — контейнер Cached Lookups (Кэшируемые операции поиска). По умолчанию данный контейнер нс отображается — для его вывода нужно выбрать в меню View (Вид) команду Advanced (Дополнительно). Из обоих кэшей, серверного и клиентского, записи удаляются после того, как истечет время, заданное в параметре TTL (Time То Live — время жизни). 13.12. Проверка возможности регистрации записей ресурсов контроллером домена Проблема Требуется проверить, правильно ли настроена служба DNS и может ли контроллер домена регистрировать свои записи ресурсов, необходимые для поиска клиентами служб Active Directory. Решение1 С помощью интерфейса командной строки В следующей команде замените идентификатор del DNS именем домена, к которому относится заданный контроллер домена. Эта команда должна выполняться на проверяемом контроллере домена. > dcdiag /test RegisterInDNS /DnsDomain:dcl Starting test- RegisterlnDNS i Такого рода проверку можно выполнить только с помощью утилиты dedi ад для Windows Server 2003.
13.12. Проверка возможности регистрации записей ресурсов контроллером домена 441 DNS configuration is sufficient to allow this domain controller to dynamically register the domain controller Locator records in DNS. The DNS configuration is sufficient to allow this computer to dynamically register the A record corresponding to its DNS name ...................... del passed test RegisterInDNS Комментарий По умолчанию контроллеры домена динамически регистрируют записи ресурсов, позволяющие другим контроллерам домена и клиентам находить службы, функ- ционирующие на данном контроллере. Они делают это с помощью протокола ди- намического обновления системы DNS (Dinamic DNS, DDNS), поскольку регис- трировать все необходимые записи вручную слишком сложно. В Windows Server 2003 команда dcdiag применяется с ключом Register InDNS, позволяющим проверить, может ли контроллер домена регистрировать свои записи Что выведет данная команда, если проверка пройдет успешно, показано в пред- ставленном выше решении. В случае же обнаружения ошибок она выдаст сле- дующее: Starting test: RegisterlnDNS This domain controller cannot register domain controller Locator DNS records. This is because either the DNS server with IP address 6 10 45.14 does not support dynamic updates or the zone rallencorp.com is configured to prevent dynamic updates. In order for this domain controller to be located by other domain members and doma n controllers the domain controller Locator DNS records must be added to DNS. You have the following options 1. Configure the rallencorp.com zone and the DNS server with IP address 6.10.45.14 to allow dynamic updates If the DNS server does not support dynamic updates, you might need to upgrade it. 2. Migrate the rallencorp.com zone to a DNS server that supports dynamic updates (for example, a Windows 2000 DNS server). 3. Delegate the zones _msdcs.rallencorp.com. _sites.rallencorp.com, _tcp.rallencorp.com. and _udp.rallencorp.com to a DNS server that supports dynamic updates (for example, a Windows 2000 DNS server): or 4. Manually add to the DNS records specified in the systemroot\system32\confi g\netlogon.dns fi 1 e DcDiag cannot reach a conclusive result because it cannot interpret the following message that was returned: 9501. ..................... del failed test RegisterlnDNS Как видите, в зависимости от конкретной ситуации предлагается несколько решений проблемы.
442 Глава 13. Система доменных имен 13.13. Регистрация записей ресурсов контроллера домена Проблема Необходимо инициировать регистрацию записей ресурсов контроллера домена. Потребность в указанной операции может возникнуть в том случае, если вы про- изведете определенные конфигурационные изменения на серверах DNS. Решение С помощью интерфейса командной строки > nltest /dsregdns /server:<имя_контроллера_домена> Комментарии В Windows Server 2003 команду nltest можно выполнить с ключом /dsregdns, по- зволяющим запустить регистрацию записей ресурсов контроллера домена. Эту же операцию можно произвести, запустив на контроллере службу NetLogon, которая через каждый час пытается автоматически зарегистрировать записи ресурсов кон- троллера домена, так что если время терпит, команду nltest можно не выполнять. Смотрите также В рецепте 13.12 рассказывается, как проверить, может ли контроллер домена ре- гистрировать свои записи ресурсов. 13.14. Отключение режима динамической регистрации записей ресурсов контроллером домена Проблема Требуется запретить контроллеру домена динамически регистрировать записи ре- сурсов с использованием протокола DDNS. Если вы регистрируете записи ресур- сов контроллера домена вручную, то, естественно, захотите запретить ему делать это динамически (в противном случае периодически будут выводиться сообще- ния об ошибках DDNS, с уведомлением о том, что очередная операция обновле- ния завершилась неудачей). Решение С помощью интерфейса командной строки > reg add HKLM\System\CurrentControlSet\Services\Netlogon\Parameters /vj UseDynamicDNS /t REGJWORD /d 0
13.14. Отключение режима динамической регистрации записей ресурсов The operation completed successfully. > net stop netlogon The Net Logon service is stopping. The Net Logon service was stopped successfully. > del £SystemRoot£\systeni32\config\netlogon.dnb > net start netlogon The Net Logon service is starting....... The Net Logon service was started successfully. С помощью сценария на языке VBScript ' Этот код. отключающий динамическую регистрацию записей ресурсов контроллером ' домена должен выполняться непосредственно на заданном контроллере * Добавление параметра в реестр const HKLM - &Н80000002 set oReg-GetObject("winmgmts:root\default:StdRegProv") strKeyPath - '‘System\CurrentControlSet\Services\Netlogon\Paraineters" if oReg.SetDWORDValue(HKLM.strKeyPath."UseDynamicDNS".1) <> 0 then WScrlpt Echo "Error creating registry value" else WScript.Echo "Created registry value successfully" end if ' Остановка службы Netlogon strService - "Netlogon" set objService - Get0bject("WinMgmts:root/cimv2:Win32_Service Name-"' & _ strService & ..............................) if objService.StopService <> 0 then WScript.Echo "Error stopping " & strService & " service” else WScript.Echo "Stopped " & strService & " service successfully" end if ‘ Удаление файла netlogon.dnb set WshShell - CreateObjectC'WScript.ShelT') set objFSO “ CreateObject("Scripting.FileSysteniObject") set objFile - objFSO.GetFile( WshShel1.ExpandEnvironmentStr1ngs("SSystemRootX") & "\system32\config\netlogon.dnb" ) objFile.Delete WScript.Echo "Deleted netlogon.dnb successfully" ' Запуск службы Netlogon if objService.StartService <> 0 then WScript.Echo "Error starting " & strService & " service” else WScript.Echo "Started " & strService & " service successfully" end if WScript.Echo WScript.Echo "Done"
444 Глава 13 Система доменных имен Комментарий По умолчанию контроллеры домена каждый час пытаются с помощью службы NetLogon динамически регистрировать записи ресурсов, связанные с Active Di- rectory. Такую регистрацию можно отключить, присвоив параметру UseDynamicDNS, который хранится в системном реестре в разделе HKEY_LOCAL_MACHINE\System\Cur- rentControlSet\Services\Netlogon\Parameters, значение 0. После этого нужно остано-- вить службу NetLogon, удалить файл %SystemRoot%\system32\config\netlogon.dnb, а затем снова запустить данную службу Файл netlogon.dnb необходимо удалить потому, что в нем содержится кэш динамически обновляемых записей ресурсов. При повторном запуске служба NetLogon создаст его снова. Смотрите также В рецепте 13.15 рассказывается, как можно запретить динамическую регистрацию отдельных записей ресурсов. Просмотрите документы MS КВ 198767 (How to Pre- vent Domain Controllers from Dynamically Registering DNS Names) и MS KB 246804 (How to Enable/Disable Windows 2000 Dynamic DNS Registrations). 13.15. Запрет на динамическую регистрацию записей ресурсов определенных типов Проблема Требуется запретить контроллеру домена динамически регистрировать записи ресурсов определенных типов. Такой выборочный запрет может быть полезен, в частности, при необходимости снизить нагрузку на эмулятор PDC — в этом случае можно запретить публикацию некоторых его записей SRV, благодаря чему трафик между сервером и клиентами заметно уменьшится. Решение С помощью интерфейса командной строки Ниже показано, как запретить контроллеру домена регистрацию записей ресурсов типа Ldap, Gc и GcIpAddress: > reg add HKLM\System\CurrentControlSet\Services\Netlogon\Parameters /v j DnsAvoidRegisterRecords /t REG_MULTI_SZ /d Ldap\OGc\OGcIpAddre$$ The operation completed successfully. > net stop netlogon The Net Logon service is stopping. The Net Logon service was stopped successfully. > del XSystemRootX\system32\config\netlogon dnb > net start netlogon
The Net Logon service is starting........ The Net Logon service was started successfully. С помощью сценария на языке VBScript ' Этот код запрещает контроллеру домена регистрировать записи ресурсов ' типа Ldap. ' Gc и GcIpAddress Он должен выполняться непосредственно на контроллере домена ' Добавление параметра в реестр const HKLM - &Н80000002 set objReg - GetObject("winmgmts:root\default.StdRegProv") strKeyPath - "System\CurrentControlSet\Services\Netlogon\Parameters" ' Запрет регистрации записей Ldap, Gc и GCIpAddress arrValues - ArrayC'Ldap". “Gc"."GcIpAddress*1) if objReg.SetMultiStringValue(HKLM,strKeyPath,"DnsAvoidRegisterRecords". arrValues) о 0 then WScrlpt.Echo "Error creating registry value" else WScrlpt.Echo "Created registry value successfully" end if ' Остановка службы Netlogon strService - "Netlogon" set objService - GetObject("WinMgmts root/c1mv2:Win32 Service.Name-"' & _ strService & ..............................) if objService.StopService о 0 then WScrlpt.Echo "Error stopping '' & strService & " service" else WScript Echo "Stopped " & strService & *' service successfully" end if ’ Удаление файла netlogon dnb On Error Resume Next set WshShell = CreateObject("WScript Shell") set objFSO - CreateObject("Scripting.FileSystemObject") set objFile - objFSO.GetFile( _ WshShell .ExpandEnvironmentStrings("fcsystemrooW) _ & "\system32\confi g\net1ogon.dnb") objFile.Delete if (Err Number <> 0) then WScrlpt.Echo "Error deleting netlogon.dnb “ & Err.Descript!on else WScrlpt.Echo "Deleted netlogon.dnb successfully" end if ' Запуск службы Netlogon if objService.StartService о 0 then WScrlpt.Echo "Error starting " & strService & " service" el se WScript Echo "Started ’ & strService & “ service successfully" end 1f WScrlpt.Echo WScript Echo "Done"
Комментарий Процедура, запрещающая регистрацию записей ресурсов определенных типов, очень похожа на описанную в рецепте 13 14 процедуру, отключающую автомати- ческую регистрацию контроллером домена всех записей ресурсов. Отличается она только именем параметра, добавляемого в раздел HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Services\Netlogon\Parameters системного реестра; он называется DnsAvoidRegisterRecords. Данный параметр имеет тип REG_MULTI_SZ (мультистроко- вый) и должен содержать разделенный пробелами список мнемонических обо- значений типов записей ресурсов. Полный список поддерживаемых мнемонических обозначений приведен в табл. 13.3. Таблица 13.3. Мнемонические обозначения типов записей ресурсов Мнемоническое обозначение в реестре Тип записи ресурса Имя записи ресурса LdapIpAddress A <DNS-mmb _ромена> Ldap SRV _ldap._tcp.<WS-HHfl _ромена> LdapAtSite SRV _ldap._tcp <имя_сайта>._sites.<DNS-hhb_ромена> Pdc SRV _ldap._tcp.pdc. jnsdes <ОМЗ-имя_ромена> Gc SRV _ldap._tcp gc. jnsdes <0№-иня_леса> GcAtSite SRV _1 dap. _tcp <имя_сайта>. _s 1 tes. gc. jnsdes, <DNS-имя_леса> DcByGuld SRV _ldap._tcp <GUID_flOHeKd> domains, jnsdes ОНЗ-имя_леса> GcIpAddress A _gc.jnsocs,<DNS-HMB_neca> DsaCname CNAME <GUID_DSA> jnsdes.<0МЗ-имя_леса> Kdc SRV _kerberos._tcp.de. jnsdes.<Ж-имя_ронена> KdcAtSite SRV _kerberos._tcp.dc jnsdes. <и«я_сайга>._51 tes. <0VS-w_ромена> De SRV _ldap._tcp de jnsdes ONS-имя_ромеиа> DcAtSite SRV _ldap._tcp <имя_сайта>._sltes.de. jnsdes ОкЗ-имя_ронена> Rfcl510Kdc SRV _kerberos._tcp.<DflS имя_ромена> Rfcl510KdcAtS1te SRV _kerberos._tcp <имя_сайта> _s-\Iqs.OnS-hmb_ромена> GenericGc SRV gc._tcp.<DNS-имя_леса> GenericGcAtSite SRV _gc._tcp.<имя_сайта>._s i tes.<0М5-имя_леса> RfclSlOUdpKdc SRV _kerberos._udp.<0НЗ-иня_ромена> Rfcl51CKpwd SRV _kpasswd. _tcp. <Ж-иня_донена> Rfcl510UdpKpwd SRV _kpasswd._udp <ОМЗ-имя_домена> Смотрите также В рецепте 13.14 рассказывается, как отключить автоматическую регистрацию контроллером домена всех записей ресурсов. Кроме того, просмотрите докумен- ты MS КВ 246804 (How to Enable/Disable Windows 2000 Dynamic DNS Regist- rations) и MS KB 267855 (Problems with Many Domain Controllers with Active Directory Integrated DNS Zones)
13.16. Удаление записей ресурсов контроллера домена Проблема Требуется вручную удалить записи ресурсов, зарегистрированные определенным контроллером домена. Решение С помощью интерфейса командной строки В следующей команде замените <иня_контроллера_домена> полным отличительным именем контроллера домена, а <О№-имя_домена> — полным отличительным име- нем домена, к которому он относится: > nltest /dsderegdns:<иня_нонтроллера_домена> /Сът-.<О№-имя_домена> Комментарий Когда контроллер домена удаляется из домена или когда его роль понижается до роли рядового сервера, он автоматически удаляет свои записи ресурсов. Тем самым контроллер домена избавляет вас от необходимости делать это вручную либо до- жидаться автоматического удаления записей в процессе очередной очистки. Однако если контроллер домена выйдет из строя, вам придется либо удалить его записи ресурсов самостоятельно, либо все-таки дождаться очистки. Удалять их можно либо по одной, с помощью оснастки DNS или утилиты dnscmd.exe, либо с помощью команды nltest, как в предлагаемом выше решении. Наряду с ключом /dsderegdns можно также применять ключи ZDomGUID и ZDsaGUID, позволяющие удалять записи, основываясь на GUID домена или GUID про- граммы DSA (Directory System Agent - агент системы каталогов). Правда, чтобы воспользоваться этими ключами, необходимо знать GUID домена и его контрол- лера, поэтому, возможно, вы найдете более удобным вызвать оснастку DNS. 13.17. Использование в именах компьютеров суффикса домена, отличного от имени домена Active Directory Проблема Требуется разрешить использование в именах компьютеров суффикса домена, отличного от имени домена Active Directory. Решение ПРИМЕЧАНИЕ------------------------------------------------------ Данный рецепт применим только к доменам Windows Server 2003. В разделе комментария описан обходной путь для Windows 2000.
I лсзоа и. k-HJuiciia MuncnnoiA nricn С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Подключитесь к нужному домену. 3. Щелкните правой кнопкой мыши на объекте domainDNS и выберите в открыв- шемся контекстном меню команду Properties (Свойства). 4. Отредактируйте значение атрибута msDS-Al lowedDNSSuffixes, то есть введите новый суффикс DNS, и щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем add_dns_suffix.ldf и следующим содержимым: dn: <0И_Аонена> changetype: modify add: msDS-AllowedDNSSuffixes msDS-Al1owedDNSSuff1xes: <суффикс_0Н5> Затем выполните такую команду: > Idifde -v -1 -f add_dns_suff1x.ldf.ldf С помощью сценария на языке VBScript ' Этот код добавляет новый суффикс, который могут использовать клиенты 1 ----- SCRIPT CONFIGURATION ... strDNSSuffix - "<суффикс_[)№>" 1 Например: othercorp.com strDomain - "ONS-имяу}оменд>" ' Например: amer.rallencorp.com ’ -----END CONFIGURATION —...... set objRootDSE - GetObject!"LDAP://" & strDomain & "/RootDSE") set objDomain - GetObject!"LDAP://” & objRootDSE.Get!"defaultNamingContext") ) objDomain.Put "msDS-AllowedDNSSuffixes". strDNSSuffix objDomain.SetInfo WScript.Echo "Added “ & strDNSSuffix & " to suffix list." Комментарий В Windows 2000, Windows ХР и Windows Server 2003 атрибуты dNSHostName и ser- vicePrinci pal Name объекта computer содержат имя хоста, назначаемое представлен- ному этим объектом компьютеру. По умолчанию в указанных атрибутах могут храниться только такие имена, где суффикс DNS совпадает с именем домена, к которому относится компьютер. Если DNS-суффикс компьютера не совпадает с именем домена Active Direc- tory, на контроллере домена, где клиент пытается обновить объект computer, в журнал событий System (Система) записывается информация о событиях 5788 и 5789. Сообщается, что атрибуты dNSHostName и servicePrincipalName не могут быть обновлены по причине указания неверного суффикса домена. Для того чтобы такое обновле- ние стало возможным, в Windows Server 2003 в атрибут msDS-AllowedDNSSuffixes объекта, представляющего домен (например, dc-rallencorp.dc=com), можно доба- вить суффикс, который будет использоваться в именах компьютеров.
и.1/. использование в именах компьютеров суффикса домена 44У В Windows 2000 единственное, по сути обходное, решение заключается в том, чтобы предоставить пользователю Self право на запись атрибутов dNSHostName и serviceprincipal Name объекта computer. Вот как это делается. 1. Откройте редактор ADSI Edit. 2. Щелкните правой кнопкой мыши на имени домена и выберите в открывшем- ся контекстном меню команду Properties (Свойства). 3. Откройте вкладку Security (Безопасность) и щелкните на кнопке Add (Добавить). 4. В качестве имени объекта введите Sei f и щелкните на кнопке ОК. 5. Щелкните на кнопке Advanced (Дополнительно). 6. В столбце Name (Имя) дважды щелкните на элементе SELF. 7. Откройте вкладку Properties (Свойства) и в поле Apply onto (Применять) выбе- рите установку Computer objects (Компьютер объектов). 8. В области Permissions (Разрешения) установите флажок Allow (Разрешить) для предоставления разрешений Write dNSHostName (Создать dNSHostName) и Write * servIcePrincipalName (Создать servicePrincipalName). 9. Закройте все открытые диалоговые окна, щелкая на кнопке ОК. Смотрите также Документ MS КВ 258503 (DNS Registration Errors 5788 and 5789 When DNS Do- main and Active Directory Domain Name Differ).
1Л Защита пг и аутентификация 14.0. Введение В Windows 2000 установки Active Directory, используемые по умолчанию, к со- жалению, не обеспечивают необходимый уровень защиты. В частности, допускается выполнение анонимных запросов, на что обычно тратится значительный объем вычислительных ресурсов, не предъявляются никакие требования относительно шифрования и подписи трафика между клиентами и контроллерами домена. Из-за этого имена пользователей, пароли и результаты поиска нередко передаются по сети в незащищенном виде. В Windows Server 2003 такого рода недоработки были устранены. Кроме того, данная операционная система поддерживает протокол TLS (Transport Layer Security — защита транспортного уровня), сходный с протоколом SSL (Secure Sockets Layer — защита уровня сокетов), но обладающий большей гибкостью и обеспечивающий оперативное (end-to-end) шифрование трафика между контроллерами домена и клиентами. Надежная защита объектов в Active Directory обеспечивается механизмом, основанным на использовании списков контроля доступа (Access Control List, ACL). Более того, при необходимости можно реализовать защиту не только на уровне объектов, но и па уровне отдельных атрибутов. Оборотной стороной такой возможности стало усложнение алгоритмов защиты. Список контроля доступа генерируется для объекта при его создании па основе используемого по умолчанию ACL-класса. В него добавляются унаследованные разрешения, а также разрешения, заданные специально для определенного объекта. Указанный список представляет собой набор элементов контроля доступа (Access Control Entry, АСЕ), определяющих предоставленные участникам безо- пасности разрешения на доступ к объекту. Эти разрешения составляют основу системы безопасности службы каталогов. В настоящей главе рассматриваются типичные задачи, связанные с управлением разрешениями в Active Directory. Для того чтобы список контроля доступа можно было использовать при работе с объектом каталога, последний должен пройти аутентификацию в Active Direc- tory. Основной службой сетевой аутентификации, применяемой для этой цели в службе каталогов, является Kerberos — стандартная система, разработанная специалистами Массачусетского технологического института. Далее приведены решения некоторых проблем, связанных с использованием Kerberos.
14.1. Включение SSL/TLS Проблема Требуется активизировать доступ к контроллерам домена через протоколы SSL/TLS, что позволит клиентам шифровать LDAP-трафик между ними и серверами. Решение С помощью графического пользовательского интерфейса 1. На панели управления контроллера домена откройте приложение Add or Re- move Programs (Установка и удаление программ). 2. Щелкните на кнопке Add/Remove Windows Components (Установка компонен- тов Windows). 3. Установите флажок Certificate Services (Службы сертификации) и щелкните сначала на кнопке Yes (Да), а затем — на кнопке Next (Далее) 4. Выберите тип центра сертификации, роль которого должен выполнять кон- троллер домена (если не уверены в выборе, укажите Enterprise root СА (Корне- вой ЦС предприятия)), и щелкните на кнопке Next (Далее). 5. Введите имя центра сертификации, выберите период достоверности и щелкни- те на кнопке Next (Далее). 6 Укажите местоположение базы данных и журналов сертификации и щелкни- те на кнопке Next (Далее). 7. Для завершения работы с мастером установки щелкните на кнопке Finish (Готово) 8. Откройте оснастку Domain Controller Security Policy (Политика безопасности контроллера домена). 9 Поочередно откройте контейнеры Computer Configuration ► Windows Settings ► Secunty Settings ► Public Key Policies (Конфигурация компьютера ► Конфигурация Win- dows ► Параметры безопасности ► Политики открытого ключа) 10. Щелкните правой кнопкой мыши на элементе Automatic Certificate Request Set- tings (Параметры автоматического запроса сертификатов) и выберите из контек- стного меню команду New ► Automatic Certificate Request (Создать ► Автоматический запрос сертификатов) 11 Щелкните на кнопке Next (Далее) 12. Выберите из списка Certificate Templates (Шаблоны сертификатов) элемент Do- main Controller (Контроллер домена) и щелкните на кнопке Next (Далее) 13. Щелкните на кнопке Finish (Готово). 14. Щелкните правой кнопкой мыши на элементе Automatic Certificate Request Set- tings (Параметры автоматического запроса сертификатов) и выберите из контек- стного меню команду New ► Automatic Certificate Request (Создать ► Автоматический запрос сертификатов ..). 15 Щелкните на кнопке Next (Далее). 16. Выберите из списка Certificate Templates (Шаблоны сертификатов) элемент Computer (Компьютер) и щелкните на кнопке Next (Далее). 17. Щелкните па кнопке Finish (Готово).
I Лава 14. Эс1ЩИ1с1 и с>у1ен1Ификация Комментарий Получив сертификаты, контроллеры домена могут открывать порты 636 и 3269. Первый из них, порт 636, предназначен для обмена данными по протоколу LDAP поверх SSL/TLS, а второй, порт 3269, - для доступа к глобальному каталогу, так- же поверх указанных протоколов. Довольно подробная информация о том, как вы- полнять запросы к контроллеру домена с использованием протоколов SSL/TL5, приведена в рецепте 14.2. Смотрите также Документы MS КВ 247078 (HOW ТО: Enable Secure Socket Layer (SSL) Commu- nication Over LDAP For Windows 2000 Domain Controllers), MS KB 281271 (Win- dows 2000 Certification Authority Configuration to Publish Certificates in Active Directory of Trusted Domain) и MS KB 321051 (How to Enable LDAP over SSL with a Third-Party Certification Authority). 14.2. Шифрование трафика LDAP с помощью SSL или TLS и использование цифровых подписей Проблема Требуется включить функцию шифрования трафика LDAP при помощи протокола SSL или TLS, а также режим использования цифровых подписей. Решение С помощью графического пользовательского интерфейса Большинство средств с графическим пользовательским интерфейсом для Win- dows Server 2003, Windows ХР и Windows 2000 SP 3 автоматически подписывает и шифрует трафик между клиентом и сервером. В число этих средств входят: О Active Directory Domains and Trusts (оснастка Active Directory — домены и доверие); О Active Directory Sites and Services (оснастка Active Directory — сайты и службы); О Active Directory Schema (оснастка Схема Active Directory); О Active Directory Users and Computers (оснастка Active Directory — пользователи и компьютеры); О оснастка ADSI Edit; О Group Policy Management Console (Консоль управления групповой политикой); О Object Picker (Средство выбора объекта). При наличии редактора ADSI Edit можно указать номер порта, который будет за- действован для просмотра раздела. Для того чтобы просмотреть параметры под- ключения, щелкните на разделе правой кнопкой мыши и выберите в контекстном
14.2. Шифрование трафика LDAP с помощью SSL или TLS 453 меню команду Settings (Параметры). В открывшемся диалоговом окне щелкните на кнопке Advanced (Дополнительно) и введите либо значение 636 — в таком слу- чае поверх протокола SSL будет использоваться LDAP, либо значение 3269 — для получения доступа к глобальному каталогу с применением SSL. Программа LDP для Windows Server 2003 поддерживает шифрование с помо- щью команд StartTLS и StopTLS, представленных в меню Options ► TLS (Параметры ► TLS). В Windows 2000, чтобы получить возможность использовать протокол SSL, нужно выполнить команду Connection ► Connect (Подключение ► Подключиться) и вве- сти номер порта — 636 или 3269. С помощью интерфейса командной строки При выполнении на компьютерах, работающих под управлением Windows Ser- ver 2003 и Windows ХР, утилиты с интерфейсом командной строки dsadd, dsmod, ds rm, dsmove, dsget и dsquery, предназначенные для работы co службой каталогов, позволяют осуществлять доступ к контроллерам домена Windows 2000 SP 3 и Windows Server 2003. При этом они поддерживают шифрование и цифровую подпись данных LDAP. С помощью сценария на языке VBScript ' Этот код показывает, как активизировать использование протокола SSL ' и режима защищенной аутентификации с применением ADSI: ADS_SECURE_AUTHENTICATION = 1 ADS_USE_SSL - 2 set objLDAP - GetObjectCLDAP:”) set objOU - objLDAP.OpenDSObject("LDAP://ou-Sales.dc=rallencorp.dc-com”. _ "admini strator@ral1encorp.com". "MyAdminPassword”. ADS_SECURE_AUTHENTICATION + ADSJJSE_SSL) WScript.Echo objOU.GetC’ou") Этот код показывает, как активизировать использование протокола SSL ' и режима защищенной аутентификации с применением ADO: ' Константы из перечисления ADS_AUTHENTICATION_ENUM ADS_SECURE_AUTHENTICATION - 1 ADS_USE_SSL = 2 set objConn - CreateObjectC'ADODB.Connect!on") objConn.Provider = "ADsDSOObject" objConn.Properties("User ID") = "administrator@rallencorp.com" objConn.Properties("Password") = “MyAdminPassword" objConn.Properties("Encrypt Password") - True objConn.Properties("ADSI Flag") - ADS_SECURE_AUTHENTICATION + ADS_USE_SSL objConn.Open "Active Directory Provider" set objRS - objConn.Execute(’<LDAP://cn=users.dc=rallencorp.dc=com>;“ & _ "(cn-*);H & "cn:" & "onelevel") objRS.MoveFirst while Not objRS.EOF Wscrlpt.Echo objRS.Fields(0).Value objRS.MoveNext wend
454 Глава 14. Защита и аутентификация Комментарий По умолчанию Windows 2000 Active Directory никак не шифрует данные, переда- ваемые по сети между клиентами и контроллерами домена с применением боль- шинства стандартных инструментальных средств. Если одновременно с таким средством запустить Network Monitor (Сетевой монитор, netmon.exe), а затем выполнить обыкновенное связывание с использованием LDAP, можно будет просматривать запросы LDAP, имена пользователей и пароли, передаваемые по сети открытым текстом. Это, конечно же, представляет определенную опасность. Вот почему в Windows Server 2003 большинство средств Active Directory стали шифровать и подписывать свой трафик. Если вы решили для доступа к контроллерам домена Windows 2000 использо- вать более защищенные средства Windows Server 2003, установите на контроллерах домена Windows 2000 пакет дополнений SP 3. Новые версии указанных средств нельзя выполнять непосредственно в Windows 2000 — для их запуска потребует- ся компьютер, работающий под управлением операционной системы Windows ХР или Windows Server 2003. Если вы хотите воспользоваться новыми функциями административных ути- лит, но еще не установили SP 3, можете отключить цифровые подписи на компью- тере, работающем под управлением Windows ХР или Windows Server 2003. Одна- ко помните, что тем самым вы снизите степень защиты. Для того чтобы отклю- чить цифровые подписи, нужно присвоить параметру ADsOpenObjectFlags раздела реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AdminDebug значение 0x03. Смотрите также В рецепте 14.1 речь идет об использовании протоколов SSL/TLS. Кроме того, ознакомьтесь с документами MS КВ 304718 (Administering Windows Server-Based Computers Using Windows XP Professional-Based Clients), MS KB 325465 (Win- dows 2000 Domain Controllers Require SP3 or Later When Using Windows Server 2003 Administration Tools) и MSDN: ADS_AUTHENTICATION_ENUM. 14.3. Разрешение анонимного доступа по протоколу LDAP Проблема Требуется разрешить клиентам анонимный доступ к Active Directory по протоколу LDAP. В Windows 2000 анонимные запросы разрешены по умолчанию, хотя их использование ограничено. В Windows Server 2003 они запрещены, за исключе- нием запросов к объекту RootDSE. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. В разделе конфигурации поочередно откройте контейнеры cn=Services ► cn=Win- dows NT ► cn=Directory Service.
14.3. Разрешение анонимного доступа по протоколу LDAP 455 3. На левой панели щелкните правой кнопкой мыши на объекте Di rectory Servi - се и выберите в открывшемся контекстном меню команду Properties (Свойства). 4. Дважды щелкните на атрибуте dSHeuri sties и, если его значение не установле- но, введите 0000002. 5 Если атрибут содержит значение, измените в нем седьмую цифру. 6. Дважды щелкните на кнопке ОК С помощью сценария на языке VBScript ' Этот код разрешает и запрещает анонимные запросы для леса • —- SCRIPT CONFIGURATION —- boolEnableAnonQuery - 2 ' 2 - разрешить. О - запретить ' —- END CONFIGURATION —- set objRootDSE - GetObject("LDAP://RootDSE”) set objDS = GetObject( 'LDAP://cn=0irectory Service.cn-Windows NT.cn=Services.“ & objRootDSE.GetCconfigurationNamingContext") ) strDSH = objDS.GetCdSHeuristics") for i - len(strDSH) to 6 strDSH - strDSH 8 ”0" next strNewDSH = Left(strDSH.6) & boolEnableAnonQuery StrNewDSH - strNewDSH & Right(strDSH. len(strDSH) - 7 ) WScrlpt.Echo "Old value: " & strDSH WScrlpt.Echo “New value: " & strNewDSH if strDSH о strNewDSH then objDS.Put “dSHeuristies". strNewDSH objDS.Setinfo WScrlpt.Echo "Successfully set anon query mode to " & boolEnableAnonQuery else WScript.Echo “Anon query mode already set to " & boolEnableAnonQuery end if Комментарий Для того чтобы разрешить анонимный доступ к Active Directory, нужно изменить значение атрибута dSHeuristies объекта cn-Directory Serviсе.cn=Windows NT.cn=Ser- vices.ConfigurationON Этот атрибут представляет несколько параметров, управляющих поведением Act ve Directory, в частности режимом List Object Access (см. рецепт 1415) Значением атрибута dSHeuristies является последовательность цифр, с каждой из которых связан определенный параметр Так, для разрешения анонимного до- ступа его седьмую цифру нужно заменить цифрой 2. По умолчанию атрибут dSHeu- ri sties не содержит никакого значения. Если вы включили режим анонимного доступа, то, скорее всего, хотите пре- доставить анонимным пользователям право запрашивать определенные данные из Active Directory Для этого нужно обеспечить пользователю ANONYMOUS LOGON дос- туп к соответствующим частям каталога, от его корня до объектов, которые могут
456 Глава 14. Защита и аутентификация потребоваться. Как разрешить анонимным пользователям запрашивать адреса электронной почты объектов user, вы узнаете из документа MS КВ 320528 Смотрите также Документы MS КВ 320528 (How to Configure Active Directory to Allow Anony- mous Queries) и MS KB 326690 (Anonymous LDAP Operations to Active Directory Are Disabled on Windows Server 2003 Domain Controllers) 14.4. Запрет на выполнение запросов LDAP от определенных клиентов Проблема Требуется запретить контроллерам домена выполнять запросы LDAP, поступаю- щие от компьютеров с определенными IP адресами, с тем чтобы закрыть некото- рым приложениям или клиентским компьютерам доступ в Active Directory. Решение С помощью интерфейса командной строки Следующая команда добавляет адрес сети 10.0.0.0 с маской 255.255.255.0 в спи- сок запрещенных IP-адресов: > ntdsutil "Ipdeny list" conn "co t s <имя_контроллера_донена>" q IP Deny List: Add 10.0.0 0 255.255 255.0 *[1] 10 0 0.0 GROUP MASK 255.255 255.0 NOTE: * | D - uncommitted addition | deletion IP Deny List: Commit [1] 10.10.10.0 GROUP MASK 255.255.255.0 NOTE * | D - uncommitted addition | deletion ПРИМЕЧАНИЕ--------------------------------------------------------------- В Windows Server 2003 утилита ntdsutil не позволяет выполнять указанную операцию. Комментарий Список запрещенных IP-адресов хранится в виде двоичной строки в атрибуте IDAPIPDenyLlst объекта, представляющего политику запросов. Подробнее о политике запросов LDAP рассказывается в рецепте 4.23 (глава 4). Когда такой список задан, контроллеры домена, к которым применяется по- литика запросов, используемая по умолчанию, не отвечают на запросы LDAP от клиентов, чьи адреса входят в указанные в списке диапазоны При необходимости проверить, будет ли отвергнут запрос с определенным IP-адресом, запустите ути- литу ntdsutil, как указано выше, и в ответ на приглашение IP Deny List: введите подкоманду Test х х.х.х, где х х.х.х — интересующий вас IP-адрес
14.5. Использование мастера делегирования управления 457 Наличие списка запрещенных IP-адресов для используемой по умолчанию политики обеспечивает блокирование запросов с адресами из указанного диапа- зона на всех контроллерах домена в лесу Если такое ограничение нужно задать только для одного контроллера домена, создайте новую политику запросов LDAP и свяжите ее с контроллером домена, после чего выполните указанные в данном рецепте действия. Смотрите также В рецепте 4.23 (глава 4) довольно подробно рассказывается о политике запросов LDAP. Рекомендуем ознакомиться и с документом MS КВ 314976 (HOW ТО: Use the Ntdsutil Utility to Deny Access to IP Addresses in Windows 2000). 14.5. Использование мастера делегирования управления Проблема Требуется делегировать функции управления объектами Active Directory опреде- ленному пользователю или группе. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Users and Computers (Active Directory - поль- зователи и компьютеры) или оснастку Active Directory Sites and Services (Active Director}' — сайты и службы), в зависимости от типа объекта, функции управ- ления которым вы хотите делегировать. 2. На левой панели щелкните правой кнопкой мыши на требуемом объекте и вы- берите в открывшемся контекстном меню команду Delegate Control (Делегиро- вание управления). Мастер делегирования управления поддерживается не для всех типов объектов. 3. Щелкните на кнопке Next (Далее) 4. Щелкните на кнопке Add (Добавить) и выберите пользователей или группы, которым вы хотите делегировать функции управления объектом. 5. Щелкните на кнопке Next (Далее). 6. Если вы хотите делегировать функцию, указанную в списке Delegate the follo- wing common tasks (Делегировать следующие обычные задачи), установите со- ответствующий флажок и щелкните на кнопке Next (Далее). 7. В том случае, если нужная функция в списке отсутствует, выберите команду Create a custom task to delegate (Создать особую задачу для делегирования), щелкните на кнопке Next (Далее), укажите тип объекта, управление кото- рым хотите делегировать, еще раз щелкните на кнопке Next (Далее), выберите
458 Глава 14. Защита и аутентификация разрешения, которые хотите делегировать, и опять-таки щелкните на кнопке Next (Далее). 8. Щелкните на кнопке Hnish (Готово). Комментарий Microsoft создала мастер делегирования управления, пытаясь облегчить админи- страторам Active Directory выполнение сложной и рутинной задачи по установке разрешений на реализацию стандартных решений. Эта сложность обусловлена отчасти тем обстоятельством, что разрешения в Active Directory определяются с высокой степенью гранулярности. Мастер делегирования управления оказывает администратору определенную помощь, но его возможности довольно скромны. Оговоренный в нем набор задач слишком ограничен, хотя мастер, как подчеркивает- ся в рецепте 14.6, позволяет определять новые задачи. Одно из ограничений заклю- чается в том, что он позволяет только добавлять разрешения, но не отменять и не удалять их — для этого приходится использовать редактор ACL (см. рецепт 14.10). 14.6. Настройка мастера делегирования управления Проблема Требуется добавить в список мастера делегирования управления новые задачи или удалить уже существующие. Решение Откройте INF-файл мастера делегирования управления (%SystemRoot%\Inf\Deleg- wiz.inf) на том компьютере, для которого вы хотите выполнить настройку мастера. В разделе [DelegationTemplates] вы увидите строку, подобную следующей: Templates = templatel. template?, template?, templates templates, templates, template?, templates, tempiate9.tempiatelO. tempiatell. tempiatel2. tempiatel3 Добавьте в нее новое имя шаблона, предположим, имя tempi atel4: Templates - tempiatel. template?. template?, tempiate4, templates, templates, template?, templates, tempiate9,tempiatelO. tempiatell. tempiatel2. tempiatel3. templates Далее перейдите в конец файла и добавьте в него новый раздел с описанием создаваемого шаблона. Примерами вам послужат разделы других шаблонов. Ниже приведен их общий формат: [<имя_ш(5лона>] AppliesToClasses - <разделенный_залятыми_список_классов_из_которых_вызывается_мастер> Description - п<олисаниеуыводимое_в_мастере>" ObjectTypes *= <разделенный_запятыни_список_классов_для_установки> 1<имя_шаблона>.SCOPE]
14.6. Настройка мастера делегирования управления 459 разрешения_для_данной_обласги_дейсгвия> [<имя_шаблона>.<класс1>] <разрешения_рля_класс1> [<имя_шаблона>.<класс2>] разрешения для_класс2> Отметим, что <иня_шаблона> должно совпадать с именем, заданным в разделе [DelegationTemplates]; в нашем примере — это templatel4. В строку AppliesToClasses введите разделенный запятыми список выводимых имен LDAP-классов, на которые мастер будет делегировать разрешения, — в таком случае для этих классов вы сможете выполнить команду Delegate Control (Делеги- рование управления). Например, для того чтобы новый шаблон можно было при- менять к доменам, подразделениям и контейнерам, нужно добавить в код такую строку: ApplIesToClasses - domainDNS,organizationalUnit.container Далее в строке Description, введите текст, который в окне мастера будет опи- сывать делегируемые разрешения. Вот пример описания полного набора разре- шений на доступ к объектам i netOrgPerson, предназначенного для делегирования: Description - “Создание, удаление и управление учетными записями типа user и inetOrgPerson" В строке Obj ectTypes введите разделенный запятыми список классов объектов, которым будет делегировано управление. В нашем примере это классы user и InetOrgPerson: ObjectTypes - user.inetOrgPerson Наконец, определите разрешения устанавливаемые при выборе данного шаблона. Разрешения бывают двух типов. В разделе [<имя_шаблона>. SCOPE] задаются разре- шения на доступ к объекту, для которого был вызван мастер; этот объект относится к одному из классов, определенных в строке Appl iesToCl ass. Такие разрешения, часто назначаемые контейнерам и подразделениям, позволяют создавать, моди- фицировать и удалять дочерние объекты конкретного типа. Например, для того чтобы предоставить разрешение на создание (СС) или удаление (DC) объектов типа user и inetOrgPerson, нужно включить в файл следующий раздел: [tempiatel4.SCOPE] user=CC.DC i netOrgPerson=CC.DC Как видите, каждое из разрешений (например, на создание дочерних объектов) представлено двухбуквенным кодом-аббревиатурой. Ниже приведен перечень поддерживаемых кодов: О RP - (Read Property — на чтение свойства); О WP — (Write Property — на запись свойства); О СС — (Create Child — на создание дочерних объектов); О DC — (Delete Child — на удаление дочерних объектов); О GA — (Full Control — на получение полного доступа).
460 Глава 14. Защита и аутентификация Если для определения разрешений раздел SCOPE не требуется, его можно про- пустить. Приведенные ниже строки определяют разрешения на доступ к объектам классов, перечисленных в строке ObjectTypes. Так, полный доступ к существую- щим объектам user и InetOrgPerson можно предоставить следующим образом; [tempiatel4.user] e-GA [tempiatel4.inetOrgPerson] @=GA Этот пример очень похож на предыдущий, с той лишь разницей, что иденти- фикатор SCOPE заменен именами конкретных классов объектов, к которым приме- няются разрешения. Символ О указывает, что разрешение распространяется на все атрибуты объекта Для определения более детальных разрешений можно за- менить данный символ именем атрибута, к которому относится разрешение. На- пример, следующая спецификация позволяет предоставить разрешения на чтение и запись значений атрибута department объектов inetOrgPerson. [tempiatel4.inetOrgPerson] department=RP,WP Кроме того, можно определить административные права доступа, воспользо- вавшись вместо символа @ или имени атрибута спецификатором CONTROLRIGHT и задав выводимое имя LDAP необходимого права доступа В следующем приме- ре показано, как предоставить право на переустановку пароля (Reset Password) объектов inetOrgPerson, а также право на чтение и запись значения атрибута pwd- LastSet: [tempiatel4 inetOrgPerson] CONTROLRIGHT-”Reset Password” pwdLastSet-RP.WP Комментарий Итак, мастер делегирования управления позволяет настроить набор задач, право на выполнение которых с его помощью можно будет предоставлять определенным пользователям Отредактированный файл delegwiz.inf с записанными в него настрой- ками нужно будет скопировать на все клиентские компьютеры, где потребуются новые установки. Это можно сделать вручную, просто скопировав данный файл. Смотрите также Об использовании мастера делегирования управления подробно рассказывается в рецепте 14.5. 14.7. Просмотр списка контроля доступа объекта Проблема Требуется просмотреть список контроля доступа заданного объекта.
14.7. Просмотр списка контроля доступа объекта 461 Решение С помощью графического пользовательского интерфейса 1. Откройте для интересующего вас объекта редактор ACL. Это делается сле- дующим образом. В оснастке Active Directory Users and Computers (Active Directory — пользователи и компьютеры) либо в редакторе ADSI Edit найдите объект, щелкните на нем правой кнопкой мыши, выберите в контекстном ме- ню команду Properties (Свойства) и откройте в окне свойств объекта вкладку Security (Безопасность). Если вы пользуетесь оснасткой Active Directory Users and Computers (Active Directory — пользователи и компьютеры), выполните команду View ► Advanced Features (Вид ► Дополнительные параметры), иначе в окне свойств объекта указанная вкладка не появится. 2. Щелкните на кнопке Advanced (Дополнительно), и на экран будет выведен список элементов контроля доступа. С помощью интерфейса командной строки >«dsacls <ОИ_рбъекта> С помощью сценария на языке VBScript Программный код, который выполняет вывод списка контроля доступа для за- данного объекта, слишком длинный и сложный, поэтому здесь он не приводит- ся. Вы найдете его на веб-сайте книги, расположенном по следующему адресу: http:// www.oreilly.com/catalog/actlvedckbk/. Комментарий Просмотр списка контроля доступа заданного объекта — одна из стандартных задач, которые довольно часто приходится выполнять любому администратору. Редактор ACL позволяет проверять разрешения для объектов, в частности, полу- ченные после использования мастера делегирования управления. Помимо разре- шений в окне этого редактора представлены установки аудита и указано имя вла- дельца объекта. Последнее очень важно, поскольку право на владение объектом предполагает наличие определенных неотъемлемых прав доступа к нему. Редактор ACL используется не только для работы с разрешениями Active Di- rectory, в нем представлены и разрешения NTFS на доступ к файлам и папкам файловой системы. Поэтому его интерфейс должен быть вам знаком. Обязательно просмотрите информацию о возможностях данного редактора, доступных в рас- ширенном режиме, переход в который осуществляется командой View ► Advanced (Вид ► Дополнительно). Список участников системы защиты, для которых настрое- ны разрешения, представлен в базовом режиме, но в нем отображаются не все эле- менты списков контроля доступа. Полный их перечень дается только в расши- ренном режиме, при этом отражается даже область действия разрешений, вплоть до уровня отдельных атрибутов. Смотрите также Из рецепта 14.10 вы узнаете, как отредактировать список контроля доступа, а из рецепта 15.12 — как выполнить аудит доступа.
462 Глава 14. Защита и аутентификация 14.8. Настройка редактора ACL Проблема Требуется настроить разрешения на доступ к атрибутам, которые по умолчанию в редакторе ACL не выводятся Решение Редактор ACL выводит только подмножество атрибутов объектов. Чтобы про- смотреть их полный список, нужно щелкнуть на кнопке Advanced (Дополнительно). С атрибутом могут быть связаны разрешения на чтение или запись либо оба эти разрешения, и для каждого из них выбирается установка Allow (Разрешить) или Deny (Запретить). Если нужный вам атрибут отсутствует в списке, отредактируйте файл %SystemRoot%\system32\dssec.dat на том компьютере, где вы запускаете ре- дактор ACL. В этом файле каждому классу объектов соответствует отдельный раздел, на- чинающийся указанным в квадратных скобках именем класса, как в приведенном ниже примере Под этим заголовком располагается список атрибутов, для каждо- го из которых можно указать, должен ли он выводиться в редакторе списков кон- троля доступа. Приведем несколько начальных строк раздела [user]: [user] aCSPolicyName 7 adminCount=7 al lowedAttributes-7 Как видите, раздел состоит из списка атрибутов, за каждым из которых следует знак равенства и числовое значение. Это значение определяет, будет ли атрибут представлен в редакторе ACL. Допускаются следующие значения: О 0 - выводятся оба разрешения: Read Property (на чтение свойства) и Write Property (на запись свойства); О 1 — выводится разрешение Write Property (на запись свойства); О 2 — выводится разрешение Read Property (на чтение свойства); О 7 - никакие разрешения для данного атрибута не выводятся Если какой-либо атрибут в указанном списке отсутствует, используется зна- чение по умолчанию (его можно задать с п мощью символа @). Комментарий Процесс настройки списка атрибутов и разрешений, выводимых в редакторе ACL, подобен процессу настройки мастера делегирования управления. После его за- вершения отредактированный файл (dssec.dat) также нужно скопировать па все компьютеры, где должны вступить в силу новые установки. Данный рецепт пригодится вам при делегировании разрешения на разблоки- ровку учетных записей. Такая потребность нередко возникает в больших органи- зациях, и эту задачу приходится решать сотрудникам отдела технической поддержки, которым никакие другие разрешения на управление объектами user не предостав-
14.9. Просмотр действующих разрешений на доступ к объекту 463 ляются. Чтобы установить разрешение на разблокировку учетных записей, нужно в разделе [user] в файле dssec.dat задать для атрибута lockoutTime значение 0. Смотрите также Документы MS КВ 296490 (How to Modify the Filtered Properties of an Object) и MS KB 294952 (How To Delegate the Unlock Account Right) 14.9. Просмотр действующих разрешений на доступ к объекту Проблема Требуется выяснить, какие разрешения на доступ к конкретному объекту имеются у пользователя или у группы Решение С помощью графического пользовательского интерфейса 1. Откройте для интересующего вас объекта редактор ACL. Это делается следу- ющим образом В оснастке Active Directory Users and Computers (Active Direc- tory — пользователи и компьютеры) либо в редакторе ADSI Edit найдите объект, щелкните па нем правой кнопкой мыши, выберите в контекстном меню ко- манду Properties (Свойства) и откройте в окне свойств объекта вкладку Security (Безопасность) Если вы пользуетесь оснасткой Active Directory Users and Computers (Active Directory' — пользователи и компьютеры), выполните команду View ► Advanced Features (Вид ► Дополнительные параметры), иначе в окне свойств объекта указанной вкладки не будет. 2 Щелкните на кнопке Advanced (Дополнительно) 3. Откройте вкладку Effective Permissions (Действующие разрешения). 4 Щелкните на кнопке Select (Выбрать), чтобы открыть редактор объектов. 5. Найдите пользователя или группу, действующие разрешения которых вы хотите просмотреть. Результаты будут выведены в виде списка Effective Permissions (Действующие разрешения) ПРИМЕЧАНИЕ------------------------------------------------------------ Вкладка Effective Permissions (Действующие разрешения) имеется только в редакторе ACL для Windows Server 2003. Если вы работаете в Windows 2000, воспользуйтесь описанной ниже командой acidiag. С помощью интерфейса командной строки > acidiag ОИ_объекта> /getefТес^е:<лользователь_лли_групла>
464 Глава 14. Защита и аутентификация Комментарий Список установленных разрешений на доступ к объекту не позволит вам получить полное представление об имеющихся у пользователя или группы правах: ведь еще нужно учесть разрешения, унаследованные благодаря членству в других группах, и унаследованные разрешения, которые задавались для объектов, расположенных выше в дереве иерархии. 14.10. Изменение списка контроля доступа объекта Проблема Требуется изменить список контроля доступа объекта, при необходимости пре- доставить или запретить доступ к нему определенному пользователю или группе. Решение С помощью графического пользовательского интерфейса 1. Откройте для интересующего вас объекта редактор ACL. Это делается сле- дующим образом. В оснастке Active Directory Users and Computers (Active Direc- tory — пользователи и компьютеры) или редакторе ADSI Edit найдите нужный объект, щелкните на нем правой кнопкой мыши, выберите в контекстном меню команду Properties (Свойства) и откройте в окне свойств объекта вкладку Security (Безопасность). Если вы пользуетесь оснасткой Active Directory Users and Com- puters (Active Directory — пользователи и компьютеры), выполните команду View ► Advanced Features (Вид ► Дополнительные параметры), иначе в окне свойств объекта указанной вкладки не будет. 2. Щелкните на кнопке Advanced (Дополнительно), чтобы вывести список элементов контроля доступа, и внесите нужные изменения. С помощью интерфейса командной строки > dsacls <ОИ_объектд> С помощью сценария на языке VBScript В рецептах 7.7 (глава 7), 8.2 (глава 8), 13.6 (глава 13) и 17.9 (глава 17) показано, как можно изменить список контроля доступа с помощью VBScript. Комментарий Изменение списка контроля доступа для заданного объекта — одна из стандартных задач, хорошо знакомых любому администратору. Как показано в рецептах 14.5 и 14.6, мастер делегирования управления — средство довольно громоздкое, с ограниченными возможностями, и вместо того чтобы расширять его, иногда бывает проще задать требуемые разрешения вручную. Описанные выше методы с применением графического пользовательского интерфейса и командной строки
14.11. Изменение используемого по умолчанию списка контроля доступа 465 полезны в тех случаях, когда нужно изменить отдельные разрешения, но для вне- сения изменений во множество объектов лучше написать сценарий. Смотрите также Рекомендуем ознакомиться с документом MS КВ 281146 (How to Use Dsacls.exe in Windows 2000). 14.11. Изменение используемого по умолчанию списка контроля доступа, связанного с классом объектов в схеме Проблема Необходимо изменить используемый по умолчанию список контроля доступа, связанный с определенным классом объектов в схеме. Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Active Directory Schema (Схема Active Directory). 2. На левой панели найдите класс, для которого нужно изменить список контро- ля доступа, щелкните на его имени правой кнопкой мыши и выберите в кон- текстном меню команду Properties (Свойства). 3. Откройте вкладку Default Security (Безопасность по ухМолчанию). 4. С помощью редактора ACL настройте список контроля доступа. 5. Щелкните на кнопке ОК. ПРИМЕЧАНИЕ-------------------------------------------------------- Вкладка Default Security (Безопасность по умолчанию) имеется только в Windows Server 2003 О том, как вручную выполнить данную задачу в Windows 2000, рассказывается в документе MS КВ 265399. Комментарий С каждым объектом в Active Directory связан ктасс, определяющий, кроме всего прочего, используемый по умолчанию дескриптор безопасности (атрибут de- faultSecurityDescriptor) При создании объекта его исходные разрешения зависят от этого дескриптора и тех разрешений, которые заданы для родительского кон- тейнера объекта. Смотрите также В рецепте 14.12 рассказывается, как сравнить ACL объекта с используемым по умолчанию списком контроля доступа, связанным с его классом в схеме. Из ре- цепта 14.13 вы узнаете, как переустановить ACL объекта, вернув для него исходные
466 Глава 14. Защита и аутентификация установки, заданные в схеме. Кроме того, просмотрите документ MS КВ 265399 (HOW ТО. Change Default Permissions for Objects That Are Created in the Active Directory) 14.12. Сравнение ACL объекта с используемым по умолчанию списком контроля 4 доступа его класса Проблема Требуется определить, содержит ли список контроля доступа объекта те разрешения, которые определены в схеме для его класса. Решение С помощью интерфейса командной строки > acidlag <ОИ_объекта> /schema Комментарий Что представляет собой используемый по умолчанию дескриптор безопасности объекта, вы узнаете, обратившись к рецепту 14.11. Смотрите также В рецепте 14.13 рассказывается, как переустановить ACL объекта, вернув для него исходные установки, которые были заданы в схеме. 14.13. Переустановка списка контроля доступа объекта Проблема Требуется переустановить список контроля доступа объекта, вернув для негр исходные значения, которые были заданы в схеме. Решение1 С помощью графического пользовательского интерфейса 1. Откройте для интересующего вас объекта редактор ACL. Это делается сле- дующим образом В оснастке Active Directory Users and Computers (Active Direc- tory — пользователи и компьютеры) или в редакторе ADSI Edit найдите нужный объект, щелкните на нем правой кнопкой мыши, выберите в контекстном меню команду Properties (Свойства) и откройте в окне свойств объекта вкладку Security 1 Приведенные в настоящем рецепте инструкции применимы только к редактору ACL для Windows Server 2003.
14.14. Запрет на сохранение хэш-значений паролей 467 (Безопасность). Если вы пользуетесь оснасткой Active Directory Users and Computers (Active Directory — пользователи и компьютеры), выполните команду View ► Advanced Features (Вид ► Дополнительные параметры), иначе в окне свойств объекта указанной вкладки не будет. 2. Щелкните на кнопке Advanced (Дополнительно), и на экран будет выведен список элементов контроля доступа. 3. Щелкните на кнопке Default (По умолчанию). 4. Дважды щелкните на кнопке ОК. С помощью интерфейса командной строки > dsacls <ОИ_объекта> /s Комментарий Подробная информация о дескрипторах безопасности приведена в рецепте 14.11. 14.14. Запрет на сохранение хэш-значений паролей Проблема Необходимо запретить хранение в Active Directory совместимых с LAN Manager хэш-значений паролей. Эти хэш-значения используются только с целью поддержки клиентов, работающих под управлением Windows 95 и Windows 98, и, к сожалению, подвержены взлому. Решение В Windows 2000, для того чтобы запретить хранение хэш-значений паролей, не- обходимо в разделе системного реестра HKLM\SYSTEM\CurrentControlSet\Control\Lsa системном реестре каждого контроллера домена создать параметр NoLMHash. При- сваивать этому параметру значение не нужно. Учтите, что данная возможность существует только для контроллеров домена, работающих под управлением Win- dows 2000 SP 2 и более поздних операционных систем. В Windows Server 2003 вместо параметра NoLMHash используется параметр Lsa раздела системного реестра HKLM\SYSTEM\CurrentControlSet\Control, которому сле- дует присвоить значение 1. Для того чтобы это сделать, нужно изменить политику безопасности контроллера домена, о чем речь пойдет далее. С помощью графического пользовательского интерфейса 1. Откройте оснастку Domain Controller Security Policy (Политика безопасности кон- троллера домена). 2. На левой панели поочередно откройте контейнеры Local Policies ► Security Options (Локальные политики ► Параметры безопасности).
468 Глава 14. Защита и аутентификация 3. На правой панели дважды щелкните на элементе Network securi ty: Do not store LAN Manager hash value on next password change (Сетевая безопасность. He хранить хэш-значений LAN Manager при следующей смене пароля). 4. Установите флажок Define this policy setting (Определить этот параметр безо- пасности). 5. Установите переключатель в положение Enabled (включен). Комментарий Если в домене отсутствуют клиенты с операционными системами Windows 98 и Windows 95, вам имеет смысл отключить в нем режим хранения хэш-значений LAN Manager. Эти значения генерируются на основе устаревшего алгоритма, ко- торый использовался еще до Windows NT 4.0 и считается слабым по сравнению с новым алгоритмом NT, на основе которого генерируются также сохраняемые в Active Directory хэш-значения. ПРИМЕЧАНИЕ------------------------------------------------------- Хэш-значения LAN Manager генерируются только для паролей, длина которых составляет менее 15 символов. Смотрите также Документ MS КВ 299656 (How to Prevent Windows from Storing a LAN Manager Hash of Your Password in Active Directory and Local SAM Databases). 14.15. Включение режима List Object Access Проблема Необходимо отключить используемый по умолчанию режим, в котором любой аутентифицированный пользователь может просматривать содержимое каталога Active Directory. Вместо этого должен быть установлен режим List Object Access (Доступ к списку объектов), при котором пользователям требуются явные разре- шения на просмотр содержимого каталога. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. В разделе конфигурации поочередно откройте контейнеры cn=Services ► сп= Windows NT ► cn=Directory Service. 3. На левой панели щелкните правой кнопкой мыши на объекте Directory Service (Служба каталогов) и выберите в открывшемся контекстном меню команду Properties (Свойства). 4. Дважды щелкните на атрибуте dSHeurlsties.
14.15. Включение режима List Object Access 469 5. Если указанный атрибут пуст, присвойте ему значение 001, в противном слу- чае установите его третий бит в 1. 6. Дважды щелкните на кнопке ОК. С помощью сценария на языке VBScript ' Этот код включает и отключает для леса режим List Object Access • --- SCRIPT CONFIGURATION —- boolEnableListObject - 1 ' 1 - включить. 0 - выключить 1 END CONFIGURATION —- set objRootDSE - GetObjectCLDAP://RootDSE") set objDS = GetObjectt _ "LDAP:/7cn-Directory Service.cn=Windows NT.cn-Services." _ & objRootDSE.Get("configurationNamingContext") ) strDSH - objDS.Get("dSHeuristies") if lentstrDSH) = 1 then strDSH » strDSH & "0" end if strNewDSH - Left(strDSH,2) & boolEnableListObject if len(strDSH) > 3 then StrNewDSH - strNewDSH & Right(strDSH. len(strDSH) - 3) end if WScript.Echo "Old value: " & strDSH WScript.Echo "New value: " & strNewDSH if strDSH о strNewDSH then objDS.Put "dSHeuristies". strNewDSH objDS.Setinfo WScript.Echo "Successfully set list object mode to " & _ boolEnableLi stObject else WScript.Echo "List object mode already set to " & boolEnableListObject end if Комментарий Режим List Object Access особенно полезен в тех случаях, когда пользователям необходимо предоставить разрешение на просмотр только подмножества объек- тов, содержащихся в определенном контейнере, или же когда должен быть запре- щен доступ к какому-то контейнеру. По умолчанию группе Authenticated Users (Прошедшие проверку) на все объекты домена предоставляется разрешение List Contents (Список содержимого). Если вы удалите данное разрешение либо запре- тите этот вид доступа к контейнеру, отредактировав его ACL, пользователи не смогут запрашивать список содержащихся в контейнере объектов, используя такие средства, как Active Directory Users and Computers (Active Directory - пользователи и компьютеры) и ADSI Edit. Если необходимо, чтобы пользователи имели возможность запрашивать спи- сок содержимого контейнера, но в результирующий список не включались опре- деленные объекты, вначале установите описанный выше режим List Object Ac- cess, а затем удалите разрешение List Contents (Список содержимого) из списка
470 Глава 14 Защита и аутентификация контроля доступа контейнера. После этого предоставьте данное разрешение только для тех объектов, которые разрешается просматривать пользователям. ВНИМАНИЕ ------------------------------------------------------------------- Использование режима List Object Access может значительно повысить затрать на настройку спи- сков контроля доступа в Active Directory. Смотрите также Рекомендуем обратиться к документу MSDN: Controlling Object Visibility and Microsoft’s High-Volume Hosting Site, находящемуся по адресу http7/www.micro- soft.com/serviceproviders/deployment/hvh_ad_deploy.asp 14.16. Изменение списка контроля доступа для администраторов Проблема Требуется изменить список контроля доступа для учетных записей пользователей, которые входят в административные группы. Решение Используя один из методов, описанных в рецепте 14.10, измените список контроля доступа объекта cn=AdminSDHolder.cn=Systems <ОИ_домена> в домене, к которому относятся учетные записи администраторов. ACL этого объекта через каждый час применяется к учетным записям пользователей, входящих в административные группы. Комментарий Если вы когда-либо, пытаясь изменить список конгроля доступа для учетной записи пользователя который входил в одну из административных групп Active Directory, или модифицировать АСЕ подразделения, содержащего учетную запись админи- стратора, обнаружили, что ACL этой учетной записи со временем снова возвра- щается в исходное состояние, то теперь, надо полагать, понимаете, в чем дело. В Active Directory реализована функция Admin SD Holder, с которой приходится работать многим администраторам. И хотя у новичков эта функция вызывает много нареканий, на самом деле без нее трудно обойтись Ежечасно на эмуляторе PDC процесс, называемый Admin SD Holder, сравнивает ACL объекта Admi nSDHol der c ACL учетных записей, входящих в состав админист- ративных групп домена Обнаружив различие, он перезаписывает ACL учетной записи и отключает наследование. Если вы удалите пользователя из администра- тивных групп, вам придется активизировать для него унаследованные разрешения и включить наследование Процесс Admin SD Holder вместо вас этого не сделает. Назначение описанного процесса заключается в предотвращении нежелатель- ных действий пользователя, которому делегированы разрешения на доступ к под- разделению или контейнеру, где содержится учетная запись, входящая в состав
14.17. Просмотр и удаление билетов Kerberos 471 одной или нескольких административных групп. Такой пользователь может, на- пример, переустановить пароль учетной записи и войти в домен, что даст ему воз- можность делать то, на что он права не имел. Ниже приведен перечень групп, которые должны обрабатываться процессом Admin SD Holder: О Administrators (Администраторы); О Account Operators (Операторы учета); О Cert Publishers (Издатели сертификатов); О Backup Operators (Операторы архива); О Domain Admins (Администраторы домена); О Enterpri se Admi ns (Администраторы предприятия); О Print Operators (Операторы печати); О Schema Admi ns (Администраторы схемы); О Server Operators (Операторы сервера). Кроме того, процессом Admin SD Holder отдельно проверяются учетные запи- си пользователей Administrator (Администратор) и Krbtgt. Смотрите также Документы MS КВ 232199 (Description and Update of the Active Directory Admin- SDHoldcr Object), MS KB 306398 (AdminSDHolder Object Affects Delegation of Control for Past Administrator Accounts) и MS KB 817433 (Delegated Permissions Are Not Available and Inheritance Is Automatically Disabled). 14.17. Просмотр и удаление билетов Kerberos Проблема Необходимо просмотреть билеты Kerberos и удалить их, если известно, что они более не понадобятся. Решение Используемые для решения указанной проблемы утилиты kerbtray и kl i st входят в состав пакета Resource Kit. С помощью графического пользовательского интерфейса 1. Из окна, открываемого командой Start ► Run (Пуск ► Выполнить), запустите программу kerbtray.exe. 2. В области уведомлений (рядом с системными часами) должен появиться но- вый зеленый значок. Дважды щелкните на нем, чтобы открыть окно, в кото- ром представлен список существующих билетов Kerberos 3 Для удаления билетов щелкните правой кнопкой мыши на значке программы kerbtray и выберите в контекстном меню команду Purge Tickets (Удалить билеты). 4. Закройте окно программы kerbtray, а потом откройте таковую, щелкнув на ее значке правой кнопкой и выбрав команду List Tickets (Список билетов).
472 Глава 14. Защита и аутентификация С помощью интерфейса командной строки Приведенная ниже команда выводит список билетов Kerberos: > klist tickets Следующая команда удаляет все существующие билеты > klist purge Комментарий Active Directory использует Kerberos в качестве основной системы сетевой аутен- тификации. Когда пользователь проходит аутентификацию в Kerberos Key Dis- tribution Center (KDC) — так в Active Directory называется выполняющаяся на контроллере домена служба Kerberos V5, — он получает один или несколько билетов, которые идентифицируют его как участника системы безопасности Active Direc- tory и могут использоваться для аутентификации при доступе к другим службам, поддерживающим Kerberos Такие билеты называются TGT (Ticket-Granting-Ticket - билет, предоставляющий билет). Получив TGT, клиент может передать его служ- бе, поддерживающей Kerberos, и если она примет таковой, то предоставит клиенту еще один, собственный билет. Kerberos — сложная система, в нескольких словах се не описать. За более под- робными сведениями о ее работе рекомендуем обратиться к книге Kerberos: The Definitive Guide (O’Reilly). Смотрите также Документ RFC 1510 (The Kerberos Network Authentication Service V5) и доку- мент MS KB 232179 (Kerberos Administration in Windows 2000). 14.18. Совместное использование протоколов Kerberos и UDP Проблема Предположим, у клиентов возникли проблемы с аутентификацией и оказалось, что они обусловлены чрезмерной фрагментацией трафика Kerberos, производимой протоколом UDP. Поэтому требуется сделать так, чтобы трафик Kerberos переда- вался с помощью протокола TCP, а не UDP. Решение С помощью графического пользовательского интерфейса 1. Из окна, открываемого командой Start ► Run (Пуск ► Выполнить), запустите программу regedit.exe. 2. Откройте на левой панели раздел HKEY_LOCAL_MACHINE\System\CurrentControl- Set\Control\Lsa\Kerberos\Parameters
14.19. Настройка параметров протокола Kerberos 473 3. Щелкните правой кнопкой мыши на разделе Parameters и выберите в открыв- шемся контекстном меню команду New ► DWORD value (Создать ► Параметр DWORD) Введите для нового параметра имя MaxPacketSize. 4. На правой панели дважды щелкните на созданном параметре и введите для него значение 1. 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки > reg add ,‘HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters'' /v j "MaxPacketSize’ /t REG_DWORD /d 1 С помощью сценария на языке VBScript ' Этот код предписывает Kerberos использовать TCP ’ SCRIPT CONFIGURATION —- strComputer = -Компьютере*" ' Например: rallen-w2k3 ' END CONFIGURATION const HKLM - &H8000D002 strRegKey - "SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters" set objReg - GetObjectC'winmgmts.W" & strComputer & _ "\root\default:StdRegProv") objReg.SetOwordValue HKLM. strRegKey. "MaxPacketSize". 1 WScript.Echo "Kerberos forced to use TCP for " & strComputer Комментарий Если вы обнаружили, что регистрация некоторых пользователей в системе вы- полняется очень медленно (особенно в виртуальной частной сети) или что они получают печально известное сообщение «There аге currently no logon servers ava- ilable to service the logon request» (В данный момент отсутствуют серверы, которые могли бы обслужить запрос на вход в систему), то, возможно, причиной всему яв- ляется фрагментация трафика Kerberos протоколом UDP. Для того чтобы узнать, действительно ли проблема в сфере Kerberos, нужно предложить пользователям выполнить следующую команду: > netdiag /test.kerberos Еще одним источником информации являются журналы событий System (Система), располагаемые на клиентских компьютерах. В эти журналы записы- вается информация о различных событиях, связанных с протоколом Kerberos. Более подробная информация об использовании Kerberos с протоколом UDP приведена в документе MS КВ 244474 (How to Force Kerberos to Use TCP Instead of UDP). 14.19. Настройка параметров протокола Kerberos Проблема Требуется изменить задаваемые по умолчанию значения параметров Kerberos,, которые определяют, в частности, максимальное время жизни билета.
474 Глава 14. Защита и аутентификация Решение С помощью графического пользовательского интерфейса 1 . Откройте оснастку Domain Security Policy (Политика безопасности домена) 2 На левой панели поочередно откройте контейнеры Account Policies ► Kerberos Policy (Политики безопасности ► Политики Kerberos). 3 Па правой панели дважды щелкните на параметре, который хотите изменить, введите его повое значение и щелкните па кнопке ОК Комментарий Поведением протокола Kerberos управляет ряд параметров. Большинство из них по умолчанию настроены таким образом, что вам никогда не потребуется их изме- нять. Тс параметры, которые при определенных обстоятельствах стоит изменять, указаны в табл. 14.1 Таблица 14.1. Основные параметры политики Kerberos Параметр Значение по умолчанию Enforce user logon restrictions (Принудительные ограничения на вход пользователей) Включен Maximum lifetime for service ticket (Максимальный срок жизни билета службы) 600 нин Maximum lifetime for user ticket (Максимальный срок жизни билета пользователя) 10 ч Maximum lifetime for user ticket renewal (Максимальный срок жизни для возобновления билета пользователя) 7 дней Maximum tolerance for comouter clock syncnronlzation (Максимальная погрешность синхронизации часов компьютера) 5 мин ВНИМАНИЕ---------------------------------------------------------------- Принимая решение об изменении параметров Kerberos, следует все хорошо обдумать, поскольку это может вызвать снижение степени защищенности системы и нарушить ее функционирование. Смотрите также Документы MS КВ 231849 (Description of Kerberos Policies in Windows 2000) и MS KB 232179 (Kerberos Administration in Windows 2000)
15 Протоколирование, мониторинг и квоты 15.0. Введение В этой главе рассказывается о мониторинге активности различных компонентов Active Directory Как правило, столкнувшись с какой-либо проблемой, администратор первым делом просматривает файлы журналов. Active Directory поддерживает несколько журналов, и для каждого из них предусмотрены свои способы повы- шения уровня детализации протокотирования событий. Еще одним важным ис- точником информации о происходящем в системе служат показатели произво- дительности, по которым можно, в частности, определить, не перегружена ли она. Ниже будет описано несколько способов анализа этих показателей и мониторинга производительности Active Directory. Если же вам потребуется более детальная информация, то, возможно, поможет средство мониторинга Active Directory от компании NetPro (http://www.netpro.com/) или пакет Microsoft Operations Ma- nager (http://microsoft.com/mom/). С выявлением источников проблем тесно связана такая важная тема, как квоты на количество объектов, создаваемых участником системы безопасности (пользо- вателем, группой или компьютером) в разделе каталога. Возможность определять такие квоты была введена в Windows Server 2003, с тем чтобы закрыть существо- вавшую в Windows 2000 брешь в системе защиты: пользователи, которым было позволено создавать объекты в Active Directory, могли «плодить» их в неограни- ченном количестве, что часто приводило к переполнению диска контроллера домена. Конечно, такого рода атаки случаются редко, но все же не следует о них забывать. Анатомия контейнера объектов quota Квоты на создание объектов представлены в Active Directory объектами quota, хранящимися в контейнере с выводимым именем NTDS Quotas (Квоты NTDS). В Windows Server 2003 этот контейнер находится в разделах каталога домена, конфигурации и приложений, но не в разделе схемы Active Directory (квоты нельзя связывать с разделом схемы). По умолчанию в таких административных программах, как оснастка Active Directory Users and Computers (Active Directory — пользователи и компьютеры), контейнер NTDS Quotas скрыт, но его можно отобразить, восполь- зовавшись командой View ► Advanced Features (Вид ► Дополнительные функции) Класс контейнера объектов quota называется msDS-QuotaContainer и содержит
476 Глава 15. Протоколирование, мониторинг и квоты несколько атрибутов, определяющих квоты по умолчанию. Список важнейших атрибутов объекта msDS-QuotaContainer приведен в табл. 15.1. Таблица 15.1. Атрибуты объекта msDS-QuotaContainer Атрибут Описание СП Относительное отличительное имя контейнера объектов quota. По умолчанию этот атрибут содержит значение NTDS Quotas msOS-DefaultQuota Задаваемая по умолчанию квота для всех участников системы безопасности, для которых квоты не указаны явно. См. также рецепт 15.16 msDS-QuotaEffectlve Вычисляемый атрибут, содержащий результирующую квоту участника системы безопасности, запросившего значение данного атрибута. См. также рецепт 15.17 msDS-Quotalised Вычисляемый атрибут, значение которого определяет использованную часть квоты участника системы безопасности, запросившего значение данного атрибута. См. также рецепт 15.17 msDS-Tombs toneQucta Factor Весовой коэффициент квоты, назначаемый захороненным объектам. По умолчанию он равен 100 (один захороненный объект эквивалентен одному добавленному). См. также рецепт 15.15 msDS-TopQuotaUsage Многозначный атрибут, содержащий информацию об участниках системы защиты с наивысшими значениями использованной части квоты. См. также рецепт 15.17 Анатомия объекта quota Объекты quota относятся к классу msDS-QuotaControl, включающему атрибуты, которые описаны в табл. 15.2. Таблица 15.2. Атрибуты объекта msDS-QuotaControl Атрибут Описание СП Относительное отличительное имя объекта quota msDS-QuotaAmount Количество объектов, которое разрешено создавать связанному с данным объектом quota участнику системы безопасности. См. также рецепт 15.13 msDS-Quota!rustee SID участника системы безопасности, с которым связан данный объект quota, то есть пользователя, группы или компьютера. См. также рецепт 15.13
1Э.1. гесширеммие i ipu i икил придание операции npvi ponnpi utpiuniv 15.1. Расширенное протоколирование операций программы dcpromo Проблема Требуется включить расширенное протоколирование операций программы dcpromo. Такая необходимость может возникнуть, например, в случае, когда при повышении или понижении роли сервера возникают проблемы, а файлы журналов программы dcpromo не предоставляют достаточно полной информации, которая позволила бы их устранить. Решение Ниже показано, как включить режим расширенного протоколирования операций программы dcpromo в Windows Server 2003. Решение Windows 2000 имеет ряд от- личий, о которых рассказано в разделе комментария. В любом случае, для того чтобы в журналы записывалось максимальное количество информации, нужно присвоить параметру LogFlags, хранящемуся в системном реестре, значение 16711683. Полное описание значений отдельных битов этого параметра приведено в доку- менте MS КВ 221254. С помощью графического пользовательского интерфейса 1. Из окна, открываемого командой Start ► Run (Пуск ► Выполнить), запустите программу regedit.exe. 2. На левой панели откройте раздел реестра HKEY_LOCAL_MACHINE\Software\Micro- soft\Windows\CurrentVersion\AdmlnDebug\dcpromoui. 3. Если параметр LogFlags в нем отсутствует, на левой панели щелкните правой кнопкой мыши на разделе depromoui и выберите в открывшемся контекстном меню команду New ► DWORD value (Создать ► Параметр DWORD). Введите для нового параметра имя LogFlags. 4 На правой панели дважды щелкните на созданном параметре и введите тре- буемое значение. 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки В следующей команде замените параметр <набор_флдгов> десятичным (не шестна- дцатеричным!) значением устанавливаемого набора флагов: > reg add HKLM\Software\Microsoft\Windows\CurrentVerslon\AdminDebiig\dcpromoui /v J "LogFlags" /t REGJWRD /d <набор_флагов> С помощью сценария на языке VBScript ’ Данный код устанавливает флаги протоколирования для утилиты depromoui ' (он применяется только в Windows Server 2003) ‘ — SCRIPT CONFIGURATION — strDC - "<имя_конгроллера__домена>" ' Например: dcOl
IHUUU XJ. I l|_n_> ц_1лил ириоопис, иипи I wpKiril И1 KDUICM intFlag = <набор_флагов> ' Десятичное представление набора флагов ' Например: 16711683 • — END CONFIGURATION — const HKLM “ &H80000002 StrDcpromoReg - ,,Software\M1cro$oft\Windows\CurrentVersicn\AdminOebiig\dcpromoiri" set objReg = GetObjectC’winmgnitsAV & strDC & "\root\default:StdRegProv“) objReg.SetDwordValue HKLM. strDcpromoReg. "LogFlags". intFlag WScrlpt.Echo "Dcpromoui flag set to " & IntFlag Комментарий Как уже известно из рецепта 3.5 (глава 3), программа dcpromo создает в папке %SystemRoot%\debug несколько файлов журналов, данные которых могут помочь в разрешении проблем, связанных с повышением или понижением роли сервера. Обычно сведений, записываемых в файл dcpromoui.log по умолчанию, вполне дос- таточно для выяснения причин появления большинства проблем. Если же это не так, следует повысить уровень протоколирования. Объем сведений, записываемых в журнал dcpromoui.log, регулируется пара- метром системного реестра. В Windows 2000 и Windows Server 2003 этот пара- метр называется по-разному. Причем в Windows 2000 установки протоколирова- ния записываються в параметр: HKLM\Software\Microsoft\Wlndows\CurrentVersion\AdminDebug\dcpromoui В Windows Server 2003 они хранятся в параметре, процесс создания которого был описан в этом рецепте: HKLM\Software\Microsoft\Windows\CurrentVersion\AdminOebug\dcpromoui\LogFlags Смотрите также В рецепте 3.5 (глава 3) рассказывается о методах разрешения некоторых проблем, связанных с выполнением программы dcpromo. Рекомендуем просмотреть доку- мент MS КВ 221254 (Registry Settings for Event Detail in the Dcpromoui log File) 15.2. Повышение уровня диагностического протоколирования Проблема Требуется повысить уровень диагностического протоколирования событий, по- скольку текущего уровня протоколирования для выявления причин возникнове- ния проблем недостаточно. Решение С помощью графического пользовательского интерфейса 1 . Из окна, открываемого командой Start ► Run (Пуск ► Выполнить), запустите программу regedit.exe. 2 На левой панели откройте раздел реестра HKEY_LOCAL_MACHINE\System\Current- ControlSet\Services\NTDS\Diagnostics.
la.z. । ювышение уровня диагностического протоколирования 3. На правой панели дважды щелкните на имени параметра, значение которого вы хотите увеличить, и введите число из диапазона 0-5. 4. Щелкните на кнопке ОК. С помощью интерфейса командной строки > reg add HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics /v J “<параметр_протоколирования>п /t REG_DWORD /d <0-5* С помощью сценария на языке VBScript ‘ Этот код устанавливает заданный уровень диагностического протоколирования 1 -.... SCRIPT CONFIGURATION ... strDC ° и<имя_контроллера_домена>" ' Например: dcOl strLogSetting - "<пдраметр_протоколирования>" ' Например: 1 Knowledge Consistency Checker intFlag - <набор_флагов> ' Десятичное представление флагов, например: 5 ' ....- END CONFIGURATION ------ const HKLM = &H80000002 strRegKey - "SYSTEM\CurrentControlSet\Servjces\NTDS\Diagnostics" set objReg GetObjectC'winmgmtsAX" & strDC & "\root\default:StdRegProv") objReg.SetDwordValue HKLM. strRegKey. "LogFlags". intFlag WScrlpt.Echo "Diagnostics logging for " & strLogSetting _ & " set to ” & intFlag Комментарий Для более успешного анализа проблем, связанных с использованием Active Di- rectory, иногда бывает целесообразным повысить уровень диагностического про- токолирования событий этой системы, автоматически выполняемого в ходе ее ра- боты. Протоколированием событий любого компонента Active Directory всегда управляет отдельный параметр. Обнаружив, например, что средство проверки со- гласованности знаний (КСС) не запускается каждые 15 мин, можно включить протоколирование для параметра 1 Knowledge Consistency Checker. Текущие значения параметров протоколирования должны храниться в разделе HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics системного реестра. По умол- чанию все параметры здесь содержат значение 0, то есть диагностическое прото- колирование не выполняется. Уровень протоколирования работы соответствую- щего компонента определяется путем установки значений из диапазона от 1 до 5. Значение 1 обычно используется для указания минимального уровня протоколи- рования, 3 — среднего, а 5 — высокого. Самый высокий уровень протоколирования лучше включать в последнюю очередь, поскольку при этом в журнал записывает- ся так много информации, что становится трудно что-либо в нем найти, а к тому же повышается потребление ресурсов па контроллере домена. Ниже приведен полный список диагностических параметров протоколирования, определенных в Windows Server 2003 (учтите, что параметры с 20-го по 24-й на контроллерах домена, работающих под управлением Windows 2000, не поддер- живаются). 1. Knowledge Consistency Checker (Средство проверки согласованности знаний); 2. Security Events (События безопасности);
4BU I лава lb. 11ротоколирование, мониторинг и квоты 3. ExDS Interface Events (События интерфейса ExDS); 4. MAPI Interface Events (События интерфейса MAPI); 5. Replication Events (События репликации); 6. Garbage Collection (Сборка мусора); 7. Internal Configuration (Внутренняя конфигурация); 8. Directory Access (Доступ к каталогу); 9. Internal Processing (Внутренняя обработка); 10. Performance Counters (Счетчики производительности); 11. Initialization/Termination (Инициализация/завершение); 12. Service Control (Управление сервисами); 13. Name Resolution (Разрешение имен); 14. Backup (Резервное копирование); 15. Field Engineering (Отладка); 16. LDAP Interface Events (События интерфейса LDAP); 17. Setup (Установка); 18. Global Catalog (Глобальный каталог); 19. Inter-site Messaging (Передача сообщений между сайтами). 20. Group Caching (Кэширование информации о группах); 21. Linked-Value Replication (Репликация связанных значений); 22. DS RPC Client (RPC-клиент службы каталогов); 23. DS RPC Server (RPC-сервер службы каталогов); 24. DS Schema (Схема службы каталогов). Смотрите также Рекомендуем ознакомиться с документом MS КВ 220940 (How to Enable Diagnostic Event Logging for Active Directory Services). 15.3. Протоколирование процесса NetLogon Проблема Требуется включить протоколирование процесса NetLogon для разрешения проблем, связанных с входом клиента в систему, блокировкой его учетной записи или оп- ределением контроллера домена. Решение С помощью интерфейса командной строки Для того чтобы включить протоколирование процесса NetLogon, выполните при- веденную ниже команду: > nltest /dbflag:0x2080ffff
хэ.ч. клиентское протоколирование процесса оораоотки ооъектов чох Отключение протоколирования указанного процесса производится с помощью такой команды: > nltest /dbflag:0x0 Комментарий Из файла netlogon.log, расположенного в каталоге %SystemRoot°/o\Debug, можно почерпнуть важную информацию о подключениях клиентов к Active Directory. Когда задается самый высокий уровень протоколирования (0x2000ffff), в этот журнал записываются сведения о том, к какому сайту относится клиент и на каком контроллере домена производилась его аутентификация, а также дополнительная информация, связанная с процессом DC Locator, сведения об устаревании пароля учетной записи, блокировке учетной записи и даже об ошибках Kerberos. Номер текущего уровня протоколирования процесса NetLogon должен хра- ниться в параметре DBF lag раздела реестра: HKLM\System\CurrentControlSet\Services\ Netlogon\Parameters. В случае установления значения этого параметра вручную, а не с помощью утилиты nltest, сервис NetLogon нужно будет перезапустить — лишь при этом условии новая установка вступит в силу. Учтите, что при подробном протоколи- ровании размер файла netlogon.log может быстро возрасти до нескольких мегабай- тов. Для поиска информации в этом файле можно воспользоваться специальным средством фильтрации его содержимого — новой утилитой для Windows ХР и Win- dows Server 2003, названной nlparse. Утилита входит в состав пакета Account Lockout and Management Tools, который можно загрузить с веб-узла Microsoft, расположенного по адресу http://www.microsoft.com/downloads/details.aspx7FamilyID- =7af2e69c-91f3-4e63-8629-b999adde0b9e&DisplayLang=en Смотрите также Документы MS КВ 109626 (Enabling Debug Logging for the Netlogon Service) MS KB 247811 (How Domain Controllers Are Located in Windows), а также доку- мент MS KB 273499 (Description of Security Event 681). 15.4. Клиентское протоколирование процесса обработки объектов групповой политики- Проблема Требуется выявить источник проблем, возникающих при обработке объектов групповой политики на клиентском или серверном компьютере, включив прото- колирование дополнительных событий в журнале Application (Приложение). Решение С помощью графического пользовательского интерфейса 1. Из окна, открываемого командой Start ► Run (Пуск > Выполнить), запустите программу regedit.exe.
I лава 1э. I |ротоколировс1ние, MOHHiupnui и мялы 2. На левой панели откройте раздел реестра HKEY_LOCAL_MACHINE\Software\Micro- soft\Windows NT\CurrentVersion. 3. Если в нем отсутствует раздел Diagnostics, щелкните правой кнопкой мыши на разделе CurrentVerslon и выберите команду New ► Key (Создать ► Раздел). При- свойте новому разделу имя Diagnostics. 4. Щелкните правой кнопкой мыши на созданном разделе и выберите в контек- стном меню команду New ► DWORD value (Создать ► Параметр DWORD). Вве- дите для этого параметра имя RunDiagnosticLoggingGroupPolicy. 5. На правой панели дважды щелкните на имени нового параметра и задайте для него значение 1. 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки > reg add "HKLM\SOFTWARE\M1crosoft\Windows NT\CurrentVersion\D1.agnost1ce" /v -J "RunDiagnosticLoggingGroupPolicy- /t REG_DWORD /d 1 С помощью сценария на языке VBScript * Этот код включает на заданном компьютере ' протоколирование процесса обработки объектов групповой политики ’ — SCRIPT CONFIGURATION — strComputer - "<иня_компьютера>" ' Например: rallen-w2k3 1 — END CONFIGURATION — const HKLM - &H80000002 strRegKey - "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Diagnostics" set objReg - GetObjectCwinmgmtsAV & strComputer _ & M\root\default:StdRegProv") objReg.SetDwordValue HKLM. strRegKey. "RunDiagnosticLoggingGroupPolicyB. 1 WScript.Echo "Enabled GPO logging for " & strComputer Комментарий Если при обработке объектов групповой политики возникают проблемы (напри- мер, установки групповой политики не применяются, хотя должны применяться), определить их источник можно с помощью нескольких методов. Один из них — дополнительное протоколирование событий, связанных с объектами групповой политики. Если в системном реестре присвоить параметру RunDiagnosticLogging- GroupPolicy значение 1, в журнал Application (Приложение) будут записаны мак- симально подробные сведения о процессе обработки объектов GPO, включающие время начала обработки, вступившие в действие установки и произошедшие ошибки. Ниже приведен пример записи в журнале, показывающей, какие групповые по- литики применены к компьютеру DC1. Когда протоколирование потребуется от- ключить, удалите параметр RunDiagnosticLoggingGroupPolicy либо присвойте ему значение 0. Event Туре: Event Source: Event Category: Event ID: Date: Error Userenv None 1031 5/26/2003
лэ.э. I |ротоколирование системы ueros Time: 5:52:13 PM User: NT AUTHORITY\SYSTEM Computer: DC1 Description: Group Policy objects to be applied: "Default Domain Policy" "Default Domain Controllers Policy" Смотрите также Документ MS KB 186454 (Howto Enable User Environment Event Logging in Win- dows 2000). 15.5. Протоколирование системы Kerberos Проблема Требуется включить протоколирование системы Kerberos на контроллере домена, с тем чтобы выявить источник проблем, возникающих во время аутентификации. Решение С помощью графического пользовательского интерфейса 1. Из окна, открываемого командой Start ► Run (Пуск ► Выполнить), запустите программу regeditexe. 2. На левой панели откройте раздел реестра HKEY_LOCAL_MACHINE\System\Current- ControlSet\Control\Lsa\Kerberos\Parameters. 3. Если параметр LogLevel в нем отсутствует, щелкните правой кнопкой мыши на разделе Parameters и выберите в открывшемся контекстном меню команду New ► DWORD value (Создать ► Параметр DWORD). Введите для нового параметра имя LogLevel и щелкните на кнопке ОК. 4. На правой панели дважды щелкните на имени созданного параметра и введите для него значение 1. 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки > reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters /v "LogLevel” J /t REG_DWORD /d 1 С помощью сценария на языке VBScript ’ Этот код включает на заданном контроллере делена протоколирование системы Kerberos ' — SCRIPT CONFIGURATION — strDC "<имя_контроллерд_/]оменд>" ' Например: dcOl ' — END CONFIGURATION — const HKLM - &H80000002 strRegKey - "SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters" set objReg •= GetObject C'winmgmtsAX" & strDC & "\root\default:StdRegProv")
<НЯ» лава id. । (ротоколирование, мониторинг и квоты objReg.SetDwordValue HKLM. strRegKey. "LogLevel". 1 WScript.Echo "Enable Kerberos logging for " & strDC Комментарий Если вы столкнулись с проблемами аутентификации или хотите знать, насколь- ко четко функционирует сфера Kerberos, включите протоколирование послед- ней, с тем чтобы информация о связанных с ней ошибках записывалась в журнал System (Система). Записи о событиях Kerberos подскажут вам, чем обусловлены проблемы: сдвигом времени, использованием устаревшего билета или устаревше- го пароля и т. д. Подробные сведения об этих записях вы получите, обратившись к документу MS КВ 230476. Вот пример записи об ошибке Kerberos: Event Туре: Error Event Source: Kerberos Event Category: None Event ID: 3 Date: 5/26/2003 Time: 5:53:43 PM User: N/A Computer: DC01 Description: A Kerberos Error Message was received: on logon session Client Time: Server Time: 0:53:43.0000 5/27/2003 Z Error Code: Oxd KDC_ERR_BADOPTION Extended Error: OxcOOOOObb KLIN(O) Client Realm: Client Name; Server Realm: RALLENCORP.COM Server Name: host/ dc01.rallencorp.com Target Name: host/dcOl.rallencorp.com@RALLENCORP.COM Error Text: File: 9 Line: ab8 Error Data is in record data. Смотрите также Документы MS KB 230476 (Description of Common Kerberos-Related Errors in Windows 2000) и MS KB 262177 (HOW TO: Enable Kerberos Event Logging). 15.6. Отладочное протоколирование сервера DNS Проблема Требуется включить режим отладочного протоколирования сервера DNS, чтобы выявить источник проблем, связанных с запросами к службе DNS или обновле- нием ее данных.
15.6. Отладочное протоколирование сервера DNS 485 Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку DNS. 2. На левой панели щелкните правой кнопкой мыши на элементе DNS и выбери- те в открывшемся контекстном меню команду Connect to DNS Server (Подклю- читься к серверу DNS). 3. Введите имя сервера, к которому хотите подключиться, после чего нажмите клавишу Enter. 4. Щелкните правой кнопкой мыши на имени сервера и выберите в контекст- ном меню команду Properties (Свойства). 5. Откройте вкладку Debug Logging (Отладочное протоколирование) в Windows Server 2003 или вкладку Logging (Протоколирование) в Windows 2000. 6. Укажите, какие события вы хотите протоколировать и где должен храниться файл журнала (в Windows 2000 местонахождение файла журнала изменять нельзя, он всегда имеет адрес %systemroot%\system32\clns\dns.log). 7. Щелкните на кнопке ОК. С помощью интерфейса командной строки Для включения отладочного протоколирования выполните приведенную ниже команду. В параметре <флдги_событий> в шестнадцатеричном представлении ука- зываются сумма кодов событий и уровень протоколирования. Допустимые коды событий перечислены в табл. 15.3. > dnscmd <иня_сервера_О№> /Config /LogLevel <флаги_событий> Следующая команда позволяет задать местонахождение файла журнала: > dnscmd <имя_сервера_Ж> /Config /LogFilePath <полное_имя_файла_)курнала> Если нужно, чтобы в журнал записывались события, связанные только с ука- занными вами IP-адресами, выполните такую команду: > dnscmd <имя_сервера_ОМ$> /Config /LogIPFilterList <IP_appecl>[.<IP_appec2> . . ] Приведенная ниже команда позволяет задать максимальный размер файла журнала в виде шестнадцатеричного числа: > dnscmd <нмя_сервера_Ж> /Config /LogFileMaxSize <количество_байтов> С помощью сценария на языке VBScript ’ Данный код включает протоколирование событий DNS ' — SCRIPT CONFIGURATION — strServer = ’,<имя_сервера_Ж>" ' Например: del ' The log level must be in decimal, not hex like dnscmd intLogLevel - <флаги_событий> ' Сунна флагов, представленная в десятичном 'виде, например: 65535 arrFilterList - Аггау("</Р_адоес1>’’) ’ Например: 192.168.1.12 strFilePath - <лолное_имя_файлаукурнала> ' Например: c:\dnslog.txt intFileSize <количество_байтов> ' Сумма флагов, представленная в десятичном виде, например: 50000000
486 Глава 15. Протоколирование, мониторинг и квоты 1 — END CONFIGURATION — set objDNS - GetObject(''winMgmts:\\" & strServer & "\root\M.1crosDftONS”) set objDNSServer = objDNS.Get("MlcrosoftDNS_Server.Name-""'*’*)* objDNSServer.LogLevel - intLogLevel objONSServer.LogIPFilterList = arrFilterList objDNSServer.LogFilePath - strFilePath objDNSServer.LogFileMaxSize - intFileSize objDNSServer.Put_ WScript.Echo "Enabled DNS Debug Logging on " & strServer Комментарий Отладочный журнал DNS Server (Сервер DNS) обычно содержит информацию обо всех операциях DNS, полученных запросах и выполняемых обновлениях, об изменении типов зон и т. д. Если возникшие проблемы каким-то образом связаны с конкретным компьютером, то, воспользовавшись командой dnscmd с ключом LogIPFilterList или программным интерфейсом WMI DNS Provider, можно огра- ничиться записью в журнал только сведений об этом компьютере. Самой важной установкой отладочного протоколирования является его уровень. Консоль DNS позволяет выбрать подходящие параметры протоколирования, причем если в Windows Server 2003 для этого предоставляется удобный интуитивный интерфейс, то в Windows 2000 перед вами просто выводится ряд флажков, и оста- ется лишь догадываться, какие из них подходят для решения конкретной задачи. В отношении решений с использованием командной строки и сценария на языке VBScript ситуация аналогичная. В табл. 15.3 приведены шестнадцатеричные и де- сятичные значения кодов событий, связанных с работой DNS. Таблица 15.3. Коды протоколируемых событий DNS Шестнадцатеричное значение Десятичное значение Описание 0x0 0 Значение по умолчанию: протоколирование не выполняется 0x1 1 Транзакции обработки запросов 0x10 16 Транзакции уведомлений 0x20 32 Транзакции обновлений OxFE 254 Транзакции, не связанные с запросами 0x100 256 Пакеты вопросов 0x200 512 Пакеты ответов 0x1000 4096 Отправка пакетов 0x2000 8192 Получение пакетов 0x4000 16384 Пакеты UDP 0x8000 32768 Пакеты TCP OxFFFF 65535 Все пакеты 0x10000 65536 Транзакции записи Active Directory 0x20000 131072 Транзакции обновления Active Directory
15.7. Просмотр статистики производительности сервера DNS Шестнадцатеричное значение Десятичное значение Описание 0x1000000 0x80000000 16777216 2147483648 Полные пакеты Транзакции сквозной записи Режим оттадочного протоколирования событий системы доменных имен особенно полезен в тех случаях, когда нужно проконтролировать выполнение за- просов па динамическое обновление данных конкретным сервером DNS. Напри- мер, если клиент или сервер DHCP пытается динамически регистрировать записи, вы можете включить протоколирование транзакций обновления на том сервере, который предположительно выполняет регистрацию. Если записей о транзакци- ях обновления в журнале не окажется это, скорее всего, будет означать, что реги- страцию выполняет другой сервер. ПРИМЕЧАНИЕ---------------------------------------------------------------- Записи о транзакциях вносятся в отладочный журнал не сразу: они буферизируются и записываются в файл по мере накопления обработанных запросов Смотрите также Документ MSDN MicrosoftDNS Server. 15.7. Просмотр статистики производительности сервера DNS Проблема Требуется просмотреть статистику производительности сервера DNS в службе Ас tive Directory Решение С помощью графического пользовательского интерфейса 1. Запустите программу perfmon.exe. 2. На левой панели щелкните па элементе System Monitor (Системный монитор) 3. На правой панели щелкните на кнопке панели инструментов +, чтобы открыть диалоговое окно, предназначенное для добавления счетчиков. Л. Установите переключатель в положение Select counters from computer (Выбери- те счетчики с компьютера) и введите имя сервера DNS, производительность которого вас интересует. 5. Выберите объект DNS performance. 6 Пользуясь кнопкой Add (Добавить), укажите нужные счетчики 7. Щелкните на кнопке Close (Закрыть)
<НШ Глава 15. Протоколирование, мониторинг и квоты С помощью интерфейса командной строки > dnscmd <иня_сервера_0Н8> /statistics С помощью сценария на языке VBScript ' Данный код выводит статистические сведения о работе сервера DNS 1 ..... SCRIPT CONFIGURATION --- strServer - '<имя сервера DNS> ' Например del railencorp.com • ----- END CONFIGURATION ------ set objDNS GetObject ("winmgmts.W" & strServer & "\root\MicrosoftDNS") set objDNSServer - objDNS Get(,,MicrosoftONS_Seгver.Name-,'*.”,") set objStats - objDNS.ExecQuery("Select * from MicrosoftDNS_Statistic ") for each objStat in objStats WScrlpt.Echo " “ & objStat.Name & " : ’ & objStat.Value next Комментарий Microsoft DNS Server поддерживает несколько десятков счетчиков производи- тельности, определяющих количество запросов, операций обновления и переме- щения записей каталога. Если интегрировать эти счетчики в систему управления предприятием, можно будет отслеживать использование DNS во времени. Собранные таким образом статистические сведения помогут разрешить проб- лемы, обусловленные, в частности, избыточной нагрузкой на серверы Например, если вы предполагаете, что сервер DNS перегружен запросами на обновление, включите счетчик Dynamic Update Recelved/sec и проследите за его показаниями. К решению с помощью интерфейса командной строки Команда dnscmd может вывести подмножество статистических показателей. Для этого добавьте в нее ключ /statistics и укажите после него сумму кодов категорий счетчиков. Для получения полного списка кодов категорий воспользуйтесь командой: > dnscmd /statistics /? Ниже приведены статистические данные по категориям Query (код 2) и Query2 (код 4): > dnscmd /statistics б DNS Server . statistics: Queries and Responses: Total: Queries Received - Responses Sent UDP Queries Recvd Responses Sent Queries Sent Responses Recvd - TCP: Client Connects - Queries Recvd Responses Sent 14902 12900 14718 12716 23762 0 184 184 184
15.8. Протоколирование неэффективных и дорогостоящих запросов LDAP аду Queries Sent - О Responses Recvd - О Queries: - -- — Total 14902 Hoti fy 0 Update 1 2207 TKeyNego «• 184 Standard 12511 A 1286 NS 1 29 SOA 1 2263 MX 0 PTR 1 1 SRV 1 8909 ALL 0 IXFR 0 AXFR 0 OTHER Ш 23 Command completed successfully К решению с помощью сценария на языке VBScript Для получения подмножества статистических данных нужно добавить в запрос на языке WQL условие where. Так, следующий запрос вернет лишь записи, начи- нающиеся строкой Records: select * from MicrosoftDNS_Statistic where Name like 'Records?' Смотрите также Документ MSDN. MicrosoftDNS Statistic. 15.8. Протоколирование неэффективных и дорогостоящих запросов LDAP Проблема Требуется добавить в журнал Directory Services (Службы каталогов) запись о не- эффективных и дорогостоящих запросах LDAP. Решение Для получения суммарного отчета с указанием общего количества, количества дорогостоящих и количества неэффективных операций поиска присвойте пара- метру протоколирования 15 Field Engineering значение 4. Такой итоговый отчет генерируется каждые 12 ч одновременно со сборкой мусора. Если вам нужно, чтобы в журнал Directory Services при каждом выполнении дорогостоящего или
«и Глава 15. Протоколирование, мониторинг и квоты неэффективного запроса вносилась соответствующая запись, присвойте парамет- ру 15 Field Engineering значение 5. Как включается режим диагностического протоколирования подробно расска- зывается в рецепте 15.2 Комментарий Поиск считается дорогостоящим, если для его выполнения требуется просмотреть большое количество объектов Active Directory. Если в результате его выполнения возвращено менее 10 % от общего числа просмотренных объектов, поиск считается неэффективным. По умолчанию пороговым значением для критерия дорогостоящего поиска является 10 000, то есть поиск, в irpouecce которого приходится просмотреть не менее 10 000 объектов, относится к разряду дорогостоящих Нижней границей при оценке эффективности запросов по умолчанию принято считать 1 000 объектов Это означает, что если при выполнении запроса просмотрено данное количество объектов и возвращено 99 из них (менее 10 %), запрос считается неэффективным; но ни один запрос, в результате выполнения которого было просмотрено менее 1000 объектов (даже если их просмотрено 999, а возвращено 0) не будет считать- ся неэффективным. Ниже приведен итоговый отчет, сгенерированный при значении параметра 15 Field Engineering, равном 4: Event Туре: Information Event Source: Event Category: NTDS General Field Engineering Event ID 1643 Date: 5/24/2003 Time: User: 7 24:24 PM NT AUTHORITY\ANONYMOUS LOGON Computer. DC1 Description: Internal event: Active Directory performed the following number of search operations within- this time interval. Time interval (hours): 9 Number of search operations: 24679 During this time interval. the following number of search operations were characterized as either expensive or inefficient. Expensive search operations: Inefficient search operations Если параметру 15 Field Engineering присваивается значение 5, итоговый от- чет генерируется одновременно со сборкой мусора, а запись о событии 1644 дела- ется каждый раз, когда выполняется неэффективный или дорогостоящий поиск. Заметьте, что эта запись содержит довольно подробную информацию, в том числе IP-адрес клиента, имя аутентифицированного пользователя, отличительное имя базы поиска, атрибуты, задаваемые в спецификации фильтра, перечень управляю- щих объектов, количество просмотренных и количество возвращенных объектов
15.8. Протоколирование неэффективных и дорогостоящих запросов L ан Всю эту информацию предоставляет только контроллер домена Windows Ser- ver 2003. Windows 2000 таких подробных сведений не выдает. Event Type Information Event Source. Event Category NTDS General Field Engineering Event ID: 1644 Date: Time: User: 5/24/2003 7 50:40 PM RALLENCORPXrallen Computer- DC1 Description Internal event A client issued a search operation with the following options. Client: 192.168 4 14 Starting node DC-ral1encorp,DC-com Filter: (description-*) Search scope, subtree Attribute selection: cn Server controls Visited entries: 10340 Returned entries: 1000 Если действуют установки, заданные по умолчанию, указанный в приведенной выше записи журнала запрос считается дорогостоящим (просмотрено более 10 000 объектов) и неэффективным (возвращено менее 10 % от этого количества). Для того чтобы изменить эти установки, нужно создать в разделе HKLM\SYSTEM\Cur- rentControlSet\Services\NTDS\Parameters системного реестра два новых параметра типа DWORD. Первый из них называется Expensive Search Results Threshold, в нем задается количество объектов, которое необходимо просмотреть для того, чтобы поиск считался дорогостоящим. Второй параметр называется Inefficient Search Results Threshold, в нем задается минимальное количество просмотренных объектов, при ко- тором поиск может считаться неэффективным. ПРИМЕЧАНИЕ----------------------------------------------------------------- При необходимости просмотреть список всех запросов LDAP, полученных контроллером домена, па- раметру 15 Field Engineering следует присвоить значение 5, а параметру Expensive Search Results Threshold—значение 0. В таком случае контроллер домена будет считать дорогостоящим любой за- прос и протоколировать все запросы LDAP на поиск информации в каталоге. Правда, этой возможно- стью нельзя злоупотреблять, поскольку при таких установках журнал быстро переполняется. Смотрите также В рецепте 15.2 рассказывается, как включить диагностическое протоколирование операций Active Directory.
4У2 Глава 15. Протоколирование, мониторинг и квоты 15.9. Просмотр статистики запросов LDAP с использованием управляющего объекта STATS Проблема Требуется просмотреть статистику запросов службы LDAP, используя управляю- щий объект STATS. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выполните команду Connection ► Connect (Подключение ► Подключиться) 3. В поле Server (Сервер) введите имя контроллера домена (или оставьте это поле пустым — в таком случае связь будет установлена без участия сервера). 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя и щелкните на кнопке ОК. 7. Выполните команду Options ► Control (Параметры ► Управляющий объект). 8. В Windows Server 2003 выберите из списка Load Predefined (Загрузка сущест- вующего) объект Search Stats; в Windows 2000 добавьте объект, OID которого равен 1.2.840.113556.1.4.970. Щелкните на кнопке ОК. 9. Выполните команду Browse ► Search (Поиск ► Найти). 10. Введите критерий поиска и щелкните на кнопке Options (Параметры). 11. В списке Search Call Туре (Тип поиска) выберите элемент Extended (Расширенный). 12. Щелкните сначала на кнопке ОК, а затем — на кнопке Run (Выполнить) Комментарий Управляющий объект STATS позволяет собрать статистические сведения о произ- водительности запроса LDAP. С его помощью можно получить информацию о времени, затраченном сервером на обработку запроса, количестве просмотренных и возвращенных объектов, результирующее выражение фильтрации, а также све- дения о том, использовались ли индексы. Ниже приведена информация о поиске учетных записей групп объектов, хранящихся в контейнере cn-Users: ***Searching ldap_search_ext_s(ld. "cn=users.DC-rallencorp.0C=com”. 2. "(objectcategory-group)". attrList. 0. svrCtrls. ClntCtrls, 20. 1000 ,&msg) Result <0>: Matched DNs: Stats: Call Time: 10 (ms) Entries Returned: 17 Entries Visited: 17 Used Filter: (objectCategory-CH-Group,CN-Schema.CN-Configuration.DC-ral1encoro.CX>com) Used Indexes: INTERSECT_INDEX:17:I.
15.10. Мониторинг Active Directory с применением программы perfmon 493 Обратите внимание, что при поиске было просмотрено 17 объектов и все они возвращены. Согласно определениям, приведенным в рецепте 15.8, такой поиск считается недорогим и эффективным. Заданный в условии поиска фильтр (ob- jectcategory-group) был преобразован в фильтр (objectCategory-CN-Gгoup.CN-Schema. CN=Configuration.OC=ra11 encorp.DC-com). Атрибут objectcategory имеет синтаксис отличительного имени, но Active Directory позволяет задать вместо него выводи- мое имя класса. Такое имя Active Directory сама преобразует в отличительное имя, которое мы видим в результирующем выражении фильтрации. Указано, что при поиске использовался индекс INTERSECT_INDEX:17:I. Рассмотрим еще один пример — поиск значения Jim Smith с использованием алгоритма ANR. После его выполнения была сгенерирована следующая запись- ***Search1ng . . . ldap_search_ext_s(ld, "ou-Sales.DC-rallencorp.DC-com". 2. ''(anr-J1m Smith)*'. attrList. 0. svrCtrls, cTntCtrls, 20 1000 ,&msg) Result <0>: Matched DNs: Stats: Call Time: 20 (ms) Entries Returned: 1 Entries Visited: 2 Used Filter: ( | (displayName-Jim Smith*) (g1venName=Jim Smith*) (legacyExchangeDtbJim Smith) (msDS-Addit1onalSamAccountName-J1m Smith*) (physicalDelIveryOfflceName-JIm Smith*) (proxyAddresses-J1m Smith*) (name-Jim Smith*) (sAMAccountName-Jim Smith*) (sn-J1m Smith*) ( & (givenName-Jim*) (sn-Smith*) ) ( & (givenName-Smith*) (sn-J1m*) ) ) Used Indexes: 1dx_gi venName:10:N;idx_g1venName:10:N;1dx_sn:9:N:1dx_ sAMAccountName 8:N;1dx_name 7.N;idx_proxyAddresses:6:N;ldx_ physical Del 1veryOff iceName 5.N:1dx_msDS-Addi t1onalSamAccountName 4: N; 1dx_ 1egacyExchangeDN:3:N;1dx_gi venName 2:N;idx_displayName:1:N: Во второй строке этой записи указано, что для поиска был задан фильтр (anr-Jim Smith). После заголовка Used Filter: сообщается, что в соответствии с правилами ANR этот фильтр был преобразован в длинное составное выражение. Данный при- мер наглядно демонстрирует возможности управляющего объекта STATS и то, какую подробную информацию вы можете получать, выполняя анализ запросов LDAP. Смотрите также В рецепте 4.3 (глава 4) рассказывается об использовании управляющих объектов LDAP, в рецепте 4.5 (глава 4) — о поиске объектов в Active Directory, в рецепте 10.13 (глава 10) — о технологии ANR, а в рецепте 15.8 — о том, какие операции поиска считаются неэффективными и дорогостоящими 15.10. Мониторинг Active Directory с применением программы perfmon Проблема Требуется провести мониторинг Active Directory с использованием служебной программы perfmon.
494 Глава 15. Протоколирование, мониторинг и квоты Решение С помощью графического пользовательского интерфейса 1. Запустите программу perfmon.exe. 2. На левой панели щелкните на элементе System Monitor (Системный монитор). 3. Нажмите клавиши Ctrl+I, чтобы открыть диалоговое окно, в которое будут до- бавлены счетчики. 4. Установите переключатель в положение Select counters from computer (Выбери- те счетчики с компьютера) и введите имя контроллера домена, мониторинг которого требуется провести. 5. Выберите объект NTDS performance. 6. Пользуясь кнопкой Add (Добавить), укажите нужные счетчики 7. Щелкните на кнопке Close (Закрыть) Комментарий Active Directory предоставляет для программы perfmon несколько счетчиков, с по- мощью которых можно произвести мониторинг работы службы каталогов и собрать сведения, необходимые для разрешения возникших проблем. Все эти счетчики, входящие в состав объекта NTDS performance, позволяют отслеживать следующие операции: поиск в адресной книге; внутренняя и внешняя репликация; чтение, за- пись и поиск LDAP; аутентификация Kerberos и операции диспетчера учетных записей безопасности SAM. Ниже приведен список наиболее часто используемых счетчиков NTDS. Для того чтобы узнать назначение конкретного счетчика в программе perfmon, щелк- ните в окне Add Counters (Добавить счетчики) на кнопке Explain (Объяснить) и вы- берите интересующий вас счетчик. О DRA Inbound Bytes Total/sec (Всего входящих байт DRA/сек) — общее количест- во входящих за секунду байтов репликации, то есть сумма несжатых (никогда не сжимаемых) и сжатых (после сжатия) байтов. О DRA Inbound Objects/sec (Входящих объектов DRA/сек) — общее количество объектов, полученных от соседей при входящей репликации. (Соседом называет- ся контроллер домена, с которого локальный контроллер домена получает ре- плицируемые данные.) О DRA Inbound Values Total/sec (Всего входящих значений DRA/сек) — общее ко- личество значений свойств объектов, полученных от соседей при входящей репликации. Каждый входящий объект обладает одним или несколькими свойствами, и каждое свойство может иметь одно или нескольких значений. Отсутствие значений указывает на то, что свойство удалено. О DRA Outbound Bytes Total/sec (Всего исходящих байт DRA/сек) — общее коли- чество исходящих байтов репликации, то есть сумма несжатых (никогда не сжимаемых) и сжатых (после сжатия) байтов. О DRA Outbound Objects/sec (Исходящих объектов DRA/сек) — количество исхо- дящих в течение секунды реплицируемых объектов.
15.10. Мониторинг Active Directory с применением программы perfmon 495 О DRA Outbound Values Total/sec (Всего исходящих значений DRA/сек) - общее количество значений свойств объектов, отправленных партнерам по исходя- щей репликации. О DRA Pending Replication Synchronizations (Ожидающих синхронизаций репликации DRA) — количество синхронизаций каталога, которые находятся в очереди к серверу, но еще не обработаны. О DS Client Binds/sec (Привязок клиентов DS/сек) — количество привязок ntdsapl.dll, выполняемых этим контроллером домена за секунду. О DS Directory Reads/sec (Операций чтения в каталоге DS/сек) — количество вы- полняемых в течение секунды операций чтения в каталоге. О DS Directory Searches/sec (Операций поиска в каталоге DS/сек) — количество выполняемых в течение секунды операций поиска в каталоге. О DS Directory Wntes/sec (Операций записи в каталог DS/сек) — количество вы- полняемых в течение секунды операций записи в каталог. О KDC AS Requests (AS-запросов KDC) — количество AS-запросов, обслуживае- мых KDC за секунду. AS-запросы используются клиентами для получения билета на предоставление билета (Authentication Server, AS, — сервер аутенти- фикации; Kerberos Key Distribution Center, KDC, — центр распространения ключей Kerberos) О KDC TGS Requests (TGS-запросов KDC) — количество TGS-запросов, обслу- живаемых KDC в течение секунды. TGS-запросы используются клиентами для получения билета на доступ к ресурсу (Ticket Granting Server, TGS, - сервер, предоставляющий билеты Kerberos.) О Kerberos Authentications (Проверки подлинности Kerberos) — счетчик, опреде- ляющий, сколько раз в секунду клиенты используют билет на этот контрол- лер домена для проверки подлинности на нем. О LDAP Bind Time (Время привязки LDAP) — время в миллисекундах, потребо- вавшееся для выполнения последней успешной привязки LDAP. О LDAP Client Sessions (Сеансов LDAP-клиентов) — количество подключенных сеансов LDAP-клиентов. О LDAP Searches (% операций поиска из LDAP в DS) — количество операций LDAP-поиска в каталоге, определяемое в процентах от общего количества операций поиска. О LDAP Searches/sec (Поисков LDAP в секунду) - частота, с которой LDAP-кли- енты выполняют операции поиска. О LDAP Successful Binds (Успешных привязок LDAP) — измеряемое в процентах количество успешных попыток выполнения привязки LDAP. О LDAP Successful Binds/sec (Успешных привязок LDAP/сек) — количество вы- полняемых за секунду успешных привязок LDAP. О LDAP Writes (% операций записи из LDAP в DS) — количество LDAP-операций записи в каталог, определяемое в процентах от общего количества операций. О LDAP Writes/sec (Операций записи LDAP в секунду) - частота, с которой LDAP-клиенты выполняют операции записи.
496 Глава 15. Протоколирование, мониторинг и квоты 15.11. Использование журналов трассировки программы perfmon для монитооинга работы Active Directory Проблема Требуется задать с помощью программы perfmon ведение журналов трассировки, используемых для записи и последующего просмотра системных вызовов, свя- занных с Active Directory. Решение 1. Запустите программу perfmon. 2. На левой панели щелкните на элементе System Monitor (Системный монитор). 3. Откройте контейнер Performance Logs and Alerts (Журналы и оповещения про- изводительности) 4. Щелкните правой кнопкой мыши на элементе Trace Logs (Журналы трасси- ровки) и выберите в открывшемся контекстном меню команду New Log Set- tings (Новые параметры журнала). 5. Введите имя нового журнала и щелкните на кнопке ОК. 6. Щелкните на кнопке Add (Добавить). 7. Выберите один или несколько провайдеров Active Directory и щелкните на кнопке ОК. 8. Поочередно переходя на разные вкладки, настройте дополнительные параметры журнала и щелкните на кнопке ОК. 9. Если вы не указали другое время для его создания, на правой панели будет выведен журнал трассировки, а рядом с ним появится зеленый значок, свиде- тельствующий о том, что трассировка выполняется. 10. Решив остановить трассировку, щелкните правой кнопкой мыши на этом значке и выберите команду Stop (Остановка). 11. С помощью команды cd перейдите в каталог, где хранятся журналы трасси- ровки (по умолчанию это каталог c:\perflogs): > cd c:\perflogs 12 Выполните команду, указанную ниже: > tracerpt <имя_фдйла_>курндла> Эта команда доступна только в Windows Server 2003 В Windows 2000 необ- ходимо воспользоваться утилитой tracedmp из пакета Resource Kit. Программа tracerpt генерирует файл summary.txt с описанием произошедших событий и файл dumpfile.csv с подробными сведениями о каждом событии, кото- рый можно импортировать в Excel или просмотреть с помощью любого текстового редактора.
15.11. Использование журналов трассировки программы perfmon 497 Комментарий В журналы трассировки записывается подробная информация системного и при- кладного уровней. Для того чтобы система могла выполнять трассировку кон- кретного приложения, вместе с этим приложением должен быть установлен соответствующий провайдер. Active Directory поддерживает несколько таких провайдеров — с их помощью протоколируются низкоуровневые системные вы- зовы, связанные с Kerberos, LDAP и DNS. Это мощное средство отладки и анализа процесса внутреннего функционирования Active Directory, но имейте в виду, что оно потребует больших затрат системных ресурсов. Ниже приведено примерное содержимое файла summary.txt, сгенерированного на контроллере домена, для которого включены все провайдеры журналов трас- сировки Active Directory. Files Processed: О ADJJOOOOl.etl Total Buffers Total Everts Total Everts Processed 5 Processed 193 Lost Start Time End Time Elapsed Time Friday. May 23. 2003 Friday. May 23. 2003 24 sec |Event Count Event Name Event Type Guid | | 1 EventTrace Header {68fdd900-4a3e-lldl-84f4-0000f80464e3}| 1 69 SamNameByld Start {25059476-899f-lld2-819e-0000f875a064}| 1 69 SamNameByld End {25059476-899f-lld2-819e-0000f875a064}| 1 2 KerblnitSecurityContext End {52e82f1a-7cd4-47 ed-b5e5-fde7bf64cea6}| 1 2 KerbInitSecurityContext Start {52e82fla-7cd4-47ed-b5e5-fde7bf64cea6}| | 1 KerbAcceptSecurityContext Start {94acefe3-9e56-49e3-9B95-7240a231c371]| | 1 KerbAcceptSecurityContext End {94acefe3-9e56-49e3-9895-7240a231c371}j J 1 SamGetAli asMem Start {lcf5fdl9-lacl-4324-84f7-970a634a91ee}| | 1 SamGetAliasMem End {lcf5fdl9-lacl-4324-84f7-970a634a91ee}| 1 14 LdapRequest End {b9d4702a-6a98-lld2-b710-00c04fb998a2}| 1 14 LdapRequest Start {b9d4702a-6a98-lld2-b710-00c04fb998a2}| | 1 DsLdapBInd Start {05acd009-daeb-lldl-be80-00c04fadfff5}] | 1 DsLdapBind End {05acd009-daeb-lldl-be80-00cC4fadfff5}| 1 & DsDirSearch End {05acd000-daeb-lldl-be80-00c04fadfff5}| 1 8 + DsDi rSearch Start {05acd000-daeb-lldl-be80-00c04fadfff5}j Здесь указано, что в течение 24 с были выполнены LDAP-запрос на связыва- ние (DsLdapBInd), 8 операций поиска в каталоге (DsDI rSearch) и 14 общих запросов LDAP (LdapRequest). В файле dumpfile.csv содержатся записи обо всех событиях, произошедших за определенный период времени. Ниже приведены записи, соответствующие запросу DsDi rSearch (длинные строки в книге разбиваются на несколько частей, и между ними вставляются пустые строки): DsDirSearch, Start. Ox000003F4. 126982224636242128. 61350. 440530. "DS". 3. 3. 1141178432. 2694848000. "192.168.5.26“. "deep". "OU-Sales.DC=rallencorp.DC-com". "0. 0 DsDirSearch. End. OxOOOOG3F4. 126982224636342271. 61350. 440540. "DS". 3. 5. 1157955648.
498 Глава 15. Протоколирование, мониторинг и квоты 2694848000. "О’. ’ (&(objectCategory-CN-Person CN-Schema CN-Configuration.DC-ral1encorp.DC=com) (objectClass-user)) 0. 0 На основании этих записей можно, в частности, определить, что пользователь компьютера с IP-адресом 192.168.5.26 выполнил LDAP-запрос на получение списка объектов user из подразделения- Sales Смотрите также Документ MS КВ 302552 (HOW TQ; Create and Configure Performance Monitor Trace Logs in Windows 2000). 15.12. Аудит доступа к каталогу Проблема Требуется включить аудит доступа к каталогу и модификации его содержимого; События аудита записываются в журнал Security (Безопасность). Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку Domain Controller Security Policy (Политика безопасности кон- троллера домена). 2. На левой панели откройте контейнер Local Policies (Локальные политики) и щелкните на элементе Audit Policy (Политика аудита) 3. На правой панели дважды щелкните на элементе Audit directory service access (Аудит доступа к службе каталогов). 4. Убедитесь, что установлен флажок Define these policy settings (Определить сле- дующие параметры политики). 5. Установите флажок Success (Успех) или Failure (Отказ) либо оба флажка. 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки > auditpol \\<иня_контроллерд_домена> /enable /directory.all Комментарий В журнале Security (Безопасность) можно протоколировать все успешные и не- удачные попытки доступа к каталогу и модификации его содержимого — такое протоколирование называется аудитом. Режим аудита — параметр Audit directory service access (Аудит доступа к службе каталогов) — устанавливается на уровне контроллера домена в объекте его групповой политики безопасности. После уста- новки указанного параметра нужно с помощью редактора ACL включить аудит
15.12. Аудит доступа к каталогу 499 в системном списке контроля доступа (SACL) для объектов и контейнеров, за ко- торыми вы хотите понаблюдать. По умолчанию в списке ACL объекта, представляющего домен, содержится элемент, включающий аудит всех операций доступа к объекту, осуществляемых участником защиты Everyone (Все). Это означает, что как только вы включите аудит в объекте групповой политики безопасности контроллера домена и этот объект будет реплицирован на другие контроллеры домена, все контроллеры смогут про- токолировать события доступа к любой части каталога. Очевидно, что при таком аудите будет генерироваться множество записей, поэтому вам нужно будет от- ключить аудит действий участника защиты Everyone (Все) и задать установки для выборочного аудита или же внимательно следить за тем, чтобы контроллеры до- мена не оказались перегруженными. Ниже приведена запись о событии, сообщающая, что владелец учетной записи Administrator (Администратор) создал в подразделении Sales объект типа contact с именем foobar. Event Type: Success Audit Event Source: Security Event Category: Directory Service Access Event ID: 566 Date: 5/26/2003 Time: 7 24:10 PM User: RALLENCORPXadnhnistrator Computer: DC1 Description: Object Operation: Object Server DS Operation Type Object Access Object Type: organizational Unit Object Name: OU=Sales.DC-rallencorp,DC-com Handle ID: Primary User Name: DC1$ Primary Domain: RALLENCORP Primary Logon ID: (OxO.Ox3E7) Client User Name: administrator Client Domain. RALLENCORP Client Logon ID: (0x0 0x3B4BE) Accesses- Create Child Propert1es Create Child contact Additional Info: CN-foobar.OU-Sales.DC-rallencorp.DC-com Additional Info2: CN=foobar.OU-=Sales.DC-rallencorp,DC-com Access Mask: 0x1 В GPO контроллера домена имеет смысл установить режим Audit Account Management (Аудит управления учетными записями). Это позволит получать до- полнительную информацию об операциях, связанных с учетными записями (на- пример о том, владелец какой учетной записи удалил определенный объект)
500 Глава 15. Протоколирование, мониторинг и квоты Смотрите также Документы MS КВ 232714 (HOW ТО: How to Enable Auditing of Directory Service Access), MS KB 314955 (HOW TO: Audit Active Directory Objects in Windows 2000), MS KB 314977 (HOW TO: Enable Active Directory Access Auditing in Windows 2000) и MS KB 814595 (HOW TO: Audit Active Directory Objects in Windows Server 2003). 15.13. Определение квоты Проблема Требуется с помощью объекта quota ограничить количество объектов, которое разрешено создавать в указанном разделе определенному участнику системы бе- зопасности. Решение1 С помощью интерфейса командной строки > dsadd quota -part ОИ_раздела> -qlimit <размер_квоты> -acct <имя_участника_систеиы_безопасности> [-rdn <иня_квоты>'] Следующая команда создает объект quota, в котором указано, что пользователь с именем RALLENCORPXrallen может создать в разделе dc=rallencorp.dc-com не более 5 объектов: > dsadd quota -part dc-rallencorp.dc-com -qlimit 5 -acct RALLENCORPXrallen Комментарий Квота — это новый элемент Windows Server 2003, позволяющий администратору ограничить количество объектов, которое разрешено создавать пользователю (или группе пользователей). Она подобна квоте на создание объектов computer, которую можно определить в Windows 2000 (более подробно об этом рассказывается в рецеп- те 8.9). Правда, квоты в Windows Server 2003 применяются при создании объек- тов любых типов. При определении квоты нужно задать три параметра. О Раздел каталога. В настоящее время квоты применяются только по отноше- нию к целым разделам каталога. Нельзя задать квоту, относящуюся лишь к поддереву раздела. Квоту можно установить для любого раздела, в том чис- ле для раздела приложения, но не для раздела схемы, поскольку схема, яв- ляющаяся надежно защищенным разделом каталога, в подобных ограничени- ях не нуждается. О Участник системы безопасности. Квоту можно определить для любого участни- ка системы безопасности, независимо от его типа. SID этого участника хра- нится в атрибуте msDS-QuotaTrustee объекта quota. 1 Данный рецепт может быть выполнен лишь при условии, что контроллер домена работает под управлением Windows Server 2003.
15.14. Поиск объектов quota, связанных с участником системы безопасности 501 О Размер квоты. Данный параметр определяет, сколько объектов может создавать заданный участник системы безопасности. Лимит квоты включает как создаваемые, так и удаляемые пользователем объекты. Если пользователь создает один объект, а затем удаляет другой, из его квоты вы- читаются два объекта, поскольку при удалении объекта вместо него создастся за- хороненный объект, что расценивается как еще одна операция создания. Если же пользователь создает объект, а затем его же и удаляет, из квоты вычитается толь- ко один объект. После того как захороненный объект будет удален из Active Di- rectory (по умолчанию это произойдет спустя 60 дней), квота пользователя будет снова увеличена. По умолчанию захороненный объект рассматривается как соз- данный, йо данную установку можно изменить. О том, как это сделать, вы узнаете из рецепта 15.15. Поскольку квоты можно назначать пользователям, группам и компьютерам, не исключена ситуация, когда с одним пользователем будет связано сразу несколько квот. В таком случае «действует» наивысшая из них. Более подробно о настройке квоты, используемой по умолчанию, рассказывается в рецепте 15.16. ПРИМЕЧАНИЕ------------------------------------------------------------------- Квоты не применимы к членам групп Enterprise Admins (Администраторы предприятия) и Domain Admins (Администраторы домена). Если определяется квота, по умолчанию задаваемая для всех пользователей, указанных групп администраторов она не касается. Смотрите также В рецепте 8.9 (глава 8) речь идет об установлении квоты на создание объектов computer, в разделе 15.0 описаны атрибуты объекта quota, в рецепте 15.14 рассказано, как узнать размер квоты, назначенной определенному участнику системы безо- пасности, в рецепте 15.15 — как определить коэффициент квоты для захороненных объектов, а в рецепте 15.16 — как задать квоту, которая будет использоваться по умолчанию. 15.14. Поиск объектов quota, связанных с участником системы безопасности Проблема Требуется найти объекты quota, связанные с определенным участником системы безопасности (то есть пользователем, группой или компьютером). Решение1 С помощью интерфейса командной строки > dsquery quota -part <0И_раздела> -acct <имя_участника> 1 Данный рецепт может быть выполнен лишь при условии, что контроллер домена работает под управлением Windows Server 2003.
502 Глава 15. Протоколирование, мониторинг и квоты Следующая команда находит объекты quota, связанные с пользователем RAL- LENCORPXrallen в разделе dc-ra 11 encorp,dc=com: > dsquery quota -part dc-rallencorp,dc-com -acct RALLENCORPXrallen Комментарий Утилита dsquery позволяет найти квоты, непосредственно назначенные участнику системы безопасности, SID которого задается в атрибуте msDS-QuotaTrustee. Она определяет SID нужного участника и ищет объекты quota, в которых он указан. Однако это не самое удачное решение, поскольку пользователь может быть, на- пример, членом группы, которой тоже назначена квота, — в таком случае данный объект quota утилита dsquery не найдет. Существует и более эффективный способ решения проблемы: нужно прочи- тать значение атрибута tokenGroups объекта user, содержащего SID всех групп, в ко- торые входит пользователь, а затем запросить объекты quota, назначенные этим группам. Алгоритм, позволяющий определить действующую квоту пользователя, приведен в рецепте 15.17. Смотрите также В рецепте 15.13 рассказывается о создании объекта quota. 15.15. Изменение весового коэффициента захороненных объектов по отношению к квоте Проблема Требуется изменить весовой коэффициент захороненных объектов, на основании которого производится отмена установленной для них квоты. Решение1 С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Подключитесь к разделу, параметры которого хотите настроить (данную ус- тановку нужно задавать отдельно для каждого раздела). 3. На левой панели разверните ветвь этого раздела. 4. Щелкните правой кнопкой мыши на объекте cn=NTDS Quotas и выберите в от- крывшемся контекстном меню команду Properties (Свойства). 1 Данный рецепт может быть выполнен лишь при условии, что контроллер домена работает под управлением Windows Server 2003.
15.15. Изменение весового коэффициента захороненных объектов 503 5 Задайте для атрибута msDS-TombstoneQuotaFactor любое значение из диапазона от 0 до 100. 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем change_tornbstone_quota.ldf и таким содержимым: dn: cn=NTDS Quotas.<0И_раздела> changetype: modify repl ace. msDs-TombstoneQuotaFactor msDs-TombstoneQuotaFactor: <0 100> Затем выполните следующую команду: > Idifde -v -1 -f change_tombstone_quota Idf С помощью сценария на языке VBScript ' Этот код изменяет для заданного раздела коэффициент квоты. ' соответствующий захороненным объектам ‘ — SCRIPT CONFIGURATION — strPartitionDN •= п<ОИ_раздела>“ ' Например- dc-rallencorp.dc-com IntTombstoneFactor <0-100> ’ Например: 50 ’ — END CONFIGURATION — set objPart - GetObject("LDAP.//cn-NTDS Quotas." & strPartitionDN 1 objPart.Put "rosOs-ToaibstoneQuotaFactor". intTombstoneLifetime objPart.Setinfo WScript.Echo "Set the tombstone quota factor for " & _ strPartitionDN & " to ” & IntTombstoneFactor Комментарий Весовой коэффициент захороненного объекта определяет, какой процент квоты будет списываться при захоронении одного объекта По умолчанию каждый захо- роненный объект принимается за один созданный. Это означает, что если пользо- вателю назначена квота в 10 объектов, то после удаления такого же числа объек- тов он не сможет ни создавать, ни удалять их до тех пор, пока из Active Directory не будут удалены захороненные объекты. Весовой коэффициент захороненного объекта хранится в атрибуте msDs-Tomb- stoneQuotaFactor контейнера NTDS Quota, связанного с разделом каталога. Как указано выше, каждый захороненный объект принимается за один созданный объект, а следовательно, атрибут msDs-TombstoneQuotaFactor по умолчанию содержит зна- чение 100 Если присвоить этому атрибуту, скажем, значение 50, тогда, имея квоту в 10 объектов, пользователь сможет удалить 20 (то есть создать 20 захороненных объектов), поскольку 20x50 % = 10. Иногда пользователям разрешается удалять любое количество объектов, ограничение устанавливается только на их создание (атрибуту msDs-TombstoneQuotaFactor нужно присвоить значение 0).
504 Глава 15. Протоколирование, мониторинг и квоты 15.16. Определение квоты для участников системы безопасности из указанного раздела Проблема Требуется задать квоту, которая по умолчанию будет распространяться на всех участников системы безопасности из определенного раздела каталога. Решение1 С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Подключитесь к разделу каталога, параметры которого хотите настроить (дан- ную установку нужно задавать отдельно для каждого раздела). 3. На левой панели разверните ветвь этого раздела. ( 4. Щелкните правой кнопкой мыши на объекте cn=NTDS Quotas и выберите в от- крывшемся контекстном меню команду Propertes (Свойства). ' 5. Укажите в атрибуте msDS-DefaultQuota количество объектов, которое разрешено создавать участникам системы безопасности, если для них не заданы персо- нальные квоты. 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем set_default_quota Idf и таким содержимым. dn: cn-NTDS Quotas.<0И_рдздела> changetype: modify replace: msDs-DefaultQuota msDs-DefaultQuota: <копичество_объектов> Затем выполните следующую команду: > Idifde -v -1 -f set_default_quota Idf С помощью сценария на языке VBScript Этот код устанавливает используемую по унопчанию квоту для заданного раздела ' ---- SCRIPT CONFIGURATION - strPartitionDN - "<ОИ_рдЗделд>” ' Например: dc-ra11encorp.dc-com IntDefaultQuota - <ко/1ичество_обьектов> ‘ Например: 10 ’ ----END CONFIGURATION...... set objPart - GetObjectCLDAP://cn-NTDS Quotas." & strPartitionDN ) objPart.Put ’'msDs-OefaultQuota". intDefaultOuota objPart.Setl fo 1 Данный рецепт может быть выпотнен лишь при условии, что контроллер домена работает под управлением Windows Server 2003.
15.17. Определение использованной части квоты 505 WScript.Echo "Set the default quota for " & _ strPartitionDN & “ to ’ & intDefaultQuota Комментарий Простейший способ определения квоты, по умолчанию распространяемой на всех пользователей, учетные записи которых хранятся в заданном разделе ката- лога, заключается в установке значения атрибута msDS-DefaultQuota контейнера NTDS Quotas, расположенного в этом же разделе. Данный атрибут содержит размер квоты тех пользователей, для которых не указаны персональные квоты. Устанавливая этот атрибут, следует все хорошо продумать, поскольку он при- меняется ко всем участникам системы безопасности, которые не являются ад- министраторами. Если, к примеру, присвоить ему значение 0, компьютеры не смогут динамически обновлять свои записи DNS в зоне, интегрированной с Active Direc- tory, поскольку эта операция требует создания объекта. 15.17. Определение использованной части квоты Проблема Требуется выяснить, какую часть квоты на создание, объектов указанный участник системы безопасности уже израсходовал. Решение1 Использованную часть квоты можно определить несколькими способами. Во-первых, это можно сделать с помощью приведенной ниже команды dsget: > dsget user '‘<0И_пользо8дтеля>“ -part <0И_раздела> -qlimit -qused Она выведет действующий лимит квоты пользователя и уже использованную его часть. Аналогичная команда, dsget computer, выводит сведения о компьютере, а команда dsget group — сведения о группе. Пользователи могут сами определить для себя уже израсходованную часть квоты, запросив значения атрибутов msDs-Quotallsed и msDs-QuotaEffective контей- нера cn=NTDS Quotas из своего раздела каталога. Эти два атрибута являются вычис- ляемыми, то есть Active Directory автоматически определяет их значения для пользователя, который их запросил (подробнее о вычисляемых атрибутах рассказано в рецепте 10.15). Атрибут msDs-Quotallsed возвращает использованную часть квоты, а атрибут msDs-QuotaEffective — действующую квоту' пользователя. Кроме того, в качестве альтернативы, можно прочитать значение атрибута msDs-TopQuotaUsage контейнера cn-NTDS Quotas того раздела, к которому относится пользователь. В этом многозначном атрибуте содержится список участников системы безопасности с наивысшими значениями израсходованной части квоты. Каждый 1 Данный рецепт может быть выполнен лишь при условии, что контроллер домена работает под управлением Windows Server 2003.
506 Глава 15. Протоколирование, мониторинг и квоты элемент списка содержит текст в формате, напоминающем XML, где указываются SID участника системы безопасности и использованная им часть квоты. Возможное значение данного атрибута приведено ниже, в разделе комментария. Комментарий Если в Active Directory заданы квоты на создание объектов, о них нужно сообщить пользователям (либо предоставить им инструкции по самостоятельному опреде- лению своих квот). Узнать квоту пользователя можно несколькими способами. В частности, можно получить сведения о «максимальном» использовании квот. Каждое значение многозначного атрибута msDs-TopQuotallsage содержит информацию об одном из участников системы безопасности, израсходовавших большую часть своей квоты. Однако, что значит «большая часть», на момент издания настоящей книги неизвестно. Информация представлена в виде текста формата, также напо- минающего XML. В нем указан SID участника системы безопасности (<ownerSID>), использованная часть квоты (<quotallsed>), количество захороненных объектов (<tombstonedCount>) и количество объектов, которые еще активны (<1 i veCount>), то есть не захоронены. Содержимое атрибута msDs-TopQuotaUsage может быть, например, таким: » Dn: CN-NTDS Quotas.DC-rallencorp.DC=com 3> msDS-TopQuotaUsage: <MS_DS_TOP_QUOTA_USAGE> <part1tionDN> DC=raHencorp.DC-com </partitionDN> <ownerSID> S-l-5-21-1422208173-2062366415-18649604523512 </ownerSID> <quotaUsed> 152 </quotallsed> <tombstonedCount> 2 </to<nbstonedCount> <HveCount> 150 </liveCount> </MS_DS_TOP_WOTA_USAGE> <MS_DS_TOP_QUOTA_USAGE> <partitionDN> DC=ra11encorp,DC-com </partitionDN> <ownerSID> S-l-5-18 </ownerSID> <quotaUsed> 43 </quotaUsed> <tombstonedCount> 32 </tombstonedCount> <liveCount> 11 </liveCount> </MS_OS_TOP_QUOTA_USAGE> <MS_DS_TOP_QUOTA_USAGE> <partitionDN> DC=ra11encorp,DC-com </partitionDN* <ownerSID> S-l-5-32-544 </ownerSID> <quotallsed> 14 </quotallsed> <tombstonedCount> 0 </tombstonedCount> <liveCount> 14 </11veCount> </MS_DS_TOP_QUOTA_USAGE> Смотрите также В рецепте 15.14 рассказывается об определении квоты, непосредственно назна- ченной участнику системы безопасности.
1/2 Архивирование О и восстановление каталога, удаленные объекты 16.0. Введение Дерево информации Active Directory (Directory Information Tree, DIT) реализо- вано с использованием механизма ESE (Extensible Storage Engine — расширенный механизм хранения) в виде транзакционной базы данных. Основной файл базы данных, ntds.dit, по умолчанию хранится в каталоге %SystemRoot%\NTDS, но его местоположение можно изменить в процессе установки службы каталогов или позднее с помощью команды ntdsutil_ (см. рецепт 16.8). Информация о каждой транзакции добавления или обновления информации в базе данных записывается в файл журнала edb.log, который находится в том же каталоге, что и файл ntds.dit. Когда размер журнала составит 10 Мбайт, система начнет создавать его дополнительные файлы (например, edb00001.log), каждый из которых также может «разрастись» до 10 Мбайт. После сохранения транзакции в базе данных содержащий ее прежде файл журнала очищается и используется по- вторно. Вообще файлы журнала транзакций ведутся на тот случай, если контроллер домена неожиданно будет выключен или выйдет из строя. Когда его снова запустят, Active Directory сможет воспроизвести транзакции, записанные в журнале, но еще не сохраненные на диске. Определить, какие транзакции не подтверждены, можно, воспользовавшись информацией о последней подтвержденной транзакции (эта информация хранится в файле edb.chk). Еще два специальных файла размером по 10 Мбайт не содержат никаких данных — они предусмотрены на тот случай, если в момент, когда Active Directory потребуется записать изменения, на диске не окажется свободного пространства. Для того чтобы в случае необходимости восстановить часть каталога Active Directory или даже весь каталог, нужно заранее разработать эффективную стра- тегию резервного копирования. Резервные копии данных можно создавать в процессе работы службы каталогов, благодаря чему отпадает необходимость в регулярном ее отключении. Восстановить данные каталога Active Directory, будь то отдельный объект, поддерево или даже база данных целиком, очень просто — достаточно
508 Глава 16. Архивирование и восстановление каталога, удаленные объекты лишь загрузить контроллер домена в специальном безопасном режиме, называемом режимом восстановления службы каталогов (в нем данная служба не активна). Администратор Active Directory должен знать, как система поступает с уда- ляемыми объектами, поскольку это отражается на резервном копировании и удалении данных. При удалении объекта из каталога вместо него создается так называемый захороненный объект, содержащий небольшое подмножество сто атрибутов. Этот объект помешается в контейнер cn=Deleted Objects, располагаемый в том же разде- ле, где находился исходный объект. Имя захороненного объекта имеет следующий формат: исходное_иия>\ОАОЕ1_ <Би10_объекта>, где < исход нее имя> — это относительное отличительное имя исход- ного объекта, <ви10_объекта> — его GUID, а \0 — нуль-символ Например, после удаления объекта user с именем jsmith соответствующий ему' захороненный объект получит отличительное имя CN=jsmith\0ADEL:fcelca8e-a5ec-4a29-96el-c8013e533d2c.CN»Deleted Objects.DC=ra11encorp.DC»com Спустя строго определенное время, называемое временем захоронения (по умолчанию оно составляет 60 дней), захороненный объект окончательно удаля- ется из Active Directory, и вы уже не сможете его восстановить. О существовании захороненных объектов нужно помнить при разработке стратегии резервного копирования, поскольку резервные копии нельзя хранить дольше периода захоронения. Если вы попытаетесь восстановить более старую резервную копию, захороненные объекты могут «воскреснуть». При обычных условиях неавторизированное восстановление резервной копии не приводит к появлению объектов, которые существовали в момент создания резервной ко- пии, но впоследствии были удалены. Перед восстановлением объектов из резерв- ной копии Active Directory проверяет, не существуют ли соответствующие им за- хороненные объекты Если такой объект будет обнаружен, система «поймет», что он удален после создания резервной копии. Если время захоронения этого объекта уже истекло (например, в том случае, когда резервная копия была создана менее чем за 60 дней до момента восстановления), v Active Directory нет возможности определить, что объект был удален, и опа просто восстановит его из резервной копии в исходном состоянии Такие объекты называются зомби. Время захоронения удаляемых объектов Active Directory задается в атрибуте tombStoneLlfetime объекта cn=Directory Service.cn=Windows NT.cn-Serv1ces,cn=Con- f 1 gurati on. <норневое 0Mjieca>. Анатомия захороненного объекта В Active Directory' захороненные объекты хранятся в контейнере Deleted Objects (Удаленные объекты) расположенном в том же разделе, где находился исходный объект По умолчанию просмотр этого контейнера не разрешен; это можно сделать, воспользовавшись управ гяющим объектом LDAP (см. рецепт 16 16) Некоторые из атрибутов, сохраняемых в захороненных объектах, описаны в табл. 161 ПРИМЕЧАНИЕ---------------------------------------------------------------------- Атрибуты, сохраняемые в захороненных объектах, представлены объектами attributeSchema, в ко- торых установлен бит 01000 (десятичное значение 8).
10.1. Архивирование данных Active Directory Таблица 16.1. Наиболее важные атрибуты захороненных объектов Атрибут Описание isDeleted Содержит значение TRUE, если объект удален lastKnownParent Отличительное имя контейнера, в котором находился исходный объект. Этот атрибут является нововведением Windows Server 2003 name Относительное отличительное имя исходного объекта userAccountControl Копируется из исходного объекта при его удалении. Имеется только у объектов user и computer objectsID Копируется из исходного объекта при его удалении. Имеется только у объектов user и computer sAMAccountName Копируется из исходного объекта при его удалении. Имеется только у объектов user и computer 16.1. Архивирование данных Active Directory Проблема Требуется создать на ленте или диске резервную копию данных Active Directory. Решение Создайте резервную копию состояния системы, включающую файлы Active Di- rectory на контроллере домена. Ниже приведены инструкции по созданию такой резервной копии с помощью утилиты NtBackup, устанавливаемой на компьюте- рах, которые работают под управлением Windows 2000 и Windows Server 2003 С помощью графического пользовательского интерфейса 1. Выберите в меню Start (Пуск) команду All Programs (Programs в Windows 2000) ► Accessories ► System Tools ► Backup (Все программы ► Стандартные ► Служебные ► Архивация данных). 2. Щелкните на ссылке Advanced Mode (Расширенный режим). 3. Откройте вкладку Backup (Архивация) 4 Установите флажок System State (Состояние системы) 5. Установите флажки тех файлов, каталогов и дисков, для которых вы также хотите создать резервные копии.
ахи i лава ю. Архивирование и восстановление каталога, удаленные ооъекты 6. В поле со списком Backup destination (Место назначения архива) выберите эле- мент File (Файл) или Таре (Лента), в зависимости от того, где должна быть создана резервная копия. 7. В поле Backup media or file name (Носитель архива или имя файла) введите имя файла или укажите ленту. 8. Дважды щелкните на кнопке Start Backup (Архивировать). С помощью интерфейса командной строки Утилита NtBackup поддерживает несколько параметров командной строки, по- зволяющих инициировать резервное копирование, не пользуясь графическим пользовательским интерфейсом. Полный синтаксис указанной утилиты для Windows 2000 описан в докумен- те MS КВ 300439 (How to Use Command Line Parameters With the «Ntbackup» Command), а ее синтаксис для Windows Serve 2003 — в документе MS KB 814583 (HOW TO: Use Command Line Parameters with the Ntbackup Command in Win- dows Server 2003). Комментарий Резервное копирование данных контроллера домена можно производить, не от- ключая работающие на нем службы, что очень облегчает труд администратора. Поскольку данные Active Directory считаются частью данных состояния системы, для создания их резервной копии достаточно заархивировать данные состояния системы; при этом заодно можно создать и резервные копии других папок и дисков. Данные состояния системы на контроллере домена включают следующие компоненты: О загрузочные файлы; О системный реестр; О регистрационная база данных классов СОМ+; О файлы Active Directory; О каталог SYSVOL; О база данных сертификатов (если контроллер домена выполняет роль сервера сертификации). Смотрите также В рецепте 16.18 речь идет об изменении времени захоронения объектов. Озна- комьтесь с документами MS КВ 216993 (Backup of the Active Directory' Has 60-Day Useful Life), MS KB 240363 (HOW TO: Use the Backup Program to Back Up and Restore the System State in Windows 2000), MS KB 300439 (How to Use Command Line Parameters With the «Ntbackup» Command), MS KB 326216 (HOW TO: Use the Backup Feature to Back Up and Restore Data in Windows Server 2003) и, нако- нец, MS KB 814583 (HOW TO: Use Command Line Parameters with the Ntbackup Command in Windows Server 2003).
j.o.£. । lepcddiiycK контроллера домена 16.2. Перезапуск контроллера домена в режиме восстановления службы каталогов Проблема Требуется перезапустить контроллер домена в режиме восстановления службы каталогов (Directory Services Restore). Решение Для того чтобы перевести сервер в режим восстановления службы каталогов, его нужно перезагрузить. После того как сервер пройдет проверку POST (Power-On Self Test — самотестирование при включении), нажмите клавишу F8, чтобы вы- вести меню загрузки (рис. 16.1). Выберите в этом меню команду Directory Services Restore Mode (Восстановление службы каталогов). ' ,s V tPIease: select an option: ’ Э Safe Mode ' < " ,-v bJ Safe Mode with Networking, ’•V : Safe Mode with Couwand Prompt Ж' - •-Mr' »; . Enab e Boot Logging ; V . < В - Enable VGA Mode : 5’ ^ф-vV Last Кроул Good Configuration that Win-f IT. - S WfF т шг west -2, ,j. st. V1 " s : , Ж Debugging Start Mini SSm OS ChoicU Menus'>• - <МЖ WW Ijse th® upand down arrow keyfe' -’fo о e the highighf tvyc our ciKwcex*? ' sH Рис. 16.1. Меню загрузки Комментарий Когда контроллер домена загружается в обычном режиме, база данных Active Directory начинает функционировать и блокируется системой. Если вам потре- буется произвести проверку ее целостности, выполнить над ней какие-либо опе- рации или восстановить какую-то ее часть, то сначала нужно будет перезагрузиться в режиме восстановления службы каталогов. В этом режиме Active Directory не запускается, а база данных (ntds.dit) не блокируется. В некоторых случаях возникает необходимость перезагрузить сервер в режиме восстановления службы каталогов, не подходя к его консоли. Для того чтобы это можно было сделать, отредактируйте на данном сервере файл bootJni таким обра- зом, чтобы после перезагрузки переход в режим восстановления службы катало- гов осуществлялся автоматически. Благодаря этому для удаленного подключения к компьютеру можно будет использовать Terminal Services (Служба терминала).
512 Глава 16. Архивирование и восстановление каталога, удаленные ооъекты Подробнее о том, как можно активизировать такую возможность, рассказывается в документе MS КВ 256588. Настраивая компьютер для управления в режиме восстановления службы каталогов через службу терминала, будьте очень внима- тельны, иначе может оказаться, что он недоступен для удаленного управления Смотрите также Документ MS КВ 256588 (Using Terminal Services for Remote Administration of Windows 2000 DCs in Directory Service Restore Mode) 16.3. Переустановка пароля администратора для режима восстановления службы каталогов Проблема Требуется переустановить пароль администратора, используемый в режиме вос- становления службы каталогов. Этот пароль настраивается на каждом контрол- лере домена отдельно (то есть не реплицируется) и задается при назначении сервера контроллером домена. Решение С помощью графического пользовательского интерфейса 1. Загрузите сервер в режиме восстановления службы каталогов (см. рецепт 16.2). 2. Выполните команду Start ► Run (Пуск ► Выполнить) 3. Введите команду compmgmt.msc и нажмите клавишу Enter. 4. На левой панели поочередно откройте контейнеры System Tools ► Local Users and Computers (Служебные программы ► Локальные пользователи и группы). 5. Щелкните на контейнере Users (Пользователи). 6. На правой панели щелкните правой кнопкой мыши на имени пользователя Administrator (Администратор) и выберите команду Set Password (Задать пароль) 7. Введите и подтвердите новый пароль, затем щелкните на кнопке ОК. С помощью интерфейса командной строки Утилита ntdsutil для W ndows Server 2003 позволяет изменять пароль админист- ратора, используемый в режиме восстановления службы каталогов, во время функционирования контроллера домена в обычном рабочем режиме. Еще одним достоинством этой утилиты является то, что она позволяет выполнить указан- ную задачу на удаленном контроллере домена. Ниже приведен пример ее вывода после смены пароля для контроллера домена DC1. * ntdsutil “set dsrm password" “reset password on server DC1” ntdsuti1: set dsrm password Reset DSRM Administrator Password: reset password on server DC1
16.4. Выполнение неавторизированного восстановления □ АЛ Please type password for DS Restore Mode Administrator Account: ********** Please confirm new password: ********** Password has been set successfully. В Windows 2000 Service Pack 2 появилась новая команда получившая назва- ние setpwd. Она действует подобно команде ntdsutl 1 из Windows Server 2003 и позво- ляет изменить пароль режима восстановления службы каталогов на работающем контроллере домена. Ее также можно запустить на удаленном компьютере. Комментарий Возможно, вы подумали, что наличие отдельного пароля администратора при работе в режиме восстановления службы каталогов вносит дополнительные неудобства — еще один элемент, который нужно поддерживать и обновлять, еще один пароль для запоминания! Однако вскоре вы поймете насколько он необходим. Как правило, загрузка контроллера домена в режиме восстановления службы каталогов производится в тех случаях, когда над базой данных Active Directory нужно выполнить те или иные операции. При этом сама база данных не должна функционировать. Ну а если она не функционирует, аутентификация с ее ис- пользованием невозможна. Следовательно, система должна иметь другой источник информации о пользователях. Поэтому она обращается к унаследованной от пре- дыдущих операционных систем базе данных SAM. Учетная запись и пароль ад- министратора режима восстановления службы каталогов хранятся в этой базе данных так же, как информация, необходимая для работы клиентского компью- тера в независимом режиме. Смотрите также В рецепте 16.2 рассказывается, как загрузить компьютер в режиме восстановления службы каталогов Рекомендуем обратиться к документам MS КВ 239803 (How to Change the Recovery' Console Administrator Password on a Domain Controller) и MS KB 322672 (HOW TO: Reset the Directory Services Restore Mode Admi- nistrator Account Password in Windows Server 2003). 16.4. Выполнение неав^оризироданного восстановления Проблема Необходимо произвести неавторизированное восстановление контроллера домена. В частности, такая потребность возникает, когда его нужно быстро восстановить после аппаратного сбоя. Решение С помощью графического пользовательского интерфейса 1. Загрузите сервер в режиме восстановления службы каталогов (см. рецепт 16.2).
3JL** । лава io. Архивирование и восстановление каталога, удаленные объекты 2 Запустите программу архивирования с помощью команды Start ► All Programs (или Programs для Windows 2000) ► Accessories ► System Tools ► Backup (Пуск ► Все программы ► Стандартные ► Служебные ► Архивация данных) 3. Щелкните на ссылке Advanced Mode (Расширенный режим). 4. На вкладке Welcome (Добро пожаловать!) щелкните сначала на кнопке Restore Wizard (Мастер восстановления), а затем — на кнопке Next (Далее). 5. Установите флажок System State (Состояние системы), а также флажки всех объектов, которые следует восстановить, и щелкните на кнопке Next (Далее) 6. Щелкните на кнопке Advanced (Дополнительно). 7. В раскрывающемся списке Restore files to (Восстановить файлы в) выберите установку Original location (Исходное размещение). 8. В области How to Restore (Если восстанавливаемый файл уже существует) ак- тивируйте переключатель Replace existing files (Всегда заменять имеющийся на диске файл) и щелкните на кнопке Next (Далее). 9. В области Advanced Restore Options (Дополнительные параметры восстановления) установите флажки Restore Security Settings (Восстановление безопасности), Restore junction points (Восстановление базы данных съемных носителей) и Pre- serve existing mount volume points (Восстановление точек соединения, но не папок и файлов, на которые они ссылаются). Затем щелкните на кнопке Next (Далее). 10. Щелкните на кнопке Finish (Готово). 11. Перезагрузите компьютер Комментарий Если контроллер домена выйдет из строя и вам не удастся его запустить, скажем, из-за поломки жесткого диска, для его восстановления предусмотрены две воз- можности. Первая из них заключается в том, чтобы удалить контроллер домена из Active Directory (см. рецепт 3 6) и присвоить его роль другому серверу. В та- ком случае все данные будут восстановлены в ходе репликации В Windows Ser- ver 2003 для ускорения процесса можно также применить метод восстановления с носителя, описанный в рецепте 3.2 (глава 3). Вторая возможность описана в этом рецепте. Она заключается в перезагрузке сервера в режиме восстановления службы каталогов, восстановлении состояния системы и других необходимых компонентов и повторной перезагрузке. После этого контроллер домена сможет опять принимать участие в репликации и син- хронизировать изменения, внесенные в каталог после создания резервной копии. Смотрите также В рецепте 16.2 рассказывается о перезагрузке контроллера домена в режиме вос- становления службы каталогов Рекомендуем прочитать документ MS КВ 240363 (HOW ТО: Use the Backup Program to Back Up and Restore the System State in Windows 2000).
16.5. Авторизированное восстановление объекта или поддерева 515 16.5. Авторизированное восстановление объекта или поддерева Проблема Требуется произвести авторизированное восстановление одного или нескольких объектов, но не всей базы данных Active Directory. Решение Выполните действия, описанные в рецепте 16.4, но по завершении восстановления не перезагружайте компьютер. Для восстановления одного объекта задайте команду: > ntdsutil "auth restore" "restore object cn=jsmith.ou»Sales.dc=rallencorp.dc-com" q Поддерево можно восстановить с помощью такой команды: > ntdsutil "auth rest ire" "restore subtree ou=Sales.dc-rallencorp.dc-com" q Перезагрузите компьютер. Процесс восстановления объектов, представляющих пользователей, группы, компьютеры и доверительные отношения, имеет опреде- ленные особенности, о которых вы сможете узнать из документов MS КВ 216243 и MS КВ 280079. Комментарий Если администратор либо пользователь по ошибке удалит из Active Directory важный объект или целое поддерево, его можно будет восстановить — главное, чтобы существовала резервная копия, содержащая указанные объекты. И даже если резервная копия отсутствует, это можно сделать при условии, что контрол- лер домена работает под управлением Windows Server 2003 Еще один способ восстановления удаленных объектов описан в рецепте 16.17. Для восстановления одного или нескольких объектов нужно выполнить те же действия, что и для неавторизированного восстановления, а затем с помощью ко- манды ntdsutil пометить объекты как авторизированные. После повторной пере- загрузки контроллер домена реплицирует изменения, внесенные после восста- новления каталога из резервной копии, за исключением тех, которые касаются объектов или поддерева и помечены как авторизированные Для этих объектов Active Directory' увеличит значение USN (Update Sequence Number — номер по- следовательности изменений) таким образом, что они будут реплицированы на другие контроллеры домена. Утилиту ntdsutil можно использовать и без предварительного восстановления каталога — в тех случаях, когда объект был удален случайно и изменение еще не реплицировано на другие контроллеры домена. При этом вам следует убедиться, что контроллер домена пока не выполнил репликацию, и либо отключить на нем данный процесс, либо сделать объект авторизированным до того, как будет про- изведено обновление.
Ъ1Ь Глава 16. Архивирование и восстановление каталога, удаленные объекты Смотрите также В рецепте 16.2 рассказывается, как перезагрузить компьютер в режиме восста- новления службы каталогов, а в рецепте 16.17 — как восстановить удаленные объекты. Рекомендуем ознакомиться с документом MS КВ 216243 (Authoritative Restore of Active Directory and Impact on Trusts and Computer Accounts) и с доку- ментом MS KB 280079 (Authoritative Restore of Groups Can Result in Inconsistent Membership Information Across Domain Controllers). 16.6. Полное авторизированное восстановление Проблема Требуется произвести полное авторизированное восстановление базы данных Active Directory, поскольку большая часть содержащихся в ней данных была утеряна. Решение Выполните действия, описанные в рецепте 16.4, но после восстановления не пе- резагружайте компьютер. Восстановите базу данных, воспользовавшись указанной ниже командой, по- сле чего перезагрузите компьютер. > ntdsutil "auth restore" "restore database" q Комментарий Полное авторизированное восстановление, сопровождающееся неизбежной потерей данных, — это крайняя мера Прежде чем его выполнить, желательно связаться со службой поддержки Microsoft, чтобы выяснить, не существует ли каких-нибудь других возможностей. Процесс авторизированного восстановления следует сначала протестировать в экспериментальной системе и задокументировать все действия на случай, если вам все же придется прибегнуть к этой мере Смотрите также В рецепте 16.2 рассказывается об особенностях перезагрузки компьютера в режи- ме восстановления службы каталогов. Прочтите документы МВ КВ 216243 (Authoritative Restore of Active Directory and Impact on Trusts and Computer Ac- counts), MS KB 241594 (HOW TO: Perform an Authoritative Restore to a Domain Controller in Windows 2000) и MS KB 280079 (Authoritative Restore of Groups Can Result in Inconsistent Membership Information Across Domain Controllers). 16.7. Проверка целостности DIT-файла Проблема Требуется проверить целостность и семантику DIT-файла, с тем чтобы выяснить, не поврежден ли он и не содержит ли запорченных записей.
16.8. перемещение mi-файла Решение С помощью интерфейса командной строки Перезагрузите компьютер в режиме восстановления службы каталогов. Затем выполните следующие команды: > ntdsutil files integrity q q > ntdsutil "semantic database analysis” "verbose on” go Комментарий DIT-файл Active Directory (ntds.dit) представляет собой транзакционную базу данных. Microsoft использует для ее поддержки СУБД ESE (Extensible Storage Engine — расширяемый механизм хранения данных), основанную на технологии Jet и прошедшую многолетнюю апробацию в других программных продуктах, в частности в системе Microsoft Exchange. Таким образом, Active Directory имеет те же слабые стороны, что и обычная база данных Для выявления возможных повреждений ее файла утилита ntdsuti 1 выполняет низкоуровневую проверку целостности, проверяет заголовки базы данных и согласованность таблиц. Она считывает каждый байт базы данных, а следовательно, функционирует довольно медленно Производительность утилиты зависит от размера DIT-файла и от быстродействия аппаратного обеспечения. По некоторым оценкам от Microsoft для Windows 2000 за 1 ч она способна обрабо- тать примерно 2 Гбайт данных. Утилита ntdsutil поддерживает две команды: integrity - для проверки цело- стности данных, semantics — для проверки семантики. Вторая команда также ис- пользуется для анализа содержимого базы данных, проверки счетчиков ссылок, метаданных репликации, дескрипторов безопасности и т. п. Обнаружив ошибки, их можно исправить с помощью команды fixup Однако, прежде чем выполнять эту команду, нужно убедиться в наличии свежей резервной копии, поскольку при не- желательном исходе повреждение не только не будет устранено, но еще и заметно увеличится. Смотрите также В рецепте 16 2 рассказывается об особенностях перезагрузки компьютера в режи- ме восстановления службы каталогов. Кроме того, вы можете обратиться к доку- менту MS КВ 315136 (HOW ТО: Complete a Semantic Database Analysis for the Active Directory Database by Using Ntdsutil.exe). 16.8. Перемещение DIT-файла Проблема Требуется переместить DIT-файл Active Directory на новый диск, с более высо- кими показателями емкости и быстродействия.
aia глава 16. Архивирование и восстановление каталога, удаленные объекты Решение С помощью интерфейса командной строки Перезагрузите компьютер в режиме восстановления службы каталогов. Затем выполните следующую команду, указав вместо параметра <диск и_папка> новое местоположение файла (например, d:\NTDS): > ntdsutil files "move db to <диск_и_папка>“ q q > ntdsutil files "move legs to <диск_и_папка>'' q q 1 Комментарий Файл базы данных Active Directory (ntds.dit) можно перемещать независимо от файлов журнала В приведенном выше решении первая команда перемещает файл базы данных, вторая — файлы журнала После выполнения этой операции стоит проверить целостность базы данных О том, как это сделать, рассказано в рецеп- те 16.7. Смотрите также В рецепте 16.2 рассказывается, как перезагрузить компьютер в режиме восстанов- ления службы каталогов, а в рецепте 16 7 — как проверить целостность DIT-файла Active Directory Кроме того, обратитесь к документам MS КВ 257420 (HOW ТО Move the Ntds.dit File or Log Files) и MS KB 315131 (HOW TO: Use Ntdsutil to Manage Active Directory Files from the Command Line in Windows 2000). 16.9. Исправление или восстановление DIT-файла Проблема Требуется исправить DIT-файл Active Directory или выполнить его мягкое вос- становление после выключения питания или сбоя в работе контроллера домена. Решение С помощью интерфейса командной строки Перезагрузите компьютер в режиме восстановления службы каталогов Затем с помощью следующей команды выполните мягкое восстановление базы данных на основе информации из файлов журнала: > ntdsutil files recover q q Если по-прежнему будут появляться сообщения об ошибках, придется при- бегнуть к приведенной ниже команде, которая выполняет низкоуровневое вос- становление базы данных, но может привести к потере информации: > ntdsutil files repair q q
16.10. Дефрагментация базы данных без отключения служб эл» Если восстановление с помощью первой или второй команды пройдет успеш- но, выполните проверку целостности базы данных (см. рецепт 16.7). Комментарий Скорее всего, вам никогда не придется вносить исправления в базу данных Active Directory или восстанавливать ее Вторую операцию чаще всего приходится вы- полнять в случае неожиданного выключения контроллера домена, например из-за отсутствия питания в результате чего последние изменения оказываются не со- храненными в базе данных. Когда контроллер домена повторно загрузится систе- ма сама произведет мягкое восстановление, то есть попытается внести в базу дан- ных изменения, записанные в журнале. Поскольку этот процесс выполняется автоматически, маловероятно, что вам потребуется вручную запускать команду ntdsutil recover, а если вы все же именно так поступите, едва ли это поможет. Вторая команда ntdsuti 1 repaiг, способна устранить низкоуровневые ошибки, но нередко это делается ценой потери данных. Имейте в виду, что вы используете ее на свой страх и риск! Данной командой следует пользоваться осторожно, и перед ее запуском желательно проконсультироваться в службе поддержки Microsoft. Ну а если вы, выполняя команду, разрушите базу данных еще больше, придется производить полную переустановку контроллера домена О том, как удалить кон- троллер домена, рассказано в рецепте 3.6 (глава 3). Смотрите также В рецепте 16 2 речь идет о перезагрузке компьютера в режиме восстановления службы каталогов, а в рецепте 16 7 — о проверке целостности DIT-фаила Active Directory. Обратите внимание на документ MS КВ 315131 (HOW ТО: Use Ntdsutil to Manage Active Directory Files from the Command Line in Windows 2000). 16.10. Дефрагментация базы данных без отключения служб на контроллере домена Проблема Требуется выполнить дефрагментацию базы данных Active Directory, не отклю- чая ейужбы, работающие на контроллере домена. Эта операция может быть целе- сообразной после удаления большого количества объектов. Решение1 С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP 1 Данный рецепт можно использовать лишь при условии что функциональный уровень домена соот- ветствует Windows Server 2003.
bZU I лава 1б. Архивирование и восстановление каталога, удаленные объекты 2. Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя контроллера домена. 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя, входящего в группу администраторов, и щелкните на кнопке ОК. 7. Выполните команду Browse ► Modify (Поиск ► Изменить). 8. Оставьте поле Dn (Отличительное имя) пустым, а в поле Attribute (Атрибут), введите значение DoOnllneDefrag. 9. В поле Values (Значение) введите значение 180. 10. В поле с раскрывающимся списком Operation (Операция) выберите элемент Add (Добавить). 11. Щелкните на кнопке Enter (Ввод). 12. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки Создайте LDIF-файл с именем online_defrag.ldf и следующим содержимым: dn: changetype: modify replace: DoOnlineDefrag DcOnlineDefrag: 180 Затем выполните такую команду: > Idifde -v -i -f online_defrag.ldf С помощью сценария на языке VBScript ' Этот код выполняет дефрагментацию в течение 180 с ’ ---- SCRIPT CONFIGURATION -- strDC - "<имя контроллера_домена>" ' Например: dcOl ' ----ENO CONFIGURATION....— - set objRootDSE - GetObject("LDAP://" & strDC & "/RootDSE") objRootDSE.Put "DoOnllneDefrag", 180 ObjRootDSE.Setinfo WScrlpt.Echo "Successfully initiated an online defrag" Комментарий В Windows Server 2003 была введена новая возможность — дефрагментация без отключения служб, работающих на контроллере домена. По умолчанию такая де- фрагментация выполняется на всех контроллерах домена каждые 12 ч. Суть этого процесса заключается в том, что свободное пространство в файле базы данных Active Directory (ntds.dit) объединяется в единый блок, но файл при этом сохра- няет прежний размер. Для того чтобы запустить дефрагментацию вручную, нужно присвоить атрибу- ту DoOnllneDefrag объекта RootDSE значение, равное максимальному времени вы-
16.11. Определение объема свободного пространства в DIT-файле 521 полнения дефрагментации в секундах. Для того чтобы получить право записи этого атрибута, вам необходимо стать членом одной из административных групп. Смотрите также В рецепте 16.12 рассказывается об особенностях процесса дефрагментации с от- ключением служб, работающих на контроллере домена. Ознакомьтесь с докумен- том MS КВ 198793 (The Active Directory Database Garbage Collection Process). 16.11. Определение объема свободного пространства в DIT-файле Проблема Требуется определить объем свободного пространства, имеющегося в ОГГ-файле1 Если его окажется очень много, можно уменьшить размер файла. Решение С помощью графического пользовательского интерфейса 1. Из окна, открываемого командой Start ► Run (Пуск ► Выполнить), запустите программу regedit.exe. 2. На левой панели откройте раздел реестра HKEY_LOCAL_MACHINE\SYSTEM\Cur- rentControlSet\Services\NTDS\Diagnostics. 3. На правой панели дважды щелкните на параметре 6 Garbage Collection. 4. В открывшемся диалоговом окне введите в поле Value data (Значение) значе- ние 1. 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки > reg add HKLM\System\CurrentControlSet\Services\NTDS\Diagnostics /v “6 Garbage Collection" /t REG_DWORD /d 1 С помощью сценария на языке VBScript ' Данный код включает запись информации о свободном ’ пространстве в файле DIT в журнал событий ’ ---- SCRIPT CONFIGURATION -- strDCName - "<имя_контроплера_ромена>'' ' Например: del ' ----END CONFIGURATION -..... const HKLM - &H80000002 strNTDSReg - "SYSTEM\CurrentCcntrolSet\Services\NTDS\Diagnostics" set objReg - GetObjectC'winmgmtsrW" & strDCName & "\root\default:StdRegProv") objReg.SetDWORDValtie HKLM. strNTDSReg, "6 Garbage Collection". 1 WScrlpt.Echo "Garbage Collection logging set to 1“
522 Глава 16. Архивирование и восстановление каталога, удаленные объекты Комментарий Когда установлен диагностический параметр 6 Garbage Collection, после каждой сборки мусора будет генерироваться событие 1646. Запись об этом событии при- ведена ниже: Event Type: Information Event Source: NTDS Database Event Category: Garbage Collection Event ID: 1646 Date: 5/25/2003 Time: 9:52:46 AM User: NT AUTHORITY\ANQNYMOUS LOGON Computer: DC1 Description: Internal event: The Active Directory database has the following amount of Tree hard disk space remaining. Free hard disk space (megabytes): 100 Total allocated hard disk space (megabytes): 1024 Здесь сообщается, что на контроллере домена del имеется DIT-файл разме- ром 1 Гбайт, содержащий 100 Мбайт свободного пространства. Смотрите также В рецепте 16.12 рассказывается, как осуществить дефрагментацию с отключением служб, которые функционируют на контроллере домена. 6.12. Выполнение дефрагментации с отключением служб на контроллере домена Проблема Требуется произвести дефрагментацию DIT-файла Active Directory с отключением служб, работающих на контроллере домена, для того чтобы вернуть часть свобод- ного пространства операционной системе. Решение С помощью интерфейса командной строки 1. Перезагрузите компьютер в режиме восстановления службы каталогов. 2. Проверьте целостность DIT-файла (как это делается, рассказано в рецепте 16.7). 3. Теперь система готова к дефрагментации каталога. Выполните приведенную ниже команду, чтобы создать сжатую копию DIT-файла (предварительно проверьте, имеется ли на жестком диске достаточно свободного места — как ми- нимум 115 % от размера текущего DIT-файла): > ntdsutil files "compact to <диск_и_палка_для_временного_фдйла>'' q q
16.12. Выполнение дефрагментации с отключением служб 523 4. Удалите файлы журнала транзакций в текущем каталоге NTDS: > del <диск_и_папка_текущего_файла>\*.log 5. Убедившись, что па диске достаточно свободного пространства, на некоторое время сохраните текущий DIT-файл в другой папке, после чего переместите сжатую копию на место исходного файла: > move <диск_и_папка_текущего_файла>\(]1б5.йИ <диск_и_лапка_сохраняемой_кспии>\пЫз_ог1д.йИ > move <диск_и_папка_для_временного_файла>\г\1бз.йИ <диск_и_папка_текущего_файла>\г\1й5.йИ 6. Чтобы проверить целостность нового файла, выполните действия, перечис- ленные в рецепте 16.7. Убедившись, что с ним все в порядке, перезагрузите компьютер в обычном режиме. Если журнал событий не содержит сообщений об ошибках, позаботьтесь о том, чтобы резервное копирование данных кон- троллера домена было выполнено как можно скорее. Комментарий Дефрагментацию контроллера домена в режиме восстановления службы каталогов рекомендуется производить в тех случаях, когда из Active Directory удаляется большое количество объектов и вы хотите уменьшить размер ее файла. Иногда дефрагментацию можно выполнять «на ходу», не отключая службы, работающие на контроллере домена. Свободное место в файле службы каталогов, освобождае- мое после удаления объектов, используется повторно, и со временем база данных разрастается, поскольку в нее добавляются все новые объекты. Поэтому процеду- >а дефрагментации, описанная в этом рецепте, производится редко. Кроме того, с •е выполнением сопряжен некоторый, хотя и незначительный риск, так что без (еобходимости применять ее не стоит. Дефрагментация производится и после установки на контроллер домена опе- рационной системы Windows Server 2003, в которой реализована новая функция, позволяющая сократить объем занимаемого DIT-файлами дискового пространства, а именно функция хранения дескрипторов защиты в одном экземпляре. При ее ис- пользовании уникальные дескрипторы безопасности содержатся в одном месте, не- зависимо от того, сколько объектов их применяет, тогда как в Windows 2000 один и тот же дескриптор хранился отдельно для каждого объекта. При выполнении дефрагментации важно правильно определить требования к дисковому пространству. Если предполагается, что сжатая копия DIT-файла будет создана на том же диске, где находится текущий файл, нужно убедиться, что на диске имеется свободное пространство объемом не менее чем на 15 % больше текущего объема DIT-файла. Если вы планируете сохранить на том же диске ис- ходный файл, на нем должно быть столько свободного пространства, сколько за- нимает этот файл. И, конечно же, следует оставить место, необходимое для работы системы. Смотрите также В рецепте 16.2 рассказывается, как перезагрузить компьютер в режиме восста- новления службы каталогов, а в рецепте 16.7 — как проверить целостность DIT-. файла. Обратите внимание на документы MS КВ 198793 (The Active Directory
524 Глава 16. Архивирование и восстановление каталога, удаленные объекты Database Garbage Collection Process), MS KB 229602 (Defragmentation of the Ac- tive Directory Database) и MS KB 232122 (Performing Offline Defragmentation of the Active Directoiy Database). 16.13. Изменение периода сбора мусора Проблема Требуется изменить в Active Directoiy используемый по умолчанию период сбора мусора. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit 2. На левой панели поочередно откройте контейнеры cn=Configuration ► cn=Servi- ces ► cn=Windows NT. 3. Щелкните правой кнопкой мыши на элементе cn=Di rectory Servi се и выберите в открывшемся контекстном меню команду Properties (Свойства). 4. Присвойте атрибуту garbageColPeriod значение, определяющее период запус- ка процесса сбора мусора в часах (значение по умолчанию — 12). 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем change_garbage_period.ldf и следующим содержимым; dn: cn=Directory Service.cn-Windows NT.cn-Services.cn-Configuration.<норневое_ОИ_леса> changetype: modify replace: garbageCollPeriod garbageCol1 Peri od: <период_в_часах> Затем выполните такую команду: > Idifde -v -i -f change_garbage_period.ldf С помощью сценария на языке VBScript ‘ Этот код устанавливает период сбора мусора, используемый по умолчанию ’ — SCRIPT CONFIGURATION — intGarbageCol1 - <период_в_часах> ' — END CONFIGURATION — set objRootDSE - GetObject("LDAP://RootDSE") set objDSCcnt - GetObject("LDAP://cn-D1rectory Service.cn-Windows NT " & “cn-Services.” & objRootDSE.Get(“configurationNamingContext”) ) objDSCont.Put "garbageCol1 Period”. intGarbageCol1 objDSCont.SetInfo WScript.Echo "Successfully set the garbage collection interval to “ & _ intGarbageCol1
16.14. Протоколирование операции по удалению захороненных объектов 525 Комментарий Когда объект удаляется из раздела конфигурации, домена или приложений, вместо него создается захороненный объект, содержащий некоторое подмножество его атрибутов. Этот захороненный объект хранится в Active Directory в течение определенного времени, называемого временем захоронения и по умолчанию равного 60 дням, после чего также удаляется. Более подробные сведения о време- ни захоронения объектов содержатся в рецепте 16.18. Процесс сбора мусора периодически выполняется на каждом контроллере до- мена. Одной из его функций является удаление объектов, время захоронения ко- торых истекло. По умолчанию он запускается каждые 12 ч, но этот показатель можно изменить, присвоив другое значение атрибуту даrbageCollPeriod объекта cn=Directory Service.cn=Windows NT.cn=Services.cn=Configuration. <корневое_ОИ_ромена>. Смотрите также В рецепте 16.18 рассказывается, как изменить время захоронения объектов в Ac- tive Directory, а в рецепте 16.14 — как задать протоколирование операции по уда- лению захороненных объектов. Рекомендуем обратиться к документу MS КВ 198793 (The Active Directory Database Garbage Collection Process). 16.14. Протоколирование операции по удалению захороненных объектов Проблема Требуется обеспечить запись в журнал информации о количестве объектов, время захоронения которых истекло, в результате чего они были удалены из Active Di- rectory в ходе сбора мусора. Решение С помощью графического пользовательского интерфейса 1. Из окна, открываемого командой Start ► Run (Пуск > Выполнить), запустите программу regedit.exe. 2. На левой панели откройте раздел реестра HKEY_LOCAL_MACHINE\SYSTEM\Current- ControlSet\ Services\NTDS\Diagnosbcs. 3. На правой панели дважды щелкните на параметре 6 Garbage Collection. 4. В поле Value data (Значение) открывшегося диалогового окна введите значение 3. 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки > reg add HKLM\System\CiirrentControlSet\Serv1ces\NTDS\Diagnostics /v "6 Garbage Collection" /t REG_OWORD /d 3
526 Глава 16. Архивирование и восстановление каталога, удаленные объекты С помощью сценария на языке VBScript ’ Этот код включает протоколирование процесса сбора мусора • — SCRIPT CONFIGURATION — strDCName - "<имя_контроллера_донена>" intValue = 3 • — END CONFIGURATION — const HKLM - &H80000002 strNTDSReg - "SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics’ set objReg GetObject("winmgmts:\\* & strDCName & "\root\default StdRegProv") objReg.SetOWORDValue HKLM, strNTDSReg. "6 Garbage Collection." IntValue WScript Echo "Garbage Collection logging enabled" 1 Комментарий Ниже приведен пример записи об удалении захороненных объектов, сделанной, когда параметр б Garbage Collection содержал значение 3. Event Type: Information Event Source: Event Category: NTDS General Garbage Collection Event ID: 1006 Date: 6/24/2003 Time. 11:29:31 AM User: NT AUTHORITYXANONYMOUS LOGON Computer: DC1 Description: Internal event: Finished removing deleted objects that have expired (garbage collection). Number of expired deleted objects that have been removed: 229 Смотрите также В рецепте 15.2 (глава 15) подробно рассказывается о том, как выполняется диаг- ностическое протоколирование, а в рецепте 16.13 — о процессе сборки мусора. 16.15. Определение размера базы данных Active Directory Проблема Требуется определить размер базы данных Active Directory Решение С помощью интерфейса командной строки Если контроллер домена загружен в режиме восстановления службы каталогов, для определения размера базы данных Active Directory можно воспользоваться такой командой ntdsutil: > ntdsutil files info
16.16. Поиск удаленных объектов 527 Выполнив указанную команду в обычном рабочем режиме, вы получите сле- дующее сообщение об ошибке: *** Error: Operation only allowed when booted in DS restore mode "set SAFEBOOT_OPTION*DSREPAIR" to override - NOT RECOMMENDED' В нем указывается, что, установив переменную окружения SAFE8001_0PTI0N“DS- REPAIR, можно разрешить выполнение утилиты ntdsuti 1 в обычном режиме, но де- лать это не рекомендуется, поскольку тем самым будет дано разрешение на вы- полнение других команд ntdsutil, не столь безобидных. Еще один способ определения размера файла базы данных, довольно простой и безопасный, заключается в следующем. Задайте команду Start ► Run (Пуск > Вы- полнить), введите cmd.exe и нажмите клавишу Enter. Затем введите в командной строке cd <KdTanor_NTDS>, где <MTanor_NWS> — полный путь к файлу ntds.dit, и, чтобы вывести содержимое каталога с указанием размера каждого файла, выполните команду di г. Комментарий Размер базы данных Active Directory на контроллере домена обычно соответствует размеру ее файла ntds.dit. На разных контроллерах домена он из-за наличия нере- плицированных изменений или различий в нереплицируемых данных может не- сколько различаться даже в пределах одного домена Администратор Active Directory должен отслеживать размер этого файла, так как на диске всегда должно оставаться достаточно свободного пространства Кроме того, зная средний размер DIT файла, нетрудно обнаружить резкое увеличение его размера, вызванное, например, тем, что какое-то приложение записало в ката- лог собственные данные. Если окажется, что свободное пространство на диске почти исчерпано, можно переместить файл базы данных Active Directory на другой диск или, если в нем много свободного пространства, выполнить его дефрагментацию в режиме вос- становления службы каталогов. Смотрите также В рецепте 16.8 рассказывается о перемещении файлов Active Directory, в рецеп- те 16.11 — об определении объема имеющегося в DIT-файле свободного пространства, а в рецепте 16.12—0 дефрагментации базы данных с отключением служб, рабо- тающих на контроллере домена. 16.16. Поиск удаленных объектов Проблема Требуется найти в Active Directory удаленные объекты.
528 Глава 16. Архивирование и восстановление каталога, удаленные объекты Решение С помощью графического пользовательского интерфейса 1 Запустите служебную программу LDP. 2 Выполните команду Connect on ► Connect (Подключение ► Подключиться) 3. В поле Server (Сервер) введите имя контроллера домена, к которому следует подключиться (или оставьте это поле пустым — в таком случае подключение будет выполнено без участия сервера). 4 В поле Port (Порт) введите значение 389 и щелкните па кнопке ОК. 5. Выполните команду Connection ► Connect (Подключение ► Подключиться). 6. Введите имя и пароль пользователя, являющегося администратором домена, после чего щелкните на кнопке ОК. 7. Выполните команду Options ► Controls (Параметры ► Управляющие объекты). 8. В Windows Server 2003 выберите из списка Load Predefined (Загрузить сущест- вующий) управляющий объект Return Deleted Objects (Вернуть удаленные объекты). 9. В Windows 2000 введите в поле Object Identifier (Идентификатор объекта) значение 1 2.840.113556.1 4 417 и щелкните на кнопке Checkin (Подтверждение). 10. Щелкните на кнопке ОК. 11. Выполните команду Browse ► Search (Поиск ► Найти). 12. В поле BaseDN (Отличительное имя базы) введите cn=Deleted Objects .<ОИ_донена>. 13. В области Scope (Область поиска) установите переключатель в положение One Level (Один уровень) 14. В поле Filter (Фильтр) введите спецификацию фильтра: (1 sDeleted=TRUE). 15 Щелкните на кнопке Options (Параметры). 16. В области Search Call Туре (Тип поиска) установите переключатель’в положе- ние Extended (Расширенный) и щелкните на кнопке ОК. 17. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки Во время работы над этой книгой ни одна из стандартных утилит с интерфейсом типа командной строки не выполняла поиск удаленных объектов. С помощью сценария на языке VBScript В настоящее время поиск удаленных объектов с использованием ADSI или ADO не поддерживается. Комментарий Когда объект удаляется из Active Directory, вместо него в том же разделе катало- га в контейнере Deleted Objects (Удаленные объекты) создается так называемый захороненный объект. Подробнее об этом рассказывается в рецепте 16.0.
16.17. Восстановление удаленных объектов 529 Контейнер Deleted Objects (Удаленные объекты) и его содержимое по умолчанию скрыты и в таких программах, как Active Directory Users and Computers (Active Di- rectory — пользователи и компьютеры) и ADSI Edit, не отображаются. Для того чтобы запросить захороненные объекты, нужно воспользоваться управляющим объектом протокола LDAP Return Deleted Objects, OID которого равен 1.2.840 113556.1 4 417, и задать фильтр поиска, содержащий условие (IsDeleted-TRUE). Поиск захороненных объектов разрешен только членам административных групп. Смотрите также Документ MSDN Retrieving Deleted Objects. 16.17. Восстановление удаленных объектов Проблема Требуется восстановить в Active Directory удаленные объекты. Решение1 С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP 2. Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя контроллера домена (или оставьте это поле пустым — в таком случае связь будет установлена без участия сервера) 4 В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать) 6 Введите имя и пароль пользователя, имеющего право восстанавливать удаленные объекты (по умолчанию это можно делать только администраторам домена). 7. Щелкните на кнопке ОК. 8 Выполните команду Options ► Controls (Параметры > Управляющие объекты). 9. В Windows Server 2003 выберите из списка Load Predefined (Загрузить сущест- вующий) управляющий объект Return Deleted Objects (Вернуть удаленные объекты). В Windows 2000 введите в поле Object Identifier (Идентификатор объек- та) значение 1 2.840.113556.1.4 417 и щелкните на кнопке Checkin (Подтвержде- ние). 10. Щелкните на кнопке ОК. И. Выполните команду Browse ► Modify (Поиск ► Изменить). 12. В поле DN (Отличительное имя) введите отличительное имя удаленного объек- та, который следует восстановить. 1 Данный рецепт можно использовать лишь при условии, что функциональный уровень домена соот- ветствует Windows Server 2003
эли I лава 1Ь. Архивирование и восстановление каталога, удаленные ооъекты 13. В поле Attribute (Атрибут) введите значение distinguishedName. 14. В поле Values (Значения) введите исходное отличительное имя объекта. 15. В поле со списком Operation (Операция) выберите операцию Replace (Замена) и щелкните на кнопке Enter (Ввод). 16. В поле Attribute (Атрибут) введите значение isDeleted. 17. Удалите текст из поля Values (Значения). 18. В поле со списком Operation (Операция) выберите операцию Delete (Удаление). 19. Щелкните на кнопке Enter (Ввод). 20. Если нужно, добавьте обязательные атрибуты: в поле Attribute (Атрибут) введите <обязательный_атрибут>, в поле Values (Значения) — <значение_обязательного_атри- бута>, а в поле со списком Operation (Операция) выберите операцию Add (До- бавление). 21. Установите флажок Extended (Расширенный). 22. Щелкните на кнопке Run (Выполнить), и информация о результатах восста- новления будет выведена на правой панели. Комментарий Windows Server 2003 позволяет производить восстановление удаленных объек- тов, время захоронения которых еще не истекло. Эта операция является альтер- нативой аутентифицированному восстановлению случайно удаленных объектов из резервной копии базы данных каталога. Но поскольку захороненный объект содержит лишь часть атрибутов исходного (см. табл. 16.1), объект восстанавлива- ется не полностью, что, конечно же, очень нежелательно. Для того чтобы восстановить захороненный объект, необходимо выполнить такие действия. 1. Выберите управляющий объект LDAP с именем Return Deleted Objects, OID которого равен 1.2.840.113556.1.4.417. 2. Удалите из указанного объекта атрибут isDeleted (этого нельзя будет сделать, просто присвоив ему значение FALSE). 3. В атрибут distinguishedName запишите новое имя восстановленного объекта. 4. Создайте заново и заполните все обязательные атрибуты. Все это должно быть сделано в течение одной операции LDAP. Восстановив объект, вы сможете создать и повторно заполнить его необяза- тельные атрибуты. По умолчанию восстанавливать удаленные объекты разрешается только членам административных групп. Однако функции управления удаленны- ми объектами можно делегировать другому пользователю, предоставив ему или группе, в которую он входит, расширенное разрешение Reanimate Tombstone (Вос- становление захороненных объектов). Кроме того, этому пользователю потребуется право на изменение атрибутов объекта и создание дочерних объектов в контейнере, куда будет восстановлен объект.
lb. 1b. изменение времени захоронения объектов ВНИМАНИЕ-------------------------------------------------------------------- Разрешение на восстановление объектов следует предоставлять продуманно, поскольку обладаю- щий им пользователь может восстановить объект user, задать его пароль и войти под его именем в систему. В результате этот пользователь получит все разрешения, которые были предоставлены данной учетной записи. Смотрите также Из рецепта 16.16 вы узнаете, как найти удаленные объекты. Рекомендуем обра- титься и к документу MSDN: Restoring Deleted Objects. 16.18. Изменение времени захоронения объектов Проблема Требуется изменить заданное по умолчанию время захоронения объектов. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit 2. На левой панели последовательно откройте контейнеры cn=Configuration ► сп= Services ► cn=Windows NT. 3. Щелкните правой кнопкой мыши на элементе cn-D1 rectory Service и выберите в открывшемся контекстном меню команду Properties (Свойства). 4. Присвойте атрибуту tombstoneLifetime значение, определяющее количество дней, в течение которого захороненные объекты будут оставаться в Active Directory (по умолчанию — 60 дней). 5. Щелкните на кнопке ОК. С помощью интерфейса командной строки Создайте LDIF-файл с именем change_tombstone_lifetime.ldf и следующим содер- жимым: dn: cn-Directory Service.cn-Windows NT.cn=Services.cn-Configuration.<корневое_ОИ_леса> changetype: modify repl ace: tombstoneLi fetime tombstoneLIfetime: <количество_рней> Затем выполните такую команду: > Idifde -v -1 -f change_tombstone_lifet1me.ldf С помощью сценария на языке VBScript ' Этот код изменяет время захоронения объектов 1 — SCRIPT CONFIGURATION —
532 Глава 16. Архивирование и восстановление каталога, удаленные объекты intTombstoneLifetime - <количество_дней> * — END CONFIGURATION — set objRootDSE - GetObject(“LOAP://RootDSE") set objDSCont - GetObject("LDAP://cn-Directory Service.cn-Windows NT." & _ "cn-Services." & objRootDSE.Get!"configurationNamingContext") ) objDSCont.Put "tombstoneLifetime". intTombstoneLifetime objDSCont Setinfo WScript Echo "Successfully set the tombstone lifetime to " & _ intTombstoneLi fetime Комментарий Рассматриваемое свойство — заданное по умолчанию время захоронения объек- тов — не рекомендуется изменять без явной необходимости. В результате уменьшения времени захоронения объектов уменьшается и оптимальный период архивации данных Active Directory Подробнее о захороненных объектах и об их связи с вос- становлением Active Directory из резервной копии рассказывается в рецепте 16.16. Смотрите также В рецепте 16.13 речь идет о процессе сборки мусора. Кроме того, рекомендуем об- ратиться к документам MS КВ 198793 (The Active Directory Database Garbage Collection Process), MS KB 216993 (Backup of the Active Directory Has 60-Day Useful Life) и MS KB 314282 (Lingering Objects May Remain After You Bring an Out-of Date Global Catalog Server Back Online).
17 Разделы приложений 17.0. Введение На каждом контроллере домена каталог Active Directory содержит по три предо- пределенных раздела и, соответственно, три контекста именования. Первый из них, раздел конфигурации, реплицируется на все контроллеры домена в лесу и содержит общую для всего леса информацию, в частности сведения о тополо- гии сети и политиках запроса LDAP. Раздел схемы также реплицируется на все контроллеры домена в лесу и содержит информацию, общую для всего леса - объекты схемы, определяющие, как хранятся и как структурированы данные Active Directory. Третий раздел, раздел домена, реплицируется на все контроллеры в пределах домена. В Windows Server 2003 введен новый тип раздела, получивший название раз дел приложений. Для него обычно устанавливаются контроллеры домена на кото- рые реплицируются его данные. Это дает возможность администраторам прояв- лять большую гибкость при хранении и репликации данных Active Directory. Если некоторое подмножество объектов используется только на двух сайтах, мож- но создать раздел приложения, который будет реплицироваться на контроллеры домена этих сайтов. ПРИМЕЧАНИЕ--------------------------------------------------------- Поскольку разделы приложений появились лишь в Windows Server 2003, материал данной главы ка- сается только тех котроллеров домена, которые работают под управлением этой операционной сис- темы. Контроллеры домена Windows 2000 не могут содержать разделов приложений. Анатомия раздела приложений Разделы приложений подобно доменам представлены в Active Directory объектами domainDNS и crossRef, расположенными в контейнере Partitions раздела конфигурации Именуются они так же, как домены, и используются для самых разных целей Скажем, вы можете создать раздел приложений, для которого будет использо- ваться текущее пространство имен леса. Например, в лесу railencorp com (dc=ral - 1encorp.dc=com) несложно создать раздел приложений apps.rallencorp.com (dc=ap- ps,dc=ral 1 encorp.dc’com). А можно воспользоваться другим именем, создав новое дерево именования, предположим apps.local (dc-apps.dc-local). Разделы прило- жений нередко вкладываются один в другой. Важнейшие атрибуты объектов domainDNS и crossRef, относящиеся к разделам приложений, описаны в табл. 17.1 и 17.2.
534 Глава 17. Разделы приложений Таблица 17.1. Атрибуты объекта domainDNS Атрибут Описание de instanceType Относительное отличительное имя раздела приложений При создании раздела приложений этому атрибуту следует присвоить значение 5. См. также рецепт 17.1 msDs-masteredBy Список отличительных имен объектов nTDSDSA, представляющих контроллеры домена, на которые реплицируется данный раздел приложений. См. также рецепт 17.4 Таблица 17.2. Атрибуты объекта crossRef Атрибут Описание СП Относительное отличительное имя объекта crossRef. Как правило, этот атрибут содержит GUID раздела приложений dnsRoot msDS-NC-Rep!1са-Locations Полное DNS-имя раздела приложений Список отличительных имен объектов nTDSDSA, представляющих контроллеры домена, на которые реплицируется данный раздел приложений. См. также рецепт 17.4 msDS-SDReferenceDomain Домен, используемый для преобразования дескриптора безопасности. См. также рецепт 17.8 nCName Отличительное имя объекта domainDNS данного раздела приложений systemFlags Битовый флаг, указывающий, представляет ли данный объект crossRef приложение. См. также рецепт 17.2 17.1. Создание и удаление раздела приложений Проблема Требуется создать или удалить раздел приложений. Разделы приложений создают в тех случаях, когда данные должны реплицироваться на определенную группу контроллеров домена. Решение С помощью графического пользовательского интерфейса Для создания раздела приложения выполните следующие действия. 1. Откройте редактор ADSI Edit. 2. Подключитесь к контроллеру домена, для которого новый раздел приложе- ний будет дочерним.
17.1. Создание и удаление раздела приложений 535 3. На левой панели щелкните правой кнопкой мыши на имени домена и выбери- те в открывшемся контекстном меню команду New ► Object (Создать ► Объект). 4. Выберите объект domainDNS и щелкните на кнопке Next (Далее). 5. В поле Value (Значение) введите имя раздела приложений и щелкните на кнопке Next (Далее). 6. Щелкните на кнопке More Attributes (Дополнительные атрибуты). 7. Вам будет предложено указать, какие свойства вы хотите просмотреть. Уста- новите переключатель в положение Both (Все). 8. Выберите атрибут i nstanceType. 9. В поле Edit Attribute (Отредактируйте значение атрибута) введите значение 5 и щелкните на кнопке Set (Установить). 10. Щелкните на кнопке ОК. И. Щелкните на кнопке Finish (Готово). Удаление раздела приложения выполняется следующим образом. 1. Откройте редактор ADSI Edit. 2. Подключитесь к разделу конфигурации леса, в котором находится раздел при- ложений, если он не представлен на левой панели. 3. Разверните раздел конфигурации, щелкните на контейнере Partitions (Разделы). 4. На правой панели щелкните правой кнопкой мыши на объекте crossRef, пред- ставляющем раздел приложений, и выберите в открывшемся контекстном меню команду Delete (Удалить). 5. Щелкните на кнопке Yes (Да), чтобы подтвердить необходимость выполне- ния операции. С помощью интерфейса командной строки Приведенная ниже команда создает раздел приложений на контроллере домена: > ntdsutil "dom man" conn "co to se <ямя_контроллера_ромена>" q "create nc <0И_раздела_приложений> NULL’ q q Следующая команда удаляет раздел приложений: > ntdsutil "dom man" conn "co to se <имя_колтроллера_домена>’' q "delete nc <полное_имя_узла_раздела_приложений>" q q С помощью сценария на языке VBScript * Этот код создает раздел приложений в корневой папке ' используемого по умолчанию леса ’ .... SCRIPT CONFIGURATION ---- strAppPart - ”<0И_раздела_приложений>" ' Отличительное имя раздела приложений strServer - ’<иня_контроллера_донена>" ' DNS-имя контроллера домена, на котором расположен ' раздел приложений strDescr - "<описание>~ ' Текстовое описание раздела приложений ’ ....- END CONFIGURATION ------ set objRootDSE - GetObjectCLDAP://" & strServer & "/RootDSE") set objLDAP » GetObjectCLDAP://" & strServer &“/"&_ objRootDSE.Get("rootDomainNamingContext") ) set objAppPart - objLDAP.CreateCdomainDNS", "de-" & strAppPart) objAppPart.Put "instancetype". 5
536 Глава 17. Разделы приложений objAppPart.Put “description". strDescr objAppPart SetInfo WScript.Echo "Created application partition: " & strAppPart Этот код удаляет заданный раздел приложений ’ -..... SCRIPT CONFIGURATION ------ strAppPart - "<ОИ-раздела приложений^ ' Отличительное имя раздела приложений • ------ ENO CONFIGURATION --------- set objRootDSE - GetObject("LDAP.//RootDSE") strBase = "«LDAP-./Zcn-Partitions.” & _ objRootDSE.Get("ConfigurationNam1ngContext") & strFilter - "(&(objectcategory=crossRef)(nCName-" & _ strAppPart & strAttrs - "cn,distinguishedName;" strScope = "onelevel" set objConn - CreateObjectCADODB.Connection") objConn.Provider - “ADsDSOObject" objConn.Open "Active Directory Provider” set objRS - objConn.Execute(strBase & strFilter & strAttrs & strScope) if objRS.RecordCount <> 1 then WScript.Echo "Old not find a match for " & strAppPart else objRS.MoveLast set objAppPart - GetObjectC"LDAP://“ & _ objRS.FieldsT"distlnguishedName").Vaiue ) objAppPart DeleteObject(O) Wscrlpt.Echo "Deleted " & objRS.FieldsC'distinguishedName").Value end if Комментарий Для того чтобы создать раздел приложений, нужно создать объект domainDNS, ко- торый будет служить его корневым контейнером. Соответствующий объект crossRef автоматически создается в контейнере Partitions (Разделы) раздела конфигурации. Для удаления раздела приложений достаточно удалить только объект crossRef, а объект domainDNS будет удален автоматически. В результате удаления раздела приложений удаляются и все содержащиеся в нем объекты. Захороненные объек- ты для них не создаются, равно как и для самого раздела приложений. Смотрите также Документы MS КВ 322669 (HOW ТО: Manage the Application Directory Partition and Replicas in Windows Server 2003), MSDN: Creating an Application Directory Partition и MSDN: Deleting an Application Directory Partition. 17.2. Поиск разделов приложений в лесу Проблема Требуется найти разделы приложений, имеющиеся в заданном лесу.
17.2. Поиск разделов приложений в лесу 537 Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя контроллера домена. 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя, после чего щелкните на кнопке ОК. 7. Выполните команду Browse ► Search (Поиск ► Найти). 8. В поле BaseDN (Отличительное имя базы) введите отличительное имя кон- тейнера Partitions (например: cn-partitions,cn-configuration,dc=rallencorp, dc-com). 9. В поле Filter (Фильтр) введите спецификацию фильтра: (&(objectcategory- crossRef) (systemFl ags:1.2.840.113556.1.4.803-5)). 10. В области Scope (Область поиска) установите переключатель в положение One Level (Один уровень) и щелкните на кнопке Options (Параметры). И. В поле Attributes (Атрибуты) введите dnsRoot и щелкните на кнопке ОК. 12. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки Следующая команда используется для поиска всех разделов приложений в лесу: > dsquery * cn-partitions,cn-configuration.<ОИ_леса> -filter "(&(objectcategory-cros sRef)(systemFlags:1.2.840.113556.1.4.803:=5))" -scope onelevel -attr dnsRoot С помощью сценария на языке VBScript ’ Этот код выводит список разделов приложений. ' входящих в состав заданного леса set objRootDSE - GetObjectСLDAP://RootDSE") strBase - "<L0AP://cn*=Part1tions." & _ objRootDSE.Get("Configurat1onNamingContext") & “>:" strFilter - "(&(objectcategory-crossRef)n & _ "(systemFlags:!.2.B40.113556.1.4.803:-5)):" strAttrs - “cn.ncName:" strScope - "onelevel" set objConn - Create0bject("A000B.Connect!on") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS - objConn.Execute(strBase & strFilter & strAttrs & strScope) objRS.MoveFirst while not objRS.EOF Mscri pt.Echo obj RS.F1elds(*nCName").Vaiue objRS.MoveNext wend
538 Глава 17. Разделы приложений Комментарий При необходимости найти все разделы приложений в лесу можно запросить список объектов crossRef контейнера Partitions, у которых в атрибуте systemFlags уста- новлены биты 0101 (десятичное значение 5). Для этой цели используется пораз- рядный фильтр с оператором AND. О том, как выполняется поиск с применением поразрядных фильтров, подробнее рассказывается в рецепте 4.9 (глава 4) Можно использовать и более короткое выражение фильтрации, удалив из него OID и задав условие systemFlags=5. В тестовом лесу, применяемом в решении с помощью сценария на языке VBScript, результат получается таким же, но по- скольку данный атрибут содержит набор флагов, нет гарантий, что в каком-нибудь разделе приложений в нем не окажется установленным еще один бит — в таком случае значение атрибута systemFl ags не будет равным 5. Во всех представленных выше решениях для каждого раздела приложений выводится значение атрибута dnsRoot — DNS-имя раздела приложений. Можно также вывести значение атрибута nCName, в котором будет храниться отличи- тельное имя раздела приложении 17.3. Добавление и удаление сервера репликации Проблема Требуется добавить или удалить сервер репликации предназначенный для хра- нения раздела приложений. После создания нового раздела приложений нужно задать для него хотя бы один сервер репликации — на тот случай, если сервер, на котором он находится, выйдет из строя. Решение С помощью интерфейса командной строки Команда приведенная ниже, назначает для раздела приложений новый сервер репликации: > ntdsutil "dom man" conn “co to se <имя_контроллера_АОнена>’' q "add nc replica <ОИ_раздела_прилохений> <иня_контроллера_ромена>“ q q Следующая команда удаляет сервер репликации, назначенный разделу при- ложений: > ntdsutil "dom man" conn "co to se <иня_контроллера_донена>" q "remove nc replica <ОИ_раздела_приложений> <имя коутроллера_домена>~ q q С помощью сценария на языке VBScript Этот код назначает или удаляет сервер репликации для заданного раздела приложений — - SCRIPT CONFIGURATION- strAppPart - "<лолное_имя_узла_раздела_прилохений>" ' DNS имя раздела приложений
17.3. Добавление и удаление сервера репликации 539 ’ Имя хоста того сервера, который будет использоваться для репликации ' раздела приложений. Оно должно соответствовать обычному имени объекта ' server, представляющего контроллер домена strServer - *<иня-КонтроллераjjoHeud^ ' Например: dcOl * Присвойте этой переменной значение True, чтобы назначить сервер * новым сервером репликации, или значение False, чтобы отменить его назначение boolAdd - True ’ ...... ENO CONFIGURATION ........ ‘ Константы из перечисления ADS_PROPERTY_OPERATION_ENUM const ADS_PROPERTY_APPEND - 3 const ADS_PROPERTY_OELETE - 4 set objRootDSE - GetObject("LDAP://RootDSE”) ' Поиск объекта NTDS Settings, связанного с сервером strBase - "<LDAP://сп-Sites." & _ objRootDSE.Get("Conf1gurationNamingContext") & strFilter - "(&(objectcategory-server)(cn-" & strServer & ")):“ strAttrs - "cn.distinguishedName:"- strScope - "subtree" set objConn = CreateObjectCADODB.Connect!on") objConn.Provider = "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope) if objRS.RecordCount о 1 then WScript.Echo "Did not find a match for server " & strServer WScript.Quit else objRS.MoveLast strServerDN - "cn-NTDS Settings." & _ objRS.Fi elds(”di st1 nguTshedName").Vaiue ' Необходимо убедиться, что объект NTDS Settings существует set objNTDSDSA - GetObject("LDAP://” & strServerDN) Wscript.Echo "Found server: " WScrlpt.Echo strServerDN Wscript.Echo end if ' Поиск объекта crossRef раздела приложений strBase - "<LDAP://cn=Partitions," & _ objRootDSE.Get("Conf1gurati onNamingContext") & ">:" strFilter - "(&(objectcategory-crossRef)" & _ "(dnsRoot-” & strAppPart & ")):" strAttrs - "cn.distinguishedName;" strScope - "onelevel" set objRS - objConn.ExecuteCstrBase & strFilter & strAttrs & strScope) if objRS.RecordCount о 1 then WScript.Echo "Did not find a match for application partition " & _ strAppPart WScrlpt.Quit else objRS.MoveLast set objAppPart GetObject("LDAP://" & _ objRS.Fields("di sti nguTshedName”).Vaiue ) Wscript.Echo ’’Found app partition: " WScript.Echo objRS.Fields("di stingui shedName").Vaiue
540 Глава 17. Разделы приложений WScript.Echo end if В завершение добавляется или удаляется сервер репликации if boolAdd - TRUE then objAppPart.PutEx ADS_PROPERTY_APPEND. "msOS-NC-Replica-Locations". _ Array(strServerDN) objAppPart.Setinfo WScrlpt.Echo "Added server to replica set" else objAppPart.PutEx ADS_PROPERTY_DELETE. "msDS-NC-Replica-Locatlons". Array(strServerDN) objAppPart.Setinfo WScrlpt.Echo "Removed server from replica set" end if Комментарий Первоначально новый раздел приложений располагается только на одном кон- троллере домена — на том, где он был создан. Для хранения его реплик можно ис- пользовать любые другие контроллеры домена, работающие под управлением . Windows Server 2003. Список серверов репликации, связанных с разделом прило- 4 жений, хранится в атрибуте msDS-NC-Replica-Locatlons его объекта crossRef. Этот атрибут содержит отличительные имена данных серверов. Для того чтобы назна- чить разделу приложений еще один сервер репликации, нужно добавить в ука- занный атрибут отличительное имя сервера, а для того чтобы отменить его назна- чение — удалить его имя из этого атрибута. При изменении значения атрибута msDS-NC-Replica-Locations запускается средство проверки согласованности зна- ний, которое создает на заданном контроллере домена реплику раздела приложе- ний или удаляет ее оттуда. В случае понижения роли контроллера домена до роли рядового сервера его имя автоматически удаляется из атрибутов msDS-NC-Re- plica-Locatlons всех разделов приложений, реплики которых он содержал. Смотрите также В рецепте 17.4 рассказывается о поиске серверов репликации раздела приложений. Рекомендуем ознакомиться и с документом MS КВ 322669 (HOW ТО: Manage the Application Directory Partition and Replicas in Windows Server 2003). 17.4. Поиск серверов репликации раздела приложений Проблема Требуется найти серверы репликации заданного раздела приложений. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit.
17.4. Поиск серверов репликации раздела приложений 541 2 Подключитесь к разделу конфигурации леса, в котором находится раздел при- ложений, если он не представлен на левой панели. 3. Разверните раздел конфигурации, щелкните на контейнере Partitions (Разделы). 4. На правой панели щелкните правой кнопкой мыши на объекте crossRef, пред- ставляющем раздел приложений, и выберите в открывшемся контекстном меню команду Properties (Свойства). 5. В списке Attributes (Атрибуты) выберите атрибут msDS-NC-Replica-Locations. С помощью интерфейса командной строки > ntdsutil "dom man" conn "co to se <иня_контроллера_донена>'' q "list nc replicas <0И-раздела_приложений>' q q С помощью сценария на языке VBScript ’ Этот код выводит отличительные имена объектов nTDSDSA всех контроллеров домена. ' которые являются серверами реплик заданного раздела приложений ------- SCRIPT CONFIGURATION ---- * Полное DNS-иня раздела приложений strAppPart - "<лолное_имя_узла_раздепа_приложений>‘ ' Например: apps.rallencorp.com ' ..... END CONFIGURATION ------- set objRootDSE - GetObjectCLDAP://RootDSE") strBase - "<LDAP//cn-Partitions.H & _ objRootDSE.Get!"ConfigurationNamingContext") & strFilter - ”(&(objectcategory-crossRef)(dnsRoot-" & strAppPart & strAttrs - "msDS-NC-Replica-Locations;" strScope - "onelevel" set objConn = CreateObjectCADODB. Connection") objConn.Provider = "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS - objConn Execute!strBase & strFilter & strAttrs & strScope) If objRS.RecordCount о 1 then WScrlpt.Echo ”D1d not find a match for application partition " & _ strAppPart WScript.Quit el se objRS.MoveLast if objRS.Fiel ds("msDS-NC-Replica-Locations”).Properties.Count > 0 then Wscript.Echo "There are no replica servers for app partition ” & _ strAppPart else Wscript.Echo “Replica servers for app partition " & strAppPart & for each strNTDS in objRS.F1elds("msDS-NC-Replica-Locat1ons").Value WScrlpt.Echo " " & strNTDS next end if end If Комментарий Список серверов репликации раздела приложений хранится в многозначном атрибуте msOS-NC-Replica-Locations объекта crossRef, связанного с данным разделом. Этот объект расположен в контейнере Partitions раздела конфигурации.
542 Глава 17. Разделы приложений Смотрите также В рецепте 17.3 речь идет о добавлении и удалении серверов репликации. 17.5. Поиск разделов приложений, хранящихся на заданном сервере Проблема Требуется найти разделы приложений, реплики которых хранятся на указанном сервере. Например, прежде чем превратить контроллер домена в рядовой сервер, следует проверить, не хранятся ли на нем реплики раздела приложений, и, обна- ружив таковые, назначить вместо него другой сервер репликации. Решение С помощью графического пользовательского интерфейса 1. Запустите служебную программу LDP. 2. Выполните команду Connection ► Connect (Подключение ► Подключиться). 3. В поле Server (Сервер) введите имя контроллера домена. 4. В поле Port (Порт) введите значение 389 и щелкните на кнопке ОК. 5. Выполните команду Connection ► Bind (Подключение ► Связать). 6. Введите имя и пароль пользователя, после чего щелкните на кнопке ОК. 7. Выполните команду Browse ► Search (Поиск ► Найти). 8. В поле BaseDN (Отличительное имя базы) введите отличительное имя кон- тейнера Partitions (например: cn-partitions.cn=configuration.dc-ra]]encorp. dc-com). 9. В поле Filter (Фильтр) введите следующую спецификацию фильтра: (&(objectcategory-crossRef)(systemFlags:1.2.840.113556.1.4.803:-5) (msDS-NC-Replica-Locations=cn-NTDS Settings.сп^<иня_контроппера_донена>. cn=servers.сп=<имя_сайга>.cn-sites, cn=configuration.<ОИ_леса>)) 10. В области Scope (Область поиска) установите переключатель в положение One Level (Один уровень) и щелкните на кнопке Options (Параметры). И. В поле Attributes (Атрибуты) введите dnsRoot и щелкните на кнопке ОК. 12. Щелкните на кнопке Run (Выполнить). С помощью интерфейса командной строки Для поиска всех разделов приложений, хранящихся на заданном контроллере до- мена, используется приведенная ниже команда. Для ее выполнения нужно знать отличительное имя корневого домена леса (<0И_леса>), обычное имя объекта ser- ver контроллера домена (<имя^онтроллера_домена>) и обычное имя объекта site того сайта, в состав которого входит сервер (<имя_сайта>).
17.5. Поиск разделов приложений, хранящихся на заданном сервере 543 > dsquery * "cn-partitions.cn-configuration.<0H_/7eca>" -scope onelevel -attr dnsRoot -filter "(&(objectcategory-crossRef)(systemFlags.1 2.840.113556.1.4.803:-5) (msDS-NC-Replica-Locatlons-cn-NTDS Settings.сп“<имя_контроллераj70«e//a>.cn-servers. сп-<иня_сайта>.cn-sites. cn-configuration.<ОИ_леса>)У С помощью сценария на языке VBScript ’ Этот код выводит список разделов приложении, хранящихся на заданной сервере • SCRIPT CONFIGURATION -..... * Пня хоста сервера Оно должно соответствовать обычному ' инени объекта server, представляющего контроллер домена strServer - “<имя_контроллера_домена>а ' Например: dcOl ’ ......-END CONFIGURATION---------- ' Поиск объекта NTDS Settings, связанного с сервером set objRootDSE - GetObjectC"LDAP://RootDSE") strBase - "<LDAP://cn-Sites." & _ objRootDSE Get("ConfigurationNamingContext") & ">," strFilter - "(&(objectcategory-server)(cn-* & strServer & "));’ strAttrs - "cn,distinguishedName." strScope - "subtree" set objConn - CreateObject("ADOOB.Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS - objConn ExecuteCstrBase & strFilter & strAttrs & strScope) If objRS.RecordCount о 1 then WScript.Echo "Did not find a match for server " & strServer WScrlpt Quit else objRS.MoveLast strServerDN - "cn-NTDS Settings " & _ objRS.Fi el ds("di st i ngui shedName").Value Wscript.Echo "Found server object: " WScript.Echo strServerDN Wscript Echo end if ' Поиск объектов crossRef хранящихся на сервере strBase - "<LDAP://cn-Partitions." & _ objRootDSE.Get("ConfigurationNamingContext") & ">;" strFilter - "(&(objectcategory-crossRef)" & _ "(msDS-NC-Replica-Locatlons-" & strServerDN & "));" strAttrs - "nCName:" strScope - "onelevel" set objRS - objConn ExecuteCstrBase & strFilter & strAttrs & strScope) if objRS.RecordCount - 0 then WScrlpt Echo "Server " & strServer & " does not host any application partitions" WScript.Quit else Wscript.Echo "App partitions hosted by server " & strServer & ": ° objRS.MoveFirst while not objRS EOF
544 Глава 17. Разделы приложений WScrlpt.Echo " " & objRS F1 el dsC'nCName’1) .Value objRS.MoveNext wend end if Комментарий Как уже было сказано в рецептах 17.3 и 17.4, атрибут msDS-NC-Replica-Locations объекта crossRef содержит список серверов репликации, связанных с определенным разделом приложений. В каждом из приведенных выше решений выполняется запрос с использованием этого атрибута. Решения с применением графического пользовательского интерфейса и командной строки требуют указать отличительное имя объекта nTDSDSA, представляющего контроллер домена. В сценарии на языке VBScript отличительное имя этого объекта определяется динамически, на основании имени сервера. Смотрите также В рецепте 17 4 рассказывается, как найти серверы репликации, назначенные за- данному разделу приложений. 17.6. Проверка на сервере настроек раздела приложений Проблема Требуется проверить, правильно ли на сервере установлен раздел приложений. После того как контроллер домена будет назначен сервером репликации раздела приложений, данные этого раздела должны быть полностью реплицированы на контроллер. Только при таком условии он снова сможет выполнять роль кон- троллера домена. Решение С помощью интерфейса командной строки Следующая команда позволяет определить, правильно ли установлен раздел приложений на заданном контроллере домена: > dcdiag /test:checksdref dem /test:verifyreplicas Ztest:crossrefval1dation /s <иня_контроллера_доменд> ПРИМЕЧАНИЕ---------------------------------------------------------- Проверка для Windows Server 2003 может быть выполнена лишь с помощью утилиты dcdiag. Комментарий Определить, правильно ли установлен на сервере раздел приложений и не суще- ствует ли каких-нибудь проблем, вам помогут тесты CheckDSRefDom, Veri fyRepl icas
17.7. Определение времени задержки уведомления о репликации 545 и CrossRefValidation, поддерживаемые утилитой dcdiag. Вот как они описываются в справке, выводимой утилитой dcdiag: О CrossRefValidation — поиск недействительных перекрестных ссылок; О CheckSORefDorn — проверка того, для всех ли разделов приложений заданы домены ссылок дескрипторов безопасности, О VerifyReplicas — проверка корректности установки разделов приложений на всех серверах репликации. Убедиться в том, что определенный раздел приложений установлен на задан- ном контроллере домена, можно и другим способом, а именно путем проверки значения атрибута msDS-HasInstantiatedNCs объекта nTDSDSA, представляющего данный сервер Этот атрибут имеет синтаксис DN with Binary и содержит список всех раз- делов приложений, успешно установленных на сервере. К сожалению, такие средства, как ADSI Edit и dsquery, не способны правильно интерпретировать двоич- ные атрибуты, но значение атрибута msDS-HasInstantiatedNCs можно проверить с по- мощью программы LDP. 17.7. Определение времени задержки уведомления о репликации Проблема С настройкой разделов приложений связаны два параметра репликации, опреде- ляющие продолжительность первой и последующих задержек уведомлений о реп- ликации после внесения изменения в раздел. (Эти параметры воздействуют на реп- ликацию любых разделов, а не только разделов приложений.) Первая задержка - это время, в течение которого контроллер домена находится в состоянии ожида- ния, прежде чем уведомить своего первого партнера по репликации о наличии изменений. Продолжительность последующих задержек одинакова и определяется временем, спустя которое контроллер домена уведомляет следующего партнера по репликации после уведомления предыдущего. Настройка указанных параметров позволяет ускорить или замедлить репликацию. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2 Подключитесь к разделу конфигурации леса, в котором находится раздел при- ложений, если он не представлен на левой панели. 3. Откройте раздел конфигурации, а в нем — контейнер Partitions (Разделы). 4. На правой панели щелкните правой кнопкой мыши на объекте crossRef, пред- ставляющем раздел приложений, и выберите в открывшемся контекстном меню команду Properties (Свойства).
546 Глава 17. Разделы приложений 5. Присвойте атрибутам msDS-Replication-Notify-First-DSA-Oelay и msOS-Replica- tion-Notify-Subsequent-DSA-Delay значения, определяющие продолжительность каждой задержки в секундах (см. раздел комментария) 6. Щелкните на кнопке ОК. С помощью интерфейса командной строки В Windows Server 2003 установить время задержки репликации можно с помощью утилиты repadmin: > repadmin /notifyopt <ОИ_раздела_лриложений> /first:<лервая_задержка_в_секукдах> /subs: <следуютая_задержка_в_секундах> В Windows 2000 создайте LDIF-файл с таким содержимым: dn: <OH_o6beKTa_CrossRefDN_раздела_лриложений> changetype modify repl асе: msDS-Repl1cati on-Noti fy-Fi rst-OSA-Del ay msDS-Repl1cati on-Notify-Fi rst-DSA-Delay: <лервая_задержка_в_секундах> replace: msDS-Replication-Notify-Subsequent-DSA-Delay msDS-Replication-Noti fy-Subsequent-DSA-Delay: <следующая_задержка_в_секундах> Затем выполните приведенную ниже команду (предполагается, что создан- ный файл имеет имя change_replication_delays.ldf): > Idifde -v -i -f change_replication_delays.ldf С помощью сценария на языке VBScript ’ Этот код устанавливает задержки репликации для раздела приложений ' -.... SCRIPT CONFIGURATION -..... strAppPartDN - "ОИ_раздела_приложений>" ' Например: dc»apps.dc-ra11encorp.dc=com intFirstDelay <лервая_задержка_в_сецундах> IntNextDelay - следующая_задержка_в_секундах> 1 ----- END CONFIGURATION --------- " set objRootDSE - GetObjectCLDAP://RootDSE") strBase - "<LOAP://cn-Partitions." 8 _ objRootDSE.Get("ConfigurationNamingContext") & strFilter - ”(8(objectcategory=crossRef)(nCName”" & strAppPartDN & "));" strAttrs - “cn.distinguishedName;" strScope • “onelevel" set objConn - CreateObjectCADODB.Connect!on”) objConn.Provider - "ADsDSOObject" objConn.Open “Active Directory Provider" set objRS - objConn.Execute(strBase & strFilter & strAttrs & strScope) if objRS.RecordCount о 1 then WScrlpt.Echo "Did not find a match for " & strAppPartDN else objRS.MoveLast set objAppPart - GetObjectCLDAP://" & objRS. Fi el ds Cdi sti ngui shedName"). Vai ue ) objAppPart.Put "msDS-Replication-Notify-First-DSA-Delay". intFirstDelay objAppPart.Put "msDS-Replication-Notify-Subsequent-DSA-Delay". intNextDelay objAppPart.Setinfo
17.8. Назначение домена ссыпок дескрипторов безопасности 547 Wscript Echo "Modified " & objRS.FleldsCdistlnguishedNare").Value end if Комментарий Значения параметров, определяющих время задержки репликации, хранятся в атрибутах msDS-Replication-Notify-First-DSA-Delay и msDS-Replication-Notify-Sub- sequent-DSA-Delay объекта crossRef, представляющего раздел приложений (этот объект находится в контейнере Partitions раздела конфигурации). Время задерж- ки задается в секундах. По умолчанию время первой и последующих задержек для раздела приложений составляет 60 с. 17.8. Назначение домена ссылок дескрипторов безопасности для раздела приложений Проблема При создании объекта в Active Directory ему назначается используемый по умол- чанию дескриптор безопасности, заданный в схеме для класса этого объекта. В дескрипторе могут содержаться ссылки на определенные группы, например на группу Domain Admins (Администраторы домена), но сам дескриптор ни с каким конкретным доменом не связан. Если новый объект создается в разделе домена, очевидно, что указанной в дескрипторе группой Domain Абли ns является группа, за- данная для этого домена. Но как быть, если объект создается в разделе приложе- ний, где не может быть группы Domain Admi ns? В этом случае для раздела приложе- ний можно определить домен ссылок дескрипторов безопасности. Такой домен задается в атрибуте msDS-SDReferenceDomain объекта crossRef раздела приложений. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit. 2. Подключитесь к разделу конфигурации леса, где находится раздел приложений, если он не представлен на левой панели. 3. Откройте раздел конфигурации, а в нем — контейнер Partitions (Разделы). 4. На правой панели щелкните правой кнопкой мыши на объекте crossRef, пред- ставляющем раздел приложений, и выберите в открывшемся контекстном меню команду Properties (Свойства). 5. В списке Attributes (Атрибуты) выберите атрибут msDS-SDReferenceDomain. 6. Присвойте указанному атрибуту отличительное имя домена, в котором будет производиться поиск ссылок дескрипторов безопасности.
548 Глава 17. Разделы приложений С помощью интерфейса командной строки > ntdsutil "dom man" conn "co to se <иня_контроллера_домена>" q "set nc ref domain <ОИ_раздела_приложений> <ОИ_домена>" q q С помощью сценария на языке VBScript ' Этот код определяет для заданного раздела приложений ' домен ссылок дескрипторов безопасности ’ ..... SCRIPT CONFIGURATION ---- ’ Отличительное имя домена ссылок дескрипторов безопасности strRefDomainDN - "<ОИ_домена>" ‘ Например: dc-emea.dc-rallencorp.dc-com ’ Полное DNS-имя раздела приложений strAppPart - "<лолное_имя_узла_раздела_приложений>" ' Например: арр.railencorp.сот • ----- END CONFIGURATION -------- set objRootDSE - GetObject!"LDAP://RootDSE") strBase - "<LDAP://cn-Partitions." & _ objRootDSE.Get("ConfigurationNam1ngContext") & strFilter «= "!&(objectcategory-crossRef)(dnsRoot-" & _ strAppPart & strAttrs - ''nCName.msDS-SDReferenceOomain.distinguishedName:" strScope - "onelevel" set objConn - CreateObject("ADODB.Connection") objConn.Provider - "ADsDSOObject" objConn.Open "Active Directory Provider" set objRS - objConn.Execute!strBase & strFilter & strAttrs & strScope) if objRS.RecordCount о 1 then WScript.Echo "Did not find a match for application partition " & _ strAppPart WScript.Quit else objRS.MoveLast WScrlpt.Echo "Current Reference Domain: “ & _ objRS.Fields("msDS-SDReferenceOomai n").Vaiue set objCrossRef - GetObject("LDAP://" & _ objRS Fields("distinguishedName").Value ) objCrossRef.Put “msDS-SDReferenceDomain". strRefDomainDN objCrossRef.SetInfo WScript.Echo "New Reference Domain: " & _ objCrossRef.Get!"msDS-SDReferenceDomai n") end if Комментарий Если не установить для раздела приложений атрибут msDS-SDReferenceDomain, по умолчанию для поиска ссылок, содержащихся в дескрипторе защиты, будет ис- пользоваться один из следующих доменов: О корневой домен леса, если раздел приложений служит корнем нового дерева; О родительский домен, если раздел приложений создан как дочерний в сущест- вующем домене; О применяемый по умолчанию домен родительского раздела приложений, если данный раздел создан как дочерний в существующем разделе приложений.
17.9. Делегирование функции управления разделом приложении 549 Смотрите также В рецепте 10.19 (глава 10) рассказывается об определении дескриптора безопас- ности для класса, а в рецепте 17.1 — 0 создании раздела приложений. Ознакомь- тесь с документом MS КВ 322669 (HOW ТО: Manage the Application Directory Partition and Replicas in Windows Server 2003). 17.9. Делегирование функций управления разделом приложений Проблема Требуется делегировать функции управления заданным разделом приложений. Решение С помощью графического пользовательского интерфейса 1. Откройте редактор ADSI Edit 2. Подключитесь к разделу конфигурации леса, где находится раздел приложений, если таковой не представлен на левой панели 3. Откройте раздел конфигурации, а в нем — контейнер Partitions (Разделы). 4. На правой панели щелкните правой кнопкой мыши на объекте crossRef, пред- ставляющем раздел приложений, и выберите в открывшемся контекстном меню команду Properties (Свойства). 5. Откройте вкладку Security (Безопасность) и щелкните на кнопке Advanced (До- полнительно). 6. В открывшемся окне щелкните на кнопке Add (Добавить). 7. Укажите пользователя или группу, которой хотите делегировать функции управления, и щелкните на кнопке ОК. 8. Откройте вкладку Properties (Свойства). 9. В области Allow (Разрешить) установите флажки Write msDS-NC-RepIica-Locations, Write msDS-SDReferenceDomain, Write msDS-Rep!ication-Notify-First-DSA-Delay и Write msDS-Replication-Notify-Subsequent-DSA-Delay, представляющие разрешения на запись соответствующих свойств объекта crossRef. 10. Щелкните на кнопке ОК. С помощью интерфейса командной строки > dsacls <0И_обьекта_сго5$Ре^аздела_приложений> /G <пользователь_или_группа>.РР'№: msDS-NC-Repli ca-Locat1ons > dsacls <ОИ_объекта_сгод5РеГ_раздела_приложений> /G <лользователь_или_грулпд>:РР'^Р; msDS-SDRe fe renceDoma1n > dsacls <ОИ_обьекта_сго5зРеР_разделд_приложений> /G <лользователь_или_группа>:Р.Р'ч(Р; msDS-Replication-Notify-First-DSA-Delay > dsacls <0И_рбъе1<та_crossRef_раздела_приложений> /G пользователь_или_групла>:РР№; msDS-Repli cat1 on-Not1fy-Subsequent-DSA-De1 ay
Глава 17. Разделы приложений С помощью сценария на языке VBScript ' Этот сценарий делегирует функции управления четырьмя ключевыми атрибутами ' раздела приложений указанному пользователю или группе • ----- SCRIPT CONFIGURATION ------ ’ Полное DNS-иня раздела приложений strAppPart - ”<лолное_иня_узла_раздела_приложений>" ' Например: apps rallencorp.com ’ Пользователь или группа, которой делегируются функции управления strUser - "<пользователь_или_группд>" Например joe@rallencorp com or RALLENCORP\joe ' ----- END CONFIGURATION --------- ' Константы WWWHOMffff ’ Из перечисления ADS_ACETYPE_ENUM Const ADS_ACETYPE_ACCESS ALLOWED - &hO Const ADS_ACETYPE_ACCESS3LL0WED_0BJECT - &h5 ' Из перечисления ADS_FLAGTYPE_ENUM Const ADS_FLAG_OBJECT~TYPE_PRESENT - &hl ’ Из перечисления ADS_RIGHTS_ENUM Const ADS_RIGHT_DS_WRITE_PROP - &h20 Const ADS_RIGHT_DS_READ_PROP - &hlO ’ Значения атрибута schemalDGUID Const REPLICA LOCATIONS - "{97de9615-b537-46bc-ac0f-10720f39i 9f3}" Const SDREFERENCEDOMAIN - ”{4c51e316-f628 43a5-b06b-ffb695fcb4f3}’ Const NOTIFY_FIRST_DSA_DELAY - "{85abd4f4-0a89 4e49-bdec-6f35bb2562ba}“ Const NOTIFY_SUBSEQUENT_DSA_DELAY - "{d63db385-dd92-4b52-bld8-0d3ecc0e86b6}" Поиск раздела приложений set objRootDSE = GetCbjectCLDAP://RootDSE") strBase = "<LDAP://cn-Partitions.” & _ objRootDSE Get("Conf1gurationNamingContext") & *>:" strFilter = "(&(objectcategory-crossRef)(dnsRoot=" & _ strAppPart & "));’ strAttrs = "cn.distinguishedName;" strScope - "onelevel" set objConn - CreateObjectC'ADODB.Connectlon") objConn.Provider ° "ADsDSOObject" objConn.Open "Active Directory Provider" Set objRS - objConn.Execute(strBase & strFilter & strAttrs S strScope) if objRS.RecordCount о 1 then WScrlpt.Echo "Did not find a match for " & strAppPart else objRS.MoveLast set objAppPart - GetObjectCLDAP://’ & objRS. Fi el ds ("di stingui shedName"), Vai lie )
17.9. Делегирование функций управления разделом приложений 551 end if ' Создание списка контроля доступа (ACL) •.«« v ь у £ ><!>» « к "I >ццц> И н й i I aITO п w w /Гп ЛннЪ ITU <ПТТПГ 17 (Тп ТГ set objSD - objAppPart.GetC’ntSecurityDescriptor") set objDACL - objSD.DiscretionaryAcl ' Read/Write Property (чтение/запись свойства): msDS-NC-Replica-Locations set objACEl - CreateObjectCAccessControlEntry") objACEl.Trustee - strUser ObjACEl. AccessMask = ADS_RIGHTDS_WRITE_PRDP Or ADS_RIGHT_DS_READ_PROP objACEl.AceFlags - 0 ObjACEl.Flags - ADS_FLAG_OBJECT_TYPE_PRESENT objACEl.AceType - ADsZaCETYPE_ACCESS_ALLOWED_OBJECT objACEl.ObjectType - REPLICAJ.OCATIONS ' ' Read/Write Property (чтение/запись свойства): uisDS-SDReferenceDomain set objACE2 = CreateObjectCAccessControl Entry") objACE2.Trustee - strUser objACE2.AccessMask - ADS_RIGHT_DS_WRITE_PROP Or ADS_RIGHT_OS_READ_PROP objACE2.AceFlags - 0 0bjACE2.Flags - ADS_FLAG_OBJECT_TYPE_PRESENT objACE2.AceType - ADS_ACETYPE_ACCESS3LLOWED_OBJECT objACE2.ObjectType •= SDREFERENCEDOMAIN ” ' Read/Write Property (чтение/запись свойства); msDS-Replication-Notify-First-DSA-Delay set objACE3 - CreateObjectCAccessControlEntry”) objACE3.Trustee - strUser 0bjACE3.AccessMask - ADS_RIGHT_DS_WRITE_PROP Or ADS_RIGHT_DS_READ_PROP objACE3.AceFlags - 0 0bjACE3.Flags - ADS_FLAG_OBJECT_TYPE_PRESENT 0bjACE3.AceType = ADS_ACETYPE_ACCESS_ALLOW'ED_OBJECT 0bjACE3.ObjectType = NOTIFY_FIRST_DSA_DELAY ’ Read/Write Property (чтение/запись свойства): msDS-Replication-Notify-Subsequent-DSA-Delay set objACE4 - CreateObject("AccessControlEntry”) objACE4.Trustee ж strUser 0bjACE4.AccessMask = ADS_RIGHT_DS_WRITE_PROP Or ADS_RIGHT_DS_READ_PROP objACE4.AceFlags - 0 objACE4.Flags = ADS_FLAG_OBJECT_TYPE_PRESENT objACE4.AceType - ADS_ACETYPE_ACCESS_ALLOWED_OBJECT 0bjACE4.ObjectType - NOTIFY_SUBSEQUENT_OSA_DELAY objDACL.AddAce objACEl objDACL.AddAce objACE2 objDACL.AddAce objACE3 objDACL.AddAce objACE4
552 Глава 17. Разделы приложений ' Установка списка контроля доступа objSD.DIscretionaryAcl = objDACL objAppPart.Put "ntSecurityDescrlptor". objSD objAppPart.SetInfo WScrlpt.Echo 'Delegated control of " & strAppPart & " to " & strUser Комментарий Если вы хотите делегировать функции управления разделом приложений опре- деленному пользователю или группе, нужно предоставить ему разрешения на чте- ние и запись четырех ключевых атрибутов, описание которых приведено ниже: О msDS-NC-Replica-Locations — имея разрешение на запись этого атрибута, поль- зователь может назначать для раздела приложений серверы репликации (см. также рецепт 17.3); О msDS-SDReferenceDomai п — данный атрибут дает возможность назначить для раз- дела приложений домен ссылок дескрипторов безопасности (см. также ре- цепт 17.8); О msDS-Replication-Notify-First-DSA-Delay — устанавливая этот атрибут, пользо- ватель тем самым указывает время первой задержки репликации (см. рецепт 17.7); О msDS-Repl ication-Notify-Subsequent-DSA-Delay — атрибут, который позволяет ус- тановить время последующих задержек репликации (см. рецепт 17.7). Делегирование функций управления объектами из раздела приложений осу- ществляется таким же образом, как и делегирование функций управления объек- тами из раздела домена. Смотрите также Из рецепта 14.5 (глава 14) вы узнаете об особенностях делегирования функций управления объектами, из рецепта 17.3 — 0 порядке назначения и удаления серве- ров репликации раздела приложений, из рецепта 17.7 — об установке задержек ре- пликации, а из рецепта 17.8 — все о доменах ссылок дескрипторов безопасности.
18 Взаимодействие и интеграция 18.0. Введение Active Directory поддерживает несколько важных стандартов, обеспечивающих ее взаимодействие с другими службами и платформами. Одним из них является стандартный протокол доступа и управления LDAP (Lightweight Directory Ac- cess Protocol — основной протокол доступа для Active Directory), используемый всеми ведущими производителями служб каталогов. LDAP не зависит от плат- формы, благодаря чему доступ к данным Active Directory и управление этими данными можно осуществлять с различных платформ. Для разрешения имен Active Directory применяет систему доменных имен DNS, благодаря чему для поиска контроллеров домена можно использовать DNS-запросы, выполняемые с помо- щью таких утилит, как ns lookup. Кроме того, в Active Directory, как вы уже знаете, используется один из наиболее широко распространенных протоколов сетевой аутентификации Kerberos, благодаря чему даже те клиенты, на которых установ- лены отличные от Windows операционные системы, могут подключаться к Active Directory. И это еще не все стандарты, поддерживающие Active Directory. В на- стоящей главе будет показано, как осуществляется доступ к Active Directory, уп- равление ее данными и интеграция с другими системами способами, которые обычно не документируются. 18.1. Доступ к Active Directory с платформы, отличной от Windows Проблема Требуется произвести доступ к Active Directory и обеспечить возможность управ- ления ее объектами с другой (не-Windows) платформы. Решение С помощью графического пользовательского интерфейса Одним из лучших независимых от платформы графических пользовательских ин- терфейсов для управления каталогами LDAP, и в частности Active Directory,
554 Глава 18. Взаимодействие и интеграция является LDAP Browser/Editor. Эта программа, написанная на языке Java, может работать практически на любом компьютере, где используется Java 1.2.2 или бо- лее поздняя версия данного языка программирования. Загрузить программу мож- но с сайта, расположенного по адресу http://www.iit.edu/~gawojar/ldap/. С помощью интерфейса командной строки Первая версия сервера LDAP, разработанного в Университете штата Мичиган, содержала набор утилит с интерфейсом типа командной строки, предназначен- ных для работы с каталогом LDAP, а точнее, для выполнения запросов и обнов- ления каталога. Со временем эти утилиты стали очень широко применяться на платформах UNIX. Их можно использовать и для работы с Active Directory. Для сопровождения сервера LDAP Мичиганского университета был создан проект OpenLDAP, в который включены и сопутствующие утилиты. Последняя версия пакета доступна по адресу http://www.openldap.org/. С помощью языка программирования Для обеспечения доступа к Active Directory программными средствами и управ- ления каталогом может использоваться любой язык программирования, поддер- живающий LDAP. В рецептах, представленных в настоящей главе, приведены примеры сценариев на языках Perl, Python, Java и PHP. Комментарий LDAP, являющийся открытым стандартом, был интегрирован во многие плат- формы и языки программирования. И хотя преобладающая часть задач, связанных с применением Active Directory (порядка 90 %), выполняется и с платформ, от- личных от Windows, для некоторых из них все же требуются те или иные Win- dows-средства, и в частности графический пользовательский интерфейс, интерфейс типа командной строки или API. Например, только с помощью Windows-средств можно обеспечить управление списками контроля доступа. А вот добавление, из- менение и удаление объектов Active Directory можно выполнять с применением любых средств, поддерживающих LDAP. Смотрите также В рецептах 18.4-18.6 рассказывается, как в Active Directory данные запрашива- ются и обновляются программным способом, с использованием языков Perl, Java и Python. 18.2. Программирование в .NET Проблема Требуется осуществить программный доступ к Active Directory с платформы .NET Framework.
18.2. Программирование в .NET 555 Решение Для взаимодействия с Active Directory с платформы .NET Framework обычно ис- пользуется пространство имен System. Di rectoryServices. Ниже приведена простая программа на языке VB.NET, которая выводит значения атрибутов объекта RootDSE: Imports System.DIrectoryServices Module Modulel Sub Main( ) Dim objRootDSE As New DirectoryEntry("LDAP://RootDSE”) Dim strAttrName As String Dim objValue As Object For Each strAttrName In objRootDSE.Properties.PropertyNames For Each objValue In objRootDSE.Properties(strAttrName) Console.WriteLineCstrAttrName & " : " & objValue.ToStrfng) Next objValue Next strAttrName End Sub End Module Комментарий Пространство имен System.DirectoryServices представляет собой универсальный интерфейс служб каталогов, способный заменить интерфейс ADSL В состав это- го интерфейса входит богатый набор свойств и методов для обеспечения доступа к объектам Active Directory, запроса содержащейся в них ипформации и их моди- фикации. В настоящее время встроенной поддержки таких языков сценариев, как VBScript и Perl, не существует, но Microsoft-версия языка JavaScript — то есть JScript — обеспечивает возможность использования интерфейса System.Directo- ryServices в .NET. Этот интерфейс включает класс DirectorySearcher, предназначенный для вы- полнения LDAP-запросов. Его можно применять как для работы с существующи- ми объектами, так и для создания новых. В приведенном выше примере класс Di rectory Entry обеспечивает доступ к объекту RootDSE. Чтобы запрограммировать доступ к Active Directory из .NET, нужно задействовать еще два важных класса, DirectorySearcher и DirectoryEntry. В настоящее время интерфейс System.DirectoryServices не поддерживает всех операций, которые можно выполнять с помощью ADSL Поэтому наряду с ним можно использовать свойство NativeObject созданного экземпляра объекта, воз- вращающее объект ADSI, и обращаться к свойствам и методам последнего. Смотрите также Информацию об интерфейсе System.DirectoryServices вы найдете по адресу http://msdn.mlcrosoft.com/library/en-us/cpref/html/fr1rfSystemDirectoryServices.asp.
556 Глава 18. Взаимодействие и интеграция 18.3. Программирование на DSML Проблема Необходимо осуществить программный доступ к Active Directory с использова- нием языка DSML (Directory Services Markup Language — язык разметки службы каталогов). Этот язык был разработан специально для нужд тех программистов, которым для работы с каталогами требуется XML-ориентированный интерфейс. Решение Чтобы иметь возможность использовать DSML для работы с Active Directory, нужно установить Windows-клиент этого языка (DSFW) на компьютере, работа- ющем под управлением Windows 2000 или Windows Server 2003, на котором функ- ционирует IIS (Internet Information Server — информационный сервер Интернета). Клиент DSML можно загрузить с сайта http://www.microsoft.com/windows2000/ server/evaluation/news/bulletins/dsml.asp Если вы инсталлировали его в Windows 2000, убедитесь, что на компьютере также установлен пакет MSXML 3 О SP2. После установки клиента можно выполнять DSML-запросы к серверу, кото- рые будут преобразованы в LDAP-запросы к Active Directory Никакое дополни- тельное программное обеспечение для поддержки DSML не требуется. Ниже в качестве примера приведен DSML-запрос к объекту RootDSE: <se:Envelope xml ns;se-"http://schemas.xmlsoap.org/soap/envelope/“> <se: Body xmlns-''urn: oasi s: names: tc; DSML:2:0:core"* <batchRequest* <searchRequest dn='"’ scope-"baseObject"> <fliter* <present name-"objectclassn/> «/filter* </searchRequest> «/batchRequest* </se:Body> </se:Envelope* Комментарий Применение языка DSML — это XML-альтернатива использованию протокола LDAP для работы с сервером каталогов. Разработку данного языка иницииро- вала группа стандартизации Oasis (http://www.oasls-open.org/committees/dsml/), в на- стоящее время большинство производителей служб каталогов поддерживают его версию 2 (DSMLv2). DSML кодирует запросы к каталогу в виде XML-сообщений и передает их SOAP-клиенту, который может располагаться на сервере каталогов или на от- дельном сервере. В настоящее время контроллеры домена Active Directory не под- держивают DSML непосредственно, поэтому необходима установка отдельного клиента. За дополнительной информацией о DSML вы можете обратиться на сайт группы Oasis.
18.4. Программирование на неп эагг Смотрите также Рекомендуем посетить домашнюю страницу DSML для Windows, расположенную по адресу http://www.rncrcsoftcom/windows2(XM/setver/evaluabon/news/bulletins/dsml.asp. 18.4. Программирование на Perl Проблема Требуется обеспечить программный доступ к Active Directory с использованием языка Perl. Решение Существует два способа доступа к Active Directory из сценария на языке Perl: с помощью независимых от платформы модулей Net::LDAP и протокола LDAP, а также с применением модуля Win32::OLE, предоставляющего доступ к интер- фейсу ADSI (последний модуль может работать только в Windows). Любой из этих модулей можно загрузить с сайта CPAN (Comprehensive Perl Archive Network — всеобъемлющий сетевой архив Perl), находящегося по адресу http://www.cpan.org/ Ниже показано, как с использованием модулей Net::LDAP выполнить запрос к объекту RootDSE: #!/usr/SD/perl /Ып/perl use strict: use Net::LDAP; щу Sldapserver - $ARGV[O] || 'del'; my Jldapobj - Net:LOAP->new($ldap_server) or di'e " Could not connect: my Srootdse - $ldapobj->search( base . filter -> •(objectclass-*)'. scope *> 'base', ); die $rootdse->error if $rootdse->code: foreach $entry($rootdse->entries) { foreach $attr(sort $entry->attributes) { foreach ($entry->get($attr)) { print "$attr: $_\n'';
I лава 18. Взаимодействие и интеграция Следующий фрагмент кода демонстрирует, как ту же операцию можно вы- полнить с помощью модуля на основе Win32::OLE и ADSL Здесь также осущест- вляется вывод атрибутов объекта RootDSE: use strict: use Win32::OLE 'in': щу Srootdse - Win32::OLE->GetObject("LDAP://RootDSE"): $rootdse->GetInfo: for щу $i ( 0 .. $rootdse->PropertyCount - 1) { щу Sprop - $rootdse->Item($1): print $prop->Name."\n": foreach щу Sval (in $prop->Values) { print ” ",$val->CaseIgnoreStr1ng."\n": } } При использовании модуля Net::LDAP перед выполнением поиска или дру- гих операций обычно производится связывание с контроллером домена. Однако в приведенном выше примере надобность в последнем действии отпадает, по- скольку осуществляется запрос к объекту RootDSE, допускающему анонимное (то есть неавторизированное) подключение. Связывание производится с помощью такого кода: $ldapobj->bind('administrator@rallencorp.com’. password -> 'gait'): Во втором примере, основанном на применении Win32::OLE и ADSI, по умол- чанию задаются имя и пароль пользователя, выполняющего сценарий, так что явное связывание необходимо только в том случае, когда в Active Directory требуется аутентификация от имени другого пользователя. Комментарий Net::LDAP — это набор модулей, обеспечивающих широкие возможности для вы- полнения запросов к каталогам LDAP и обновления каталогов, поддерживающих DSML, абстрактные схемы и LDIF. Все эти модули встроены в язык программи- рования Perl, то есть в них внешние средства SDK (Software Development Kit — инструментальные средства разработки программного обеспечения) для LDAP не используются. Благодаря этому вы можете писать сценарии с применением Net::LDAP на самых разных платформах и осуществлять из них доступ к Active Directory и другим службам каталогов, поддерживающим LDAP. Разработчиком модулей Net::LDAP является Грэхем Бар (Graham Barr); более полную информа- цию о них вы найдете по адресу http://perl-ldap.sourceforge.neV. Модули Win32::OLE реализуют интерфейс к COM (Component Object Mo- del — модель компонентных объектов). Большинство классов и методов ADSI доступны посредством COM-интерфейса автоматизации IDispatch. Смотрите также Документацию по модулям Win32::OLE вы получите, посетив сайт http://aspn.ac- tivestate.com/ASPN/Perl/Products/ActjvePerl/site/lib/Win32/OLE.html. Загрузить модули Perl можно, обратившись по адресу http://www.cpan.org/.
। «рограммирование на Java □□я 18.5. Программирование на Java Проблема Требуется обеспечить программный доступ к Active Directory с использованием языка Java. Решение Для доступа к любым службам именования и каталогов, включая DNS и LDAP, обычно используется JNDI (Java Naming and Directory Interface — интерфейс Java для служб именования и каталогов), являющийся стандартным расширением языка Java. Интерфейс JNDI стал частью API Java Enterprise, его документация хранит- ся на сайте http://java.sun.com/products/jndi/. Это объектно-ориентированный ин- терфейс для программирования с использованием LDAP. Рассмотрим пример, когда вывод атрибутов объекта RootDSE, хранящегося на контроллере домена DC1, осуществляется с помощью JNDI: /** * Вывод атрибутов RootDSE для DC1 */ import javax.naming.*; Import javax.naming.directory.*: class RootDSE { public static void main(String[] args) { try { // Создание начального контекста DirContext ctx - new InitialDirContextC ); // Чтение атрибутов rootDSE Attributes attrs ctx.getAttributes( ”ldap://DCl". new String[]{"*"}); // Получение списка атрибутов NamingEnumeration enums - attrs.getIDs( ); // Вывод имени и значения каждого атрибута while (enums ! null && enums.hasMore( )) { String nextattr - (Str1 ng)enums.next( ); System.out.println( attrs.get(nextattr) ); } // Закрытие контекста ctx.close( ); } catch (NamingException e) { e.printStackTraceC ); } } }
560 Глава 18. Взаимодействие и интеграция Комментарий Каждый серьезный программист, пишущий на Java, должен быть знаком с интер- фейсом JNDI Этот универсальный интерфейс используется для обеспечения дос- тупа к разным службам, а не только к Active Directory На сайте компании Sun, который находится по адресу http://java.sun.com/products/jndi/tutorial/, представлен хороший учебник по JNDI. Смотрите также Рекомендуем вам ознакомиться с домашней страницей JNDI, расположенной на сайте компании Sun: http://java.sun.com/products/jndi/. 18.6. Программирование на Python Проблема Требуется обеспечить программный доступ к Active Directory с использованием языка Python. Решение Как и в случае применения Perl, для реализации программного доступа к Active Directory с помощью языка Python существует два способа: с использованием встроенных средств поддержки LDAP и с использованием СОМ-интерфейса к ADSL Модуль для поддержки LDAP можно загрузить с сайта, расположенного по адре- су http://python-ldap.sourceforge.neV. COM-интерфейс включен в среду разработки ActivePython, которую можно загрузить с сайта ActiveState, имеющего адрес http://www activestate.com/ActivePython/ В следующем фрагменте программы, написанной на языке Python, показано, -^к можно вывести свойства объекта RootDSE, хранящегося на контроллере доме- на DC1, с использованием LDAP: import ldap try: 1 - ldap.open("del") except ldap LDAPError. e print e baseDN - ” searchscope = ldap.SCOPE_BASE retrieveAttributes - None searchHlter - "objectciass-*" try: ldap_result_1d - 1 search(baseDN. searchScope, searchFilter retr1eveAttri butes)
18.7. Интеграция с Ml I Keroeros result_type. result_data - 1.result(ldapjresult_id. 0) if result_type — ldap RES_SEARCH_ENTRY: print result_data except ldap LDAPError e print e Далее приведен код, в котором для доступа к RootDSE посредством ADSI ис пользуется модуль win32com client: import win32ccm.client objRootDSE - win32com.client.Get0bject(‘LDAP //RootDSE') objRootDSE.Getlnfo( ) for i in range( 0. objRootDSE.PropertyCount - 1): prop - objRootDSE.Item(i) print prop.Name for val in prop.Values print" ",val.CaselgnoreString Комментарий Дополнительную информацию о Python вы найдете на домашней странице этого языка, по адресу http://www.python.org/. 18.7. Интеграция с MIT Kerberos Проблема Требуется интегрировать существующую инфраструктуру сферы MIT Kerberos с Active Directory. Решение Интеграция MIT (Massachusetts Institute of Technology - Массачусетский техно- логический институт) Kerberos с Active Directory обычно означает создание дове- рительного отношения между доменом Active Directory и сферой Kerberos. Не установив такое отношение, обеспечить пользователям доступ к ресурсам из до- мена Active Directory и сферы Kerberos невозможно. 1 Создайте на контроллере домена доверительное отношение к сфере Kerberos: > netdom trust AD.RALLENCORP.COM /DomainrMIT.RALLENCORP.COM /Add /Realm /Password!“Password" 2 . Если нужно, сделайте это отношение транзитивным: > netdom trust AD.RALLENCORP.COM /Domain MIT.RALLENCORP COM /Transitive.yes
3OZ Глава 18. Взаимодействие и интеграция 3 . На контроллере домена для сферы Kerberos установите KDC (Key Distribu- tion Center — центр распределения ключей): > ksetup /addkdc MIT.RALLENCORP.COM kdc01.niit.rallencorp.com 4 На Unix-компьютере определите в сфере Kerberos участника системы защиты для домена Active Directory: kadmin addprinc -e des-cbc-crc:normal krbtgt/ad.railencorp.com Комментарий Этот код далеко не полный. Скорее всего, для обеспечения интеграции вам по- требуется настроить службы-участники и хосты-участники создаваемого довери- тельного отношения, установить соответствие между учетными записями, а так- же отредактировать конфигурационный файл krb5.conf на серверах KDC, однако подробное описание всех этих действий выходит за рамки данной книги. Много интересной информации о системе Kerberos, и в частности об особенностях ее взаимодействия с Active Directory, содержится в книге Kerberos: The Definiteive Guide (O'Reilly). Немало полезных ресурсов представлено в Веб: О домашняя страница MIT Kerberos (http://web.mit.edu/kerberos/www/); О пошаговое руководство по интеграции с MIT Kerberos от Microsoft (http:// www.microsoft.com/windows2000/techinfo/planning/security/kerbsteps.asp); О инструкции по настройке взаимодействия между Windows 2000 и MIT Ker- beros (http://calnetad.berkeley.edu/documentatjon/test_environment/kerbjnterop_trip- ups.html). Смотрите также Документы MS КВ 217098 (Basic Overview of Kerberos User Authentication Proto- col in Windows 2000), MS KB 230476 (Description of Common Kerberos-Related Errors in Windows 2000), MS KB 248758 (Information About the Windows 2000 Kerberos Implementation), MS KB 324143 (HOW TO: Use the Kerberos Setup Tool (Ksetup.exe)) и MS KB 810755 (White Paper: Windows 2000 Kerberos Interopera- bility and Authentication). 18.8. Интеграция c Samba Проблема Требуется обеспечить аутентификацию клиентов службы Samba в Active Direc- tory и осуществить доступ к ресурсам Active Directory .1 1 Samba — это решение для приложений Unix, используемое при работе с протоколом SMB (Server Message Block — блок сообщений сервера). Многие операционные системы, включая Windows и OS/2, используют SMB для осуществления взаимодействия типа клиент-сервер в сети. Поддер- живая данный протокол, Samba позволяет серверам Unix устанавливать соединения с помощью того же протокола, что и продукты от Microsoft Windows. — Примеч ред.
18.9. Интеграция с Apache ЭОЛ Решение В настоящее время Samba 2.2 не поддерживает Active Directory. Следующая вер- сия этого продукта, Samba 3.0, которая на момент написания книги находится на стадии beta-тестирования, будет включать клиентскую поддержку Active Direc- tory. Для обеспечения полной функциональности LDAP и Kerberos необходимо также устаноить пакет OpenLDAP и MIT Kerberos. Комментарии Технология Samba включает много разнообразных решений по интеграции Unix с Windows NOS. В частности она позволяет Windows-клиентам использовать файлы и службы печати Unix. Кроме того, сервер Samba может действовать как первичный контроллер домена в среде Windows NT 4.0. Смотрите также Более подробную информацию о проекте Samba вы сможете найти по адресу http://www.samba.org/. 18.9. Интеграция с Apache Проблема Если в вашей организации функционируют Active Directory и сервер Apache, для сокращения количества операций входа можно интегрировать эти две системы таким образом, чтобы сервер Apache аутентифицировал своих НТТР-клиентов с использованием Active Directory. Решение Существует несколько модулей Apache, поддерживающих интеграцию Active Di- rectory с каталогами LDAP store, а в Apache 2.0 такая интеграция реализована в виде встроенного модуля mod auth Idap Документацию по этому модулю вы найдете на сайте http://httpd.apache.Org/docs-2.0/mod/mod_auth_ldap.html. Модуль mod_auth_ldap выполняет следующие функции: О осуществляет связывание, применяя заранее определенное отличительное имя, и пароль пользователя; О производит поиск в каталоге с использованием заранее определенного фильт- ра и имени аутентифицированного пользователя; О при положительном результате поиска предпринимает попытку связывания с использованием найденного имени пользователя и пароля. Если в вашей сети работает Apache 1.x, можно воспользоваться широко при- меняемым модулем auth Idap, который функционирует практически так же, как
5Ь4 Глава 18. Взаимодействие и интеграция и модуль mod_auth_ldap За дополнительной информацией по данному вопросу рекомендуем обратиться на сайт http://www.rudedog.org/authjdap/. Комментарий Для работы с Active Directory модуль mod_auth_ldap — не самый подходящий вариант. Второе выполняемое им действие (поиск отличительного имени пользо- вателя) является необязательным. Если для всех пользователей заданы UPN-имена, можно просто выполнить аутентификацию с применением не отличительного имени, а UPN-имени. Active Directory поддерживает оба вида связывания. Это означает, что модуль mod_auth_ldap мог бы просто взять имя и пароль, введенные пользова- телем в ответ на запрос, и добавить к имени заранее определенный UPN-суффикс (например: @rallencorp.com) Будем надеяться, что разработчики mod_auth_ldap учтут такую возможность в будущих его версиях. Кроме того, следует иметь в виду, что при использовании данного модуля придется жестко кодировать имя контроллера домена, предназначенного для вы- полнения запроса и связывания. И если в системе для регулирования нагрузки на сервер не применяется программное или аппаратное обеспечение, вы окажетесь в зависимости от этого контроллера домена. Оба модуля, mod auth_ldap и auth ldap, поддерживают и рекомендуют ис- пользовать протоколы SSL (Secure Sockets Layer - защита уровня сокетов) и TLS (Transport Layer Security — защита транспортного уровня). Если вы не включите их поддержку, пароли будут передаваться между контроллером домена и серве- ром Apache открытым текстом. Смотрите также Довольно подробную информацию о сервере Apache вы сможете найти на сайте http:// www.apache.org/. 3.10. Замена службы NIS Проблема Требуется заменить все составляющие инфраструктуры NIS (Network Informa- tion System — служба информации сети) компонентами Active Directory Систе- ма NIS выполняет почти те же функции, что и Active Directory, а следовательно, интегрировав две инфраструктуры, можно сократить стоимость поддержки. Решение Множество средств, призванных помочь в интегрировании систем Unix и Win- dows, входит в состав разработанного в Microsoft пакета SFU (Services For Unix — сервисы для Unix) В частности, в нем имеется сервер NIS, который может заме- нить существующие NIS-серверы и использует для хранения данных Active Di- rectory SFU поставляется с набором расширений схемы, которые NIS-сервер
18.11. Использование BIND вместо DNS применяет для структурирования информации о пользователях, группах и ком- пьютерах, необходимой клиентам NIS. Кроме того, в состав SFU входит серверное и клиентское программное обеспечение NFS — на тот случай, если вы захотите обеспечить взаимодействие в данной файловой системе. Все программное обес- печение SFU работает в операционных системах Windows. Подробные сведения об SFU имеются на сайте http://www.microsoft.com/windows/sfu/default.asp. Если вы не работаете с пакетом SFU, можете воспользоваться продуктом NIS/LDAP Gateway от компании PADL Software (http://www.padl.com/). Шлюз PADL NIS/LDAP Gateway использует расширения схемы из SFU для обеспече- ния NIS-служб поддержкой Active Directory. Клиенты NIS посредством данного шлюза могут получать информацию о пользователях, группах и компьютерах, работать с сервером SunONE Directory Server, равно как с Active Directory. NIS/LDAP Gateway поддерживается на таких Unix-платформах, как Solaris, Li- nux и FreeBSD. Смотрите также За дополнительными сведениями по затронутой в данном рецепте теме рекомен- дуем обращаться к книге LDAP System Administration (O'Reilly). Много полезной информации содержится и в документах MS КВ 324083 (HOW ТО: Install Server for NIS on Windows for Umx-to-Windows Migration), MS KB 324541 (HOW TO: Configure Server for NIS for a Unix-to-Windows Migration), MS KB 324543 (HOW TO: Migrate Existing NIS Maps to Server for NIS in a Unix-to-Windows Migration). 18.11. Использование BIND вместо DNS Проблема Предположим, вы решили отказаться от использования в Active Directory служ- бы Microsoft DNS, заменив ее службой BIND Следовательно, вам понадобится сконфигурировать эту службу. Решение В Active Directory служба DNS поддерживает записи ресурсов SRV и сервера Dy- namic DNS (DDNS). Первая версия BIND (Berkley Internet Name Domain — служба доменных имен в сети Internet), которая поддерживала записи SRV, была выпущена еще в 2000 году и названа 8 2 2 patch 7 Хотя в Active Directory для ра- боты с записями DNS использовать протокол DDNS не обязательно, без него ог- ромное количество работы приходится выполнять вручную. Ниже приведен пример конфигурации службы BIND 8 для поддержки доме- на ad rallencorp.com: Options { directory ’/etc/namedb": } Zone "ad rallencorp.com*' IN {
566 Глава 18. Взаимодействие и интеграция type master; file "db.ad.rallencorp.com"; al low-update { del.; dc2.; dc3.; }; check-names ignore; }: Директива di rectory определяет, где находятся файлы зоны. Параметру type должно быть присвоено значение master, а параметру fi 1 е — имя файла, в котором хранится содержимое зоны. Директива al low-update определяет, какие серверы (задаются посредством указания их имен или IP-адресов) могут динамически об- новлять зону, а директива check-names ignore предписывает, что служба BIND не должна налагать ограничения на имена, используемые в записях ресурсов. Без этих установок BIND не сможет предоставлять записи Active Directory, в кото- рых используются символы подчеркивания. Конфигурация BIND 9 выглядит точно так же, как и BIND 8, только строка check-names ignore здесь не обязательна. По умолчанию служба разрешает исполь- зовать в записях ресурсов символы подчеркивания. Настроив серверы BIND, необходимо убедиться, что процесс resolver на кон- троллере домена содержит указатель как минимум на один из серверов имен BIND. Для этого следует заглянуть в контейнер Network Connections каждого контролле- ра домена, щелкнуть правой кнопкой мыши на активном подключении и выбрать в открывшемся контекстном меню команду Properties (Свойства), а затем открыть окно свойств Internet Protocol (TCP/IP). Параметры процесса resolver обычно на- страиваются на вкладке General (Общие), но это можно сделать и с помощью ос- настки DHCP либо Group Policy (Групповая политика) Комментарий В рецепте 13.13 (глава 13) рассказывается, как инициировать регистрацию кон- троллером домена записей DNS, а в рецепте 13.12 (в той же главе) — как прове- рить, может ли он, контроллер домена, регистрировать свои записи. Документация по BIND и исходный код службы представлены на сайте ком- пании ISC, имеющем следующий адрес: http://www.isc.org/products/BIND/ Смотрите также Документы MS КВ 255913 (Integrating Windows 2000 DNS into an Existing BINE or Windows NT 4.0-Based DNS Namespace) и MS KB 323419 (HOW TO. Migrate an Existing DNS Infrastructure from a BIND-Based Server to a Windows Server 2003-Based DNS). B.12. Авторизация сервера Microsoft DHCP Проблема Требуется авторизировать в Active Directory сервер Microsoft DHCP (Dynamic Host Configuration Protocol — протокол динамической конфигурации хоста), что- бы его могли использовать клиенты.
18.12. Авторизация сервера Microsoft DHCP 567 Решение С помощью графического пользовательского интерфейса 1. Откройте оснастку DHCP. 2. На левой панели щелкните правой кнопкой мыши на элементе DHCP и выбе- рите команду New Server (Новый сервер). 3. Введите имя добавляемого сервера DHCP и щелкните на кнопке ОК. 4. Щелкните правой кнопкой мыши на имени сервера и выберите команду Aut- horize (Авторизировать). Комментарий Сервер DHCP для Windows 2000 и Windows Server 2003 сможет назначать клиен- там IP-адреса лишь при условии, что он будет авторизирован. В результате будет сокращено количество сторонних серверов, нередко предоставляющих некор- ректную информацию. Такие серверы обычно устанавливаются рядовыми поль- зователями, часто по неопытности, и не только выдают ошибочную информацию, но и вовсе отвергают запросы, из-за чего клиенты сети не получают доступ к не- обходимым службам. Если сервер DHCP работает на контроллере домена, он авторизируется авто- матически. Каждый сервер DHCP, входящий в домен Active Directory, выполня- ет запрос к службе каталогов, для того чтобы определить, авторизирован ли он, и только при этом условии отвечает на запросы DHCP. Независимый сервер DHCP, не входящий в домен Active Directory, при первой инициализации отправляет со- общение DHCPINFORM. Если на это сообщение отвечает какой-либо авторизированный сервер DHCP, отправивший его независимый сервер более не отвечает на запро- сы. Не получив ответа ни от одного сервера ( DHCP), он сам отвечает на запросы клиентов. Авторизированные серверы DHCP представлены в Active Directory объекта- ми класса dhcpClass, расположенными в контейнере cn=NetServices.cn=Services. cn-Configuratation.<корневое_0И_леса>. Относительное отличительное имя автори- зированного сервера DHCP совпадает с его IP-адресом. ПРИМЕЧАНИЕ------------------------------------------------------------- В Windows 2000 сервер DHCP не может быть авторизирован с помощью оснастки DHCP для Windows Server 2003, если только на нем не установлен пакет обновлений Service Pack 2. Смотрите также Документы MS КВ 279908 (Unexpected Results in the DHCP Service Snap-In After Using NETSH to Authorize DHCP), MS KB 300429 (HOW TO: Install and Configure a DHCP Server in an Active Directory Domain in Windows 2000), MS KB 303351 (How to Use Netsh.exe to Authorize, Unauthorize, and List DHCP Servers in Active Directory), MS KB 306925 (Cannot Authorize New DHCP Server in Active Directory) и MS KB 323360 (HOW TO: Install and Configure a DHCP Server in an Active Directory Domain in Windows Server 2003).
568 Глава 18. Взаимодействие и интеграция 18.13. Использование VMWare для тестирования Active Directory Проблема Одна из проблем, с которыми сталкиваются разработчики и администраторы при тестировании Active Directory, заключается в том, что каждый сервер может под- держивать лишь один домен. Система VMWare позволяет обойти это ограниче- ние и работать с несколькими доменами на одном сервере. Решение Компания VMWare, Inc. (http://www.vmware.com/) разработала виртуальную ма- шину позволяющую использовать на одном компьютере несколько разнотипных операционных систем. Созданный ею продукт VMWare Workstation может ис- пользоваться на лэптопах и настольных серверах, а продукт VMWare GSX Server предназначен для реализации решений масштаба предприятия и позволяет даже поддерживать на виртуальной машине VMWare реальные сетевые службы Что касается Active Directory, то в ней, используя любой из двух указанных продуктов, можно эмулировать лес, создав несколько виртуальных машин на од- ном компьютере. Автор лично использовал VMWare для тестирования расшире- ний схемы Поскольку Active Directory не поддерживает удаление объектов из схемы, в нее нельзя дважды внести одно и то же расширение (в процессе его тес- тирования). VMWare хранит данные каждой виртуальной машины в виде набора файлов. После создания первой виртуальной машины, представляющей контрол- лер домена, эти файлы можно копировать и таким образом создавать столько эк- земпляров данного контроллера домена, сколько требуется. Поддержка нескольких доменов в лесу требует немалых затрат, связанных как с использованием большего количества аппаратного обеспечения так и с не- обходимостью содержать больший штат обслуживающего персонала. Для каждо- го домена требуется как минимум один отдельный сервер. Если в лесу четыре до- мена и для каждого из них нужно создать по три тестовые площадки, в общей сложности потребуется 12 серверов. Однако применение виртуальной машины VMWare позволит ограничиться тремя тестовыми серверами, на каждом из кото- рых будут работать все четыре контроллера домена. Если сервер достаточно мощ- ный, не исключено, что он сможет поддерживать все четыре тестовые площадки. Существенно облегчает тестирование введенная в VMWare 4.0 функция соз- дания снимков. Под термином «снимок» подразумевается сделанная в опреде- ленный момент времени копия состояния виртуальной машины, позволяющая при необходимости вернуться к зафиксированному состоянию. Эту функцию осо- беино удобно использовать при тестировании обновлений схемы Active Directory. Комментарий К сожалению, Microsoft не предоставляет технической поддержки по вопросам, связанным с работой Active Directory и других своих продуктов в среде VMWare Сотрудники службы технической поддержки компании, конечно же, пытаются
18.13. Использование VMWare для тестирования Active Directory 5 9 помочь обращающимся к ним клиентам в разрешении проблем, связанных с при- менением VMWare, но добиться желаемого результата не всегда удается. Следует отметить, что Microsoft планирует разработку собственной техноло- гии виртуальных серверов В феврале 2003 года компания приобрела права на программное обеспечение Virtual PC, разработанное частной фирмой Connectix. К середине 2003 года она выпустила обзор нового продукта — Microsoft Virtual Server for Windows Server 2003. Это основной конкурент VMWare, обладающий многими возможностями этой «машины» Дополнительную информацию о Virtual Server вы найдете по адресу http://www.mlcrosoft.com/windowsserver2003/evaluation/ news/bulletins/vmnews.mspx. Смотрите также Документ MS КВ 273508 (VMWare Support Policy and Support Boundaries).
Приложение Список инструментальных средств Количество инструментальных средств, используемых в Active Directory, просто впечатляет! Только в данной книге их упоминается более пятидесяти. Ниже все эти средства перечислены с указанием того, какие задачи выполняются с помо- щью каждого из них к каким типам они относятся, где их можно найти и в каких рецептах они применяются. Мастер архивации и восстановления (ntbackup.exe) Назначение: Резервное копирование и восстановление информации контролле- ра домена, включая Active Directory Тип: Мастер. Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецептах: 3.2, 16.1, 16.4-16.6. Мастер установки Active Directory (dcpromo.exe) Назначение: Повышение роли сервера до роли контроллера домена и понижение роли контроллера домена до роли рядового сервера. Тип: Мастер Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецептах: 2.1-2.4, 3.1-3.4. Active Directory Domains and Trusts (Active Directory — домены и доверие, domain.msc) Назначение: Повышение уровня работы (Windows 2000) либо функционального уровня домена или леса (Windows Server 2003); управление доверительными от- ношениями; просмотр и модификация атрибутов домена description и managedBy. Тип: Оснастка ММС Местонахождение: Пакет adminpak.msi для Windows 2000 и Windows Server 2003 Используется в рецептах: 2.6, 2 7, 2.9, 2 13-2.22, 3 25.
Список инструментальных средств 571 Active Directory Schema (Схема Active Directory, schmmgmt.msc) Назначение: Просмотр, создание и модификация классов и атрибутов Тип: Оснастка ММС. Местонахождение: Пакет adminpak.msi для Windows 2000 и Windows Server 2003. Используется в рецептах: 3 25, 5.10, 10.1, 10.2, 10.7-10 14, 10 19-10 21, 14 И. Active Directory Sites and Services (Active Directory — сайты и службы, dssite.msc) Назначение: Просмотр объектов, представляющих топологию сети (sites, subnets, links, servers и т. д), и операции над этими объектами; управление объектами connection: планирование и инициирование репликации с партнерами; активиза- ция средства проверки согласованности знаний; включение глобального катало- га, определение альтернативной политики запросов LDAP для контроллера до- мена и включение кэширования универсальных групп. Тип: Оснастка ММС. Местонахождение: Пакет adminpak.msi для Windows 2000 и Windows Server 2003. Используется в рецептах: 3.11, 3.17, 3.20, 7.9, 11.1-11.5, 11.7, 11.9-11.12, 11.14, 11.16, 11.22, 1123, 11.25, 11.27, 12.4, 12.6. Active Directory Users and Computers (Active Directory — пользователи и компьютеры, dsa.msc) Назначение: Просмотр, создание и выполнение операций над пользователями, группами, компьютерами, подразделениями и другими объектами, связанными с доменом; создание и сохранение запросов на поиск объектов; повышение функ- ционального уровня домена, просмотр и передача ролей FSMO; делегирование функций управления и многое другое. Тип: Оснастка ММС. Местонахождение: Пакет adminpak.msi для Windows 2000 и Windows Server 2003. Используется в рецептах: 3.8, 3 25, 5.1-5 7, 5 9, 6.1, 6.3-6.8, 6.12-6.17, 6 20-6.22, 6 24, 6 25, 6 27-6 29, 7.1-7 4, 7 6-7 8, 8.1, 8 2, 8 4, 8 7. Default Domain Controller Security Policy (Политика безопасности контроллера домена, dcpol.msc) Назначение: Модификация установок объектов групповой политики безопасно- сти контроллера домена. Тип: Оснастка ММС. Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецептах: 141, 1414, 1512
572 Приложение Default Domain Security Policy (Политика безопасности домена, dompol.msc) Назначение: Модификация установок объектов групповой политики. Тип: Оснастка ММС. Местонахождение: Раздел 0/oSystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецептах: 6.11, 14.19. DNS (dnsmgmt.msc) Назначение: Просмотр и модификация конфигурации сервера DNS; просмотр, создание, модификация зон и записей ресурсов; включение режима отладочного протоколирования; выполнение тестовых запросов к DNS; перезапуск службы DNS; редактирование разрешений и изменение конфигурации разделов приложений. Тип: Оснастка ММС Местонахождение: Пакет adminpak.msi для Windows 2000 и Windows Server 2003. Используется в рецептах: 13.1-13.7, 13.9-13.11, 15.6. Group Policy Management Console (Консоль управления групповой политикой, gpmc.msc) Назначение: Выполнение практически любых задач, связанных с объектами груп- повой политики. Вместе с данной утилитой устанавливается множество сценари- ев, позволяющих выполнять операции над объектами групповой политики из ко- мандной строки. В предлагаемых рецептах используются следующие сценарии: BackupGpo.wsf, CopyGpo.wsf, CreateGpo.wsf, DeleteGpo.wsf, DumpGpoInfo.wsf, GetReports- ForGpo.wsf, ImportGpo.wsf, ListAIIGpos.wsf, QueryBackupLocation.wsf, RestoreGpo.wsf и Set- GpoPermissions.wsf. Тип: Оснастка ММС. Местонахождение: http://www.microsoft.com/downloads/details.aspx?Famllyid=F39E9- D60-7E41-4947-82F5-3330F37ADFEB&displayiang=en. Используется в рецептах: 5.11, 9.1-9.19. Group Policy Object Editor (Редактор объектов групповой политики, gpedit.msc) Назначение: Редактирование установок объектов групповой политики. Тип: Оснастка ММС. Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецепте: 9.6. Resultant Set of Policy (Результирующая политика, rsop.msc) Назначение: Просмотр результирующей политики (Resultant Set of Policy, RSoP) для пользователя и компьютера.
Список инструментальных средств 573 Тип: Оснастка ММС. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецепте: 9.20. ACL Diagnostics (acldiag.exe) Назначение: Просмотр списка управления доступом объекта (ACL), сравнение хранящихся в этом списке значений со значениями по умолчанию, которые были заданы в схеме; определение разрешений пользователя или группы; проверка результатов делегирования, выполненного с помощью мастера делегирования управления Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 14.9, 14.12. Active Directory Load Balancer (adlb.exe) Назначение: Распределение нагрузки между объектами connection в пределах од- ного сайта. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Windows Server 2003 Resource Kit Используется в рецепте: 11.24 AD Prep (adprep.exe) Назначение: Подготовка домена и леса Windows 2000 к обновлению до уровня Windows Server 2003. Тип: Команда Местонахождение: Раздел \i386 на CD-ROM Windows Server 2003. Используется в рецептах: 2.10, 2.11. ADSI Edit (adsiedit.msc) Назначение: Универсальный редактор Active Directory, обычно применяемый для поиска или создания объектов в лесу, а также для управления ими. Тип: Оснастка ММС. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 4.10,4.11, 4.13, 4.16-4.18, 4.20, 4.21, 4.23, 6.30, 6.31, 8.9, 11.26, 11.29, 13.17, 14.3, 14.15, 15.15, 15.16, 16.13, 16.18, 17.1, 17.4, 17.7-17.9. Audit Policy (auditpol.exe) Назначение: Включение и отключение режима аудита для заданного компьютера Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Resource Kit для Windows 2000 Используется в рецепте: 15.12
574 Приложение CSVDE (csvde.exe) Назначение: Импорт и экспорт объектов с использованием текстовых файлов (формат Comma-Separated Value, CSV). Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел 0/oSystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецептах: 4.26, 4.27. Default Group Policy Restore (dcgpofix.exe) Назначение: Восстановление используемых по умолчанию параметров для по- литики безопасности контроллера домена и политики безопасности домена. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецепте: 9.22. DNSCmd (dnscmd.exe) Назначение: Управление конфигурацией сервера DNS; выполнение запросов; создание и модификация зон и записей ресурсов; просмотр статистики сервера; включение отладочного протоколирования и изменение конфигурации разделов приложений. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 13.1-13.5, 13 7, 13.9-13.11, 15.6, 15.7. Domain Controller Diagnosis (dcdiag.exe) Назначение: Выполнение разнообразных диагностических тестов для контрол- лера домена. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows-Server 2003. Используется в рецептах: 3.5, 3.12, 11.28, 12.8, 13.12, 17.6. DS ACL (dsacls.exe) Назначение: Просмотр объектов ACL. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 7 7, 8.2, 13.6, 14.7, 14.10, 14.13, 17.9. DS Add (dsadd.exe) Назначение: Добавление объектов, представляющих компьютеры, контакты, груп- пы, подразделения, пользователей и квоты.
Список инструментальных средств 575 Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецептах: 5.1, 6.1, 6.2, 7.1, 8 1, 8.2, 15.13. DS Get (dsgetexe) Назначение: Просмотр свойств объектов computer, contact, subnet, group, OU, server, site, user, quota и partition. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецептах: 6 14, 6 16, 7.2, 7.3, И 2, 11.5, 15.17. DS Modify (dsmodify.exe) Назначение: Модификация свойств объектов computer, contact, subnet, group, OU, server, site, user, quota и partition. Тип: Утилита с интерфейсом типа командной строки Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецептах: 3.17, 6 3, 6 6, 6 12, 6 16, 6.17, 6.20-6.22, 6 24, 6.25, 6 29, 7.4, 7.6, 8.7. DS Move (dsmove.exe) Назначение: Перемещение и переименование объектов Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецептах: 3.11, 4.17, 4 19, 5.6, 5 7, 6.5, 6.6, 8 4, И 16. DS Query (dsquery.exe) Назначение: Выполнение запросов к объектам computer, contact, subnet, group, 0U, server, site, user, quota и partition; выполнение универсальных запросов к объек- там любого типа. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецептах: 2.7, 2 9, 2.13, 2 14, 3.19, 3.20, 3 25, 4 2, 4 5-4 7, 4.9, 4.22, 5.2,5.3,5 6, 5.8, 6.4,613, 6.23, 6.28, 7.9,8 8, 10.8, 1010, 10 15-10.18, 112, 11.3, 11.5, 11.8, 11.15, 12.11, 15.14, 17.2, 17.5. DS Remove (dsrm.exe) Назначение: Удаление узлов-листьев и поддеревьев. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецептах: 4 20, 4.21, 5.4, 5.5.
576 Приложение Enumprop (enumprop.exe) Назначение: Просмотр значений атрибутов объектов. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Windows 2000 Resource Kit. Используется в рецептах: 2.9, 2.13, 2.14, 4.1, 4.2, 6.11, 6.30. Group Policy Verification Tool (gpotool.exe) Назначение: Проверка согласованности объектов групповой политики, располо- женных на разных контроллерах домена; просмотр свойств объектов групповой политики, таких как отображаемое имя, время создания и модификации, номер версии, GUID, флаги Тип: Утилита с интерфейсом типа командной строки Местонахождение: Пакет Resource Kit для Windows 2000 и Windows Server 2003. Используется в рецепте: 9.1. Group Policy Results (gpresult.exe) Назначение: Просмотр результирующей политики (Resultant Set of Policy, RSoP) для пользователя и компьютера. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецепте: 9.20. Group Policy Refresh (gpupdate.exe) Назначение: Применение измененных установок объекта групповой политики либо применение всех установок этого объекта, требующее последующей переза- грузки или выхода пользователя из системы. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецепте: 9.21 IP Configuration (ipconfig.exe) Назначение: Запрос, освобождение, обновление IP-адреса; очистка локального кэша DNS; регистрация записей ресурсов в DNS. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецепте: 13.11. Kerberos List (klistexe) Назначение: Просмотр и удаление билетов Kerberos Тип: Утилита с интерфейсом типа командной строки.
Список инструментальных средств 577 Местонахождение: Пакет Resource Kit для Windows 2000 и Windows Server 2003. Используется в рецепте: 14.9. Kerberos Tray (kerbtray.exe) Назначение: Просмотр и удаление билетов Kerberos. Тип: Утилита с графическим пользовательским интерфейсом. Местонахождение: Пакет Resource Kit для Windows 2000 и Windows Server 2003. Используется в рецепте: 14.17. LDIFDE (ldifde.exe) Назначение: Импорт и экспорт объектов в формате LDIF. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецептах: 2.11,2.13,2.14,4.10,4.11,4.13-4.15,4.24,4.25,5.10,6.3, 7.9, 8.9, 8.10, 10.7, 10.9, 10.11-10.14, 10.20, 10.22, 11.1, 11.4, 11.7, 11.9,11.10, И 12, 11.14, 11.29, 12.6, 13.17, 15.15, 15.16, 16.10, 16.13, 16.18, 17.7. LDP (idp.exe) Назначение: Универсальный редактор и средство просмотра объектов LDAP. Тип: Утилита с графическим пользовательским интерфейсом. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 3.10, 3.19, 4.1-4.3, 4.5-4.Э, 4.15, 4.22, 5.8, 8.10-8.12, 10.15-10.18, 11.8, 11.15, 12.11, 12.12, 15.9, 16.10, 16.16, 16.17, 17.2, 17.3. Move Tree (movetree.exe) Назначение: Перемещение объектов в пределах домена и между доменами. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецепте: 4.18. Netdom (netdom.exe) Назначение: Добавление компьютера в домен; переименование компьютера; пе- ремещение компьютера в другой домен; получение сведений о компьютерах, до- верительных отношениях и владельцах ролей FSMO в домене; удаление компью- тера из домена; переустановка компьютера, проверка доверительных отношений и управление таковыми. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 2.15-2.18, 2.20-2.23, 3.7, 3.8, 3.25, 8.3, 8.5, 8.7, 18.7.
578 Приложение Network Connectivity Tester (netdiag.exe) Назначение: Выполнение разнообразных тестов для диагностики сети. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецепте: 14.18 NLTest (nltestexe) Назначение: Опрос, проверка и переустановка безопасного канала компьютера; получение списка контроллеров домена для заданного домена; поиск контролле- ра домена; определение сайта, в состав которого входит клиент, вывод информа- ции о сайтах, на которые распространяется область действия контроллера доме- на; регистрация записей ресурсов контроллера домена и их отмена; вывод данных о родительском домене; вывод сведений об отношениях доверия; определение ко- личества попыток подключения, обработанных данным контроллером домена; вы- ключение контроллера домена. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 3 9, 3.10, 3 12, 3.14, 8.6, 11.18, 11.20, 13 13, 13 16, 15.3. Nslookup (nslookup.exe). Назначение: Поиск записи ресурса в DNS Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецептах: 2.2, 2.4, 3.21, 3.28, 13.8. NTDS Util (ntdsutil.exe) Назначение: Выполнение задач по обслуживанию файлов каталога, проверка це- лостности и семантики DIT-фаила выполнение мягкого и полного восстановле- ния; просмотр информации о владельцах ролей FSMO; управление политиками запросов LDAP; поиск и удаление повторяющихся SID; удаление метаданных, связанных с вышедшим из строя контроллером домена; установка пароля адми- нистратора, входящего в группу операторов архива, для работы в режиме восста- новления службы каталогов Тип: Утилита с интерфейсом типа командной строки Местонахождение: Раздел 0/oSystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецептах: 2.5,2.6,2.24,3.6,3.26,3.27,4.16,4.23,14.4,16.3,16.5-16.9, 16.12, 16.15, 17.1, 17.3, 17.4, 17.8.
Список инструментальных средств 579 OID Generator (oidgen.exe) Назначение: Генерирует идентификатор объекта, который будет использоваться при создании нового класса или атрибута в схеме. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Windows 2000 Resource Kit. Используется в рецепте: 10.3. Redirect Default Computers (redircmp.exe) Назначение: Изменяет местоположение используемого по умолчанию контейне- ра computers в дереве каталога. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецептах: 8.12. Redirect Default Users (redirusr.exe) Назначение: Изменяет местоположение используемого по умолчанию контейне- ра users в дереве каталога. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows Server 2003. Используется в рецепте: 8.12. Reg (reg.exe) Назначение: Запрос, добавление, удаление, копирование, сохранение, восстанов- ление, загрузка, выгрузка, сравнение, экспорт и импорт параметров реестра и зна- чений. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 3.23, 10 1, 11.16, 11 18, 11.20, 1129, 12.4, 12.9, 13.13, 13.14, 14.17, 15.0, 15.1, 15.3, 15.4, 16.9, 16.13. Registry Editor (regeditexe) Назначение: Просмотр, запрос, добавление, удаление, переименование, экспорт, импорт и копирование параметров реестра. Тип: Утилита с графическим пользовательским интерфейсом. Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецептах: 3.22, 3.23, 11.17, 11.19, 11.21, 11.30, 12.5, 12.10, 14 18, 15.1, 15.2, 15.4, 15.5, 16.11, 16.14.
580 Приложение Rename Domain (rendom.exe) Назначение: Переименование домена (данную утилиту следует использовать лишь при условии, что функциональный уровень леса соответствует Windows Server 2003). Тип: Утилита с интерфейсом типа командной строки. Местонахождение: http://www.microsoft.com/windowsserver2003/downloads/domalnrenBme.mspx. Используется в рецепте: 2.8. Replication Diagnostics (repadmin.exe) Назначение: Вывод информации о плацдарме сайта и о топологии репликации для сайта; запуск средства проверки согласованности знаний; принудительная репликация; репликация одного объекта; инициирование процесса синхрониза- ции контекстов именования; просмотр состояния репликации для нескольких кон- троллеров домена; сравнение двух контроллеров домена; просмотр метаданных объекта; получение вектора актуальности и выполнение множества других функ- ций управления репликацией. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 11.13,11.22,11.23,11.25,11.27,12.1-12.4,12.8,12.12,17.7. Replication Monitor (replmon.exe) Назначение: Просмотр состояния репликации для контекста именования кон- троллера домена; принудительная репликация; принудительная синхронизация контекста именования; получение текущего USN; поиск домена, с которым связа- ны ошибки репликации; получение подробного отчета о состоянии и многое другое. Тип: Утилита с графическим пользовательским интерфейсом. Местонахождение: Пакет Support Tools для Windows 2000 и Windows Server 2003. Используется в рецептах: 11.13, 12.3. SecEdit (seceditexe) Назначение: Обновление установок групповой политики: анализ, настройка, экс- порт и проверка установок безопасности. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецепте: 9.21. Time Service (w32tm.exe) Назначение: Настройка и мониторинг Windows Time Service. Тип: Утилита с интерфейсом типа командной строки.
Список инструментальных средств 581 Местонахождение: Раздел %SystemRoot%\System32 в Windows 2000 и Windows Server 2003. Используется в рецепте: 3 13 Unlock (unlock.exe) Назначение: Поиск заблокированных пользователей и их разблокировка. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: http://www.joeware.net/win32/zips/Unlock.zip. Используется в рецепте: 6.9. UUID Generator (uuidgen.exe) Назначение: Генерирование идентификаторов UUID/GUID используемых при создании новых классов и атрибутов. Тип: Утилита с интерфейсом типа командной строки. Местонахождение: Пакет Windows 2000 Platform SDK. Используется в рецепте: 10.4. WinNT32 (winnt32.exe) Назначение: Обновление системы до Windows 2000 или Windows Server 2003, проверка возможности обновления. Тип: Мастер. Местонахождение: Раздел \i386 на CD-ROM Windows 2000 и Windows Server 2003 Используется в рецепте: 2.12.
Алфавитным указатель А АСЕ, элемент списка контроля доступа, 450 ACL, список контроля доступа 450 Active Directory — архивирование данных, 509 — восстановление нсавторизированное, 513 — дерево информации, 37, 168 507 — тестирование с помощью VMWare, 568 Active Directory Schema, оснастка 325 ADLB, утилита, 395 adprep, команда, 53, 54 ADSI, интерфейс Active Directory, 125 Apache, интеграция c Active Directory, 563 AVA, утверждение атрибут-значение, 152 В BIND, служба имен, 565 С classSchema, объект, 322, 338 computer, объект, 77, 254 Computers, контейнер, 254 connection, объект, 360 crossRef, объект, 40, 533 CSV, формат файлов, 166 D dcpromo, программа, 477 DDNS, протокол, 441 Default-First-Site-Name, объект, 94 Deleted Objects, контейнер, 508 DHCP-сервер, авторизация, 566 DIT, дерево информации, 507 DLT, служба отслеживания распределенных ссылок, 99 DN, отличительное имя, 117 DNS, служба доменных имен, 37. 421 — очистка кэша, 439 — параметры сервера, 435 — сборка мусора, 436 — тестирование, 440 dnsNode, объект, 422 dnsZone, контейнер, 422 Domain Controllers, подразделение, 89 domainDNS, объект, 38, 533 DSML, язык, 556 Е ESE, расширенный механизм хранения, 507 G GPO, объект групповой политики, 281 group, объект, 238 GUID, глобально уникальный идентификатор, 40, 117, 328 I inetOrgPerson, объект, 187, 189 ITG, генератор межсайтовой топологии, 94 J Java, доступ к Active Directory, 559
Алфавитный указатель 583 К КСС, средство проверки согласованности знаний, 94 Kerberos, протокол, 40, 450, 561 — использование с UDP, 472 — настройка, 473 — просмотр и удаление билетов, 471 — установка пароля пользователя, 214 L LDAP Browser/Editor, программа, 554 LDAP, протокол, 117, 553 — анонимный доступ, 454 — запрет запросов от клиентов, 456 — запрос — дорогостоящий, 489 — неэффективный, 489 — политика запросов, 161 — рекурсивное удаление объектов, 159 — управляющий объект, 124, 125 — Attribute Scoped Query, 136 — Cross Domain Move, 155 — Return Deleted Objects, 530 -STATS, 492 — Subtree Delete, 159 — критический, 125 — установка пароля пользователя, 213 — шифрование и цифровые подписи, 452 LDIF, формат файлов, 28, 164 linkTrackOMTEntry, объект, 100 HnkTrackVolEntry, объект, 100 List Object Access, режим, 468 м MicrosoftDNS, контейнер, 422 ММС, консоль, 25 MS КВ, база знаний Microsoft, 25 MSDN, документация для разработчиков, 25 msDS-QuotaContainer, объект. 475 N NetBIOS, протокол, 40 netmon, утилита, 84 NTDS Quotas, контейнер, 475 NTDS Settings (nTDSDSA), объект, 77, 78, 92, 101, 104, 361 NTDS Site Settings, объект, 360 О OID, идентификатор объекта, 327 organizationaiUnit, объект, 168 OU, организационное подразделение, 168 Р pagedResultsControl, объект LDAP, 134 Partitions, контейнер, 533 perfmon, программа — журналы трассировки, 496 — мониторинг Active Directory, 493 Perl, доступ к Active Directory, 557 Python, доступ к Active Directory, 560 Q quota, объект, 475, 476 R RDN, относительное отличительное имя, 117 resolver, процесс, 440 RID, относительный код безопасности, 76 RootDSE, объект, 118 S SAM, имя учетной записи, 193 Samba, интеграция с Active Directory, 562 Schema, контейнер, 322 server, объект, 78, 92 SID, код безопасности, 75 site, объект, 78, 360 siteLink, объект, 78, 360 Sites контейнер, 78, 360 SSL, протокол, 450, 451 subnet, объект, 78, 94, 360 subSchema, объект, 322 System, контейнер, 40 System.DirectoryServiccs, интерфейс, 555
584 Алфавитный указатель TLS, протокол, 450, 451 transport, объект, 364 trustedDomain, объект, 40 TTL, время жизни объекта, 148 и UDP, протокол, 472 UPN, имя участника-пользователя, 236 user, объект, 184 Users, контейнер, 184 USN, последовательный номер обновления, 117, 405 V VMWare, система, 568 W WINS, сервис, 45 WKGUID, идентификатор, 278 WMI, инфраструктура управления Windows, 69, 281 WMIPolicy, контейнер, 309 WQL, язык запросов, 72 А атрибут — вычисляемый, 348 — деактивизация (отключение), 355 —добавлснис/удаление из глобального каталога, 346 — индексирование, 340 , — копирование при копировании учетной записи пользователя, 342 — необязательный, 353 — нереплицируемый, 348 — обязательный, 353' — переопределение, 356 — поиск с использованием алгоритма ANR, 343 — просмотр атрибутов, 336 — связанный с другим атрибутом, 350 — установка для нескольких пользователей, 191 аудит доступа к каталогу, 498 аутентификация — быстрое связывание, 129 — параллельное связывание,Д28 В вектор актуальности, 405 восстановление — каталога — авторизированное, 516 — неавторизированное, 513 — объекта или поддерева, 515 время — жизни объекта, 148 — захоронения объектов, 508, 531 Г глобальный каталог — включение отключение, 100, 102 — отключение требования доступности, 108 — получение списка серверов, 102 группа, 238 — Domain Users, 251 — владелец, 239 — добавление и удаление членов, 243 — область действия, 238, 239, 245 — основная, 208, 239, 249 — перемещение, 245 — просмотр списка членов, 241, 242 — создание, 239 -тин, 238, 239, 245 — управление членством, 247 д дескриптор безопасности, 355 доверие, 37 — включение фильтрации SID, 75 — к сфере Kerberos, 66 — лесов, создание, 63 — переустановка, 72 — проверка, 70 — просмотр, 67 — создание, 61 — сокращенное, 65
Алфавитный указатель 585 доверие (продолжение) — транзитивное, 38 — удаление, 73 домен, 37 — NetBIOS-имя, 48 — анатомия, 38 — изменение режима работы, 50 — переименование, 49 — переустановка доверия, 72 — повышение функционального уровня до Windows Server 2003, 57 — подготовка к переводу в режим Windows Server 2003, 53, 54 — поиск объектов, 130, 133 — поиск повторяющихся SID, 75 — проверка готовности к переводу в режим Windows Server 2003, 56 — проверка доверия, 70 — просмотр структуры, 170 — создание, 43 — создание доверия, 61, 65 — список доверительных отношений, 67 — ссылок дескрипторов безопасности, 547 — удаление, 44, 45 — удаление доверия, 73 3 запись ресурса — поиск, 434 — регистрация контроллером домена, 442, 444 — создание, 431 — статическая, 436 — удаление, 431 запись учетная — компьютера, 254 — перемещение, 264 — переустановка, 269 — поиск для заданной оперционной системы, 275 — поиск неактивных, 270 — создание, 255, 256 — пользователя, 184 — блокировка, 199 — включение и отключение, 204 — выводимое имя, 234 — изменение имени пользователя, 193 запись учетная (продолжение) — копирование, 195 — основная группа, 208 — параметры, 222 — пароль, 212-217, 219 — перемещение в другой контейнер 192 — поиск заблокированных записей, 198 — поиск отключенных записей, 205 — политики блокировки, 200 — разблокирование, 197 — создание, 186, 187 — срок действия, 225, 226 — членство в группах, 207, 210 зона — делегирование управления, 430 — дополнительная 421 — интегрированная с Active Directory, 421 — перемещение, 428 — преобразование, 427 — обратного просмотра, 424 — основная, 421 — получение списка зон, 425 — прямого просмотра 422 И имя — атрибута — выводимое LDAP, 324, 336 — относительное отличительное, 324, 336 — группы - SAM, 239 — относительное отличительное, 238 — класса — выводимое LDAP, 323 — относительное отличительное, 323 — компьютера - DNS, 254 -NetBIOS, 255 — относительное отличительное, 254 — объекта — выводимое, 117 — относительное отличительное, 117 — пользователя - SAM, 193 - UPN, 236 — выводимое, 234
586 Алфавитный указатель К канал, защищенный, 268 каталог, глобальный — добавление и удаление атрибутов, 346 — поиск объектов, 132 квота — захороненного объекта, 476, 502 — использованная часть, 505 — на создание объектов, 475 — определение, 500-502, 504 класс, 117 — деактивизация (отключение), 355 — параметры безопасности по умолчанию, 354 — переопределение, 356 — просмотр атрибутов, 339 — тип, 351 код безопасности, 52 компьютер — переименование, 266 — присоединение к домену, 262, 273 — тестирование защищенного канала, 268 контейнер, 168 — Computers, 254 — Deleted Objects, 508 — dnsZone, 422 — MicrosoftDNS, 422 — NTDS Quotas, 475 — Partitions, 533 — Schema, 322 — Sites, 78, 360 — System, 40 — Users, 184 — WMIPolicy, 309 — групповой политики, 281 — объектов computer, используемый по умолчанию, 277, 279 — удаление, 159 контекст — домена, 41 — конфигурации, 41 — схемы, 41 контроллер домена, 77 — включение и отключение глобального каталога, 100, 102 — использование внешнего источника времени, 96 — определение числа попыток входа, 98 — переименование, 88 — перемещение в другой сайт, 93 — поиск ближайшего, 90 — поиск сайта, 91 — понижение роли, 81, 82, 84, 85 — предоставляемые службы, 95 — регистрация записей ресурсов, 442, 444 — создание, 79, 80, 82, 84 — удаление вручную, 85 — удаление записей ресурсов, 447 кэш схемы, 358, 357 кэширование информации о членстве в универсальных групйах, 251 Л лес, 37 — UPN-суффикс, 236 — анатомия, 41 — повышение функционального уровня до Windows Server 2003, 59 — создание, 41 — создание доверия лесов, 63 — список доменов, 47 — удаление, 42 локатор контроллеров домена, 90, 119 м Мастер делегирования управления — использование, 457 — настройка, 458 метаданные объекта, 419 мост связей сайтов, 380 н номер обновления последовательный, 405
Алфавитный указатель 587 О объект, 117 — connection, 360 — classSchema, 322, 338 — computer, 77, 254 — crossRef, 40, 533 — dnsNode, 422 — dnsZone, 422 — domainDNS, 38, 533 — group, 238 — inetOrgPerson, 187, 189 — LDAP управляющий, 124, 125 — linkTrackOMTEntry, 100 — linkTrackVolEntry, 100 — msDS-QuotaContainer, 475 -NTDS Settings (nTDSDSA), 77, 78, 92, 101,361 — NTDS Site Settings (nTDSSiteSettings), 360 — organizationalUnit, 168 — pagedResultsControl, LDAP,' 134 — quota, 475,476 — RootDSE, 118 — server, 78, 92 — site, 78, 360 — sitelink, 78, 360 — subnet, 78, 94, 360 — subSchema, 322 — transport, 364 — trustedDomain, 40 — user, 184 — восстановленный, 416 — время жизни, 148 — время создания и последнего обновления, 160 — групповой политики, 281 — изменение, 292 — импорт, 293 — копирование, 285 — наследование, 304 — отключение установок, 298 — поиск, 283 — просмотр, 290 — резервное копирование, 312, 345 — связи, 300, 302 — создание, 284 объект (продолжение) — сценарии, 296 — связывание с подразделением, 181 — удаление, 288 — управление, 281 — установка приложений, 297 — фильтрация WMI, 308, 310 — фильтрация групповая, 306 — динамический — время жизни, 150 — обновление, 149 — создание, 147 — захороненный, 81, 501, 508 — восстановление, 529 — поиск, 527 — зомби, 508 — изменение значений атрибутов, 142, 144 — импорт из файла CSV, 166 — импорт из файла LDIF, 165 — метаданные, 419 — переименование, 155 — перемещение, 153, 154 — поиск в глобальном каталоге, 132 — поиск в домене, 130 — просмотр значений атрибутов, 121 — просмотр разрешений, 463 — создание, 140 — удаление, 157 — экспорт в файл CSV, 166 — экспорт в файл LDIF, 164 оснастка ММС, 25 отношение доверительное, 37 п пароль пользователя — задание, 212, 213, 214 — запрет изменения, 215 — смена, 216 — срок действия, 217, 219 плацдарм, 381 подразделение, 168, 170 — Domain Controllers, 89 — делегирование управления, 179 — определение количества объектов, 178- — перемещение, 177
588 Алфавитный указатель подразделение (продолжение) — перемещение объектов, 175 — просмотр содержимого, 172 — связывание с GPO, 181 — создание, 169, 180 — удаление, 174 — удаление объектов, 173 подсеть, 360 поиск — по значениям составных атрибутов, 135 — с помощью поразрядного фильтра, 137 политика — групповая, восстановление, 320 — результирующая, эмуляция, 317, 318 пользователь — владение объектами, 233 — время последнего входа, 228, 230 — основная группа, 249 правило соответствия, 138 пространство имен, 37 протоколирование — Kerberos, 483 — диагностическое, 478 — неэффективных и дорогостоящих запросов LDAP, 489 — обработки GPO, 481 — программы dcpromo, 477 — процесса NetLogon, 480 — сервера DNS, 484 — удаления захороненных объектов, 525 профиль пользователя, параметры, 232 Р раздел — приложений, 533, 41 ' — делегирование урпавления, 549 — домен ссылок дескрипторов безопасности, 547 — задержки репликации, 545 — поиск, 536, 542 — проверка правильности установки, 544 — сервер репликации, 538, 540, 542 — создание, 534 — удаление, 534 раздел (продолжение) — домена, 41 — конфигурации, 41 — схемы, 41 разрешение на запись свойства, 248 расписание доступности связей сайтов, 378 редактор ACL, настройка, 462 режим восстановления службы каталогов, 508, 511, 512 репликация, 404 — внутрисайтовая, 411 — конфликт, 417 — межсайтовая, 412 — метаданные объекта, 419 — период, 411, 412 — принудительная, 409 — проблемы, 414 — просмотр нереплицированных изменений, 406 — просмотр сведений, 405 — расширенное протоколирование, 415 — сжатие трафика, 413 — синхронизация контроллеров домена, 404 — строгая/слабая согласованонсть.,415 роль FSMO — назначение, 115 — передача, 113 — хозяина операций, 77, Г12 С сайт, 360 — получение списка контроллеров домена, 104, 106 — получение списка серверов глобального каталога, 104, 106 сбор мусора, 524 связывание, 28 -WKGUID, 278 — бессерверное, 28, 30 — быстрое, 128, 123 — динамическое пользовательских классов, 146 — параллельное, 128
Алфавитный указатель 589 связь сайтов, 360 — мост, 380 — стоимость, 378 — транзитивность, 378 сервер — плацдарм, 381 — повышение роли до контроллера домена, 79, 80, 82, 84 список контроля доступа, 450 — изменение — для класса, 465 — для объекта, 464 — переустановка, 466 — просмотр, 460 — сравнение со схемой, 466 — элемент, 450 статисника — запросов LDAP, 492 — производительности сервера DNS, 487 стоимость связи (репликации), 373, 378 суффикс имени компьютера, 447 сфера Kerberos, создание доверия, 66 схема, 322 — кэш, 358 — разрешение изменения, 326 — расширение, 330 — добавление атрибута, 331 — добавление класса, 337 — документирование, 331 тип класса, 351 топология — репликации, 360 топология (продолжение) — сети, 360 транзитивность связей сайтов, 378 Ф файл базы данных Active Directory (DIT), 507 — восстановление, 518 — дефрагментация, 519, 522 — исправление, 518 — определение объема свободного пространства, 521 — определение размера, 526 — перемещение, 517 — проверка це. остности и семантики, 516 флаг битовый, 144 X хозяин -RID, 112 — именования домена, 112 — инфраструктуры, 112 — операций, 77, 110,112 — схемы, 112 — эмулятора PDC, 112 хэш-значепие LAN Manager, 467 ш шаблон групповой политики, 281 э эмулятор PDC, 112, 116
Робби Аллен Active Directory. Сборник рецептов Для профессионалов Перевод Редактор Корректор Технический редактор Художник О. Здир И. Карпышенко И. Карпышенко О. Зап.чаткнна Н. Биржаков Лицензия ИД № 05784 от 07.09.01. Подписано в печать 06.07.04. Формат 70X100/16. Уел. п. л. 47.73. Тираж 3000 зкз. Заказ Хе 2934. ООО «Мзда гельская группа ВН V» Свидетельство о занесении в Государственный реестр серия Д К № 175 от 13.09.2000. ООО «Питер Принт». 196105, Санкг-Пщербург, ул. Благодатная, л. 67в. Налоговая льгота общероссийский классификатор продукции ОК 005-93, том 2; 953005 — литература учебная. Отпечатано с готовых дианози j ивон в ФГУП «Печатный двор» им. А. М. Горького Министерства РФ по делам печати, телерадиовещания и средств массовых коммуникаций. 197110, Санкт-Петербург, Чкаловский пр., 15.
ИЗДАТЕЛЬСКИЙ ДОМ СПЕЦИАЛИСТАМ КНИЖНОГО БИЗНЕСА! ПРЕДСТАВИТЕЛЬСТВА ИЗДАТЕЛЬСКОГО ДОМА «ПИТЕР» предлагают эксклюзивный ассортимент компьютерной, медицинской, психологической, экономической и популярной литературы РОССИЯ Москва м. «Калужская», ул. Бутлерова, д. 176, офис 207, 240; тел./факс (095) 777-54-67; e-mail: sales@piter.msk.ru Санкт-Петербург м. «Выборгская», Б. Сампсониевский пр., д. 29а; тел. (812) 103 73-73, факс (812) 103-73-83; e-mail: sales@piter.com Воронеж ул. 25 января, д. 4; тел. (0732) 27-18-86; e-mail: piter-vrn@vmail.ru; piterv@comch.ru Екатеринбург ул. 8 Марта, д. 2676; тел ./факс (343) 225-39-94, 225-40-20; e-mail: p ter-ural@r66.ru Нижний Новгород ул. Премудрова, д. 31а; тел. (8312) 58-50-15, 58-50-25; e-mail: piter@infonet.nnov.ru Новосибирск ул. Немировича-Данченко, д. 104, офис 502; тел/факс (3832) 54-13-09,47-92-93,11-27-18,11-93-18; e-mail: piter-sib@risp.ru Ростов-на-Дону ул. Калитвинская, д. 17в; тел. (8632) 95-36-31, (8632) 95-36-32; e-mail: jupiter@rost.ru Самара ул. Новосадовая, д. 4; тел. (8462)37-06-07; e-mail: piter-volga@sama.ru УКРАИНА Харьков ул. Суздальские ряды, д. 12, офис 10—11, т. (057) 712-27-05, 712-40-88; e-mail: piter@tender.kharkov.ua Киев пр. Красных Казаков, д. 6, корп. 1; тел./факс (044) 490-35-68,490-35-69; e-mail: office@piter-press.kiev.ua БЕЛАРУСЬ Минск ул. Бобруйская д., 21, офис 3; тел./факс (37517) 226-19-53; e-mail: piter@mail.by МОЛДОВА Кишинев «Ауратип-Питер»; ул. Митрополит Варлаам, 65, офис 345; тел. (3732) 22-69-52, факс (3732) 27-24-82; e-mail: lili@auratip.mldnet.com Ищем зарубежных партнеров или посредников, имеющих выход на зарубежный рынок. Телефон для связи: (812) 103-73-73. E-mail: grigorjan@piter.com Издательский дом «Питер» приглашает к сотрудничеству авторов. Обращайтесь по телефонам: Санкт-Петербург - (812) 327-13-11, Москва - (095) 777-54-67. Заказ книг для вузов и библиотек: (812) 103-73-73. Специальное предложение - e-mail: kozin@piter.com
O’REILLY® Active Directory. Сборник рецептов для Windows Server2003 и Windows2000 ДЛЯ ПРОФЕССИОНАЛОВ В книге предлагаются решения широкого круга задач, связанных с установкой, сопровождением и эксплуатацией Active Directory. Ее автор Робби Аллен делится с читателями своим бесценным опытом, полученным за годы эксплуатации этого продукта. Здесь содержатся решения сотен разнообразных задач — от сценариев добавления пользователей в службу каталогов до советов по выявлению и устранению ошибок репликации. Автор дает несколько вариантов решения одной и той же задачи: с использованием графического пользовательского интерфейса, интерфейса типа командной строки и сценариев на языках VBScript и Perl. Задачи разделены на категории, такие как работа с учетными записями пользователей, групп и компьютеров, а также с лесами, доверительными отношениями, глобальными каталогами, организационными подразделениями, объектами групповой политики, схемой Active Directory Подробно освещены вопросы, связанные с резервным копированием, репликацией, обеспечением безопасности, интеграцией с наиболее важными системными компонентами, в частности со службой доменных имен DNS, с использованием аутентификационного протокола Kerberos. Одним словом, в книге представлены решения ряда проблем, зачастую кажущихся неразрешимыми даже самым опытным специалистам. РЕПИТЕР (ЬпУ Серия: для профессионалов Уровень пользователя: опытный/эксперт Посетите web-сайт издательства O'Reilly: www.oreilly.com Посетите наш web-магазин: http://www.piter.com Посетите web-сайт BHV-Киев: http://www.bhv.kiev.ua