Включение/отключение SID History

Немало уже копий сломал и бессонных ночей провел, осуществляя миграции при помощи утилиты Active Directory Migration Tools (ADMT), однако наибольшие затруднения у меня вызывали проблемы использования SID history  при миграциях в разные домены. Этот пост – небольшая заметка для самого себя о том, как работает SID History.

Что такое SID History

SID History – это атрибут объекта в Active Directory, который хранит старый Security IDentifier(SID), наиболее часто применяется при различного рода миграций. Итак, представьте ситуацию:  у вас есть два домена старый и новый, и вам нужно переместить пользователей в новый домен, но так, чтобы новые учетки в новом домене сохранили доступ к их старым папкам и файлам. Это необходимо для того, чтобы уменьшить трудоемкость и «нервозность» процесса миграции, чтобы администратору не пришлось переназначать разрешения на сетевые шары, папки, приложения и т.д. Чтобы иметь возможность использовать SID history, вам необходимо отключить фильтрацию SID (SID Filtering ) и активировать SID History и доверительные отношения между двумя доменами.

Чтобы включить «SID History on a trust», воспользуйтесь следующей командой:

netdom trust domain.local /domain:microsoft.com /enableSIDhistory:yes

Что такое SID Filtering

SID Filtering  – эта мера безопасности, которая призвана защитить ваше новое окружение от потенциального злоумышленника, который может проникнуть из старого домена. Хотя вы можете подумать, что старый домен после миграции не несет угрозы, так как не нужен, я, учитывая мой опыт миграций, могу сказать, что в большинстве случаев старый домен остается активным еще некоторый (иногда длительный) период времени, но вся административная работа с ним (установка обновлений и патчей, управление доступом и анализ логов) сводится к минимальному набору работ или не ведется совсе. Это и создает потенциально небезопасную среду, уязвимостями в которой  может воспользоваться злоумышленник и проникнуть в старый домен.

Именно по этой причине SID Filtering – это неплохая, но не обязательная функция, которая полностью блокирует использование SID History, которая так важна при осуществлении миграции.  Следующая команда позволяет отключить SID Filtering:

Netdom trust domain.local  /domain: microsoft.com /quarantine:No /userD: domain_admin /passwordD: adminpa$$

ввод компьютера в домен Active Directory без связи с доменом

Автономный ввод в домен Active Directory

Илья Рудь

Хотелось бы поделиться новой возможностью появившейся с выходом Windows 7 и Windows Server 2008 R2. В оригинале называется она – «offline domain join». Спорить о том, как правильно перевести на родной язык данный термин можно долго. Я остановился на варианте «автономный ввод в домен». В чем суть? Она проста. Если при введении предыдущих версий ОС в домен вам было необходимо иметь сетевое соединение с контроллером домена, то при вводе Windows 7/2008 R2 это не обязательно. Сфера применения данной возможности мне пока ясна не до конца, если у вас есть мысли, прошу поделиться в комментариях. Будем считать, что вы администрируете два леса Active Directory, не связанных между собой. Перед вами стоит задача настроить рабочую станцию, отправить ее в другой филиал и соответственно в другой лес AD. И естественно вы хотите сделать так, чтобы по приезду в место назначения этот компьютер можно было подключить в сеть и начать работать.

Важно: Для
использования «offline domain join» не нужно поднимать режим работы домена
или леса. Более того, не нужно иметь контроллеры домена Windows 2008 или 2008
R2. Для «Автономного
ввода в домен» используется утилита «djoin»,
которая присутствует в Windows 7/2008 R2. Т.е достаточно хотя бы одного
компьютера Windows 7/2008 R2, работающего в домене назначения.

Логика работы «Автономного ввода в домен»

1. На любом контроллере Windows 2008 R2 или клиентском
Windows 7 в домене назначения запускаем утилиту «djoin» со следующими ключами:

djoin /provision
/domain itband.ru /machine Win7-PC /dcname DC-SQL2005 /downlevel /savefile C:\blob.txt


itband.ru
– имя вашего домена


Win7-PC
– имя клиентского компьютера, который должен автономно
войти в домен


DC-SQL2005
– имя контроллера домена

/downlevel – ключ указывается, если у вас контроллер домена
Windows Server 2003

C:\blob.txt
путь к файлу с метаданными

После ввода данной команды формируется текстовый файл
содержащий необходимые данные для того, чтобы компьютер мог войти в домен
(информация об имени домена, контроллера домена, SID домена и т.д.) Плюс к
этому, в Active Directory создается объект «компьютер» для будущего клиента. Файл в
кодировке base64. Подробней
о данном файле.

Рис. 1. Первый шаг,
использование Djoin

2. Вторым шагом необходимо доставить данный файл blob.txt на компьютер, который должен
автономно войти в домен. Какими средствами вы это сделаете, зависит от вас.
Хоть по почте пересылайте.

3. Доставив данный файл на клиентский компьютер, необходимо
запустить командную строку и выполнить «djoin» со следующими ключами:

djoin /requestODJ
/loadfile C:\blob.txt /windowspath
%SystemRoot% /localos

Произойдет импортирование данных из файла в каталог Windows.
Теперь при следующей загрузке операционной системы и доступности контроллера у
вас будет возможность войти в домен Active Directory.

Рис. 2. Третий шаг,
использование Djoin

С одной стороны функционал более чем интересный, с другой
появляется гипотетическая возможность того, что кто-то сможет перехватить или
завладеть таким файлом «Приглашением» и включить свой компьютер в домен, не
имея никаких на это прав. Или это просто паранойя?

На текущий момент информации по «offline domain join» очень
мало. В частности я не смог найти, есть ли какой-то срок жизни у такого
файла-приглашения. Хотя если рассуждать логически, можно предположить, что он
(срок жизни) равен сроку жизни пароля объекта «компьютер». Оригинальная
информация на английском языке
.

оригинал статьи

Смена OU для компьютеров по умолчанию в Active Directory

При включении компьютера в домен Active Directory при помощи GUI Windows или команды NETDOM.EXE,по умолчанию вновь созданный объект попадает в контейнер (OU) Computers, который является контейнером по-умолчанию для всех вновь созданный объектов типа «Computer».

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

Разберемся, где же хранятся настройки, определяющие OU  по-умолчанию для компьютеров домена. Откройте консоль Active Directory Users and Computers или же консоль ADSI Edit, при помощи контекстного меню перейдите в свойства домена, а затем перейдите на вкладку Attribute Editor.

Контейнер AD, в который попадают по-умолчанию новые компьютеры, определяются в атрибуте wellKnownObjects.

description: image

Но при попытке дважды щелкнуть по этому атрибуту, появится окно с ошибкой о том, что нет зарегистрированного редактора для обработки такого типа атрибутов. Я предполагаю, что данный атрибут просто защищен от ручного внесения изменений. Поэтому для доступа к данному параметру, я воспользуюсь замечательной утилитой от Марка Русиновича – Active Directory Explorer.

Атрибут  wellKnownObjects содержит примерно такую информацию:

98 39 240 175 31 194 65 13 142 59 177 6 21 187 91 15, CN=NTDS Quotas,DC=LABHOME,DC=local

244 190 146 164 199 119 72 94 135 142 148 33 213 48 135 219, CN=Microsoft,CN=Program Data,DC=LABHOME,DC=local

9 70 12 8 174 30 74 78 160 246 74 238 125 170 30 90, CN=Program Data,DC=LABHOME,DC=local

34 183 12 103 213 110 78 251 145 233 48 15 202 61 193 170, CN=ForeignSecurityPrincipals,DC=LABHOME,DC=local

24 226 234 128 104 79 17 210 185 170 0 192 79 121 248 5, CN=Deleted Objects,DC=LABHOME,DC=local

47 186 193 135 10 222 17 210 151 196 0 192 79 216 213 205, CN=Infrastructure,DC=LABHOME,DC=local

171 129 83 183 118 136 17 209 173 237 0 192 79 216 213 205, CN=LostAndFound,DC=LABHOME,DC=local

171 29 48 243 118 136 17 209 173 237 0 192 79 216 213 205, CN=System,DC=LABHOME,DC=local

163 97 178 255 255 210 17 209 170 75 0 192 79 215 216 58, OU=Domain Controllers,DC=LABHOME,DC=local

 

 

170 49 40 37 118 136 17 209 173 237 0 192 79 216 213 205, CN=Computers,DC=LABHOME,DC=local

 

169 209 202 21 118 136 17 209 173 237 0 192 79 216 213 205, CN=Users,DC=LABHOME,DC=local

Теперь, когда мы поняли, где хранится нужный нам параметр, попробуем изменить его. Как я уже говорил, атрибут wellKnownObjects  нельзя отредактировать при помощи консолей AD, наверное, это и к лучшему )). Для модификации этого параметра Microsoft разработала специальную утилиту, которая называется redircomp.exe, которая хранится в папке %SystemRoot%\System32 (на системах Windows Server 2003/2008).

Перед использованием утилиты redircomp.exe, создадим новый Organizational Unit, в который в дальнейшем будут  попадать объекты Computer. Для примера я создал OU StagedComputers.  Выполним следующую команду:

redircmp OU=StagedComputers,DC=LABHOME,DC=local
description: image

А затем при помощи Active Directory Explorer просмотрим содержимое атрибута wellKnownObjects (как вы увидите, оно изменилось):

170 49 40 37 118 136 17 209 173 237 0 192 79 216 213 205, OU=StagedComputers,DC=LABHOME,DC=local

98 39 240 175 31 194 65 13 142 59 177 6 21 187 91 15, CN=NTDS Quotas,DC=LABHOME,DC=local

244 190 146 164 199 119 72 94 135 142 148 33 213 48 135 219, CN=Microsoft,CN=Program Data,DC=LABHOME,DC=local

9 70 12 8 174 30 74 78 160 246 74 238 125 170 30 90, CN=Program Data,DC=LABHOME,DC=local

34 183 12 103 213 110 78 251 145 233 48 15 202 61 193 170, CN=ForeignSecurityPrincipals,DC=LABHOME,DC=local

24 226 234 128 104 79 17 210 185 170 0 192 79 121 248 5, CN=Deleted Objects,DC=LABHOME,DC=local

47 186 193 135 10 222 17 210 151 196 0 192 79 216 213 205, CN=Infrastructure,DC=LABHOME,DC=local

171 129 83 183 118 136 17 209 173 237 0 192 79 216 213 205, CN=LostAndFound,DC=LABHOME,DC=local

171 29 48 243 118 136 17 209 173 237 0 192 79 216 213 205, CN=System,DC=LABHOME,DC=local

163 97 178 255 255 210 17 209 170 75 0 192 79 215 216 58, OU=Domain Controllers,DC=LABHOME,DC=local

169 209 202 21 118 136 17 209 173 237 0 192 79 216 213 205, CN=Users,DC=LABHOME,DC=local

И наконец, с целью тестирования, я попробовал включить Windows XP (имя ПК VMXP-001) в домен LABHOME, действительно новый объект типа Computer появился в контейнере StagedComputers.

description: image

 

Защищаем и оптимизируем RDP

Защищаем и оптимизируем RDP

 

Введение

Протокол RDP – удобное, эффективное и практичное средство для удалённого доступа как для целей администрирования, так и для повседневной работы.

Учитывая, что его реализации есть практически везде (различные платформы и ОС), и их много, нужно хорошо представлять его возможности.

