Redircmp и Redirusr или как поменять контейнер по умолчанию в AD

Обновлено 19.07.2019

Active Directory

Добрый день! Уважаемые читатели и гости популярного IT блога Pyatilistnik.org. В предыдущий раз мы с вами подробнейшим образом рассмотрели, как самостоятельно проводить диагностику синего экрана Windows, рад что та статья вам понравилась, если вы ее пропустили, то советую наверстать это. В сегодняшней публикации я вам хочу рассказать и показать применение утилит командной строки Redircmp и Redirusr и как благодаря их возможностям вы поможете перенаправить пользователей и компьютеры при создании со стандартных контейнеров Computers и Users на нужные вам. Я покажу сценарии, когда это полезно и применимо.

Описание задачи

Когда у вас в Active Directory вводят в домен новый компьютер или создается скриптом новый пользователь, то по умолчанию их местоположение в иерархии подразделений определено с самого начала, для компьютеров, это контейнер "Computers", а для пользователей, это контейнер "Users". Вроде бы в этом нет ничего плохого и я с этим соглашусь, но это можно улучшить и сделать более функциональным. Если вы знакомы с инструментом групповых политик, то должны знать, что к контейнерам новые политики, созданные вами не применяются, в этом их ограничение и слабость.

Простой пример, вы добавили новый компьютер в домен, он попал в "Computers". Далее вам по корпоративным стандартам хотелось бы применить к данному компьютеру групповые политики, которые у вас есть на предприятии, напоминаю, что к контейнерам вы это сделать не можете и вам приходится перемещать сам объект в нужную OU, вроде не сложно но согласитесь не так удобно. Теперь представим, что у вас есть SCCM или WDS-сервер с которого идет автоматическая установка новых систем, и если они попадают уже не в контейнер а в OU, то к ним сразу применяются групповые политики, которые уже делают тот минимальный корпоративный стандарт, позволяющий вам их легко администрировать в любом виде, так как вы сразу можете включить RDP или назначить нужные права на доступ, выполнить скрипты и многое другое, потом вам никто не мешает так же перенести объект в нужное месторасположение, с единственной разницей, что он уже будет настроен. Ниже я покажу, как это исправить.

Что такое Redircmp и Redirusr

Чтобы произвести перенаправление пользователей и компьютеров в Active Directory в нужное расположение есть две утилиты командной строки Redircmp и Redirusr.

Redircmp - Перенаправляет контейнер по умолчанию для вновь созданных компьютеров в указанную целевую организационную единицу (OU), чтобы вновь созданные объекты компьютеров создавались в определенной целевой OU, а не в CN=Computers.

Redirusr - Перенаправляет контейнер по умолчанию для вновь созданных пользователей в указанную целевую организационную единицу (OU), чтобы вновь созданные пользовательские объекты создавались в определенной целевой OU, а не в CN=Users.

Redircmp и Redirusr

Данная утилита идет по умолчанию на контроллерах домена, если вы ее хотите поставить на другом сервере, то придется установить Windows Resource Kit.

Как проверить контейнеры по умолчанию

Если вы так же как и я давно знакомы с архитектурой Active Directory, то должны знать, что в схеме есть атрибут wellKnownObjects, описывающий какие контейнеры имеют значения по умолчанию, для новых компьютеров и пользователей. Для начала вы можете найти данный атрибут в вашей схеме, подключившись их редактора ADSIEdit.msc в контекст именования имен.

Как проверить контейнеры по умолчанию
Откройте свойства корневого контейнера и найдите атрибут wellKnownObjects, попытавшись посмотреть его значение вам покажут, что "Не существует зарегистрированного редактора для атрибута этого типа (There is no editor registered to handle this attribute type)". Это означает, что это защита от дурака, чтобы новоявленный системный администратор не натворил дел.

атрибут wellKnownObjects
Когда я, что-то не могу сделать в ADSIEdit, то всегда вспоминаю про замечательную утилиту от Марка Русиновича AD Explorer. Она дает большие возможности для просмотра и изменения значений атрибутов Active Directory. Открыв AD Explorer. вам необходимо указать сервер и учетные данные, которые будут использоваться для подключения, если вы работаете в учетной записи с нужными правами, то можете ничего не вводить, утилита сама найдет значения по умолчанию.

Запуск AD Explorer

Тут вы сразу увидите все составляющие базу данных Active Directory, файл NTDS.dit:

  • Контекст по умолчанию
  • Раздел конфигурации
  • Схема
  • DNS зоны на уровне домена
  • DNS зоны на уровне леса

AD Explorer контекст именования

Выбираете контекст именования и находите там атрибут wellKnownObjects. Смотрим его содержимое, в моем примере оно выглядит вот так:

