This is an old revision of the document!
Table of Contents
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.