По крайней мере, это будет нужно по ряду причин:

  • Зачастую вместо RDP используется другое решение (VNC, Citrix ICA) по простой причине – предполагается, что “встроенный RDP минимальный и ничего не умеет”.
  • Во многих решениях, связанных с модными сейчас облачными технологиями (перевод офисов на “тонкие клиенты”, да и просто организация терминальных серверов), бытует мнение что “RDP плохой потому что встроенный”.
  • Есть стандартный миф про то, что “RDP нельзя без VPN наружу выставлять, ломанут” (миф имеет под собой обоснование, но уже давно не актуален).
  • Ну, раз уж про мифы заговорили – бытует мнение, что “Перейдя с RDP на Citrix трафик в пару раз падает”. Ведь цитрикс – это дорого, следовательно как минимум на 157% круче.

Все эти мифы – ерунда и смесь устаревших “дельных советов”, актуальных во времена NT 4.0, а так же откровенных вымыслов, не имеющих никаких причин к существованию. Так как IT – это точная наука, надо разобраться. Хорошо настроеный протокол RDP новых версий, с учётом всех новых функциональных возможностей, является достаточно хорошим и надёжным инструментом для организации удалённого доступа.

Поэтому мы займёмся:

  • Кратким упоминанием про версии RDP
  • Настройкой режима защиты RDP-сессии
  • Настройкой шифрования для RDP
  • Привязкой к конкретному адаптеру и порту
    • Меняем стандартный порт на нужный
    • Делаем раздельные настройки RDP для нескольких сетевых адаптеров
  • Включением NLA
    • Как включается NLA со стороны RDP-сервера
    • NLA и Windows XP
    • Как включить CredSSP в XP
  • Выбором правильного сертификата для RDP
  • Блокированием подключений по RDP учётным записям с пустым паролем
  • Настройка ACL для подключения по RDP
  • Оптимизацией скорости RDP
    • Отключаем редирект неиспользуемых устройств
    • Настраиваем общую логику оптимизации визуальных данных RDP
  • Оптимизацией сжатия RDP
    • Настраиваем общее сжатие RDP
    • Настраиваем сжатие аудиопотока RDP
  • Оптимизацией соотношения потоков данных RDP
  • Включением Require secure RPC communication для RDP

Приступим.

Версии протокола RDP

Протокол имеет достаточно длительную историю, начиная с NT 4.0. Исторические детали мы оставим в стороне по простой причине – на данный момент имеет смысл говорить только про версию RDP 7.0, которая есть в Windows Vista SP1 / Windows Server 2008 и бесплатно добавляема в Windows XP установкой SP3 и обновлённого клиента RDP (находится по ссылке на KB 969084). Я предполагаю, что у Вас как минимум Windows XP, и что Вы поставили/можете поставить последний Service Pack и не трачу Ваше время на обсуждение преимуществ RDP в Windows 2000 SP2 перед NT 4.0 SP5.

Настройка режима защиты RDP-сессии

В принципе, это самая простая часть задачи. Суть в следующем. В различных версиях RDP применяется два основных механизма защиты сессии – встроенный в RDP и “заворачивание” сессии в TLS. Встроенный является недостаточно безопасным, и рекомендация “RDP можно наружу только в VPN” – про него. Поэтому всегда включайте поддержку TLS. Это тот минимум, с которого Вы должны начать. Ограничениями будут разве что версия сервера не ниже Windows Server 2003 SP1 и клиент RDP 5.2 и выше, но, думается, это в конце 2011 года вполне решаемо.

Как включить RDP over TLS

Вариантов, как всегда, несколько. Первый – включение через групповую политику. Для этого надо зайти в целевой объект групповой политики (ну или локально на своей домашней рабочей станции запустить gpedit.msc) и там последовательно выбрать “Computer Configuration” -> “Administrative Templates” -> “Windows Components” -> “Remote Desktop Session Host” -> “Security” и там включить параметр Require use of specific security layer for remote connections, выбрав в нём SSL (TLS 1.0) only. Можно выбрать и более мягкий Negotiate, но я бы не рекомендовал, т.к. на данный момент это банально ниже приемлемого уровня безопасности. Как человек, создававший private cloud’ы с достаточно высоким уровнем безопасности, я могу сказать, что смысл выносить особо ценные данные в датацентр под Лондоном и ходить туда дефолтным RDP – нулевой и является поиском неприятностей.

Можно и проще – откройте оснастку Remote Desktop Session Host Configuration (найдёте в mmc или готовую в меню Administrative Tools -> Remote Desktop Connections), выберите из списка Connections нужное подключение (обычно оно одно и называется RDP-Tcp), и откройте Properties, после – вкладку General и там выбрать нужный Security Layer.

Для работы TLS необходим цифровой сертификат (как минимум – со стороны сервера). Обычно он уже есть (генерится автоматически), убедитесь в его наличии, про то, как сделать его хорошим, поговорим после. Пока надо, чтобы он просто был, иначе подключиться не получится.

Настраиваем шифрование для RDP

Для конфигурирования будет доступно 4 варианта шифрования. Рассмотрим каждый из них.

Режим RDP Low Encryption

Самый “никакой” режим. Наследие страшных времён и версий RDP 5.x. Может согласовать шифрование на базе 56ти битового DES или 40ка битового RC2, что на текущий момент является несерьёзным. Не нужен и опасен. Например, если включить его, то не включится TLS, т.к. TLS уже откажется согласовывать такие слабые шифры, которые предлагает этот вариант.

Режим RDP Client Compatible Encryption

Второй “никакой” режим. Наследие страшных времён и версий RDP 5.x. Попробует до 128 бит RC4, но сразу согласится на DES/RC2. Не нужен и опасен. Тоже не совместим с TLS.

Режим RDP High Encryption

Минимально допустимый режим. Потребует хотя бы 128ми битовый RC4. Работает со всеми серверами, начиная с Windows 2000 Server w/HEP.

Режим RDP FIPS140-1 Encryption

То, что нужно. Будет поддерживать современные симметричные алгоритмы и в явном виде не будет поддерживать RC2, RC4, одиночный DES, а также будет заставлять использовать для вычисления целостности (Message Authentication Code – MAC) алгоритм SHA-1, а не MD5. Включайте этот вариант всегда, найти сервер, который не умеет 3DES, AES или SHA-1 практически нереально.

Где делается эта настройка? Откройте оснастку Remote Desktop Session Host Configuration (найдёте в mmc или готовую в меню Administrative Tools -> Remote Desktop Connections), выберите из списка Connections нужное подключение (обычно оно одно и называется RDP-Tcp), и откройте Properties, после – вкладку General и там выберите нужный Encryption Level.

Привязываем RDP к конкретному адаптеру и порту

Для того, чтобы сервер работал безопасно и предсказуемо (например, не начинал принимать подключения с нового, свежедобавленного сетевого адаптера), необходимо в явном виде указать, на каких интерфейсах служба RDP-сервера должна принимать подключения. Плюс, достаточно часто бывает полезным переключить порт, на котором сервер слушает подключения. Конечно, можно это сделать и публикуя сервер с RDP через какой-нибудь шлюз, но можно и без этого. Такие, казалось бы, базовые действия в реальности ощутимо снизят процент дураков-скрипткиддисов, которые очередной “мощной тулзой” проверяют wellknown-порты.

Как привязать службу RDP к конкретному сетевому адаптеру или сделать несколько RDP с разными настройками для разных адаптеров

Откройте оснастку Remote Desktop Session Host Configuration (найдёте в mmc или готовую в меню Administrative Tools -> Remote Desktop Connections), выберите из списка Connections нужное подключение (обычно оно одно и называется RDP-Tcp), и откройте Properties, после – вкладку Network Interfaces. В ней Вы сможете выбрать один конкретный интерфейс, на котором надо ожидать подключения, плюс ограничить количество параллельных сессий.

Если у Вас много интерфейсов, и Вам надо, допустим, чтобы можно было подключаться через 2 из 5 доступных, то Вам надо будет привязать существующий по-умолчанию RDP-Tcp к одному адаптеру, после зайти в меню Action и там выбрать Create New Connection. Подключение может слушать либо на всех интерфейсах, либо на одном, и в случае, когда надо, чтобы оно слушало на N интерфейсах, придётся создать N подключений.

Соответственно, если у Вас есть задача “Чтобы на одном интерфейсе RDP слушал на одном порту, а на другом – на другом”, она решаема так же – отвязываете дефолтный RDP-Tcp от всех адаптеров и привязываете к конкретному, после – создаёте новое RDP-подключение и тоже привязываете к нужному сетевому интерфейсу.

Как привязать службу RDP к не-дефолтному порту

Порт по умолчанию – 3389 TCP. Кстати, не забудьте разрешить его в пакетном фильтре. Ну а если хотите другой – надо зайти в ключ реестра

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

и поправить в нём значение PortNumber. Учитывайте, что отслеживание конфликтов в плане занятости портов – на Вашей совести, сам он, обнаружив, что назначенный Вами порт занят, “перепрыгнуть” никуда не сможет.

Включаем NLA – Network Level Authentication

Функция NLA появляется в NT 6.0, а позже добавляется возможность её частичного использования в предыдущей версии ОС путём установки SP3 для XP.

Суть данной функции достаточно проста. В версиях RDP до 6.0 при подключении по RDP клиенту до аутентификации надо показать окно входа – т.е. вначале показать, а потом уже он попробует зайти в систему. Это создаёт простую уязвимость – сервер можно перегрузить пачкой запросов “а дай-ка мне попробовать новую сессию начать”, и он будет вынужден на все запросы отвечать созданием сессии и ожиданием входа пользователя. Фактически, это возможность DoS. Как с этим можно бороться? Логично, что надо придумать схему, целью которой будет как можно раньше запросить у клиента учётные данные. Оптимально – чтобы было что-то типа как kerberos в домене. Это и было сделано. NLA решает две задачи:

  • Клиент аутентифицируется до инициации терминальной сессии.
  • Появляется возможность передать данные локального клиентского SSP на сервер, т.е. начинает работать Single Sign-On.

Реализуется это через новый провайдер безопасности – CredSSP. Почитать его техническую спецификацию можно тут, ну, а говоря проще, надо всегда включать данную функцию. Конечно, учитывая, что для её работы нужно, чтобы:

  • Клиентская ОС (та, с которой идёт подключение) была Windows XP SP3 и выше.
  • Серверная ОС (та, к которой будет подключение) была Windows Server 2008 и выше.

Примечание: Несмотря на то, что ядро Windows Server 2003 новее, чем в XP (5.2 против 5.1), для Windows XP есть обновление, добавляющее поддержку NLA, а для Windows Server 2003 – нет. То есть, если Вы даже будете подключаться с самой максимально доступной версии – Windows Server 2003 R2 SP2 со всеми патчами, Вы не сможете подключиться к серверу, требующему NLA, и быть сервером, поддерживающим NLA. Увы.

Как включается NLA со стороны RDP-сервера

Лучше всего включить NLA на всех серверах через групповую политику. Для этого надо зайти в целевой объект групповой политики и там последовательно выбрать “Computer Configuration” -> “Administrative Templates” -> “Windows Components” -> “Remote Desktop Session Host” -> “Security” и там включить параметр Require user authentication for remote connections by using Network Layer Authentication.

