Windows Server 2019: cómo exigir contraseñas de más de 14 caracteres con Fine‑Grained Password Policies y PowerShell

¿Quieres forzar contraseñas de 16, 20 o más caracteres en un dominio Windows Server 2019? La GPO de dominio se queda en 14. Aquí tienes el método correcto usando Fine‑Grained Password Policies (PSO), con pasos en GUI y PowerShell, verificación y buenas prácticas para que funcione a la primera.

Índice

Resumen de la pregunta

Se desea configurar una longitud mínima de contraseña superior a 14 caracteres en un Domain Controller de Windows Server 2019. Sin embargo, la configuración clásica en la Default Domain Policy (GPO: Account Policies > Password Policy > Minimum password length) parece estar limitada a 14.

Respuesta corta

La directiva de dominio clásica llega hasta 14. Para exigir más de 14 debes usar Fine‑Grained Password Policies (FGPP) creando un Password Settings Object (PSO) y aplicándolo a usuarios o grupos. Puedes hacerlo desde Active Directory Administrative Center (ADAC) o con PowerShell.

Por qué la GPO de dominio se queda en 14

El valor de Minimum password length que ves en la GPO de dominio es heredero de tiempos en los que el límite útil era 14. Aunque el propio Directorio Activo admite contraseñas mucho más largas, la interfaz de GPO no se actualizó para cubrir escenarios modernos. FGPP resuelve esta limitación permitiendo establecer valores superiores y, además, distintas políticas por grupos de usuarios.

Qué es una FGPP y qué es un PSO

Una Fine‑Grained Password Policy es una política de contraseñas definida como objeto en AD DS que se almacena en el contenedor Password Settings Container del dominio. Cada política es un Password Settings Object (PSO) con atributos como longitud mínima, complejidad, histórico, bloqueo, etc. Los PSO se enlazan a usuarios o grupos de seguridad (no a OU) y se resuelven por precedence (número más bajo = mayor prioridad). Si un usuario tiene un PSO asignado directamente, ese PSO predomina sobre cualquiera que reciba por pertenecer a grupos.

Requisitos previos y permisos

  • Nivel funcional de dominio Windows Server 2008 o superior (habitual en entornos con Server 2019).
  • Permisos de administración en AD DS para crear PSO y vincularlos a usuarios o grupos.
  • Herramientas ADAC instalado o módulo ActiveDirectory de PowerShell.

Comparativa rápida

OpciónDónde se configuraLímite de longitud mínimaÁmbitoCuándo usarObservaciones
GPO de dominio clásicaDefault Domain Policy > Account PoliciesHasta 14Todo el dominioEscenarios básicosLimitada para mínimos >14; un único conjunto de reglas para todos.
Fine‑Grained Password Policy (PSO)Password Settings Container (ADAC o PowerShell)Superior a 14Usuarios y gruposSeguridad moderna y segmentaciónPermite múltiples políticas y prioridades; no se aplica a OU.

Pasos en GUI con Active Directory Administrative Center

Este procedimiento crea un PSO para exigir, por ejemplo, 16 caracteres como mínimo.

  1. Abre Active Directory Administrative Center (ADAC).
  2. En tu dominio, entra en el contenedor Password Settings Container.
  3. Haz clic en New > Password Settings.
  4. Asigna un nombre al PSO y un Precedence (número entero; cuanto más bajo, más prioridad).
  5. Define Minimum password length con el valor deseado (p. ej., 16, 20…).
  6. Ajusta otros parámetros si procede (p. ej., Maximum/Minimum password age, Complexity, histórico, bloqueo).
  7. En Direct applies to, agrega usuarios o, preferiblemente, grupos de seguridad a los que se aplicará.
  8. Guarda. La política se aplicará a los usuarios/grupos seleccionados tras la replicación entre controladores de dominio.

Pasos en PowerShell

Alternativa rápida para crear y vincular un PSO usando el módulo ActiveDirectory:

# Crear el PSO
New-ADFineGrainedPasswordPolicy `
  -Name "PSO-MinLength-16" `
  -Precedence 1 `
  -MinPasswordLength 16 `
  -ComplexityEnabled $true `
  -PasswordHistoryCount 24 `
  -MinPasswordAge 1.00:00:00 `
  -MaxPasswordAge 60.00:00:00 `
  -LockoutThreshold 5 `
  -LockoutDuration 00:30:00 `
  -LockoutObservationWindow 00:30:00

Vincular el PSO a un grupo o a usuarios concretos

Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-MinLength-16" -Subjects "Grupo-Usuarios" 

Verificación

Get-ADFineGrainedPasswordPolicy "PSO-MinLength-16" | fl Name,MinPasswordLength,Precedence
Get-ADUserResultantPasswordPolicy <usuario> | fl MinPasswordLength,Precedence

Diseño recomendado

Para abarcar a “todos los usuarios” sin tocar grupos especiales del sistema, crea un grupo de seguridad estándar y aplica el PSO a ese grupo. Además, define políticas diferenciadas para cuentas privilegiadas.

