Что нового

Настройка политики паролей Active Directory в Windows Server 2016

Как я настроил общую и индивидуальную политику паролей в Active Directory Windows Server 2016​

cd0b396e6d6a94555ec3a74e59492049.webp

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

Инструкция рассчитана на новичков и основана на Windows Server 2016 с установленной ролью Active Directory Domain Services.

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

Что мне понадобится​


  • Учётная запись с правами администратора домена.
  • Консоль управления групповыми политиками.
  • Модуль Active Directory для PowerShell.
  • Доступ к контроллеру домена.

Резервное копирование Default Domain Policy​


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

Для запуска консоли управления групповыми политиками я нажимаю Win + R и выполняю:

Код:
gpmc.msc

482ef5099bd052a42ed78260d0ab539c.webp


В левой части консоли открываю:

Код:
Лес
└── Домены
    └── мой-домен.local
        └── Объекты групповой политики

В папке «Объекты групповой политики» я нахожу Default Domain Policy, нажимаю на неё правой кнопкой и выбираю «Архивировать…».
1788520606117.png

Указываю папку, например:

Код:
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 и выбираю «Изменить…».
1788520692047.png

Далее перехожу по следующему пути:

Код:
Конфигурация компьютера
└── Политики
    └── Конфигурация Windows
        └── Параметры безопасности
            └── Политики учётных записей
                └── Политика паролей
1788521030512.png


1788521134497.png
В моём примере я настраиваю следующие параметры:

  • Минимальная длина пароля — 8 символов.
  • Пароль должен отвечать требованиям сложности — отключено.
  • Вести журнал паролей — 5 сохранённых паролей.
  • Минимальный срок действия пароля — 1 день.
  • Максимальный срок действия пароля — 42 дня.
  • Хранить пароль, используя обратимое шифрование — отключено.

Если параметр сложности отключён, пароль из восьми строчных букв, например asdfghjt, технически соответствует такой политике.

Но он всё равно может быть отклонён в следующих случаях:

  • такой пароль уже использовался и попал в журнал паролей;
  • для пользователя действует отдельная Fine-Grained Password Policy;
  • в домене установлен дополнительный фильтр запрещённых паролей;
  • изменения ещё не реплицировались на остальные контроллеры домена.

Пароль вроде asdfghjt легко подобрать. В рабочей среде я предпочитаю длинные парольные фразы, даже если встроенная проверка сложности отключена.

Проверка фактически действующей политики​


После сохранения настроек я не ограничиваюсь просмотром редактора 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 на реальный логин пользователя.

Краткий итог​


В результате я придерживаюсь следующего порядка:

  1. Создаю резервную копию Default Domain Policy.
  2. Изменяю общую политику только в корне домена.
  3. Проверяю реальные значения через Get-ADDefaultDomainPasswordPolicy.
  4. Для исключений создаю Fine-Grained Password Policy.
  5. Обязательно назначаю PSO пользователю или глобальной группе.
  6. Проверяю результат через Get-ADUserResultantPasswordPolicy.
  7. Не отключаю обратимое шифрование и блокировку без осознанной необходимости.

Такой подход позволяет мне отдельно управлять требованиями к паролям для всего домена и для конкретных пользователей, не создавая лишние GPO и не привязывая парольные политики к OU.

Официальная документация​


Об авторе
Guru
Василий, cистемный админ /gnu/linux/windows/macos/mikrotik/troubleshooter, создатель сайта
Интересуюсь всем что делает инфраструктуру быстрой и надёжной
Открыт к общению и проектам, написать мне можно через форму или в личном сообщении

❗ Если есть пожелания по обзору какого-либо вопроса не представленного на сайте - пиши в комментариях

Комментарии

Нет комментариев для отображения.

Информация о статье

Автор
Guru
Время чтения статьи
5 мин чтения
Просмотры
15
Посл. обновление

Ещё в Windows

Ещё от Guru

Поделиться этой статьёй

Назад
Верх