Как я настроил общую и индивидуальную политику паролей в Active Directory Windows Server 2016
В этой статье я покажу, как изменить требования к паролям для всех пользователей домена, проверить применение настроек и создать отдельную политику для конкретного пользователя.
Инструкция рассчитана на новичков и основана на Windows Server 2016 с установленной ролью Active Directory Domain Services.
Что мне понадобится
- Учётная запись с правами администратора домена.
- Консоль управления групповыми политиками.
- Модуль Active Directory для PowerShell.
- Доступ к контроллеру домена.
Резервное копирование Default Domain Policy
Перед изменениями я создаю резервную копию политики.
Для запуска консоли управления групповыми политиками я нажимаю Win + R и выполняю:
Код:
gpmc.msc
В левой части консоли открываю:
Код:
Лес
└── Домены
└── мой-домен.local
└── Объекты групповой политики
В папке «Объекты групповой политики» я нахожу Default Domain Policy, нажимаю на неё правой кнопкой и выбираю «Архивировать…».
Указываю папку, например:
Код:
C:\GPO-Backup
Добавляю комментарий:
Код:
До изменения политики паролей
После этого подтверждаю архивирование.
Важный момент: если нажать правой кнопкой на ссылку Default Domain Policy непосредственно под именем домена, пункта архивирования там не будет. Для резервного копирования нужно выбрать настоящий объект внутри папки «Объекты групповой политики».
Пункт «Восстановить из архива…» предназначен для восстановления ранее сохранённой копии, а не для её создания.
Резервную копию также можно сделать через PowerShell:
Код:
Import-Module GroupPolicy
New-Item "C:\GPO-Backup" -ItemType Directory -Force
Backup-GPO `
-Name "Default Domain Policy" `
-Path "C:\GPO-Backup" `
-Comment "До изменения политики паролей"
Изменение политики паролей для всего домена
Для изменения общей политики я нажимаю правой кнопкой на Default Domain Policy и выбираю «Изменить…».
Далее перехожу по следующему пути:
Код:
Конфигурация компьютера
└── Политики
└── Конфигурация Windows
└── Параметры безопасности
└── Политики учётных записей
└── Политика паролей
- Минимальная длина пароля — 8 символов.
- Пароль должен отвечать требованиям сложности — отключено.
- Вести журнал паролей — 5 сохранённых паролей.
- Минимальный срок действия пароля — 1 день.
- Максимальный срок действия пароля — 42 дня.
- Хранить пароль, используя обратимое шифрование — отключено.
Если параметр сложности отключён, пароль из восьми строчных букв, например asdfghjt, технически соответствует такой политике.
Но он всё равно может быть отклонён в следующих случаях:
- такой пароль уже использовался и попал в журнал паролей;
- для пользователя действует отдельная Fine-Grained Password Policy;
- в домене установлен дополнительный фильтр запрещённых паролей;
- изменения ещё не реплицировались на остальные контроллеры домена.
Проверка фактически действующей политики
После сохранения настроек я не ограничиваюсь просмотром редактора GPO. Я проверяю значения, которые фактически записаны в Active Directory.
Запускаю PowerShell от имени администратора:
Код:
Import-Module ActiveDirectory
Get-ADDefaultDomainPasswordPolicy -Current LocalComputer |
Format-List MinPasswordLength,
ComplexityEnabled,
PasswordHistoryCount,
MinPasswordAge,
MaxPasswordAge
Для моего примера ожидаются такие основные значения:
Код:
MinPasswordLength : 8
ComplexityEnabled : False
PasswordHistoryCount : 5
MinPasswordAge : 1.00:00:00
MaxPasswordAge : 42.00:00:00
Значение False напротив ComplexityEnabled означает, что встроенные требования сложности отключены.
Что я проверяю, если изменения не применились
Если PowerShell показывает старые значения, я сначала определяю контроллер домена с ролью PDC Emulator:
Код:
Get-ADDomain |
Select-Object DNSRoot,PDCEmulator
На указанном контроллере домена проверяю применённые компьютерные политики:
Код:
gpresult /scope computer /r
В списке применённых GPO должна присутствовать Default Domain Policy.
Для принудительного обновления компьютерной политики на контроллере домена я выполняю:
Код:
gpupdate /target:computer /force
После успешного обновления повторяю проверку:
Код:
Get-ADDefaultDomainPasswordPolicy -Current LocalComputer |
Format-List MinPasswordLength,ComplexityEnabled
Если Default Domain Policy отсутствует в результатах gpresult, я проверяю:
- включена ли связь Default Domain Policy с корнем домена;
- не включена ли блокировка наследования у OU Domain Controllers;
- не задаёт ли другая GPO в корне домена значения с более высоким приоритетом;
- нет ли ошибок обработки групповой политики в журнале событий;
- исправно ли работает репликация между контроллерами домена.
Состояние репликации я проверяю командой:
Код:
repadmin /replsummary
Проверка отдельной политики пользователя
Чтобы узнать, назначена ли пользователю индивидуальная политика паролей, я выполняю:
Код:
Get-ADUserResultantPasswordPolicy -Identity "user1"
Вместо user1 указываю реальный логин пользователя.
Если команда ничего не вывела, для пользователя не назначена отдельная Fine-Grained Password Policy и применяется общая доменная политика.
Если команда вывела объект политики, именно он определяет требования к паролю этого пользователя.
Создание индивидуальной политики для одного пользователя
Если требования нужно изменить только для одного пользователя, обычную GPO к его учётной записи я не привязываю. Для этого предназначена Fine-Grained Password Policy, также называемая PSO — Password Settings Object.
Я запускаю Центр администрирования Active Directory:
Код:
dsac.exe
Затем открываю:
Код:
Мой домен
└── System
└── Password Settings Container
В правой панели выбираю:
Код:
Создать
└── Параметры пароля
Для примера создаю такую политику:
- Имя — PSO-user1.
- Приоритет — 10.
- Применять ограничение минимальной длины — включено.
- Минимальная длина — 8 символов.
- Вести журнал паролей — включено.
- Сохранять паролей — 5.
- Пароль должен отвечать требованиям сложности — отключено.
- Хранить пароль с использованием обратимого шифрования — отключено.
- Защита от случайного удаления — включено.
Чем меньше число в поле «Приоритет», тем выше приоритет PSO среди конкурирующих индивидуальных политик.
Срок действия пароля и блокировка в PSO
Здесь есть важный нюанс: индивидуальная PSO является итоговой политикой для пользователя. Не стоит рассчитывать, что все неотмеченные ограничения автоматически добавятся из Default Domain Policy.
Если снять соответствующие флажки, получится следующее:
- без минимального срока пользователь сможет менять пароль сразу;
- без максимального срока политика не будет требовать периодической смены пароля;
- без политики блокировки учётная запись не будет блокироваться этой PSO после неудачных попыток входа.
Если мне нужно ослабить только длину и сложность, остальные параметры я копирую из общей доменной политики.
Посмотреть их можно так:
Код:
Get-ADDefaultDomainPasswordPolicy |
Format-List MinPasswordAge,
MaxPasswordAge,
LockoutThreshold,
LockoutObservationWindow,
LockoutDuration
Например, я могу установить:
- минимальный срок действия — 1 день;
- максимальный срок действия — 42 дня;
- количество неудачных попыток и продолжительность блокировки — такие же, как в общей политике.
Назначение PSO пользователю
В нижней части окна нахожу раздел «Применяется напрямую к» или Directly Applies To.
Нажимаю «Добавить…», нахожу нужного пользователя и подтверждаю выбор.
После этого нажимаю OK.
Fine-Grained Password Policy можно назначить:
- конкретному пользователю;
- глобальной группе безопасности.
Напрямую назначить PSO подразделению OU нельзя. Если одинаковая политика нужна нескольким пользователям, я создаю глобальную группу безопасности и назначаю PSO этой группе.
Проверка индивидуальной политики
После создания PSO я проверяю результат:
Код:
Get-ADUserResultantPasswordPolicy -Identity "user1" |
Format-List Name,
Precedence,
MinPasswordLength,
ComplexityEnabled,
PasswordHistoryCount,
MinPasswordAge,
MaxPasswordAge,
LockoutThreshold
Ожидаемый фрагмент результата:
Код:
Name : PSO-user1
Precedence : 10
MinPasswordLength : 8
ComplexityEnabled : False
Если команда выводит созданную политику, значит она назначена правильно.
Для PSO команда gpupdate обычно не требуется, потому что PSO хранится как объект Active Directory. При наличии нескольких контроллеров домена я учитываю время репликации.
Созданная политика не заменяет существующий пароль автоматически. Новые требования проверяются при следующей смене или сбросе пароля.
Создание PSO через PowerShell
При необходимости я могу создать аналогичную политику через PowerShell. В этом примере я беру сроки действия и параметры блокировки из общей политики, а изменяю только длину и сложность.
Код:
Import-Module ActiveDirectory
$domainPolicy = Get-ADDefaultDomainPasswordPolicy
$policyParameters = @{
Name = "PSO-user1"
Precedence = 10
ComplexityEnabled = $false
MinPasswordLength = 8
PasswordHistoryCount = $domainPolicy.PasswordHistoryCount
MinPasswordAge = $domainPolicy.MinPasswordAge
MaxPasswordAge = $domainPolicy.MaxPasswordAge
LockoutThreshold = $domainPolicy.LockoutThreshold
LockoutObservationWindow = $domainPolicy.LockoutObservationWindow
LockoutDuration = $domainPolicy.LockoutDuration
ReversibleEncryptionEnabled = $false
ProtectedFromAccidentalDeletion = $true
}
New-ADFineGrainedPasswordPolicy @policyParameters
Add-ADFineGrainedPasswordPolicySubject `
-Identity "PSO-user1" `
-Subjects "user1"
Перед выполнением я заменяю user1 на реальный логин пользователя.
Краткий итог
В результате я придерживаюсь следующего порядка:
- Создаю резервную копию Default Domain Policy.
- Изменяю общую политику только в корне домена.
- Проверяю реальные значения через Get-ADDefaultDomainPasswordPolicy.
- Для исключений создаю Fine-Grained Password Policy.
- Обязательно назначаю PSO пользователю или глобальной группе.
- Проверяю результат через Get-ADUserResultantPasswordPolicy.
- Не отключаю обратимое шифрование и блокировку без осознанной необходимости.
Такой подход позволяет мне отдельно управлять требованиями к паролям для всего домена и для конкретных пользователей, не создавая лишние GPO и не привязывая парольные политики к OU.