Гранулярные политики паролей в Active Directory (FGPP)

Зачем нужны гранулярные политики паролей

В стандартной конфигурации Active Directory политика паролей задаётся через Default Domain Policy и действует одинаково для всех пользователей домена. Это создаёт проблему: требование 12-символьного пароля со сменой каждые 30 дней подходит для администраторов, но избыточно для обычных пользователей. И наоборот — 8 символов со сменой раз в 90 дней слишком слабо для привилегированных учёток.

Fine-Grained Password Policy (FGPP), доступная начиная с Windows Server 2008 (DFL 2008+), решает эту проблему. FGPP позволяет назначать разные политики паролей разным группам пользователей через объекты Password Settings Object (PSO). Типичная схема:

  • Администраторы — 14+ символов, смена каждые 30 дней, блокировка после 3 попыток
  • Обычные пользователи — 10+ символов, смена каждые 90 дней, блокировка после 5 попыток
  • Сервисные учётки — 20+ символов, без смены (managed service accounts), блокировка после 10 попыток

Требования для использования FGPP

Для работы FGPP необходимы следующие условия:

  • Функциональный уровень домена (DFL) — Windows Server 2008 или выше
  • PSO назначаются на группы безопасности или напрямую на пользователей (не на OU!)
  • Настройка требует прав Domain Admins или делегированных прав на контейнер CN=Password Settings Container,CN=System,DC=domain,DC=com

Проверьте текущий функциональный уровень домена:

# PowerShell
(Get-ADDomain).DomainMode
# Ожидаемый результат: Windows2016Domain или выше

Создание PSO через PowerShell

Password Settings Object (PSO) — это объект AD класса msDS-PasswordSettings, хранящий параметры политики паролей. Каждый PSO имеет приоритет (Precedence) — при конфликте побеждает PSO с наименьшим числом.

PSO для администраторов

Создадим строгую политику для группы Domain Admins:

# Создание PSO для администраторов
New-ADFineGrainedPasswordPolicy -Name "PSO-Admins" `
    -DisplayName "Строгая политика для администраторов" `
    -Precedence 10 `
    -MinPasswordLength 14 `
    -PasswordHistoryCount 24 `
    -ComplexityEnabled $true `
    -ReversibleEncryptionEnabled $false `
    -MaxPasswordAge "30.00:00:00" `
    -MinPasswordAge "1.00:00:00" `
    -LockoutThreshold 3 `
    -LockoutDuration "00:30:00" `
    -LockoutObservationWindow "00:30:00" `
    -ProtectedFromAccidentalDeletion $true

# Назначение PSO на группу
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins" -Subjects "Domain Admins"
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins" -Subjects "Enterprise Admins"

Параметр -PasswordHistoryCount 24 запрещает повторное использование последних 24 паролей. -MinPasswordAge "1.00:00:00" предотвращает циклическую смену паролей для обхода истории.

PSO для обычных пользователей

Умеренная политика для стандартных сотрудников:

# Создание PSO для обычных пользователей
New-ADFineGrainedPasswordPolicy -Name "PSO-Users" `
    -DisplayName "Стандартная политика для пользователей" `
    -Precedence 20 `
    -MinPasswordLength 10 `
    -PasswordHistoryCount 12 `
    -ComplexityEnabled $true `
    -ReversibleEncryptionEnabled $false `
    -MaxPasswordAge "90.00:00:00" `
    -MinPasswordAge "1.00:00:00" `
    -LockoutThreshold 5 `
    -LockoutDuration "00:15:00" `
    -LockoutObservationWindow "00:15:00" `
    -ProtectedFromAccidentalDeletion $true

# Назначение на группу Domain Users
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Users" -Subjects "Domain Users"

PSO для сервисных учётных записей

Для сервисных аккаунтов — длинный пароль без обязательной смены:

# Создание группы для сервисных учёток
New-ADGroup -Name "SVC-Accounts" -GroupScope Global -GroupCategory Security `
    -Path "OU=Groups,DC=example,DC=com"

# Создание PSO
New-ADFineGrainedPasswordPolicy -Name "PSO-ServiceAccounts" `
    -DisplayName "Политика для сервисных учёток" `
    -Precedence 15 `
    -MinPasswordLength 20 `
    -PasswordHistoryCount 24 `
    -ComplexityEnabled $true `
    -MaxPasswordAge "0.00:00:00" `
    -MinPasswordAge "0.00:00:00" `
    -LockoutThreshold 10 `
    -LockoutDuration "01:00:00" `
    -LockoutObservationWindow "01:00:00" `
    -ProtectedFromAccidentalDeletion $true

# Назначение
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-ServiceAccounts" -Subjects "SVC-Accounts"

Значение MaxPasswordAge "0.00:00:00" означает «пароль не истекает». Для сервисных учёток это допустимо при условии использования длинных паролей (20+ символов) и мониторинга попыток входа.

Создание PSO через Active Directory Administrative Center

Для тех, кто предпочитает графический интерфейс, FGPP можно настроить через ADAC (Active Directory Administrative Center).

Пошаговая инструкция