Grupo objetivoEjemplo de grupoMin. longitudPrecedenceNotas
Usuarios estándarGG-PwdPolicy-Std1610Política principal del dominio para la mayoría de usuarios.
Administradores y operadoresGG-PwdPolicy-Priv20 o superior5Mayor prioridad; valores más estrictos.
Cuentas excepcionalesAsignación directa al usuarioSegún caso1Asignación directa al usuario predomina sobre cualquier otra.

Buenas prácticas y consideraciones clave

  • Frases de paso: combina longitud con memorabilidad. Ejemplo: Colibri.Café1997Cuatro. Son largas, fáciles de recordar y compatibles con complejidad.
  • Azure AD Password Protection (si está disponible): añade listas de contraseñas prohibidas y protección dinámica frente a contraseñas débiles o comunes. Complementa, no sustituye, la longitud.
  • Impacto inmediato: las contraseñas existentes no se invalidan; el requisito se aplica cuando el usuario cambia o restablece su contraseña.
  • Precedence: números más bajos = mayor prioridad. Si un usuario recibe varios PSO a través de grupos, gana el de menor Precedence. Un PSO aplicado directamente a un usuario predomina sobre los heredados por grupos.
  • Replicación: los PSO se almacenan en AD y requieren replicación entre DC. Permite unos minutos o fuerza replicación si estás probando.
  • No se aplican a OU: los PSO se asignan a usuarios y grupos, no a unidades organizativas.
  • Compatibilidad: FGPP requiere nivel funcional de dominio Windows Server 2008 o superior.
  • Evita valores irrealistas: no subas la longitud mínima sin plan; 16–20 es un rango razonable en la mayoría de organizaciones.

Procedimiento completo paso a paso

Creación del grupo de destino

  1. Crea un grupo de seguridad global, por ejemplo GG-PwdPolicy-Std.
  2. Agrega a ese grupo a todos los usuarios a los que quieras aplicar la política (puedes utilizar filtros por OU para construir la membresía, pero el PSO irá al grupo).

Creación del PSO en ADAC

  1. Abre ADAC y navega a tu dominio.
  2. Localiza Password Settings Container.
  3. Selecciona New > Password Settings y rellena:
    • Name: PSO-MinLength-16
    • Precedence: 10 (por ejemplo)
    • Minimum password length: 16
    • Password must meet complexity requirements: activado
    • Histórico, edad mínima/máxima y bloqueo según tus estándares.
  4. En Direct applies to, agrega GG-PwdPolicy-Std.
  5. Guarda y espera replicación.

Creación del PSO en PowerShell

Si prefieres script, aquí tienes un bloque listo para producción (ajusta valores a tu política):

# Cargar el módulo si hace falta
Import-Module ActiveDirectory

Crear PSO principal

New-ADFineGrainedPasswordPolicy `  -Name "PSO-MinLength-16"`
-Precedence 10 `  -MinPasswordLength 16`
-ComplexityEnabled \$true `  -PasswordHistoryCount 24`
-MinPasswordAge 1.00:00:00 `  -MaxPasswordAge 60.00:00:00`
-LockoutThreshold 5 `  -LockoutDuration 00:30:00`
-LockoutObservationWindow 00:30:00

Vincular a tu grupo estándar

Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-MinLength-16" -Subjects "GG-PwdPolicy-Std"

Crear PSO más estricto para privilegiados (opcional)

New-ADFineGrainedPasswordPolicy `  -Name "PSO-Privileged-20"`
-Precedence 5 `  -MinPasswordLength 20`
-ComplexityEnabled \$true `  -PasswordHistoryCount 48`
-MinPasswordAge 1.00:00:00 `  -MaxPasswordAge 30.00:00:00`
-LockoutThreshold 5 `  -LockoutDuration 00:30:00`
-LockoutObservationWindow 00:30:00

Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Privileged-20" -Subjects "GG-PwdPolicy-Priv" 

Comprobaciones y diagnóstico

# Ver configuración del PSO
Get-ADFineGrainedPasswordPolicy "PSO-MinLength-16" | fl *

Ver PSO efectivo para un usuario concreto

Get-ADUserResultantPasswordPolicy usuario.ejemplo | fl \*

Listar todos los PSO y su precedence

Get-ADFineGrainedPasswordPolicy -Filter \* | Sort-Object Precedence | ft Name,MinPasswordLength,Precedence

Listar a quién se aplica un PSO

(Get-ADFineGrainedPasswordPolicy "PSO-MinLength-16").AppliesTo | ft Name,ObjectClass

Forzar replicación si estás probando en varios DC

repadmin /syncall /AdeP 

Preguntas frecuentes

¿Sustituye un PSO a la GPO de dominio?

Para los usuarios a los que se aplica, sí: la directiva efectiva de contraseñas será la del PSO. El resto seguirá regido por la GPO de dominio.

