Su Windows Server 2019 la “Lunghezza minima password” nella Default Domain Policy si ferma a 14 caratteri. La soluzione è usare le Fine‑Grained Password Policies (PSO), che permettono di imporre password più lunghe e granulari su utenti e gruppi senza toccare la GPO di dominio.
Panoramica del problema
Molti amministratori notano che, aprendo la Default Domain Policy con la Console Gestione Criteri di Gruppo (GPMC), il parametro Lunghezza minima password accetta valori tra 1 e 14. Questo limite nasce per compatibilità storica con sistemi legacy e con l’ormai obsoleto hashing LM, ma non riflette le reali capacità di Active Directory: il dominio può gestire password ben più lunghe. Semplicemente, la GPO di dominio non è lo strumento adatto quando si punta a superare i 14 caratteri.
Per aggirare il vincolo si utilizzano le Fine‑Grained Password Policies (FGPP), implementate tramite Password Settings Object (PSO). I PSO risiedono nel contenitore Password Settings Container del dominio e si applicano direttamente a utenti o gruppi di Active Directory, permettendo valori di Minimum Password Length molto superiori a 14 caratteri, oltre a impostazioni avanzate di complessità e lockout.
Prerequisiti e considerazioni
- Livello funzionale: almeno Windows Server 2008 per il dominio. In ambienti moderni con DC Windows Server 2019 il requisito è già soddisfatto.
- Permessi: membro di Domain Admins o privilegi equivalenti per creare e assegnare PSO.
- Strumenti: Active Directory Administrative Center (ADAC) e modulo PowerShell
ActiveDirectory
. - Replica: i PSO sono oggetti di directory: attendi la replica tra i DC prima di verificare a livello globale.
- Ambito: i PSO non si collegano alle OU; si legano a utenti o gruppi. Per applicare a un’OU, usa un gruppo che rappresenti i membri di quell’OU.
- Compatibilità: verifica l’impatto su software legacy o integrazioni che potrebbero assumere limiti storici sulla lunghezza delle password.
Checklist pre‑implementazione | Dettagli |
---|---|
Identifica gli account target | Utenti critici, amministrativi, service account non gMSA, o gruppi specifici. |
Definisci i requisiti | Lunghezza minima desiderata (es. 16, 20, 24), rotazione massima, storia password, lockout. |
Piano di rollout | Pilota su gruppo limitato, finestra di replica, comunicazione agli utenti. |
Strategia di fallback | Rimozione assegnazioni PSO o cancellazione PSO se necessario; snapshot/backup AD consigliati. |
Vantaggi dei PSO rispetto alla Default Domain Policy
Aspetto | Default Domain Policy | PSO (Fine‑Grained) |
---|---|---|
Lunghezza minima password | UI limitata a 14 caratteri | Valori > 14 supportati |
Granularità | Uniforme per tutto il dominio | Mirata per utenti/gruppi |
Risoluzione conflitti | Un’unica policy | Gestita da Precedence (numero più basso vince) |
Ambito | GPO di dominio | Oggetti AD nel Password Settings Container |
Procedura con Active Directory Administrative Center
Di seguito i passaggi completi per creare e applicare un PSO in ADAC.
- Apri ADAC. Premi Start, digita Active Directory Administrative Center e avvia lo strumento.
- Apri il contenitore dei PSO. Nel riquadro sinistro seleziona il dominio, quindi Password Settings Container.
- Crea un nuovo Password Settings Object. Nel riquadro centrale fai clic su New → Password Settings.
- Configura le proprietà principali.
- Name: usa una convenzione chiara (es.
PSO‑HighSecurity‑Min20
). - Precedence: numero intero; più basso = priorità più alta (es.
10
). - Minimum Password Length: imposta il valore desiderato > 14 (es.
20
o24
). - Altre opzioni facoltative: Maximum Password Age, Password History, complessità, lockout, Reversible Encryption disabilitata.
- Name: usa una convenzione chiara (es.
- Applica il PSO ai soggetti desiderati.
- Nel campo Direct applies to aggiungi utenti o gruppi interessati.
- Conferma con OK per salvare il PSO.
- Verifica il risultato.
- Apri un utente in ADAC e usa l’azione View resultant password settings per controllare la policy effettiva.
- Oppure usa i cmdlet PowerShell mostrati più avanti.
Procedura equivalente con PowerShell
Per ambienti automatizzati o ripetibili, i PSO possono essere creati e assegnati interamente da PowerShell con il modulo ActiveDirectory
.
Creazione di un PSO che impone password oltre 14 caratteri
# Parametri esempio: password minimo 20, storia 24, complessità abilitata
New-ADFineGrainedPasswordPolicy `
-Name "PSO-HighSecurity-Min20" `
-Precedence 10 `
-MinPasswordLength 20 `
-PasswordHistoryCount 24 `
-MaxPasswordAge (New-TimeSpan -Days 45) `
-ComplexityEnabled $true `
-ReversibleEncryptionEnabled $false `
-LockoutThreshold 10 `
-LockoutObservationWindow (New-TimeSpan -Minutes 30) `
-LockoutDuration (New-TimeSpan -Minutes 30)
Assegnazione del PSO a un gruppo o a uno o più utenti
# Applica a un gruppo di sicurezza
Add-ADFineGrainedPasswordPolicySubject `
-Identity "PSO-HighSecurity-Min20" `
-Subjects "CN=Gruppo-HighSecurity,OU=Sicurezza,DC=contoso,DC=local"
Applica a un utente specifico
Add-ADFineGrainedPasswordPolicySubject ` -Identity "PSO-HighSecurity-Min20"`
-Subjects "CN=rossi.mario,OU=Utenti,DC=contoso,DC=local"
Verifiche fondamentali
# Elenco dei PSO presenti
Get-ADFineGrainedPasswordPolicy -Filter * |
Select-Object Name, Precedence, MinPasswordLength
Policy effettiva di un utente
Get-ADUserResultantPasswordPolicy rossi.mario |
Select-Object Name, Precedence, MinPasswordLength, MaxPasswordAge
Attributo msDS-ResultantPSO sull'oggetto utente
Get-ADUser rossi.mario -Properties msDS-ResultantPSO |
Select-Object Name, msDS-ResultantPSO
Se l’output mostra il PSO desiderato con la Precedence più forte, la nuova Minimum Password Length è attiva e supererà il limite di 14 caratteri previsto dalla Default Domain Policy.
Strategie di applicazione
- Account privilegiati: applica subito un PSO con minimo 20–24 caratteri a Domain Admins, Enterprise Admins e ad altri gruppi amministrativi.
- Account standard: crea un PSO a 16–18 caratteri e assegnalo a Domain Users o a gruppi dipartimentali, per un rollout graduale.
- Service account: valuta PSO più restrittivi o migrazione verso gMSA (Group Managed Service Account) quando possibile. Evita Password never expires dove non strettamente necessario.
- Ambito OU: se vuoi applicare a un’OU, crea un gruppo che rifletta i membri dell’OU (popolato manualmente o con script periodico) e assegna il PSO al gruppo.
Note e suggerimenti aggiuntivi
Aspetto | Dettagli |
---|---|
Requisiti | Dominio a livello funzionale almeno Windows Server 2008. |
Scopo del valore Precedence | Risolve i conflitti quando un utente/gruppo è associato a più PSO: il numero più basso vince. |
Ambito di applicazione | I PSO si legano direttamente a utenti o gruppi, non alle OU. Se serve un ambito OU si crea un gruppo e vi si aggiungono i membri. |
Limite dei 14 caratteri | Valido solo per la Default Domain Policy; non si può superare in GPMC. I PSO eludono tale limite. |
Best practice | Documenta i PSO creati, usa nomi descrittivi (es. PSO‑HighSecurity) e monitora periodicamente con i cmdlet indicati. |
Linee guida di sicurezza e usabilità
- Passphrase lunghe: indirizza gli utenti a frasi lunghe e memorabili invece di stringhe casuali difficili. L’obiettivo è aumentare l’entropia senza penalizzare l’esperienza utente.
- Blocchi e account lockout: calibra LockoutThreshold e ObservationWindow per ridurre il rischio di denial‑of‑service dovuto a lockout accidentali.
- Rotazione password: evita cicli troppo aggressivi: password lunghe hanno un tempo di sostituzione ragionevole (es. 90 o 180 giorni in base alle policy interne e al rischio).
- Reversible Encryption: mantienila disabilitata salvo requisiti applicativi specifici.
Verifiche pratiche e test
- Replica: attendi la replica AD tra DC. Puoi verificarla con strumenti come repadmin.
- Test di cambio password: usa
CTRL+ALT+CANC → Cambia password
oppure comandi comenet user
in un prompt con credenziali appropriate. - Controllo della policy effettiva: utilizza
Get-ADUserResultantPasswordPolicy
sull’utente target per confermare la lunghezza minima effettiva. - Log e auditing: verifica gli eventi di security relativi ai cambi password e ai lockout per rilevare effetti collaterali.
Risoluzione dei problemi
Sintomo | Causa probabile | Rimedio |
---|---|---|
L’utente può ancora impostare password di 12 caratteri | Nessun PSO applicato all’utente o un altro PSO con Precedence più bassa è dominante | Controlla msDS-ResultantPSO e regola Precedence o rimuovi PSO in conflitto |
La policy non è uniforme tra i siti | Replica AD non completata | Verifica la replica e attendi la convergenza; poi ripeti il test |
Impossibile aggiungere l’OU | I PSO non si linkano alle OU | Applica ai gruppi che rappresentano quell’OU |
Utente in più gruppi con PSO diversi | Conflitto di policy | La Precedence più bassa vince; assicurati che i numeri siano coerenti con la tua gerarchia di rischio |
Applicazione al maggior numero di utenti
Se desideri imporre la nuova lunghezza minima a quasi tutto il dominio senza modificare la Default Domain Policy, puoi assegnare il PSO direttamente al gruppo Domain Users oppure a gruppi dipartimentali che lo includono. In questo modo mantieni la flessibilità di escludere specifici account o di applicare criteri più severi solo a gruppi ad alto rischio (ad esempio amministratori, contabilità, IT operations).
Esempi di design delle policy
Nome PSO | Precedence | Min length | Max age | Storia | Lockout | Assegnazione |
---|---|---|---|---|---|---|
PSO‑HighSecurity‑Min24 | 5 | 24 | 90 giorni | 24 | 10/30 min | Domain Admins, Enterprise Admins, gruppi privilegiati |
PSO‑Standard‑Min18 | 20 | 18 | 180 giorni | 24 | 10/30 min | Domain Users o gruppi dipartimentali |
PSO‑Service‑Min30 | 15 | 30 | 365 giorni | 24 | 20/30 min | Service account non gMSA |
Automazione e manutenzione
Per garantire consistenza nel tempo, è utile programmare controlli periodici che elenchino i PSO, le relative assegnazioni e la policy effettiva per utenti critici.
# Report rapido delle PSO e assegnazioni
Get-ADFineGrainedPasswordPolicy -Filter * |
ForEach-Object {
$pso = $_
$subjects = (Get-ADFineGrainedPasswordPolicySubject -Identity $pso.Name -ErrorAction SilentlyContinue)
[PSCustomObject]@{
PSO = $pso.Name
Precedence = $pso.Precedence
MinPasswordLength = $pso.MinPasswordLength
SubjectsCount = $subjects.Count
}
} | Sort-Object Precedence | Format-Table -Auto
Integra questo controllo in una pipeline di compliance interna o in un job pianificato per intercettare tempestivamente modifiche o rimozioni non autorizzate.
Domande frequenti
- I PSO influiscono sui computer account? No, si applicano agli oggetti utente. I computer account seguono criteri separati per il reset della password del computer.
- È possibile avere più PSO su uno stesso utente? Sì, tramite appartenenza a più gruppi; vince quello con Precedence più basso.
- Devo aggiornare la Default Domain Policy? Non per superare i 14 caratteri. Mantienila per impostazioni generiche e usa i PSO per requisiti avanzati.
- La nuova policy si applica subito? Entra in vigore all’atto del cambio password. Le password già impostate non vengono modificate retroattivamente.
- Posso forzare sintassi complesse “a composizione” (es. almeno un simbolo specifico)? I PSO gestiscono complessità standard. Per blocklist avanzate e dizionari valuta soluzioni di filtro password dedicate nell’infrastruttura.
Rollback sicuro
- Rimozione assegnazioni: togli il gruppo/utente dal campo Direct applies to o via PowerShell:
Remove-ADFineGrainedPasswordPolicySubject ` -Identity "PSO-HighSecurity-Min20" ` -Subjects "CN=Gruppo-HighSecurity,OU=Sicurezza,DC=contoso,DC=local"
- Eliminazione PSO: se hai bisogno di annullare la policy, elimina il PSO:
Remove-ADFineGrainedPasswordPolicy -Identity "PSO-HighSecurity-Min20"
- Conferma finale: verifica con
Get-ADUserResultantPasswordPolicy
che l’utente ereditati i criteri desiderati.
Riepilogo operativo
- La Default Domain Policy non consente password oltre 14 caratteri: è un limite dell’interfaccia GPMC, non della directory.
- I PSO consentono di impostare Minimum Password Length > 14 e di applicarla in modo granulare a gruppi/utenti.
- Usa ADAC per una procedura guidata semplice oppure PowerShell per automazione e auditing.
- Definisci Precedence coerenti, verifica la policy effettiva e adotta un rollout controllato.
Comandi essenziali a portata di mano
Operazione | Cmdlet | Esempio |
---|---|---|
Creare un PSO | New-ADFineGrainedPasswordPolicy | New-ADFineGrainedPasswordPolicy -Name "PSO-Min20" -Precedence 10 -MinPasswordLength 20 |
Assegnare un PSO | Add-ADFineGrainedPasswordPolicySubject | Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Min20" -Subjects "CN=Domain Users,CN=Users,DC=contoso,DC=local" |
Verificare PSO | Get-ADFineGrainedPasswordPolicy | Get-ADFineGrainedPasswordPolicy -Filter * |
Verificare policy effettiva utente | Get-ADUserResultantPasswordPolicy | Get-ADUserResultantPasswordPolicy rossi.mario |
Rimuovere assegnazione | Remove-ADFineGrainedPasswordPolicySubject | Remove-ADFineGrainedPasswordPolicySubject -Identity "PSO-Min20" -Subjects "CN=Domain Users,CN=Users,DC=contoso,DC=local" |
Eliminare un PSO | Remove-ADFineGrainedPasswordPolicy | Remove-ADFineGrainedPasswordPolicy -Identity "PSO-Min20" |
Snippet PowerShell per verifica rapida
Questo frammento conferma in pochi secondi che l’utente riceve davvero una lunghezza minima superiore a 14 caratteri.
# Riepilogo policy effettiva per un insieme di utenti
$users = "rossi.mario","bianchi.luca","verdi.anna"
$users | ForEach-Object {
$rp = Get-ADUserResultantPasswordPolicy $_ -ErrorAction SilentlyContinue
[PSCustomObject]@{
User = $_
ResultantPSO = $rp.Name
Precedence = $rp.Precedence
MinPasswordLength = $rp.MinPasswordLength
MaxPasswordAgeDays = [int]$rp.MaxPasswordAge.TotalDays
}
} | Format-Table -Auto
Approfondimento sui campi del PSO
Campo | Descrizione | Consiglio |
---|---|---|
MinPasswordLength | Lunghezza minima richiesta. | Per account privilegiati usa almeno 20–24; per gli altri valuta 16–18. |
MaxPasswordAge | Durata massima prima della scadenza. | Evita rotazioni troppo frequenti se imponi lunghezze elevate. |
PasswordHistoryCount | Quante password precedenti non si possono riutilizzare. | Valori 24 o superiori aiutano a prevenire cicli prevedibili. |
ComplexityEnabled | Richiede maiuscole, minuscole, cifre/simboli secondo le regole standard. | Mantieni abilitato salvo policy aziendali differenti. |
ReversibleEncryptionEnabled | Conserva una versione reversibile della password. | Lasciala disattivata: aumenta il rischio. |
LockoutThreshold / Duration / ObservationWindow | Parametri di blocco dell’account. | Imposta soglie ragionevoli per bilanciare sicurezza e disponibilità. |
Risultato finale
Con l’uso dei Password Settings Object puoi imporre password molto più lunghe di 14 caratteri su Windows Server 2019, senza alterare la Default Domain Policy. La combinazione di ADAC e PowerShell ti consente di creare, assegnare e verificare PSO in modo veloce, tracciabile e reversibile. Inizia dagli account più sensibili, definisci gerarchie di Precedence coerenti, comunica i cambiamenti agli utenti e monitora gli effetti: otterrai un miglioramento tangibile della sicurezza con il minimo impatto operativo.
Verifica veloce in due comandi
# Elenca i PSO presenti
Get-ADFineGrainedPasswordPolicy -Filter *
Policy effettiva per un utente specifico
Get-ADUserResultantPasswordPolicy
Se la policy risultante mostra un MinPasswordLength
superiore a 14, la configurazione è andata a buon fine.
Elementi chiave
- Default Domain Policy: lascia il limite a 14; non è il mezzo per superarlo.
- PSO: applica un Minimum Password Length > 14 a utenti/gruppi selezionati.
- Precedence: decide quale PSO prevale; più basso = più forte.
- Verifica: usa
Get-ADUserResultantPasswordPolicy
per controllare l’effettivo PSO assegnato.
Seguendo questa guida, potrai introdurre rapidamente password da 20, 24 o 30 caratteri agli account critici o a tutto il dominio, innalzando lo standard di sicurezza senza stravolgere l’architettura delle policy esistenti.
Comandi rapidi ripresi dalla sezione di verifica:
Get-ADFineGrainedPasswordPolicy -Filter *
Get-ADUserResultantPasswordPolicy <UserName>
La combinazione di pianificazione, PSO e controlli periodici ti consentirà di mantenere nel tempo un profilo di rischio coerente con le esigenze dell’organizzazione.
Buone pratiche finali
- Usa una convenzione di naming chiara:
PSO-<Ambito>-Min<N>
. - Documenta Precedence e soggetti assegnati in un repository interno.
- Integra verifiche di conformità nei processi di onboarding/offboarding utenti.
- Riesamina le impostazioni almeno ogni sei mesi o a seguito di audit.