¿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.
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ón | Dónde se configura | Límite de longitud mínima | Ámbito | Cuándo usar | Observaciones |
---|---|---|---|---|---|
GPO de dominio clásica | Default Domain Policy > Account Policies | Hasta 14 | Todo el dominio | Escenarios básicos | Limitada para mínimos >14; un único conjunto de reglas para todos. |
Fine‑Grained Password Policy (PSO) | Password Settings Container (ADAC o PowerShell) | Superior a 14 | Usuarios y grupos | Seguridad moderna y segmentación | Permite 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.
- Abre Active Directory Administrative Center (ADAC).
- En tu dominio, entra en el contenedor Password Settings Container.
- Haz clic en New > Password Settings.
- Asigna un nombre al PSO y un Precedence (número entero; cuanto más bajo, más prioridad).
- Define Minimum password length con el valor deseado (p. ej., 16, 20…).
- Ajusta otros parámetros si procede (p. ej., Maximum/Minimum password age, Complexity, histórico, bloqueo).
- En Direct applies to, agrega usuarios o, preferiblemente, grupos de seguridad a los que se aplicará.
- 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 objetivo | Ejemplo de grupo | Min. longitud | Precedence | Notas |
---|---|---|---|---|
Usuarios estándar | GG-PwdPolicy-Std | 16 | 10 | Política principal del dominio para la mayoría de usuarios. |
Administradores y operadores | GG-PwdPolicy-Priv | 20 o superior | 5 | Mayor prioridad; valores más estrictos. |
Cuentas excepcionales | Asignación directa al usuario | Según caso | 1 | Asignació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
- Crea un grupo de seguridad global, por ejemplo
GG-PwdPolicy-Std
. - 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
- Abre ADAC y navega a tu dominio.
- Localiza Password Settings Container.
- 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.
- Name:
- En Direct applies to, agrega
GG-PwdPolicy-Std
. - 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
- Piloto con un grupo pequeño y comprueba inicio de sesión, VPN, RDP, aplicaciones críticas y restablecimientos.
- Medición de impacto: tasa de restablecimientos, incidencias y tiempos.
- Despliegue por oleadas: por áreas o por OU, agregando usuarios al grupo objetivo.
- Refuerzo: guía de creación de frases de paso y tips de gestor de contraseñas corporativo.
- Revisión trimestral de métricas y ajuste de precedencias/valores si procede.
Ejemplos de políticas equilibradas
Perfil | Longitud mínima | Complejidad | Histórico | Edad mínima/máxima | Bloqueo |
---|---|---|---|---|---|
Usuarios estándar | 16 | Activada | 24 | 1 día / 60 días | 5 intentos, 30 min |
Privilegiados | 20 | Activada | 48 | 1 día / 30 días | 5 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.