Откройте ADAC и выполните следующие шаги:

  1. В левой панели перейдите в domain (local) → System → Password Settings Container
  2. В правой панели «Tasks» нажмите «New → Password Settings»
  3. Заполните параметры:
    • Name: PSO-Admins
    • Precedence: 10
    • Minimum password length: 14
    • Password history count: 24
    • Maximum password age: 30 дней
    • Account lockout: 3 попытки / 30 минут
  4. В разделе «Directly Applies To» нажмите «Add» и выберите группу «Domain Admins»
  5. Нажмите «OK» для создания PSO

ADAC удобен для визуального контроля существующих PSO, но для массового создания и модификации рекомендуется PowerShell.

Проверка и диагностика применённых политик

После создания PSO важно убедиться, что они корректно применяются к целевым пользователям. Active Directory выбирает политику по следующему алгоритму: если на пользователя назначено несколько PSO (через разные группы), применяется PSO с наименьшим Precedence.

Команды диагностики

Проверка эффективной политики для конкретного пользователя:

# Какая политика применяется к пользователю?
Get-ADUserResultantPasswordPolicy -Identity "admin.ivanov"

# Список всех PSO в домене
Get-ADFineGrainedPasswordPolicy -Filter *

# Кому назначен конкретный PSO?
Get-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins"

# Детали конкретного PSO
Get-ADFineGrainedPasswordPolicy -Identity "PSO-Admins" | Format-List *

# Проверка: попадает ли пользователь в группу с PSO?
Get-ADPrincipalGroupMembership -Identity "admin.ivanov" | Where-Object {
    $groups = Get-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins"
    $groups.Name -contains $_.Name
}

Если Get-ADUserResultantPasswordPolicy возвращает пустой результат, к пользователю применяется Default Domain Policy.

Рекомендации по проектированию политик

Грамотное проектирование политик паролей — баланс между безопасностью и удобством пользователей. Слишком строгие требования приводят к тому, что пользователи записывают пароли на стикерах.

Современные рекомендации NIST и Microsoft

Актуальные рекомендации (NIST SP 800-63B, Microsoft Security Baseline) отличаются от традиционных подходов:

ПараметрТрадиционный подходСовременный подход (NIST)
Минимальная длина8 символов12-14 символов (или парольная фраза)
ComplexityОбязательноНеобязательно при длине 12+
Смена пароляКаждые 60-90 днейТолько при компрометации
Блокировка3-5 попыток5-10 попыток + MFA

NIST рекомендует отказаться от обязательной периодической смены паролей, так как это снижает качество паролей. Вместо этого — длинные парольные фразы + MFA. Если бизнес-процессы требуют смену — установите 180-365 дней для обычных пользователей.

Аудит и мониторинг событий паролей

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

Ключевые события для мониторинга

Включите аудит через Group Policy и отслеживайте следующие события в Security Log:

  • Event ID 4723 — пользователь попытался изменить пароль учётной записи
  • Event ID 4724 — администратор сбросил пароль пользователя
  • Event ID 4740 — учётная запись заблокирована
  • Event ID 4767 — учётная запись разблокирована
  • Event ID 4771 — предварительная аутентификация Kerberos не удалась (неверный пароль)
# PowerShell: поиск блокировок за последние 24 часа
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    ID = 4740
    StartTime = (Get-Date).AddDays(-1)
} | Select-Object TimeCreated, @{
    Name='Account'; Expression={$_.Properties[0].Value}
}, @{
    Name='Source'; Expression={$_.Properties[1].Value}
} | Format-Table -AutoSize

Часто задаваемые вопросы

Нет, PSO нельзя назначить напрямую на OU — только на группы безопасности или отдельных пользователей. Для применения политики ко всем пользователям в OU создайте группу, добавьте в неё пользователей из OU, и назначьте PSO на эту группу. Автоматическое добавление в группу при перемещении в OU можно реализовать через скрипт.

Если пользователь входит в несколько групп с разными PSO, применяется PSO с наименьшим значением Precedence (чем меньше число — тем выше приоритет). Если Precedence одинаковый, применяется PSO с наименьшим значением objectGUID (фактически случайный выбор). Проверить результирующую политику можно командой Get-ADUserResultantPasswordPolicy.

Нет, пароль режима восстановления служб каталогов (DSRM) не управляется через FGPP. Пароль DSRM задаётся при промотировании контроллера домена и изменяется через ntdsutil → set dsrm password. Это отдельный локальный пароль, не связанный с политиками AD.

Переход безболезненный: создайте PSO с теми же параметрами, что и текущая Default Domain Policy, и назначьте на Domain Users. Затем создайте отдельные PSO для привилегированных групп с более строгими параметрами. Default Domain Policy продолжит работать как fallback для пользователей без PSO. Изменения применяются немедленно — при следующей смене пароля пользователь должен соблюдать требования нового PSO.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#Fine-Grained Password Policy#FGPP#Active Directory пароли#Password Settings Object#PSO#политика паролей AD#гранулярные политики#безопасность AD
Комментарии 0

Оставить комментарий

загрузка...