Можно включить и локально. Это делается путём вызова подменю Properties (стандартное подменю у Computer) и выбора там вкладки Remote, в которой будет выбор из трёх вариантов – запрещать подключения по RDP к данному хосту, разрешать подключения по любому RDP, разрешать только с NLA. Всегда включайте вариант с NLA, это в первую очередь защищает сервер.

NLA и Windows XP

В случае, если у Вас Windows XP, то Вы также можете воспользоваться данной функцией. Распространённое утверждение “Для NLA нужна как минимум виста, это Microsoft сделал чтобы апгрейдились” ложно. В Service Pack 3 добавляется реализация CredSSP, позволяющая делегировать клиентские credentials’ы, которыми обладает местный SSP, на сервер. Т.е., говоря проще, это специально сделано, чтобы с Windows XP можно было подключаться на системы с NT 6.0+. На саму Windows XP SP3 с данной функцией подключаться не получится, поддержка NLA будет частичной (поэтому RDP сервер с поддержкой подключения клиентов с использованием NLA из Windows XP сделать штатными способами не получится, Windows XP будет только NLA-совместимым клиентом).

Примечание: NLA появляется с NT 6.0, и является частью пачки технологий, называемых RDP 6.0. 3й сервиспак для XP приносит не просто RDP 6.0, а возможность установки RDP 7.0, что является достаточно позитивным (например, в RDP 7.0 есть, в отличии от 6.0, EasyPrint, bidirectional audio и некоторые другие штуки, которые превращают RDP-клиента на Windows XP со всеми накрутками в достаточно практичную систему). Это к слову о плохом Microsoft, который так жутко всех заставлял апгрейдиться с Windows XP на плохую-преплохую висту, что аж в бесплатном сервиспаке для продукта 2001 года вшивал более новую подсистему RDP, чем та, которая шла в висте, вышедшей в 2006.

Включать данный функционал нужно в явном виде, так как несмотря на то, что Service Pack 3 добавляет приносит новую dll криптопровайдера, он её не включает.

Как включить CredSSP в XP

Ещё раз – данная операция проводится строго после установки Service Pack 3 на Windows XP и в контексте нашего разговора нужна для того, чтобы было возможно подключение к другим серверам по RDP 6.1 с использованием NLA.

Шаг первый – расширяем перечень Security Packages.

Для этого мы откроем ключ реестра

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

и найдём в нём значение Security Packages. Нажмём правую кнопку и выберем “Modify” (не Modify Binary Data, а просто Modify). Там будет список вида “название package на каждой строке”. Нам надо добавить туда tspkg. Остальное надо оставить. Место добавления некритично.

Второй шаг – подцепляем библиотеку.

Ключ будет другим:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders

В нём надо будет найти значение SecurityProviders (заметьте, как и в предыдущем случае, это не subkey, а значение), и модифицировать его по аналогии, только добавив credssp.dll. Остальное в списке, опять же, трогать не надо.

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

Выбираем правильный сертификат для RDP

Если у Вас есть возможность пользоваться не-дефолтным сертификатом для RDP, то лучше пользоваться именно им. Это не повлияет на безопасность сессии как таковой, но повлияет на безопасность и удобство подключения. В сертификате, который оптимально использовать, должны быть следующие момент:

  • Имя (в subject или SAN), посимвольно совпадающее с тем именем, которое вводит клиент, подключающийся к серверу.
  • Нормальное расширение CDP, указывающее на рабочий CRL (желательно хотя бы на два – OCSP и статический).
  • Желательный размер ключа – 2048 бит. Можно и больше, но помните об ограничениях CAPI2 в XP/2003.
  • Не экспериментируйте с алгоритмами подписи/хэширования, если Вам нужны подключения со стороны XP/2003. Чуть больше информации про это в статье про настройку TLS, но вкратце – выберите SHA-1, этого вполне достаточно.

Чуть подробнее остановлюсь на выпуске специального сертификата для RDP-сервера.

Делаем всё красиво – специальный шаблон сертификата для RDP-серверов

Идеально будет, если сертификат для RDP сделать не на основе обычного шаблона (типа Web Server) и иметь в поле Application Policy (которое в сертификате будет более привычно называться Enchanced Key Usage – EKU) стандартные значения Client Authentication и Server Authentication, а добавить свой шаблон, в котором будет единственное, специальное, не добавляемое стандартными способами значение применения – Remote Desktop Authentication. Это значение Application Policy придётся создать вручную, его OID’ом будет 1.3.6.1.4.1.311.54.1.2, ну а после – уже можно сделать новый шаблон сертификата, на основании которого и выпустить сертификат, адресно “заточеный” под RDP Server.

Чтобы полностью автоматизировать эту операцию, сделайте у нового шаблона предсказуемое название – например, “RDPServerCert” – и зайдите в объект групповой политики, а там откройте Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Security. Выберите параметр Server Authentication Certificate Template и включите его, а в поле значения введите название – мы сделали RDPServerCert. Теперь все доменные хосты, подпадающие под эту политику, будут в случае включения на них RDP сами идти к Certification Authority, запрашивать в случае отсутствия себе сертификат на основе указанного шаблона, и автоматически делать его дефолтным для защиты подключений по RDP. Просто, удобно, эффективно.

Блокируем подключения по RDP учётным записям с пустым паролем

Мелочь, а забывать про неё не нужно.

Для блокировки подключения учёток без паролей к RDP надо зайти в настройку объекта групповой политики: Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options и установить “Accounts: Limit local account use of blank passwords to console logon only” в Enabled. Не поленитесь проверить, что это так и есть.

Настройка ACL для подключения по RDP

По умолчанию для подключения к RDP-серверу необходимо иметь явное разрешение User Access или Guest Access.

Это разрешение есть у локальных групп Administrators и Remote Desktop Users. Лучше всего использовать для управления доступом к RDP-серверу группу Remote Desktop Users, добавляя в неё нужные доменные группы, а не отдельных пользователей. Модицифируйте содержимое вкладки Security в настройках Properties у RDP-Tcp только в крайних случаях, лучше всего – добавляя группу “имя хоста RDP Blocked”, которой явно запрещен доступ по RDP к указанному узлу.

Оптимизация скорости RDP

Оптимизация скорости RDP – достаточно обширная тема, поэтому я разделю её на части. В этой будут те способы, которые будут уменьшать нагрузку на протокол до сжатия и до оптимизации сетевого уровня.

Цветность (битовая глубина)

В RDP 7.0 и выше доступны варианты 32,16 и 8 бит. Если речь идёт о работе, то для неё будет достаточно 16 бит. Это ощутимо снизит нагрузку на канал, притом иногда больше, чем в 2 раза, что удивительно, но факт. 8 бит, конечно, тоже можно, но уж больно страшно оно будет выглядеть. 16 бит же вполне приемлемы.

Примечание: В Windows Server 2008 R2 подключения с 8 битами уже не доступны.

Включите на сервере параметр Limit Maximum Color Depth, либо сделайте аналогичное действие в настройках RDP client.

Отключите ClearType

Когда у Вас выключен ClearType, протокол RDP передаёт не картинку, а команды по отрисовке символов. Когда включен – рендерит картинку со стороны сервера, сжимает и пересылает клиенту. Это с гарантией в разы менее эффективно, поэтому отключение ClearType значительно ускорит процесс работы и уменьшит время отклика. Сами удивитесь, насколько.

Это можно сделать как на уровне настроек клиента, так и на стороне сервера (параметр Do not allow font smoothing в разделе Remote Session Enviroment в Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host).

Уберите wallpaper

Параметр Enforce removal of RD Wallpaper в разделе Remote Session Enviroment в Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host резко улучшит ситуацию с перерисовкой экрана терминальной сессии. Пользователи без котиков на десктопе выживают нормально, проверено.

Включаем и настраиваем кэширование изображений

Если на клиенте есть достаточно оперативной памяти, то имеет смысл включить и настроить кэширование битмапов. Это позволит выиграть до 20-50% полосы пропускания. Для установки надо будет зайти в ключ

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\

и создать там параметры BitmapPersistCacheSize и BitmapCacheSize, оба типа DWORD 32.

Параметр BitmapPersistCacheSize обозначает размер в килобайтах дискового кэша. Значение по умолчанию – 10. Имеет смысл увеличить этот параметр хотя бы до 1000.

Параметр BitmapCacheSize обозначает размер в килобайтах кэша в RAM. Значение по умолчанию – 1500. Имеет смысл увеличить этот параметр хотя бы до 5000. Это будет всего 5 мегабайт на клиентскую сессию, при современных масштабах оперативной памяти это несущественно, и даже если приведёт к выигрышу 10% производительности, уже себя окупит. Кстати, этот же параметр можно поправить и в .rdp-файле; если сохранить своё RDP-подключение, а после открыть файл блокнотом, то среди параметров можно добавить что-то вида bitmapcachesize:i:5000, где 5000 – это 5МБ кэша.

Отключаем Desktop Composition

Desktop Composition привносит всякие “красивости” типа Aero и его друзей и ощутимо кушает полосу пропускания. Для работы это не нужно и вредно. Параметр Allow desktop composition for RDP Sessions в разделе Remote Session Enviroment в Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host необходимо выставить в параметр Disabled.

Оптимизируем параметры Desktop Window Manager

Параметры, находящиеся в разделе Remote Session Enviroment в Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Desktop Window Manager, будут управлять “красивым” отображением плавно выезжающих меню и подобного. Их три – Do not allow window animations, Do not allow desktop compositions и Do not allow Flip3D invocation. Все их надо переключить в режим Enabled, т.е. по сути – отключить все эти функции.

Отключаем редирект неиспользуемых устройств

Если у Вас не планируется подключение определённых классов устройств (например, COM и LPT-портов), или аудио, имеет смысл отключить возможность их перенаправления со стороны сервера. Чтобы клиенты с дефолтными настройками RDP Client не тратили время подключения на согласование неиспользуемого функционала. Это делается там же, где и остальные настройки сервера, в Properties у RDP-Tcp, вкладка Client Settings (там же, где мы делали настройки с глубиной цвета), раздел Redirection.

Настраиваем общую логику оптимизации визуальных данных RDP

Параметр, называющийся Optimize visual experience for RDP sessions, находящийся в разделе Remote Session Enviroment в Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Remote Session Enviroment, будет управлять тем, как RDP будет воспринимает визуальные данные – как мультимедийные или как текстовые. Это, грубо говоря, “подсказка” алгоритму сжатия, как грамотнее себя вести. Соответственно, для работы надо будет выставить этот параметр в Text, а если хочется много красивых flash-баннеров, HTML5 и просматривать видеоклипы – лучше вариант Rich Multimedia.

Оптимизация сжатия RDP

Сжатие в RDP прошло долгий путь развития. По RDP 5.2 включительно была подсистема сжатия (“компрессор”), имеющий внутреннее название “Version 1″ – самый простой и лёгкий вариант с точки зрения загрузки процессора клиента, но самый плохой с точки зрения нагрузки сети трафиком. В RDP 6.0 сделали “Version 2″, который был незначительно, но улучшен по параметру эффективности сжатия. Нам интересен “Version 3″, который работает только при подключении к серверам Windows Server 2008 и старше. Он сжимает лучше всех, а затраты процессорного времени с учётом мощностей современных компьютеров несуществены.

Выигрыш при включении V3 может, судя по тестам, достигать 60% и, в общем-то, и без тестов ощутимо заметен на глаз.

Как включить оптимальное сжатие в RDP

Это – клиентская настройка. Откройте в нужном объекте групповой политики Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Remote Session Enviroment, выберите там параметр Set compression algoritm for RDP data, включите его и выберите значение Optimize to use less network bandwidth.

Примечание: У многих возникает вопрос, зачем в списке есть параметр “отключить сжатие”. Это нужно в случае, когда Ваши RDP-сессии сжимает внешнее устройство, оптимизирующее WAN-подключения, что-то вида Cisco WAAS. В других случаях, конечно, отключать сжатие смысла нет.

Настройка сжатия звукового потока

RDP 7.0 приносит отличную возможность регулировать качество сжатия входящего звукового потока (т.е. звука, который идёт с сервера на клиента). Это достаточно полезно – например, если идёт работа на терминальном сервере, то кроме всяких служебных звуков вида “пришло сообщение в ICQ” другие особо как не планируются. Нет смысла передавать с сервера несжатый звук CD-качества, если для работы это не нужно. Соответственно, нужно настроить уровень сжатия звукового потока.

Данный параметр будет называться Limit audio playback quality и находиться в разделе Device and Resource Redirection в Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host. Вариантов будет три:

  • High – звук будет идти без сжатия. Вообще. То есть, он будет подпадать под общее сжатие протокола RDP, но специфическое сжатие звука (с потерей качества) производиться не будет.
  • Medium – сжатие будет адаптироваться под канал так, чтобы не увеличивать задержку при передаче данных.
  • Dynamic – сжатие будет динамически адаптироваться под канал так, чтобы задержка не превышала 150ms.

Выберите подходящий. Как понятно, для офисной работы лучше выбрать Dynamic.

Оптимизация соотношения потоков данных в RDP

Трафик RDP-сессии не является чем-то монолитным. Наоборот, он достаточно чётко разделён на потоки данных перенаправляемых устройств (например, копирования файла с локального хоста на терминальный сервер), аудиопоток, поток команд примитивов отрисовки (RDP старается передавать команды примитивов отрисовки, и передаёт битмапы в крайнем случае), а также потоки устройств ввода (мышка и клавиатура).

На взаимное соотношение этих потоков и логику его (соотношения) вычисления (этакий локальный QoS) можно влиять. Для этого надо со стороны сервера зайти в ключ реестра

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermDD

и создать там для начала (если их там нет) четыре ключа:

  • FlowControlDisable
  • FlowControlDisplayBandwidth
  • FlowControlChannelBandwidth
  • FlowControlChargePostCompression

Тип у всех – DWORD 32. Функционал у ключей будет следующим.

Ключ FlowControlDisable будет определять, используется ли приоритезация вообще. Если задать единицу, то приоритезация будет выключена, если нуль – включена. Включите её.

Ключи FlowControlDisplayBandwidth и FlowControlChannelBandwidth будут определять взаимное соотношение двух потоков данных:

  • Поток взаимодействия с пользователем (изображение+устройства ввода)
  • Прочие данные (блочные устройства, буфер обмена и всё остальное)

Сами значения этих ключей не критичны; критично то, как они соотносятся. То есть, если Вы сделаете FlowControlDisplayBandwidth равным единице, а FlowControlChannelBandwidth – четырём, то соотношение будет 1:4, и на поток взаимодействия с пользователем будет выделяться 20% полосы пропускания, а на остальное – 80%. Если сделаете 15 и 60 – результат будет идентичным, так как соотношение то же самое.

Ключ FlowControlChargePostCompression будет определять, когда считается это соотношение – до сжатия или после. Нуль – это до сжатия, единица – после.

Я рекомендую для использования вида “наш удалённый сервак далеко и к нему все по RDP подключаются и в офисе и 1С работают” ставить соотношение 1:1 и считать его после сжатия. По опыту это может реально помочь в ситуации “печать большого документа с терминального сервера на локальный принтер”. Но это не догма – пробуйте, главный инструмент – знание, как это считается и работает – у Вас уже есть.

Включаем Require secure RPC communication для RDP

Данный параметр действует аналогично настройкам для Secure RPC, которые есть в разделе Security групповой политики и действуют на всю систему, только настраивается проще. Включив этот параметр Вы сделаете обязательным для всех клиентских RPC-запросов шифрование (в зависимости от настроек системы “нижняя планка” шифрования будет разной – RC4/DES или, в случае включения FIPS-140 – 3DES/AES) и использование как минимум NTLMv2 для аутентификации удалённого вызова процедур. Всегда включайте этот параметр. Есть миф про то, что он не работает во внедоменной среде. Это не так, и усиление защиты RPC никому не помешает.

Это – серверная настройка. Откройте в нужном объекте групповой политики Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Security, выберите там параметр Require secure RPC communication и включите его.

Заключение

Так как все уже давно вытащили сервера на внешние площадки за бугром, то этот материал является

Я надеюсь, что данный материал будет Вам полезен для оптимизации и защиты RDP. Если я что-то пропустил – прошу в комментарии.

WBR, Ruslan V. Karmanov

Версия схемы Active Directory

В Wndows Server 2008 R2 версия схемы = 47

Версию схемы можно узнать с помощью запроса

dsquery * CN=Schema,CN=Configuration,DC=Root-Domäne -Scope Base -attr objectVersion

Также есть еще один способ определения версии Active Directory – с помощью ветки реестра:

HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\<Schema Version>

Перенос файла NTDS.DIT

Файл NTDS.DIT содержит данные Active Directory (AD)для конкретного домена и хранится в каталоге %systemroot%\ntds. Размер этого файла может быть достаточно большим. Для увеличения быстродействия AD может потребоваться перемещение файла на другой жесткий диск.

 

  1.  Перезагрузите контроллер домена.

  2.  Нажмите клавишу <F8> в загрузочном меню.

  3.  Выберите команду Восстановление службы каталогов (Directory Services Restore Mode).

  4.  Выберите необходимую копию операционной системы, если на компьютере установлено более одной системы. После этого зарегистрируйтесь в системе с правами администратора.

  5.  Откройте интерпретатор командной строки (Пуск > Выполнить > CMD (Start > Run > CMD)).

  6.  Откройте утилиту NTDSUTIL.EXE.

  7.  В приглашении утилиты ntdsutil введите команду files, как показано ниже:

ntdsutil: files

  8.  В приглашении file maintenance введите следующую команду:

file maintenance: move DB to

  9.  Для просмотра базы данных в меню file maintenance введите команду info.

  10.  Для проверки целостности базы данных на новом диске в приглашении file maintenance введите команду integrity.

  11.  Дважды введите команду quit для возврата к основному приглашению командной строки.

  12.  Перезагрузите компьютер в обычном режиме работы.

Работаем с защищёнными группами и AdminSDHolder

Работаем с защищёнными группами и AdminSDHolder

Привет.

Введение

В данной статье я расскажу про мелкую, но интересную функциональную единицу в составе Active Directory – механизм AdminSDHolder и то, как он защищает встроенные и стандартные группы. Рассказ будет про современную реализацию – в Windows Server 2008 R2, ну а детали про предыдущие реализации я буду иногда упоминать.

Оглавление

  • Что и как делает AdminSDHolder
  • Какие группы и учётные записи будут защищаться AdminSDHolder?
  • Как изменить, какие группы подпадают под око Большого Брата
  • Как изменить периодичность обработки AdminSDHolder
  • Как запустить процесс обработки AdminSDHolder вручную
  • Специфика работы с distribution groups
  • Что такое orphaned AdminSDHolder objects

Поехали.

 

Что и как делает AdminSDHolder

AdminSDHolder – это объект в каждом домене леса Active Directory, который будет хранить в себе информацию о настройках безопасности для специфического подмножества групп, называемых “защищёнными группами” – “protected groups”. В основном это BUILTIN-группы. Сам объект будет располагаться в domain partition, в контейнере System.

Суть работы всего механизма будет достаточно простой. В Active Directory за задачи AdminSDHolder будет отвечать держатель маcтер-роли PDC Emulator. Он будет иметь жёстко прописанный список групп (разный в зависимости от версии серверной ОС, установленной на DC с ролью PDC Emulator), и, с определённой периодичностью (по умолчанию раз в час), данный механизм будет запрашивать перечень всех security principals, входящих в эти группы, а после – выставлять им ACL в соответствии с ACL’ом от объекта AdminSDHolder. Сам объект будет обладать достаточно занимательным ACL’ом, а чтобы исключить влияние унаследованных прав, наследование на данном объекте будет выключено.

Зачем это будет нужно?

Первое – это, безусловно, безопасность. Данный механизм делает ACL’ы учётных записей, находящихся в “защищённых группах”, предсказуемыми и страхует от случайного или преднамеренного изменения. Ну, к примеру, админ, увольняясь, может напоследок сделать какую-нибудь “приятную мелочь” – например, разрешить любому из Domain Users сбрасывать пароль одному из Account Operators, а у оных уже прописать такое же право, но на Enterprise Admins. Такое вручную вычислить достаточно сложно, да и утомителен такой аудит. Механизм обработки AdminSDHolder может решить эту проблему превентивным способом.

Второе – учётные записи, входящие в “защищённые группы”, могут быть в любом месте иерархии Active Directory. Соответственно, на них могут действовать унаследованные ACL’ы, которые будут изменять ситуацию с безопасностью критичных учётных записей. Рассматриваемый механизм блокирует наследование ACL’ов для всех целевых учётных записей.

Какие группы и учётные записи будут защищаться AdminSDHolder?

Для Windows Server 2008 R2 это будут:

 

  • Administrator
  • krbtgt
  • Administrators
  • Account Operators
  • Backup Operators
  • Print Operators
  • Server Operators
  • Domain Admins
  • Enterprise Admins
  • Schema Admins
  • Domain Controllers
  • Read-only Domain Controllers
  • Replicator

 

Как изменить, какие группы подпадают под око Большого Брата

На практике возможна ситуация, когда постоянная “прокатка” ACL’ов для определённых security principals нежелательна. Это частично решаемо следующим образом.

Примечание: Частично – потому что вывести из-под этого механизма можно только одну или несколько групп семейства Operators. Для других групп это не получится.

В разделе Configuration есть объект с DN такого вида: CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=корневой_домен_леса. У этого объекта есть замечательный атрибут – dsHeuristics. Данный атрибут выглядит как unicode-строка, где 16й по порядку шестнадцатеричный разряд – это группа из 4х бит, которые, будучи включенными, обозначают:

  • Нулевой бит – исключить из процесса Account Operators
  • Первый бит – исключить из процесса Server Operators
  • Второй бит – исключить из процесса Print Operators
  • Третий бит – исключить из процесса Backup Operators

То есть, если захотите поправить – подумайте, какие группы хотите исключить, вычислите итоговое значение, откройте данный атрибут (он может выглядеть как-то так: 000000000100000с) и поправьте. В примере у меня на 16й позиции символ “C”, это значит, что Print Operators (которые 0100) и Backup Operators (которые 1000) исключаются из процесса.

Примечание: Операция делается на уровне леса, т.е. значение данного атрибута, заданного у корневого домена леса, будет использоваться всеми PDC-эмуляторами в лесу

Как изменить периодичность обработки AdminSDHolder

Это делается через редактирование следующего ключа реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters

в котором есть значение AdminSDProtectFrequency типа DWORD32. Если его нет – используется значение по умолчанию, равное 3600 секундам (1 час). Если хотите изменить этот параметр – создайте данное значение и присвойте ему нужное количество секунд. Имейте в виду, что до перезапуска службы ADDS на PDC-эмуляторе это значение не вступит в силу.

