Основы управления пользователями и группами в Active Directory
Новую учётную запись в Active Directory создают тремя инструментами: оснасткой ADUC, командлетом New-ADUser в PowerShell и утилитой dsadd. Права на подразделение выдаются мастером делегирования в ADUC или командой dsacls, а сотня учётных записей из списка сотрудников заводится одним скриптом с Import-Csv. Ниже разобраны все эти операции с готовыми командами и пояснениями по параметрам.
Объект пользователя состоит из десятков атрибутов, но работу определяют шесть.
- sAMAccountName - логин для входа в домен в виде DOMAIN\ivanov. Максимум 20 символов, уникальность проверяется в пределах домена.
- userPrincipalName (UPN) - имя входа вида ivanov@domain.com, привычное для почты и облачных сервисов.
- distinguishedName (DN) - полный путь объекта, например CN=Иван Иванов,OU=Sales,DC=domain,DC=com. Утилиты ds* принимают именно DN.
- objectSID - идентификатор безопасности, по которому система проверяет права на файлы и папки.
- memberOf - группы, в которые входит пользователь.
- userAccountControl - флаги состояния: учётная запись включена или отключена, нужна ли смена пароля, истёк ли срок действия.
Права доступа в домене выдают группам, а не отдельным людям: перевод сотрудника в другой отдел сводится к смене членства. Учётную запись при этом не пересоздают, её SID и почтовый ящик сохраняются.
Делегирование прав на OU решает другую задачу: администратор домена передаёт часть работы сотрудникам поддержки, не выдавая им полный контроль над доменом. Технически это набор записей в ACL подразделения, который наследуется дочерними объектами. Клиенты ищут объект по атрибутам каталога, и от того, где лежит учётка, зависит набор применяемых групповых политик. Механику поиска и привязки разбирает статья как работает аутентификация через LDAP: там показаны SearchRequest, простой bind и разбор ответа сервера.
Чем отличаются группы безопасности от групп рассылки
Тип группы отвечает на вопрос, что с ней можно делать. Группа безопасности попадает в ACL и получает права на папки, принтеры, SharePoint и базы данных. Группа рассылки живёт только в почтовой системе: сервер использует её как список получателей, а выдать ей права на сетевую папку нельзя, в списках контроля доступа она не появится.
| Тип группы | Назначение | Где применяется | Использование в ACL |
|---|---|---|---|
| Безопасность (Security) | Права доступа к ресурсам | Файлы, принтеры, SharePoint, SQL, GPO | Да |
| Рассылка (Distribution) | Почтовые рассылки | Exchange, списки получателей | Нет |
Вторая характеристика - область действия. Она определяет, кого можно включить в группу и где группа сработает.
| Область | Кого можно включить | Где применяется |
|---|---|---|
| Локальная в домене (Domain Local) | Пользователей и группы любого домена леса и доверенных доменов | Права на ресурсы внутри своего домена |
| Глобальная (Global) | Пользователей и группы только своего домена | Роли сотрудников, вложенность в локальные группы других доменов |
| Универсальная (Universal) | Пользователей и группы любого домена леса | Права в любом домене леса, почтовые рассылки |
Пример типовой схемы: для отдела продаж создают две группы. Sales_Access с типом "Безопасность" получает права на общую папку отдела на файловом сервере. Sales_Distribution с типом "Рассылка" служит адресом для писем. При изменении состава отдела правится членство в обеих группах, а ACL на файловом сервере остаётся неизменным.
Тип и область можно поменять без пересоздания группы.
Set-ADGroup -Identity "Sales_Distribution" -GroupCategory Security
После преобразования группа рассылки становится группой безопасности, и её можно назначать на ресурсы. Обратное преобразование тоже допускается, если группа пока нигде не получила прав. Как эти же группы превращаются в роли для Linux, TrueNAS и Kubernetes, разобрано в статье про RBAC на основе членства в группах AD.
Обзор инструментов: ADUC, PowerShell и утилиты командной строки
Инструменты отличаются сценарием применения, а не возможностями каталога: любая операция сводится к изменению атрибутов по протоколу LDAP.
| Инструмент | Запуск | Когда удобен | Ограничения |
|---|---|---|---|
| ADUC (dsa.msc) | Win+R, затем dsa.msc | Разовые операции, осмотр структуры OU | Нет массовых операций, слабо подходит для повторяемых задач |
| PowerShell, модуль ActiveDirectory | Import-Module ActiveDirectory | Массовые операции, скрипты, отчёты, обработка ошибок | Нужен RSAT и права на объект |
| dsadd, dsmod, dsmove, dsrm, dsacls | cmd или PowerShell как внешние команды | Скрипты на cmd, системы без модуля ActiveDirectory | Ограниченный набор атрибутов, пароль в открытом виде в командной строке |
Модуль ActiveDirectory ставится как компонент RSAT. В Windows 10 и Windows 11 это делается одной командой, затем консоль нужно перезапустить.
Add-WindowsCapability -Online -Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0" Import-Module ActiveDirectory
Утилиты ds* входят в тот же набор средств AD DS Tools и работают из командной строки без загрузки модуля. Они принимают DN объекта, поэтому путь в каталоге указывают целиком: CN=Иван Иванов,OU=Sales,DC=domain,DC=com.
Команды ниже одинаково работают в Windows Server 2016, 2019 и 2022, а также в клиентских системах с установленным RSAT.
Создание учётной записи пользователя в Active Directory
Создание пользователя через ADUC: пошаговая инструкция
- Запустите оснастку: Win+R, затем dsa.msc. На контроллере домена она доступна сразу после установки роли AD DS, на рабочей станции потребуется RSAT.
- Раскройте домен и выберите OU, в котором должна появиться учётная запись.
- Правый клик по подразделению, затем "Создать", затем "Пользователь".
- Заполните поля Имя, Фамилия, Инициалы, Полное имя. В поле "Имя входа пользователя" укажите логин до символа @, это и есть sAMAccountName, а суффикс выберите из списка доменов.
- Нажмите "Далее", задайте пароль и решите, нужна ли галочка "Требовать смену пароля при следующем входе в систему". Для сервисных учётных записей её снимают и включают "Срок действия пароля не ограничен".
- Завершите мастер и проверьте результат: свойства объекта, вкладка "Учётная запись" (состояние "Учётная запись не заблокирована") и вкладка "Членство в группах".
Если логин занят, мастер остановит создание и предложит другое значение: sAMAccountName уникален в пределах домена. Пароль обязан проходить доменную политику сложности, иначе окно вернёт ошибку ещё до создания объекта.
Создание пользователя через PowerShell: команда New-ADUser
Пароль в PowerShell передаётся не строкой, а защищённым объектом SecureString.
$pwd = ConvertTo-SecureString "P@ssw0rd-2026" -AsPlainText -Force New-ADUser -Name "Иван Иванов" ` -GivenName "Иван" -Surname "Иванов" ` -SamAccountName "ivanov" ` -UserPrincipalName "ivanov@domain.com" ` -Path "OU=Sales,DC=domain,DC=com" ` -AccountPassword $pwd ` -Enabled $true ` -ChangePasswordAtLogon $true
- -Name задаёт полное имя объекта, а -GivenName и -Surname заполняют отдельные атрибуты.
- -SamAccountName и -UserPrincipalName формируют логины, UPN обязан быть уникальным в пределах леса.
- -Path указывает OU в формате DN. Без этого параметра объект окажется в контейнере CN=Users.
- -AccountPassword принимает SecureString, полученный через ConvertTo-SecureString.
- -Enabled $true включает учётную запись сразу. Для поэтапного ввода сотрудников создают с -Enabled $false и включают позже командой Enable-ADAccount.
- -ChangePasswordAtLogon $true заставляет пользователя сменить пароль при первом входе.
Проверка созданной учётной записи:
Get-ADUser ivanov -Properties Enabled, PasswordLastSet, MemberOf | Format-List Name, Enabled, PasswordLastSet, MemberOf
Создать объект в OU может тот, у кого есть право "Создание объектов-пользователей" на этом подразделении. По умолчанию такое право есть у администраторов домена, остальным его выдают делегированием.
Создание пользователя через dsadd: синтаксис и примеры
dsadd user "CN=Иван Иванов,OU=Sales,DC=domain,DC=com" -samid ivanov -upn ivanov@domain.com -fn Иван -ln Иванов -display "Иван Иванов" -pwd P@ssw0rd-2026 -mustchpwd yes -disabled no
Флаги утилиты: -samid задаёт sAMAccountName, -upn задаёт UPN, -fn и -ln заполняют имя и фамилию, -display управляет отображаемым именем, -pwd задаёт пароль, -mustchpwd требует смены при первом входе, -disabled управляет состоянием учётной записи. Домашний каталог задаётся флагами -hmdir и -hmdrv.
Пароль в командной строке попадает в историю сессии и виден в списке процессов на сервере. Для служебных учётных записей безопаснее вводить пароль через защищённый ввод PowerShell, а на время массовых операций ограничивать доступ к консоли другим администраторам. CSV-файлы dsadd не читает: массовое создание строится на цикле FOR /F, что уступает Import-Csv по удобству и обработке ошибок.
Управление группами безопасности и рассылки в Active Directory
Создание группы безопасности через ADUC и PowerShell
- Правый клик по OU, затем "Создать", затем "Группа".
- Укажите имя группы. Полезно сразу задать понятный шаблон: Sales_Access, Finance_ReadOnly, Helpdesk_Admins.
- Выберите область действия: "Глобальная" для ролей сотрудников, "Локальная в домене" для прав на ресурсы, "Универсальная" для групп, которые нужны в нескольких доменах леса.
- Выберите тип группы "Безопасность".
- Сохраните группу и добавьте участников на вкладке "Члены".
New-ADGroup -Name "Sales_Access" -SamAccountName "Sales_Access" ` -GroupScope Global -GroupCategory Security ` -Path "OU=Sales,DC=domain,DC=com" Add-ADGroupMember -Identity "Sales_Access" -Members "ivanov","petrov"
Проверка состава:
Get-ADGroupMember -Identity "Sales_Access" | Select-Object name, objectClass
Для добавления участника нужны права на запись атрибута member у группы, а не только чтение. Ошибка "Access is denied" при работе Add-ADGroupMember почти всегда означает, что группа лежит вне делегированного OU.
Создание группы рассылки и управление членством
Группа рассылки создаётся так же, но с другим типом, и в почтовой системе включается как список получателей.
New-ADGroup -Name "Sales_Distribution" -SamAccountName "Sales_Distribution" ` -GroupScope Universal -GroupCategory Distribution ` -Path "OU=Sales,DC=domain,DC=com"
Универсальная область предпочтительна для рассылок: адрес работает в любом домене леса. Состав меняется теми же командлетами.
Add-ADGroupMember -Identity "Sales_Distribution" -Members "ivanov" Remove-ADGroupMember -Identity "Sales_Distribution" -Members "petrov" -Confirm:$false
Из командной строки членство правит dsmod group:
dsmod group "CN=Sales_Access,OU=Sales,DC=domain,DC=com" -addmbr "CN=Иван Иванов,OU=Sales,DC=domain,DC=com"
Флаг -addmbr добавляет участника, -rmmbr удаляет, -chmbr заменяет весь список. Несколько участников указывают через пробел.
Правка состава рассылки требует прав в почтовой системе, а не только в каталоге. Почтовый адрес группы хранится в атрибутах mail и proxyAddresses, а в ACL каталога группа рассылки бесполезна. Учтите, что наличие группы рассылки в AD не создаёт почтовый ящик: адрес появляется только после включения почты средствами Exchange.
Делегирование прав на подразделения (OU) в Active Directory
Делегирование позволяет отдать часть административных задач без выдачи прав уровня администратора домена. Все настройки сводятся к записям ACL на подразделении, которые наследуются объектами внутри него. Права действуют только на выбранный OU: за его пределами делегированный администратор не может ничего.
Делегирование через мастер управления в ADUC
- Включите дополнительные компоненты: меню "Вид", затем "Дополнительные компоненты". Без этого вкладка "Безопасность" в свойствах OU не отображается.
- Правый клик по подразделению, затем "Делегировать управление".
- Добавьте пользователя или группу, которой передаются права. Делегировать правильнее группе: при уходе сотрудника достаточно убрать его из группы.
- Выберите типовые задачи: "Создание, удаление и управление учётными записями пользователей", "Сброс паролей пользователей и смена паролей при следующем входе в систему", "Управление группами", "Изменение членства в группе". Пункт "Создание особой задачи для делегирования" открывает ручной выбор прав.
- Завершите мастер и проверьте результат на вкладке "Безопасность": у выбранной группы появятся записи с типом "Разрешить".
Два предупреждения. Мастер не выдаёт права на дочерние OU автоматически: для вложенных подразделений операцию повторяют или включают наследование вручную. Для защищённых объектов (членов групп Administrators, Domain Admins, Account Operators) записи ACL перезаписываются службой AdminSDHolder примерно раз в час, поэтому делегирование на них не удержится.
Делегирование прав через dsacls: примеры команд
Утилита dsacls назначает разрешения из командной строки и подходит для развёртывания одинаковой схемы доступа в нескольких доменах.
dsacls "OU=Sales,DC=domain,DC=com" /I:S /G "DOMAIN\SalesAdmins:GA;user" /G "DOMAIN\SalesAdmins:GA;group"
Разбор параметров:
- /I:S включает наследование на дочерние объекты.
- /G выдаёт разрешение указанному пользователю или группе, /D снимает разрешение, /R удаляет запись ACL.
- GA означает полный контроль над объектами типа user и group после точки с запятой. Права сужают до чтения, записи и создания дочерних объектов; полный список сокращений выдаёт dsacls /?.
Прав на сброс паролей без полного контроля не хватит: в каталоге это отдельное расширенное право с GUID 00299570-246d-11d0-a768-00aa006e0529. Мастер делегирования в ADUC добавляет такую запись отдельным пунктом списка задач, а в dsacls право указывают по GUID вместо буквенного сокращения.
Посмотреть текущий список разрешений можно без ключей:
dsacls "OU=Sales,DC=domain,DC=com"
Для выдачи и правки ACL нужны права администратора домена или права владельца подразделения. Перед массовым развёртыванием проверьте схему на копии OU: лишние записи в ACL подразделения трудно заметить, а наследуются они всеми дочерними объектами.
Делегирование в каталоге закрывает только часть задач. Сервисам нужен отдельный доступ по схеме минимальных привилегий: как его устроить через LDAPS и сервисную учётную запись, показывает статья про Zabbix и Active Directory: настройку аутентификации и ролевого доступа. Привязку таких групп к ролям в сторонних системах разбирает материал про настройку LDAP-групп и ролей для разграничения прав доступа.
Массовое создание пользователей из CSV через PowerShell
Импорт из CSV экономит часы при открытии нового офиса или наборе сезонного персонала. Файл готовят в таблице, одна строка на сотрудника.
| Колонка | Пример значения | Куда подставляется |
|---|---|---|
| Name | Иван Иванов | -Name |
| SamAccountName | ivanov | -SamAccountName |
| UPN | ivanov@domain.com | -UserPrincipalName |
| OU | OU=Sales,DC=domain,DC=com | -Path |
| Password | P@ssw0rd-2026 | -AccountPassword через ConvertTo-SecureString |
$csv = "C:\scripts\users.csv"
$log = "C:\scripts\create-users.log"
Import-Csv $csv | ForEach-Object {
try {
$pwd = ConvertTo-SecureString $_.Password -AsPlainText -Force
New-ADUser -Name $_.Name `
-SamAccountName $_.SamAccountName `
-UserPrincipalName $_.UPN `
-Path $_.OU `
-AccountPassword $pwd `
-Enabled $true `
-ChangePasswordAtLogon $true `
-ErrorAction Stop
"OK $($_.SamAccountName)" | Out-File $log -Append -Encoding UTF8
}
catch {
"ERR $($_.SamAccountName): $($_.Exception.Message)" | Out-File $log -Append -Encoding UTF8
}
}
Что важно в этом скрипте:
- Параметр -ErrorAction Stop превращает некритичные ошибки в исключения, иначе блок catch их не поймает.
- Лог хранит результат по каждой строке, поэтому после прогона видно, какие учётные записи созданы и на чём споткнулись остальные.
- Логины стоит проверить заранее: Import-Csv $csv | Where-Object { Get-ADUser -Filter "SamAccountName -eq '$($_.SamAccountName)'" } покажет конфликты до запуска.
- Холостой прогон делается ключом -WhatIf у New-ADUser: командлет показывает план действий и ничего не меняет.
- Скрипт можно запускать не только под администратором домена, но и под учётной записью с делегированными правами на целевые OU.
CSV содержит пароли в открытом виде. Храните файл на ресурсе с ограниченным доступом и удаляйте после импорта, а пользователям выдавайте пароли отдельным каналом. Для больших наборов разумно генерировать случайные пароли и сохранять их в защищённое хранилище, а не в исходную таблицу.
Перенос учётных записей между OU и настройка домашних каталогов
Перенос пользователя между OU: ADUC, PowerShell, dsmove
При перемещении объекта меняется его DN, а SID и членство в группах сохраняются. Главный риск связан с групповыми политиками: после переноса применяются GPO нового подразделения, а настройки прежнего OU перестают действовать.
В ADUC объект перетаскивают мышью на нужное подразделение или используют правый клик, затем "Переместить". Из PowerShell то же делает Move-ADObject.
Move-ADObject -Identity "CN=Иван Иванов,OU=Sales,DC=domain,DC=com" ` -TargetPath "OU=Marketing,DC=domain,DC=com" Get-ADUser ivanov -Properties DistinguishedName | Select-Object Name, DistinguishedName
Утилита dsmove работает так же, но требует DN и целевого подразделения.
dsmove "CN=Иван Иванов,OU=Sales,DC=domain,DC=com" -newparent "OU=Marketing,DC=domain,DC=com"
Для переноса нужны права на удаление объекта в исходном OU и на создание объекта в целевом. Частая ошибка: перенос делают до настройки прав на целевое подразделение, и объект оказывается в OU, где делегированные администраторы не могут им управлять.
Настройка домашнего каталога при создании и изменении пользователя
Домашний каталог задают два атрибута: homeDirectory с UNC-путём и homeDrive с буквой диска. Диск подключается клиентом во время входа в систему.
New-ADUser -Name "Иван Иванов" -SamAccountName "ivanov" ` -Path "OU=Sales,DC=domain,DC=com" ` -HomeDirectory "\\server\home\ivanov" -HomeDrive "H" ` -AccountPassword $pwd -Enabled $true Set-ADUser -Identity ivanov ` -HomeDirectory "\\server\home\ivanov" -HomeDrive "H"
В ADUC те же поля лежат на вкладке "Профиль": переключатель "Домашняя папка", буква диска и путь. В путь можно подставить переменную %username%, тогда каждый пользователь получит свою папку автоматически.
dsmod user "CN=Иван Иванов,OU=Sales,DC=domain,DC=com" -hmdir "\\server\home\ivanov" -hmdrv H
Папку создаёт администратор или скрипт, сама она не появится. Права выдают так: пользователю полный доступ только к своей папке, группе администраторов полный доступ, остальным доступ закрыт. Если каталог на сетевом ресурсе, у пользователя должны быть права на подключение к шаре и на чтение родительской папки. Ошибка "Не удаётся подключить диск H:" означает, что путь недоступен по сети или прав на папку не хватает. Проверка занимает минуту: пользователь входит в систему и открывает "Этот компьютер", либо выполняет в командной строке net use.
Типовые ошибки и рекомендации по управлению пользователями в AD
| Симптом | Причина | Что делать |
|---|---|---|
| "Указанная учётная запись уже существует" | sAMAccountName или UPN занят | Проверить Get-ADUser -Filter "SamAccountName -eq 'ivanov'", выбрать другой логин |
| "Отказано в доступе" при создании в OU | Нет прав на подразделение | Выдать права мастером делегирования, проверить вкладку "Безопасность" |
| Учётная запись создана, пользователь не может войти | Объект отключён, пароль не проходит политику, нет права на смену пароля | Проверить флаги: Get-ADUser ivanov -Properties Enabled, PasswordExpired, userAccountControl |
| После переноса в другой OU изменились настройки | Сменился набор применяемых GPO | Проверить gpresult /r на рабочей станции, настроить политики в новом OU |
| Делегирование не действует | Отключено наследование или объект защищён AdminSDHolder | Проверить наследование в "Дополнительных параметрах безопасности" |
| Add-ADGroupMember не находит пользователя | Поиск идёт в домене по умолчанию, а участник в другом домене | Указать параметр -Server или полный DN |
Для диагностики в первую очередь смотрят журнал Directory Service в оснастке "Просмотр событий": ошибки создания объектов и проблем с репликацией попадают туда с кодами. Состояние объектов проверяют командлетами Get-ADUser и Get-ADGroupMember, а действующие разрешения на подразделении - командой dsacls без ключей.
Рабочие правила, которые снижают число инцидентов:
- Проверяйте уникальность логинов до массового импорта, а не по ходу.
- Тестируйте делегирование на отдельном OU и под отдельной учётной записью, а не под администратором домена.
- Запускайте массовые скрипты с ключом -WhatIf и оставляйте лог выполнения.
- Выдавайте минимум прав: поддержке чаще нужен сброс паролей, а не полный контроль над OU.
- Проектируйте группы до выдачи прав: сначала группа, потом права, потом сотрудники.
Начните с тестового подразделения: создайте группу Helpdesk_Admins, делегируйте ей создание учётных записей и сброс паролей, заведите одного пользователя через New-ADUser и проверьте вход в систему. Проверенный на тесте скрипт переносите на рабочие OU с ключом -WhatIf, а лог первого прогона сохраните как подтверждение результата.