¿Se puede aplicar un PSO a una OU?

No. Solo a usuarios y grupos de seguridad. Si quieres abarcar una OU, crea un grupo con sus usuarios y aplica el PSO a ese grupo.

¿Qué ocurre con las contraseñas existentes?

No se fuerzan cambios inmediatos. La nueva longitud mínima entra en juego cuando el usuario cambie o se restablezca su contraseña.

¿Qué PSO gana si hay conflicto?

El PSO con precedence más bajo. Si un usuario tiene un PSO asignado directamente, ese gana frente a los recibidos por pertenencia a grupos.

¿Puedo exigir 20, 25 o más caracteres?

Sí, FGPP admite valores muy superiores a 14. Aun así, valida la experiencia de usuario y la compatibilidad con aplicaciones heredadas antes de ir a cifras extremas.

Errores habituales y cómo evitarlos

  • Aplicar el PSO a “Domain Users” u otros grupos especiales: mejor evita grupos del sistema; crea grupos dedicados (p. ej., GG-PwdPolicy-Std).
  • Olvidar la replicación: si pruebas en un DC distinto, puede que la política tarde unos minutos en verse. Fuerza replicación si es necesario.
  • Precedence alto por accidente: un número alto hace que el PSO pierda frente a otros. Mantén reglas más estrictas con precedencias más bajas.
  • Confiar solo en complejidad: complejidad sin longitud no basta. Prioriza longitud + frase de paso y considera Password Protection.
  • No comunicar el cambio: avisa a usuarios y soporte, y actualiza procedimientos de restablecimiento para evitar llamadas al Service Desk.

Estrategia de implantación sin dolores de cabeza

  1. Piloto con un grupo pequeño y comprueba inicio de sesión, VPN, RDP, aplicaciones críticas y restablecimientos.
  2. Medición de impacto: tasa de restablecimientos, incidencias y tiempos.
  3. Despliegue por oleadas: por áreas o por OU, agregando usuarios al grupo objetivo.
  4. Refuerzo: guía de creación de frases de paso y tips de gestor de contraseñas corporativo.
  5. Revisión trimestral de métricas y ajuste de precedencias/valores si procede.

Ejemplos de políticas equilibradas

PerfilLongitud mínimaComplejidadHistóricoEdad mínima/máximaBloqueo
Usuarios estándar16Activada241 día / 60 días5 intentos, 30 min
Privilegiados20Activada481 día / 30 días5 intentos, 30 min

Guía de solución de problemas

  • El usuario puede poner 12 caracteres aunque el PSO dice 16: confirma con Get-ADUserResultantPasswordPolicy que ese usuario recibe el PSO esperado. Revisa precedence y membresías de grupo.
  • El PSO no aparece en ADAC: verifica que lo creaste en el dominio correcto y en Password Settings Container. Comprueba permisos.
  • Aplicación desigual entre sedes: fuerza replicación con repadmin /syncall /AdeP y espera a que todos los DC estén en sincronía.
  • Usuarios de servicio: evalúa si necesitan excepciones temporales; puedes asignarles un PSO específico con mayor precedencia.
  • Aplicaciones heredadas: algunas validaciones locales antiguas no permiten contraseñas largas. Revisa y corrige la validación de la aplicación, no bajes la política del dominio.

Plantillas reutilizables de PowerShell

Actualizar un PSO existente

Set-ADFineGrainedPasswordPolicy -Identity "PSO-MinLength-16" -MinPasswordLength 18

Quitar un grupo o usuario de un PSO

Remove-ADFineGrainedPasswordPolicySubject -Identity "PSO-MinLength-16" -Subjects "GG-PwdPolicy-Std"

Eliminar un PSO

Remove-ADFineGrainedPasswordPolicy -Identity "PSO-MinLength-16"

Exportar inventario de PSO

Get-ADFineGrainedPasswordPolicy -Filter * |
  Select-Object Name,MinPasswordLength,Precedence,PasswordHistoryCount,ComplexityEnabled |
  Export-Csv .\Inventario-PSO.csv -NoTypeInformation -Encoding UTF8

Resumen de implementación

  • La GPO de dominio no supera 14; usa FGPP.
  • Crea un PSO con el mínimo deseado (p. ej., 16 o 20).
  • Asigna el PSO a grupos de seguridad (recomendado) o directamente a usuarios.
  • Usa precedence para resolver conflictos y priorizar políticas más estrictas.
  • Verifica con Get-ADUserResultantPasswordPolicy y monitoriza la experiencia.
  • Complementa con frases de paso y, si está disponible, Azure AD Password Protection.

Conclusión

Obligar a contraseñas de más de 14 caracteres en Windows Server 2019 es sencillo y robusto usando Fine‑Grained Password Policies. Con una sola vez que definas PSO bien pensados y los asignes a grupos, ganarás seguridad real, segmentación por perfiles y un control que la GPO de dominio clásica no puede ofrecer.

Índice