Примечание: Значения менее 1й минуты и более 2х часов не будут обрабатываться.

Как запустить процесс обработки AdminSDHolder вручную

Для этого есть только один надёжный способ – вызов на объекте rootDSE операции RunProtectAdminGroupsTask. Для этого надо будет запустить утилиту ldp.exe, вначале подключиться (сделать ldap connect) к держателю роли PDC-эмулятора, после – подтвердить свои права авторизацией (через ldap bind), ну а после – “заказать” операцию, выбрав в меню Browse->Modify и указав названием атрибута – RunProtectAdminGroupsTask, значением – 1, типом операции – Add и нажав Run. Значение DN надо оставить пустым.

Примечание: До Windows Server 2008 R2 это делалось так же, но использовалась другая операция – FixUpInheritance, и вместо единицы в качестве значения надо было указывать Yes.

В общем-то из ключевого это всё. Теперь тонкости.

Специфика работы с distribution groups

Классикой жанра является заблуждение, что “у distribution-групп нет SID’а”. SID есть у всех объектов класса group, потому что данный объект относится к security principal. Если бы у distribution-групп не было SID’а, то тогда, неоднократно переключая тип группы между security и distribution, у группы каждый раз бы создавался новый SID, что, как несложно убедиться, не происходит.

К чему бы я это? К тому, что в маркере доступа SID’ов distribution-групп обычно нет – lsass их туда не добавляет, читая флаг “не-security-enabled-группа” (который, в общем-то, и является основным отличием между distribution и security группами). А вот механизм вычисления перечня security principals, подпадающих под карающий меч AdminSDHolder – добавляет. Говоря проще, если учётная запись X входит в безобидную группу почтовой рассылки “Поздравления к 23 Февраля”, а эта группа входит, допустим, в Backup Operators (бред конечно с практической точки зрения, но вдруг), то все участники списка рассылки будут подпадать под механизм AdminSDHolder. Он не различает security/distribution группы.

Учитывайте это при проектировании механизма защиты учётных записей.

Что такое orphaned AdminSDHolder objects

Когда при очередной “прокатке” домена данным механизмом он находит подпадающую под нужный критерий учётную запись или группу, он [механизм] ставит объекту атрибут adminCount в единицу. Что интересно – снимать назад не умеет. Т.е. у не-подпадающих security principal’ов нуль не пишет. Поэтому когда учётная запись, допустим, была участником Domain Admins, а после перестала, на ней сохраняется этот атрибут, и она начинает находиться в интересной ситуации – ACL у неё уже не перезаписывается AdminSDHolder’ом, но наследования нет.

Автоматического исправления этой ситуации нет. Для исправления Microsoft предлагает скрипт, доступный здесь.

Выводы

Данный механизм – штука весьма интересная. Надо, по крайней мере, знать как он работает и управляется, чтобы не удивляться самопроизвольному изменению ACL’ов у ряда учётных записей. Модифицировать время применения особо не нужно, КПД этого мероприятия сомнительно.

Удач.

Active Directory с человеческим лицом. Редактирование схемы

Active Directory с человеческим лицом

Привет.

Кастомизация Active Directory – тема вечная. Вокруг неё накручено много вымыслом, шаманства и прочего, однако тема эта никакого волшебства в себе не содержит. Я это наглядно покажу.

История первая – Глючные картинки

История вторая – Как Вася в алкоголе запутался

История третья – Как Васе правозащитники помогали

История четвертая – Родная сеть родного предприятия

 

История первая – Глючные картинки

Однажды к одному CIO пришёл руководитель IT-департамента.

– В Active Directory есть глючные объекты, у которых нет картинки. Вот, смотри:

– Траст до партнёрского домена есть, а судя по картинке – глючный. Люди волнуются, говорят, что надо домен переставлять, наверное.

“Люди не должны волноваться. Чистый разум, по которому бежит рябь мысли о переустановке Active Directory, подобен нечистому разуму, а таких по ТК премии лишают. Нельзя так с людьми.” – подумал CIO.

Последовательность действий

Отображение всех объектов в Active Directory предприятия регулируется в контейнере CN=Display Specifiers,CN=Configuration,DC=доменный контекст. В нём Вы найдёте отдельные контейнеры, название которых соответствует языковому коду – для английского это будет 409, если хотите, чтобы объекты отображались в разных в плане языков консолях Active Directory по разному – просто поправьте не в одном, а в нескольких. Откуда берётся число 409? Это 1033 в hex-варианте, а справочник по кодам языков Вы можете легко найти, никуда не выходя с локальной машины – откройте ключ реестра HKLM\SYSTEM\CurrentControlSet\Control\ContentIndex\Language, там в каждом разделе будет Locale, которое, путём перевода в hex, и даст искомый код. Выглядеть в нашем случае консоль для редактирования этих свойств будет как-то так:

Объект, который мы хотим поправить, имеет класс trustedDomain-display. Откроем вкладку Attribute Editor, и в ней найдём атрибут iconPath. Данный атрибут позволит нам задать до 16 различных картинок, используемых для разных состояний объекта (например, у пользователя разные картинки, когда он в обычном состоянии или в Disabled). Картинку, которую мы поставим, мы заранее выложим в папку \\FQDN домена\SYSVOL\FQDN домена\Pics – этим мы решим вопрос с автоматической репликацией картинки на все контроллеры домена, да и подгружаться она будет с ближайшего, что тоже плюс.

Нам будет нужна только дефолтная, поэтому мы зададим путь к картинке номер нуль для данного типа объектов:

Результат будет таким:

Теперь у этого типа объектов своя, хорошо заметная картинка. Она будет автоматически появляться в любой консоли Active Directory Users & Computers. Ничего дописывать не надо, никаких хаков не делается, всё штатно, централизовано и удобно. Переустановка “глючного домена” отменяется.

История вторая – Как Вася в алкоголе запутался

Однажды к одному CIO пришёл руководитель IT-департамента.

– Помнишь Васю, которому мы обещали проставиться?

– Конечно помню.

– Вот и я помню. А если забудем? Надо как-то сделать так, чтобы такое не забылось. Иначе мы потеряем лицо.

– Ты не поверишь – но это – встроенная возможность Active Directory

Последовательность действий

В схеме Active Directory есть штатный атрибут drink – его описание выглядит как “The drink (Favourite Drink) attribute type specifies the favorite drink of an object (or person)”.

Это пачка текстовых строк в Unicode, которая благоразумно не добавлена в объект user по умолчанию. Мы её добавим – сделать это несложно:

  • Зарегистрируем оснастку для редактирования схемы Active Directory – выполнив команду regsvr32 schmmgmt.dll
  • Откроем новый экземпляр mmc, добавим туда оснастку Active Directory Schema, и найдём там в контейнере Classes класс user
  • Далее на вкладке Attributes добавим данный атрибут к пользователю

Закроем оснастку Active Directory Schema, т.к. она нам больше не понадобится, и откроем ADSI, чтобы теперь добавить этот замечательный атрибут в GUI оснастки Active Directory Users & Computers. Путь наш будет лежать туда же, как и в прошлой истории – в контейнер CN=код языка,CN=Display Specifiers,CN=Configuration в лесу Active Directory. Мы выберем тот тип контейнеров, при просмотре которых у нашего пользователя должны выводиться дополнительные атрибуты – например, OU; называться он будет organizationalUnit-Display, а интересовать нас в нём будет атрибут extraColumns:

Формат добавления строки достаточно прост:

  • Название атрибута
  • Заголовок колонки с атрибутом
  • Будет ли отображаться по умолчанию (мы поставим единицу)
  • Ширина колонки в пикселях (если поставить -1, будет подобрана автоматически)
  • Зарезервированное на будущее значение, ставим нуль

Таких строк, как понятно, можно добавить несколько – всё зависит от того, что Вам конкретно надо отображать в первую очередь. Это удобнее, чем каждый раз кликать на пользователе, чтобы просмотреть нужный атрибут, отсутствующий в консоли Active Directory Users & Computers по умолчанию.

Как понятно, и тип родительского контейнера, и тип объекта, и атрибут можно менять произвольно – плюсом будет то, что это не потребует никакой модификации стандартной консоли и будет сразу работать “из коробки” во всей организации.

История третья – Как Васе правозащитники помогали

Однажды к одному CIO пришёл руководитель IT-департамента.

– Слышал вчера вопли у sales’ов. Михась орал на какого-то своего, мол, “Какое ты имеешь право пить на работе, скотина?”

– Да, работать в такой ситуации невозможно. Ведь администратору Active Directory непонятно по учётной записи пользователя, имеет ли он право пить на работе или нет. Отсюда непонимание, а это – корень всех бед в коллективе. Надо исправлять.

Последовательность действий

Типы прав в Active Directory – динамическая структура, поэтому мы добавим нужное нам право. Откроем ADSI и зайдём в контейнер CN=Extended-Rights,CN=Configuration в нашем лесу Active Directory.

Мы создадим новый пустой экземпляр объекта класса controlAccessRight и назовём его предсказуемо:

Какие же нам надо будет задать атрибуты, чтобы всё заработало? Их не очень много.

Привязка к типу объектов

Мы хотим, чтобы это право было у пользователя – открываем ADSI, зацепляемся за схему, находим там classSchema с названием User, и копируем у него атрибут schemaIDGUID:

Этот GUID будет bf967aba-0de6-11d0-a285-00aa003049e2; мы добавим его в атрибут appliesTo у нашего нового типа прав:

Этого хватит – нам же не нужно, чтобы контроллер домена имел право бухать на работе.

Читаемое имя

В атрибут displayName нам надо будет добавить то, что будет выводиться при просмотре ACL штатными средствами – т.е. “человеческое” название этого права.

GUID права

Чтобы клиентский софт мог запросить у системы состояние данного права у конкретного объекта, надо задать атрибут rightsGUID. Требования простые – не совпадать с другими, поэтому я взял один из GUID’ов от других прав и поправил, чтобы не было претензий со стороны Минздрава:

Включаем

Осталось только сказать, что это всё может работать – для этого в атрибут validAccesses запишем 256 – это включит 9й бит, и мы наконец-то увидим плоды нашей работы.

Сделали? Смотрим.

Теперь сотрудника Василия никто не упрекнёт, что он не может бухать на работе – может. Ну, а какое применение такой возможности он найдёт, да и Вы – тут уж сами думайте.

История четвертая – Родная сеть родного предприятия

Однажды к одному CIO пришёл руководитель IT-департамента.

– Никто не любит сотрудников техподдержки так, как люблю их я. Их, этих воинов переднего края, этот штрафбат духа и знаний, этот…

– Ты по делу, наверное?

– Да, есть косяк. Состоит он в том, что людям неудобно понимать, когда доменная машина “увидела сетку”, а когда – нет. Просветлённые понимают, а у остальных столько духовности, что их предположения “видит комп доменную сетку или вроде нет” заставляют меня потерять веру в человечество. А ведь без веры нельзя жить.

– Понимаю. Устроит ли ситуация, когда факт нахождения в доменной сети будет идентифироваться путём отображения на сетевом интерфейсе логотипа фирмы с соответствующей подписью?

– Вполне.

 

Последовательность действий