98 39 240 175 31 194 65 13 142 59 177 6 21 187 91 15, CN=NTDS Quotas,DC=root,DC=pyatilistnik,DC=org
244 190 146 164 199 119 72 94 135 142 148 33 213 48 135 219, CN=Microsoft,CN=Program Data,DC=root,DC=pyatilistnik,DC=org
9 70 12 8 174 30 74 78 160 246 74 238 125 170 30 90, CN=Program Data,DC=root,DC=pyatilistnik,DC=org
34 183 12 103 213 110 78 251 145 233 48 15 202 61 193 170, CN=ForeignSecurityPrincipals,DC=root,DC=pyatilistnik,DC=org
24 226 234 128 104 79 17 210 185 170 0 192 79 121 248 5, CN=Deleted Objects,DC=root,DC=pyatilistnik,DC=org
47 186 193 135 10 222 17 210 151 196 0 192 79 216 213 205, CN=Infrastructure,DC=root,DC=pyatilistnik,DC=org
171 129 83 183 118 136 17 209 173 237 0 192 79 216 213 205, CN=LostAndFound,DC=root,DC=pyatilistnik,DC=org
171 29 48 243 118 136 17 209 173 237 0 192 79 216 213 205, CN=System,DC=root,DC=pyatilistnik,DC=org
163 97 178 255 255 210 17 209 170 75 0 192 79 215 216 58, OU=Domain Controllers,DC=root,DC=pyatilistnik,DC=org
170 49 40 37 118 136 17 209 173 237 0 192 79 216 213 205, CN=Computers,DC=root,DC=pyatilistnik,DC=org
169 209 202 21 118 136 17 209 173 237 0 192 79 216 213 205, CN=Users,DC=root,DC=pyatilistnik,DC=org

AD Explorer атрибут wellKnownObjects

В самом конце я вижу два контейнера Computers и Users. Тут вы их то же не поменяете.

То же самое можно и посмотреть через оболочку PowerShell. Запустите PowerShell и введите:

$ListWKO = Get-ADObject (Get-ADRootDSE).DefaultNamingContext -Properties wellKnownObjects

$ListWKO.wellKnownObjects

PowerShell атрибут wellKnownObjects

Как сменить контейнеры по умолчанию

Чтобы вы могли поменять значения атрибута wellKnownObjects и выставить для новых компьютеров и пользователей контейнер по умолчанию, вы может воспользоваться описанными выше утилитами командной строки redircmp и redirusr.

Предположим, что для компьютеров я хочу сделать OU по умолчанию Client Computers. Для этого смотрим его Distinguished Name и в командной строке от имени администратора введите:

redircmp OU=Client Computers,DC=root,DC=pyatilistnik,DC=org

redircmp и redirusr
У вас в процессе выполнения команды может выскочить ошибка:

Ошибка. Не удалось изменить атрибут wellKnownObjects. Проверьте, что функциональный уровень домена не ниже Windows Server 2003: Ошибка операции. Неудачное перенаправление

Не удалось изменить атрибут wellKnownObjects
Тут вариантов несколько:

  1. В вашем пути DN присутствуют пробелы, поэтому их нужно брать в кавычки "".
  2. Могут быть лишние проблемы между запятыми, проверьте, что их нет
  3. Удостоверьтесь, что у вас уровень леса не ниже Windows Server 2003. Как узнать и изменить уровень леса, читайте по ссылке
  4. Могут быть проблемы с репликацией, в моем конкретном случае у меня был мертвый контроллер домена, который я удалил из своей инфраструктуры, после очистки метаданных, о его существовании, команда redircmp отработала без проблем.

Так же изменить стандартный контейнер Computers вы можете и через PowerShell, для этого есть вот такая конструкция:

Set-ADObject (Get-ADRootDSE).DefaultNamingContext -Remove @{wellKnownObjects = "B:32:AA312825768811D1ADED00C04FD8D5CD:CN=Computers,DC=root,DC=pyatilistnik,DC=org" } -Add @{wellKnownObjects = "B:32:AA312825768811D1ADED00C04FD8D5CD:OU=Client Computers,DC=root,DC=pyatilistnik,DC=org" } -server (Get-ADDomain).PDCEmulator

PowerShell поменять контейнеры по умолчанию

Аналогично мы можем поменять контейнер для пользователя

redirusr "OU=Пользователи,DC=root,DC=pyatilistnik,DC=org"

redircmp и redirusr

Скрипт powerShell для смены контейнеров

## Задаем новые цели перенаправления
$dnc = (Get-ADRootDSE).DefaultNamingContext
# Перенаправление Users на новое место
$newusers = "OU=Новички," + $dnc
# Перенаправление Computers на новое место
$newcomps = "OU=Новые компьютеры," + $dnc

# Получаем текущие значения (from wellKnownObjects attribute)
$wkos = Get-ADObject -Identity $dnc -pr wellKnownObjects | select -ExpandProperty wellKnownObjects

# Находим наш текущий контейнер для пользователей
$curuwko = $wkos | ? {$_ -like "*OU=Пользователи,*"}
# Split the value into its constituent parts
$datusers = $curuwko.split(":")

# Находим наш текущий контейнер для компьютера
$curcwko = $wkos | ? {$_ -like "*OU=Client Computers,*"}
# Split the value into its constituent parts
$datcomps = $curcwko.split(":")

# Заменяем контейнер по умолчанию для пользователей
$newuwko = $datusers[0] + ":" + $datusers[1] + ":" + $datusers[2] + ":" + $newusers
# Заменяем контейнер по умолчанию для компьютера
$newcwko = $datcomps[0] + ":" + $datcomps[1] + ":" + $datcomps[2] + ":" + $newcomps

Теперь откройте AD Explorer и проверьте значение атрибута wellKnownObjects, как видим все удалось.

wellKnownObjects-11
На этом у меня все, мы с вами познакомились с двумя полезными утилитами Redircmp и Redirusr. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *