expiracion_de_contrasenas_diferenciada_por_grupo_fgpp_en_active_directory

Expiración de contraseñas diferenciada por grupo (FGPP en Active Directory)

Esta guía documenta cómo implementar políticas de expiración de contraseñas distintas según grupo de usuarios en Active Directory, utilizando Fine-Grained Password Policies (FGPP) y PowerShell.

🧱 Requisitos

  • Nivel funcional de dominio ≥ Windows Server 2008.
  • PowerShell con módulo ActiveDirectory.
  • Los grupos deben ser de seguridad global.
  • Los PSO se aplican directamente a usuarios o grupos, no a OUs.

1. Crear grupos de seguridad globales

Se crean los grupos que representarán los distintos plazos de expiración.

New-ADGroup -Name "PSO_Pass60d" -GroupScope Global -Path "OU=Grupos,DC=dominio,DC=local"
New-ADGroup -Name "PSO_Pass180d" -GroupScope Global -Path "OU=Grupos,DC=dominio,DC=local"

2. Agregar usuarios a los grupos

Add-ADGroupMember -Identity "PSO_Pass60d" -Members "usuario1"
Add-ADGroupMember -Identity "PSO_Pass180d" -Members "usuario2"

3. Crear los PSO (Password Settings Objects)

Estos objetos definen reglas como cantidad de días hasta expiración, longitud mínima, historial, etc.

# PSO de 60 días
New-ADFineGrainedPasswordPolicy `
  -Name "PSO_60d" `
  -Precedence 10 `
  -PasswordHistoryCount 10 `
  -MinPasswordLength 8 `
  -MaxPasswordAge (New-TimeSpan -Days 60) `
  -MinPasswordAge (New-TimeSpan -Days 1) `
  -LockoutDuration (New-TimeSpan -Minutes 15) `
  -LockoutObservationWindow (New-TimeSpan -Minutes 15) `
  -LockoutThreshold 5

# PSO de 180 días

New-ADFineGrainedPasswordPolicy `  -Name "PSO_180d"`
  -Precedence 20 `  -PasswordHistoryCount 10`
  -MinPasswordLength 8 `  -MaxPasswordAge (New-TimeSpan -Days 180)`
  -MinPasswordAge (New-TimeSpan -Days 1) `  -LockoutDuration (New-TimeSpan -Minutes 15)`
  -LockoutObservationWindow (New-TimeSpan -Minutes 15) \`
  -LockoutThreshold 5 

4. Asociar los PSO a los grupos

Add-ADFineGrainedPasswordPolicySubject -Identity "PSO_60d" -Subjects "PSO_Pass60d"
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO_180d" -Subjects "PSO_Pass180d"

5. Verificar qué PSO aplica a un usuario

Get-ADUserResultantPasswordPolicy -Identity "usuario1"

Este comando devuelve qué PSO se está aplicando, incluyendo duración de la contraseña, umbral de bloqueo, longitud mínima, etc.

6. (Opcional) Obtener fecha de expiración exacta

$user = Get-ADUser "usuario1" -Properties PasswordLastSet
$pso  = Get-ADUserResultantPasswordPolicy "usuario1"

\$expira = \$user.PasswordLastSet + \$pso.MaxPasswordAge

Write-Host "La contraseña de \$(\$user.SamAccountName) expira el: \$expira" 

🔍 Observaciones

  • Si un usuario pertenece a varios grupos con PSO, se aplica el PSO con menor valor de `Precedence`.
  • Los PSO no sobreescriben la política de complejidad; esta sigue controlada por la política de dominio.
  • Los cambios se aplican inmediatamente, sin necesidad de reiniciar sesiones.
expiracion_de_contrasenas_diferenciada_por_grupo_fgpp_en_active_directory.txt · Last modified: 2025/07/27 00:49 by oso