В момент, когда Windows подключается к новой сети, пользователю предлагается выбор – домашняя ли это сеть, рабочая или “внешняя”-гостевая. В зависимости от того, что выберет пользователь, будут установлены настройки общего доступа, а также ряд других параметров. Во что ткнёт пользователь – неизвестно. Отсюда “Подключение по локальной сети 5″ с картинкой домика, а впоследствии – вагон разных сетей с жуткими именами и невнятными задачами – поди вспомни, откуда это подключение номер пять взялось – то ли когда в Макдоналдсе сидел, то ли когда дома роутер купил и в него переподключился. Для сотрудников техподдержки же крайне желательно, чтобы можно было задать вопрос “В какой Вы сейчас сети?” и получить относительно вменяемый ответ.

Для начала мы возьмём откуда-нибудь иконку с логотипом нашей организации. Ей хватит размера 64×64 пикселя. Я буду использовать этот файл для примера:

Теперь можно открыть объект групповой политики, действующий на доменные компьютеры, на которых нужно изменить отображение и логику определения сетей, и зайти там в следующий раздел:

Computer Configuration / Policies / Windows Settings / Security Settings / Network List Manager Policies

Так как я редактирую политики с рабочей станции, которая уже находится в домене (что, в общем-то, логично), то картинка будет выглядеть примерно так:

Три строчки из четырёх – это Unidentified Networks, Identifying Networks, All Networks – стандартные, а четвёртая – мой тестовый домен domain7.local. Для начала, поменяем настройки для стандартных объектов.

Настройки для Unidentified Networks

Здесь будет две настройки – Location Type и User Permissions. Первая будет обозначать то, как будет трактоваться местоположение для неизвестных сетей – как частная сеть (Private), общедоступная (Public) либо отдаваться на откуп локальному пользователю (т.е. у него при подключении новой сети будет то самое окно с выбором из 3х вариантов типов сетей – домашней, предприятия или общедоступной). Мы выставим их так – Location Type сделаем Public, а пользователю запретим менять тип Unidentified сети (User cannot change location). Это отсечёт ситуации, когда пользователь неверно определит тип сети (допустим, в кафе поставит сеть как домашнюю), что ощутимо снизит уровень безопасности (например, появится возможность обнаружения других устройств, да и возможности в плане общего доступа к ресурсам, которые никак не нужны в сети кафе).

Настройки для Identifying Networks

Это те сети, которые находятся “в процессе” идентификации. Визуально это рисуется анимацией на иконке подключения, занимает обычно некоторое количество секунд. Настройка здесь одна – “как трактовать тип сети, находящейся в этой фазе”. Почему она важна? Потому что если пользователь хоть раз выбирал вручную тип новой сети, добрая операционная система дала ему возможность выставить галку вида “… И все дальнейшие новые сети считать такими же, как ты выбрал сейчас”. Это уязвимость, потому что ситуация может быть простой – человек дома поставил новый роутер, ОС повторно “нашла” локальную сеть, предложила выбрать – человек выбрал, что сеть доверенная, домашняя, и нажал галку “больше меня не спрашивай, остальные неизвестные сети такие же”. В результате, когда он пойдёт в кафе, где есть Wifi, у него сеть, будучи в процессе Identifying, будет трактоваться как домашняя, давая излишние возможности его соседям по IP-диапазону. Мы выставим этот параметр как Public – т.е. любая сеть, которая “в процессе определения”, будет по определению общедоступной, внешней, и к ней будут применяться максимальные ограничения по совместной работе и доступу к соседским ресурсам.

Настройки для All Networks

Это общие настройки для всех сетей. Логика их действия простая – если что-то не зафиксировано администратором, то это можно изменять пользователю. Так как речь идёт о рабочей системе, то такие настройки неправильные. Мы явно определим сеть предприятия, если надо – так же, через политики, раздадим настройки беспроводных сетей. Пользователю не нужно ничего менять. Соответственно, мы выставляем следующие настройки:

Теперь пришла очередь настроить отображение и настройки нашей, доменной сети.

Настройки для родной сети предприятия

Их будет четыре, и они будут распределены по двум вкладкам. Можно будет задать картинку, имя сети, и права пользователей на смену картинки и имени. Права мы, конечно, отнимем, а название сети и картинку сменим:

Важный момент – картинку мы будем хранить в SYSVOL’е и задавать её местоположение тоже через UNC. Поэтому наши доменные рабочие станции будут забирать картинку с ближайшего SYSVOL, реплицироваться она будет автоматически, и её не надо будет никуда копировать вручную:

Выводы

Задача решена – теперь определить тип сети визуально что сотрудникам, что IT-товарищам из техподдержки стало проще.

Повысилась безопасность – пользователь не может объявить все сети домашними и таким образом ослабить защиту своего хоста. Мелочь, никакого шаманства и кодинга, а из таких мелочей состоит то, что с точки зрения ряда восточных практик отличает работу от искусства. ActiveDirectory-до лучше, чем ActiveDirectory-дзюцу.

Возможностей, которые предоставляет Active Directory – масса. Главное – знания.

Удач.

WBR, Ruslan V. Karmanov

скопировать SID

в AD из оснастки Active Directory Users and Computers (известной также как dsa.msc) в расширенном режиме на вкладке Aеtribute Editor скипировать значение атрибута objectSid не получится в привычной форме.

Обойти это можно используя командную строчку

dsquery * -filter "&(objectcategory=user)(samaccountname=ivan.ivanov)" -attr objectsid

в ответ получим:

  objectsid   S-1-5-21-1994511428-2624263116-1417297096-1189

немного подправив запрос можно получить любой аттрибут и не только учетных записей пользователей

Еще есть способ получить SID и GUID в буфер обмена из оснастки Active Directory Administrative Center

Глобальный каталог Active Directory

Серверы глобальных каталогов

 

Каждый системный администратор, который работает с доменными службами Active Directory, по крайней мере, один раз за время своей работы сталкивается с глобальными каталогами, но далеко не каждый системный администратор задумывается, что же такое глобальный каталог и для чего он предназначен. Глобальный каталог (Global Catalog или GC) представляет собой репозиторий распределенных данных, который хранит информацию о каждом объекте, а также облегчает поиск в лесу Active Directory. Глобальный каталог хранится на контроллерах домена, которые назначены в качестве серверов глобального каталога и распространяется посредством репликации с множеством равноправных участников. Первый контроллер домена, установленный в лесе, автоматически конфигурируется как сервер глобального каталога. Вы можете переносить возможности глобального каталога на другие контроллеры домена, а также изменять расположение глобального каталога, устанавливаемое по умолчанию, указывая другой контроллер. Глобальный каталог позволяет пользователям и приложениям находить объекты в любом домене текущего леса посредством поиска атрибутов, включенных в глобальный каталог, которые идентифицируются в схеме в качестве частного набора атрибутов (Partial Attribute Set, PAT). Допустим, у вас есть лес с тремя доменами, причем каждый домен содержит по два контроллера домена. Все шесть контроллеров домена поддерживают репликацию схемы и конфигурации леса. Соответственно, контроллеры в домене А содержат реплики контекста именования домена А, контроллеры в домене B – реплики именования домена B, а контроллеры домена C, соответственно, реплики домена C. Рассмотрим следующую ситуацию: пользователь домена C хочет найти пользователя домена А. В этом случае, когда пользователь в домене C выполняет поиск объекта домена А, результаты запроса предоставляет глобальный каталог. Но если объект содержит специфический атрибут, который по умолчанию не включен в глобальный каталог, то вы можете добавить такой атрибут при помощи оснастки «Схема Active Directory». Таким образом, если бы не было сервера глобального каталога, то контроллер домена, принимающий поисковые запросы объектов в других доменах, пересылал бы поисковые запросы на контроллер в домене с искомым объектом. В этой статье вы узнаете о самой концепции серверов глобального каталога, об их архитектуре, протоколах, процессах, физической структуре, а также о многих нюансах, связанных с данной технологией.

Взаимодействие глобального каталога с другими серверными объектами

Серверы глобального каталога участвуют в следующих процессах и взаимодействуют со службами:

Установка Active Directory. Глобальный каталог автоматически конфигурируется на первом контроллере домена, который устанавливается в лесу;

Репликация Active Directory. В репликации Active Directory каждая реплика на контроллере домена согласована с репликами этого раздела, управляемого другими контроллерами доменов. Глобальный каталог построен на репликации Active Directory. После того как вы создали лес, на контроллере домена, который используется в качестве сервера глобального каталога, автоматически реплицируется частный набор атрибутов на контроллеры домена всех доменов в лесу, отличных от локального. Для оптимизации репликации один из контроллеров домена обычно назначается в качестве сервера-плацдарма, который отвечает за всю входящую и исходящую репликацию раздела для сайта. Например, для обновлений глобального каталога, при репликации Active Directory выбираются серверы глобального каталога в качестве серверов-плацдармов и все изменения, внесенные в центре данных в глобальный каталог, будут реплицироваться на все контроллеры домена в данном сайте. Изменения будут поступать на сервер-плацдарм, а затем реплицироваться на серверы-плацдармы в филиалах, которые реплицируют изменения на контроллеры домена в своих сайтах.

Система доменных имен (DNS). Как и доменные службы Active Directory, серверы глобального каталога не могут функционировать без DNS. Аналогично тому как службы DNS предоставляют данные, необходимые компьютерам в сети для локализации контроллеров домена Active Directory, так и для предоставления IP-адресов серверов глобального каталога клиенты сервера глобального каталога также полностью зависят от DNS.

Служба «Сетевой вход в систему». При попытке пользователя выполнить вход в систему, клиентский компьютер отправляет вызов удаленной процедуры локальной службе «Сетевой вход в систему», инициируя сеанс входа. В вызове удаленной процедуры клиент пересылает данной службе такую информацию как имя компьютера, имя домена, а также имя сайта. Объявление глобального каталога DNS зависит от службы «Сетевой вход в систему». При завершении репликации глобального каталога или при запуске сервера глобального каталога, служба «Сетевой вход в систему» публикует записи расположения службы (SRV) в DNS, которая объявляет контроллер домена как сервер глобального каталога.

Взаимодействие серверов глобального каталога с серверными объектами выглядит следующим образом:

Рис. 1. Пример взаимодействия серверов глобального каталога с доменными службами Active Directory

После создания нового контролера домена DC02, системный администратор определяет его как сервер глобального каталога и реплицирует частичный набор атрибутов из DC01. В домене А, DC01 реплицирует изменения для DC02 домена А, а DC02 – реплицирует обновления данных для DC01 домена В.

На шаге «А» клиентский компьютер КлиентХ отправляет запрос в глобальный каталог, который перенаправляет запрос DNS-серверу для поиска ближайшего сервера глобального каталога «В», после чего клиент связывается с сервером глобального каталога для выполнения своего запроса «С».

Клиентский компьютер КлиентY выполняет вход в домен «1». Он запрашивает DNS-сервер на расположение ближайшего контроллера домена «2». После этого он связывается с ближайшим контроллером домена DC03 и пробует пройти проверку подлинности «3». DC03 запрашивает DNS-сервер на расположение ближайшего сервера глобального каталога «4». Затем данный контроллер домена связывается с сервером глобального каталога DC02 для извлечения членства пользователя в универсальных группах.

Развитие и сценарии использования серверов глобального каталога

