Вопрос или проблема
Мой лес Active Directory состоит из нескольких дочерних доменов, включая:
- Основной домен (
main.contoso.local
) - Тестовый домен (
test.contoso.local
)
Мой пользователь [email protected]
является членом группы MAIN\Global
, которая имеет область группы Global
и находится в основном домене. Эта глобальная группа является членом группы TEST\DomainLocal
, которая имеет область группы Domain Local
и находится в тестовом домене.
[[email protected]] --MemberOf--> [MAIN\Global] --MemberOf--> [TEST\DomainLocal]
Если мой пользователь входит в систему на машине в тестовом домене, токен будет содержать SID TEST\DomainLocal
. Это можно проверить с помощью whoami /groups
в сессии пользователя.
Как администратор, как я могу получить эту информацию через CLI, не входя в систему как пользователь? Я пытался запросить глобальный каталог или использовать LDAP_MATCHING_RULE_IN_CHAIN
(member:1.2.840.113556.1.4.1941)
, однако TEST\DomainLocal
нигде не отображается.
Группы локального домена специально не реплицируются за пределами своего домена, включая глобальный каталог. Это сделано намеренно, и это причина существования этой области группы. Если вы хотите получить членство принципала в каждом домене, включая группы локального домена, вам нужно будет запрашивать каждый домен отдельно.
Или вы можете изменить область с группы локального домена на универсальную группу, которая может принимать участников из других доменов.
Или вы можете спроектировать так, чтобы универсальная группа из основного домена использовалась только и исключительно в группе локального домена в тестовом, чтобы вы могли видеть, членом каких DLG является пользователь, просто просматривая членства в основном.
Этот последний вариант наиболее близок к тому, как были изложены лучшие практики и экзамены по AD. Согласно этому обучению, пользователь из другого домена не должен быть прямым членом группы локального домена в любом домене; универсальные группы должны быть членами групп локального домена — но это уже довольно глубоко в нюансах. Все сводится к контролю области репликации и снижению объема и частоты репликаций. В современном мире пропускная способность и задержка значительно менее важны, и некоторые из этих практик стали устаревшими.
Ответ или решение
Для получения членства локальных групп домена другой доменной единицы (в данном случае, домена TEST) в рамках одной лесной структуры Active Directory, необходимо учесть особенности репликации и области действия групп.
Как указано в вопросе, локальные группы домена (Domain Local) не реплицируются вне своего домена, включая глобальный каталог. Это – проектное решение, которое обуславливает возможность члена группы в одном домене получать доступ к ресурсам в другом домене через локальные группы домена. Чтобы получить информацию о членстве в локальных группах, существует несколько подходов.
Способы решения:
-
Поиск через PowerShell:
Вы можете использовать PowerShell для выполнения запроса непосредственно к домену, в котором вы хотите получить информацию. Например, используя командлеты из модуляActive Directory
, вы можете выполнить следующий скрипт:$user = "MAIN\User" # имя пользователя $domainLocalGroup = "TEST\DomainLocal" # имя локальной группы домена # Получаем SID пользователя $userSID = (Get-ADUser $user -Server "main.contoso.local").SID # Получаем локальную группу в TEST $localGroup = Get-ADGroup $domainLocalGroup -Server "test.contoso.local" # Проверяем, состоит ли глобальная группа из главного домена в локальной группе if ((Get-ADGroupMember $localGroup -Server "test.contoso.local" | Where-Object { $_.SID -eq $userSID })) { Write-Host "$user состоит в группе $localGroup." } else { Write-Host "$user не состоит в группе $localGroup." }
-
Перепроектирование структуры групп:
Если возможно, стоит рассмотреть ребрендинг локальных групп в универсальные (Universal Groups). Универсальные группы могут содержать участников из любого домена в лесу, что упрощает управление членством и доступом. Это требует изменений в архитектуре Active Directory, так как универсальные группы реплицируются во всех доменах леса. -
Стратегия использования универсальных групп:
Подход, который близок к лучшим практикам Active Directory, заключается в использовании универсальных групп из домена MAIN, которые будут непосредственно членами доменной локальной группы в домене TEST. Это позволит упростить получение информации о членстве. Например, вы можете создать универсальную группу в домене MAIN и добавить в нее пользователей, которые должны иметь доступ к ресурсам в домене TEST, а затем сделать эту универсальную группу членом локальной группы в домене TEST.
Таким образом, вам необходимо использовать комбинацию инструментов PowerShell для получения информации Прямо из каждого домена, или пересмотреть структуру групп, чтобы закрепить использование универсальных групп для упрощения управления членством.