Как уже было сказано ранее, одной из важнейших ролей серверов глобального каталога, является эффективное выполнение поиска объектов в доменах Active Directory. Причем, глобальным каталогом выступает контроллер домена, на котором хранится полная копия всех объектов в каталоге для собственного домена и частичная, предназначенная только для чтения копий всех объектов во всех других доменах леса. Всем известно, что для управления доменными службами и идентификацией в Active Directory используется специальное хранилище, расположенное в базе данных Ntds.dit, где содержатся разделы каталога, также называемые контекстами именования. Кроме таких контекстов именования, как «Конфигурация» и «Схема», в лесах с функциональным уровнем Windows Server 2000, Windows Server 2003, Windows Server 2008, а также Windows Server 2008 R2, контроллеры домена поддерживают полную реплику нескольких контекстов именования каталога одного домена. Конфигурация реплицируется на каждый контроллер домена в лесу, также как и схема. Причем, контекст именования для домена реплицируется на все контроллеры домена, но не реплицируется на контроллеры домена в других доменах. В свою очередь, при помощи глобального каталога пользователи могут выполнять поиск данных каталога во всех доменах леса независимо от места хранения данных. Контроллеры домена, которые выполняют роль глобального каталога, также называются серверами глобального каталога, которые, соответственно, отвечают на запросы глобального каталога. Для оптимизации эффективности, глобальные каталоги содержат лишь поднабор атрибутов, которые используются для поиска среди доменов. По этой причине, глобальный каталог также называют частичным набором атрибутов (Partial Attribute Set, PAS), которые определяются корпорацией Microsoft. Атрибуты, из которых состоит глобальный каталог, называются «частичными», так как они включают в себя ограниченный набор атрибутов, а именно атрибуты, которые востребованы схемой и атрибуты, которые чаще всего используются в пользовательских операциях поиска. Эти атрибуты отмечены для включения в частичный набор атрибутов как часть определения их схемы. Хранение самых атрибутов, поиск которых выполняется чаще всего, для всех доменных объектов в глобальном каталоге позволяет пользователям более эффективно использовать возможность поиска без снижения сетевой производительности вследствие отсутствия пересылок на контроллеры доменов и без необходимости хранения на сервере глобального каталога большого объема ненужных данных. Тем не менее, для оптимизации поиска вы можете использовать схему, в которой можно добавлять, изменять или удалять атрибуты, которые хранятся в глобальном каталоге. Стоит обратить внимание на то, что любое изменение частичного набора атрибута приводит к полной синхронизации глобального каталога.

Сервер глобального каталога обычно используется в ситуациях, которые описаны в следующих подразделах.

Поиск объектов

Поскольку контроллер домена, работающий как сервер глобального каталога, содержит объекты всех доменов в лесу, глобальный каталог предоставляет пользователям и приложениям возможность выполнять поиск данных каталога во всех доменах леса независимо от места хранения данных. Если ваш лес состоит из одного домена, то все контроллеры домена имеют полный доступ для записи экземпляров каждого объекта в домене леса. Когда пользователь выполняет поиск какого-либо участника системы безопасности, указав в меню «Пуск» в запросе параметр «Весь каталог», то поиск выполняется непосредственно в глобальном каталоге.

Для доступа к объектам Active Directory использует протокол облегченного доступа к каталогам (Lightweight Directory Access Protocol, LDAP). Запросы поиска LDAP могут быть отправлены и получены службой каталогов Active Directory через порт 389 (порт LDAP по умолчанию) и через порт 3268 (порт глобального каталога). Трафик LDAP, который использует протокол проверки подлинности Secure Sockets Layer (SSL) обеспечивает доступ к портам 686 и 3269. Соответственно, поведение поиска, которое применяется к портам 389 и 3268 также применяется к соответствующим запросам LDAP через порты 686 и 3269. Когда запрос поиска отправляется на порт 389, поиск осуществляется в разделе каталога одного домена. Если объект не находится в данном домене, разделе каталога схемы или конфигурации, контроллер домена пересылает запрос контроллеру домена в домене, который указан в различающемся имени объекта. Когда запрос поиска отправляется на порт 3268, то опрашиваются все разделы каталога в лесу, то есть поиск обрабатывается сервером глобального каталога. Стоит обратить внимание на то, что только серверы глобального каталога могут получать запросы LDAP через порт 3268.

После того как пользователь вводит свой запрос, данный запрос перенаправляется на порт 3268, и отправляется для разрешения на сервер глобального каталога. В свою очередь, если по каким-либо причинам в вашем домене Active Directory нет сервера глобального каталога, ваши пользователи или приложения не смогут выполнять поиск по лесу. Также стоит отметить, что все реплики, которые реплицируются в глобальный каталог, включают все права доступа для каждого объекта и атрибута. То есть, если вы ищете объект, доступ к которому для вас запрещен, вы его не увидите в списке результатов поиска. Соответственно, пользователи смогут найти только те объекты, для которых им предоставлен доступ.

Подтверждение ссылок на объекты в лесу

Контроллеры домена используют глобальный каталог для подтверждения ссылок на объекты других доменов в лесу. То есть, если контроллер домена содержит объект с атрибутом, который содержит ссылку на объект в другом домене, то контроллер домена проверяет ссылку, устанавливая связь с сервером глобального каталога.

Проверка подлинности имени пользователя

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

  • В домене с основным режимом Windows Server 2000 или Windows Server 2003, контроллеры домена запрашивают сведения о членстве в универсальных группах. О данном требовании будет рассказано далее в статье.
  • В мультидоменном лесу, сервер глобального каталога при входе пользователя в систему разрешает имя пользователя, когда используется имя участника-пользователя (UPN), которое можно указать вместо имени доменного пользователя. Имя участника-пользователя (UPN) – это имя входа, которое принимает форму адреса электронной почты. Такое имя представляет собой идентификатор пользователя и DNS-имя домена, разделенные символом @. Основными преимуществами таких имен является то, что они соответствуют имени электронной почты пользователя, а также не раскрывают структуру доменов леса. При создании учетной записи пользователя, за UPN-имя отвечает атрибут userPrincipalName, который системный администратор может в любой момент изменить и отреплицировать в глобальный каталог. Поскольку суффикс UPN не обязательно указывает на тот домен, который сопоставляется с контроллером домена, в который выполняет вход пользователь, для разрешения имени, компьютер связывается с сервером глобального каталога. Стоит обратить внимание на тот факт, что в том случае, если ваша организация имеет более одного леса и между доменами в разных лесах используются доверительные отношения, то UPN не может использоваться для входа в домен, который находится вне леса пользователя, поскольку UPN-имя разрешается в глобальном каталоге в лесу пользователя.

Процесс взаимодействия входа пользователя и глобального каталога выглядит следующим образом:

Рис. 2. Процесс взаимодействия входа пользователя и глобального каталога

  1. Поскольку домен пользователя не обязательно совпадает с UPN-суффиксом, контроллер домена просматривает участников системы безопасности ближайшего домена в сайте, в котором расположен клиентский компьютер;
  2. Контроллер домена, с которым пробует связаться клиент, определяет, является ли DNS-имя в суффиксе имени участника-пользователя доменом, с уполномоченным контроллером домена. Если имя домена в UPN-суффиксе соответствует домену контроллера домена, который обрабатывает проверку подлинности клиента, но имя пользователя не найдено, то контроллер домена связывается с сервером глобального каталога. Также, если имя домена в UPN-суффиксе не соответствует домену контроллера домена, то контролер домена связывается с сервером глобального каталога;
  3. Используя атрибут объекта пользователя userPrincipalName, сервер глобального каталога ищет различающееся имя объекта пользователя и возвращает это значение контроллеру домена;
  4. Контроллер домена извлекает имя домена из различающегося имени и возвращает полученное значение клиенту;
  5. Клиент запрашивает контроллер домена для своего домена.

Сведения о членстве в универсальных группах в среде с несколькими доменами

Как уже было сказано, во время входа пользователя в домен, пользователь должен пройти проверку подлинности. В процессе проверки, контроллер домена проверяет подлинность пользователя, после чего пользователь получает данные авторизации для доступа к ресурсам. Для предоставления данных для авторизации пользователя, контроллер домена извлекает идентификаторы безопасности (SID) для всех групп безопасности, членом которых является пользователь и добавляет эти идентификаторы SID в маркер доступа пользователя. В свою очередь, контроллер домена всегда может определить членство в локальной группе или глобальной группе домена для любого пользователя из этого же домена, но членства в этих группах не реплицируются в глобальный каталог, так как членами данных групп не могут быть пользователи из разных доменов. Но в универсальных группах могут быть члены из других доменов. Не стоит забывать, несмотря на тот факт, что локальные доменные группы также могут содержать членов из других доменов, они могут быть добавлены для управления только в том домене, где были созданы. А глобальные группы, несмотря на то, что могут быть добавлены для управления доступом в любом домене, могут содержать только учетные записи своего домена.

Универсальная группа также является группой безопасности, которая позволяет управлять ресурсами, распределенными в нескольких доменах. Во время выполнения интерактивного входа, контроллер домена извлекает идентификаторы SIDпользовательского компьютера. По этой причине атрибут универсальных групп member, который содержит список членов в группе, реплицируется в глобальный каталог. Например, пользователь в лесу с несколькими доменами подключается к домену, в котором разрешены универсальные группы. В этом случае контроллер домена, для получения членства в универсальных группах, должен связаться с сервером глобального каталога. Если пользователь ни разу не подключался к домену и сервер глобального каталога недоступен, то он может войти только локально в систему. Но если сервер глобального каталога недоступен при входе пользователя в домен, в котором доступны универсальные группы и пользователь уже подключался к данному домену, то клиентский компьютер пользователя может использовать для входа кэшированные учетные данные.

Кэширование членства в универсальных группах

В универсальные группы включаются пользователи и группы, которые расположены в нескольких доменах в лесу. Членство в универсальных группах реплицируется в глобальном каталоге. Универсальная группа применяется для того, чтобы запретить пользователю доступ к ресурсам, а если глобальный каталог будет недоступен, то операционная система не позволит пользователю пройти проверку подлинности в домене. В небольших филиалах доступная пропускная способность сети и ограничения оборудования сервера приводят к нецелесообразности использования глобального каталога. Разумеется, пользователь сможет использовать кэшированные учетные данные, но он не сможет получить доступ к необходимым ресурсам. Для снижения необходимости подключения к серверу глобального каталога, находящегося в другом сайте, на контроллерах домена, работающих под управлением Windows Server 2003, Windows Server 2008 или Windows Server 2008 R2, в сайте, который не содержит сервер глобального каталога, можно использовать кэширование членства в универсальных группах. Эта функциональная возможности появилась в Windows Server 2003 и она исключает для контроллера домена в мультидоменном лесу необходимость связаться с сервером глобального каталога во время входа пользователей в домены, где доступны универсальные группы, тем самым снижая трафик по глобальной сети. Если функция кэширования членства в универсальных группах включена, то при первой попытке пользователя подключения к домену, в котором доступны универсальные группы, сведения сохраняются локально. Контроллер домена получает сведения об участии пользователя в универсальных группах из глобального каталога и после этого данные сведения неограниченно кэшируются на контроллере домена данного сайта и периодически обновляются. При последующей попытке входа пользователя в данный домен, контроллер домена, для обработки входа пользователей, вместо подключения к серверу глобального каталога использует членства в кэше.

Поэтому, на контроллерах домена с ненадежной связью с сервером глобального каталога рекомендуется включать и настраивать кэширование членства в универсальных группах. Одновременно, сведения об участии пользователей в универсальных группах, могут обновляться до 500 членств каждые 8 часов. После первого входа в систему, кэш пользователя периодически обновляется в течение 180 дней.

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

Рис. 3. Пример построения списков идентификаторов безопасности контроллером домена для кэширования

  1. Пользователь входит на сайт с включенной функцией кэширования членства в универсальных группах. Данный пользователь аутентифицируется контроллером домена как запрашиваемый пользователь;
  2. Контроллер домена проверяет значения трех атрибутов кэширования объекта пользователя;
  3. После того как контроллер домена обнаружил, что атрибуты не заполнены, он проверяет локальный каталог и извлекает SID пользователя и идентификаторы безопасности всех глобальных групп, к которым он принадлежит;
  4. Контроллер домена отправляет этот список идентификаторов безопасности серверу глобального каталога. Сервер глобального каталога проверяет членство в универсальных группах пользователя и все глобальные группы в списке. После этого сервер глобального каталога возвращает список комбинированных идентификаторов безопасности универсальных и глобальных групп контроллеру домена;
  5. Пользовательские атрибуты заполняются следующим образом:
    • Объединенный список идентификаторов безопасности глобальных и универсальных групп записывается в атрибут msDS-Cached-Membership
    • Время, которые указывает на то, когда последний раз был обновлен кэш, записывается в атрибут msDS-Cached-Membership-Time-Stamp
    • Если на контроллерах домена включены параметры атрибута SamNoGcLogonEnforceNTLMCheck и SamNoGcLogonEnforceKerberosIpCheck, то атрибут msDS-Site-Affinity игнорируется
    • Если GUID для локального сайта записан в атрибуте msDS-Site-Affinity и параметры, которые указаны выше, не активны, то значение атрибута msDS-Site-Affinity определяется следующим образом: если значение указанного времени меньше половины значения Cached Membership Site Stickiness, то вход в систему продолжается, если наоборот, то пользователю будет отказано в проверке подлинности
  6. Контроллер домена проверяет свой локальный каталог на наличие любых локальных доменных групп, к которым принадлежит пользователь и добавляет SID локальной доменной группы в свой список идентификаторов безопасности глобальной группы и универсальной группы;
  7. Контроллер домена отправляет весь список идентификаторов безопасности клиентскому компьютеру, где LSA извлекает идентификаторы безопасности встроенных групп пользователя и создает маркер доступа пользователя.

Поиск адресной книги Exchange.

Службы каталогов службы Exchange для почтовых серверов Microsoft Exchange Server тесно интегрированы с доменными службами Active Directory. Когда пользователи в своем почтовом клиенте хотят найти человека в пределах своей организации, чаще всего они выполняют поиск через глобальную адресную книгу (GAL), которая включает совокупность всех получателей почты в организации, включая пользователей электронной почты, контакты и группы. Такими получателями могут быть обычные пользователи, контакты, списки рассылки, группы безопасности и папки. GAL автоматически заполняется специально отведенной для этого службой на почтовом сервере, и пользователи могут создавать списки настраиваемых адресов. Для поиска серверов глобального каталога, почтовые сервера Exchange используют Active Directory и DNS. Когда пользователь пробует открыть в Microsoft Outlook адресную книгу, или когда пользователь пишет сообщение и вводит имя или адрес в поле «To», клиент Outlook использует сервер глобального каталога, указанный сервером Exchange.

Архитектура глобального каталога

Архитектура сервера глобального каталога отличается от архитектуры сервера, у которого нет роли глобального каталога использованием нестандартного порта LDAP 3268, который направляет запросы непосредственно в глобальный каталог. Запросы, которые идут на порт 3268, формируются также как и любые LDAP-запросы, но доменные службы Active Directory изменяют поведение поиска в зависимости от используемого порта. То есть, запросы на порт 3268 направляются на разделы каталога глобального каталога, включая разделы каталога только для чтения, для которых данный сервер является уполномоченным. Запросы на порт 389 направляются на домен с возможностью записи, а также на разделы каталога конфигурации, приложения и схемы реплик, которые расположены на сервере глобального каталога в качестве контроллера домена. Кроме того, во время связи с серверами глобального каталога для получения членства в универсальных группах при входе пользователя в систему, контроллеры домена используют проприетарный интерфейс репликации.

Поиск клиентов включает адресную книгу клиентов Microsoft Exchange Server, которые для поиска адресов электронной почты в глобальном каталоге используют поставщик клиента MAPI Emsabp32.dll. На стороне клиента поставщик MAPI связывается с сервером через проприетарный RPC интерфейс Name Service Provider Interface (NSPI). Пользователи с операционными системами предшествующими Windows 2000 для взаимодействия с диспетчером учетных записей безопасности (Security Accounts Manager, SAM) на эмуляторе основного контроллера домена (PDC) используют сетевой API.

Соответственно, к основным компонентам глобального каталога можно отнести:

  • Файл Ntds.dit, в котором хранится база Active Directory;
  • Глобальный каталог клиентов, который включает поиск клиентов и адресной книги клиентов, а также контроллеры домена, выполнение репликации и универсальные группы SID во время выполнения входа в мультидоменном лесу;
  • Физическую IP-сеть;
  • Интерфейсы LDAP через порт 389 для чтения и записи операций и LDAP через порт 3268 глобального каталога поисковых операций. Клиенты устаревших операционных систем Windows NT 4.0 и резервные контроллеры домена (BDC) взаимодействуют с Active Directory посредством интерфейса диспетчера учетных записей безопасности (SAM). А получение членства в универсальной группе происходит через RPC как часть интерфейса RPC репликации;
  • Directory System Agent (DSA), представляет собой компонент службы каталогов, который выполняется в Ntdsa.dll на каждом контроллере домена, предоставляя интерфейсы, через которые службы и процессы могут получить доступ к базе данных каталогов;
  • Расширяемая подсистема хранения данных (Extensible Storage Engine, ESE), представляет собой компонент службы каталогов, который выполняется как Esent.dll и управляет таблицами записей, которые составляют базу данных каталогов.

На следующей иллюстрации изображена архитектура глобального каталога:

Рис. 4. Архитектура глобального каталога

Протоколы глобального каталога

Протоколы и интерфейсы на всех контроллерах домена одинаковые и для серверов глобального каталога нет специфических протоколов. В данном случае нас интересуют четыре интерфейса и три протокола. Значимость глобального каталога заключается в том, что контроллеры домена используют собственные протоколы репликации RPC не только для репликации, а еще и для связи с сервером глобального каталога при извлечении сведения о членстве в универсальных группах и при обновлении кэша членства в группе, когда включена функция «Кэширование членства в универсальных группах». Для всех требований глобального каталога используются следующие протоколы:

  • Lightweight directory access protocol (LDAP).
  • Simple mail transfer protocol (SMTP).
  • Remote procedure call (RPC).

На следующей иллюстрации изображены протоколы глобального каталога:

Рис. 5. Интерфейсы и протоколы глобального каталога

Физическая структура глобального каталога

Как роль контроллера домена, глобальный каталог хранит один доступный для записи раздел каталога домена, в котором расположены объекты со всеми атрибутами. Также сервер глобального каталога хранит частичный набор атрибутов (PAS) с правом на чтение всех объектов остальных доменов в мультидоменном лесу. Объектами схемы, определяющими атрибуты, являются объекты attributeSchema, которые включают атрибут isMemberOfPartialAttributeSet. Если значение этого атрибута равно «true», то атрибут реплицируется в глобальный каталог. Топология репликации глобального каталога формируется автоматически при помощи проверки согласованности знаний (Knowledge Consistency Checker, KCC) – встроенный процесс, который реализует топологию репликации, гарантирующую доставку содержимого каждого раздела каталога на каждый сервер глобального каталога.

Атрибуты, которые реплицируются в глобальный каталог по умолчанию, включаются в базовый набор, определенный корпорацией Microsoft как атрибуты, которые чаще всего используются при поиске. При необходимости, для того чтобы указать дополнительные атрибуты, вы можете воспользоваться оснасткой консоли управления (MMC) «Схема Active Directory». Чтобы назначить объект attributeSchema членом PAS, в данной оснастке вам нужно установить флажок «Реплицировать этот атрибут в глобальный каталог», который задает атрибуту isMemberOfPartialAttributeSet значение «true».

Физическое представление данных глобального каталога ничем не отличается от контроллера домена, то есть, в глобальном каталоге база данных NTDS.dit хранит атрибуты объекта в одном файле. А на контроллере домена, который не является сервером глобального каталога, файл Ntds.dit содержит полную записываемую реплику каждого объекта в разделе каталога одного домена для своего домена, а также доступные для записи разделы каталога конфигурации и схемы.

Например, рассмотрим достаточно типичный сценарий. На сервере глобального каталога расположена полная реплика своего домена, а также частичная реплика только для чтения всех остальных доменов леса. На данном сервере глобального каталога все разделы каталога на сервере глобального каталога хранятся в файле базы данных каталога (Ntds.dit). Соответственно, в данном случае нет раздельного хранилища атрибутов глобального каталога.

К компонентам физической структуры глобального каталога можно отнести:

  • Файл базы данных Ntds.dit, в котором хранятся реплики объектов Active Directory, проводимых любым контроллером домена, включая серверы глобального каталога;
  • Лес Active Directory, то есть набор доменов, которые составляют логическую структуру Active Directory и которые доступны для поиска в глобальном каталоге;
  • Контроллеры доменов, которые хранят по одному полному разделу каталога домена с возможностью записи и разделы каталога конфигурации и схемы леса;
  • Сервер глобального каталога, который представляет собой контроллер домена, содержащий полную записываемую реплику каждого объекта в разделе каталога одного домена для своего домена, а также доступные для чтения реплики остальных доменов в мультидоменном лесу.

На следующей иллюстрации изображена физическая структура глобального каталога:

Рис. 6. Физическая структура глобального каталога

Заключение

В этой статье вы познакомились с серверами глобального каталога. Было рассказано о самой концепции серверов глобального каталога, а также о взаимодействии серверов глобального каталога с другими серверными объектами корпорации Microsoft. Рассмотрены ситуации, в которых используются сервера глобальных каталогов, а именно: поиск объектов, подтверждение ссылок на объекты в лесу, проверка подлинности, сведения о членстве в универсальных группах в среде с несколькими доменами, кэширование членства в универсальных группах, а также поиск адресной книги Microsoft Exchange. Помимо этого, вкратце была рассмотрена архитектура, физическая структура, а также протоколы серверов глобального каталога.

Об авторе:

Дмитрий Буланов отвечает на вопросы участников конференции OSZone.net в форумах операционных систем Microsoft. Его статьи на сайте OSZone.net можно найти по этой ссылке. С декабря 2008 года Дмитрий ведет свой блог, посвященный клиентским и серверным операционным системам Microsoft.

В апреле 2010 года был награжден премией Microsoft Most Valuable Professional (MVP), присуждаемой за вклад в развитие технических сообществ. Также в 2010 году он получил статус MC ITP (Microsoft Certified IT Professional), сдав 3 экзамена Microsoft, после чего старается регулярно сертифицироваться по разным технологиям.

С 1 января 2011 года он ведет свой микроблог в Твиттере.

Вы можете задать Дмитрию любой полностью анонимный вопрос здесь.