All'interno di un dominio è sempre consigliabile stabilire una policy aziendale per forzare l'utilizzo di password complesse al fine di prevenire (o quantomeno rendere difficili) accessi non autorizzati.
Già a partire da Windows Server 2012 è possibile controllare la complessità delle password attraverso l'utilizzo dei criteri granulari per le password (FINE-GRAINED password policy) e la creazione di Password Settings Object (PSO). I requisiti minimi per procedere sono i seguenti:
- Sia presente almeno un Domain Controller con Windows Server 2012 o superiore;
- Il livello di funzionalità della foresta sia impostata almeno su Windows Server 2008.
In questi articoli stiamo utilizzando Windows Server 2022 con il livello di funzionalità della foresta di Windows Server 2016 pertanto i requisiti sono ampiamente rispettati. Solo i membri del gruppo Domain Admin possono creare PSO.
Creazione di Password Settings Object (PSO) tramite il Centro di amministrazione di Active Directory
Da Server Manager cliccare sul menu Strumenti e selezionare Centro di amministrazione di Active Directory. In alternativa premere la combinazione di tasti WIN+R, digitare dsac.exe e premere invio.
|
FIG 1 - Server Manager |
Selezionare il proprio dominio (nel nostro caso mycompany.local) quindi aprire il container System con un doppio click.
|
FIG 2 - Centro di amministrazione di Active Directory, container System |
Cliccare due volte su Password Settings container.
|
FIG 3 - Centro di amministrazione di Active Directory, Password Settings Container |
Sul pannello Attività (sul lato destro della finestra) cliccare su Nuovo quindi Impostazioni password.
|
FIG 4 - Impostazioni password |
Nella finestra Crea Impostazioni password ci sono diverse opzioni da settare per la creazione del PSO.
- All'interno della casella Nome specificare il nome da assegnare all'oggetto. E' consigliabile utilizzare un nome significativo che consenta di capire il suo scopo. Ad es. dovendo creare un PSO per gli amministratori di dominio un nome significativo potrebbe essere PSO_Domain_Admin.
- All'interno del campo Precedenza inserire il valore 1. Il valore di tale campo ci permette di specificare la precedenza dell'oggetto: nel caso in cui su un account utente o su un gruppo siano definite più PSO, quello con il valore più basso avrà la precedenza.
- Il campo Lunghezza minima password consente di specificare il numero minimo di caratteri da utilizzare per la password. Impostare tale campo a 12 caratteri.
- Imponi cronologia delle password. Tale campo, se selezionato, permette di impedire che l'utente riutilizzi una password già utilizzata in precedenza. Il valore di default di tale campo è 24 il che comporta che l'utente può reinserire una password già utilizzata in passato solo dopo 24 cambi password. Lasciare l'opzione attiva con il valore di default.
- Imponi validità minima password. Permette di specificare dopo quanto tempo dal cambio password l'utente potrà nuovamente modificarla. Il valore di default è 1 quindi quando l'utente cambia la password dovrà aspettare il giorno successivo (24h) per poterla cambiare nuovamente.
- Imponi validità massima password. Il valore di default è 42. Modificare tale valore in 30. Il campo permette di specificare dopo quanti giorni l'utente è obbligato a cambiare password.
- Attivare l'opzione Applica criteri di blocco account. Nel campo Numero di tentativi di accesso non riusciti consentiti inserire 5. Nel campo Ripristina conteggio tentativi di accesso non riusciti lasciare il valore 30. Lasciare attiva l'opzione Per un periodo di tempo pari a (minuti) valorizzata a 30. Con tali opzioni, dopo 5 tentativi di accesso non riusciti, l'account verrà bloccato per 30 minuti. Il contatore degli accessi non riusciti verrà resettato dopo 30 accessi riusciti consecutivi.
Cliccare su OK per completare la creazione del PSO con le impostazioni settate.
|
FIG 5 - Creazione PSO |
Creazione di Password Settings Object (PSO) tramite PowerShell
Per eseguire la stessa operazione tramite PowerShell è necessario utilizzare il cmdlet New-ADFineGrainedPasswordPolicy.
Sintassi
New-ADFineGrainedPasswordPolicy
[-WhatIf]
[-Confirm]
[-AuthType <ADAuthType>]
[-ComplexityEnabled <Boolean>]
[-Credential <PSCredential>]
[-Description <String>]
[-DisplayName <String>]
[-Instance <ADFineGrainedPasswordPolicy>]
[-LockoutDuration <TimeSpan>]
[-LockoutObservationWindow <TimeSpan>]
[-LockoutThreshold <Int32>]
[-MaxPasswordAge <TimeSpan>]
[-MinPasswordAge <TimeSpan>]
[-MinPasswordLength <Int32>]
[-Name] <String>
[-OtherAttributes <Hashtable>]
[-PassThru]
[-PasswordHistoryCount <Int32>]
[-Precedence] <Int32>
[-ProtectedFromAccidentalDeletion <Boolean>]
[-ReversibleEncryptionEnabled <Boolean>]
[-Server <String>]
[<CommonParameters>]
Parametri
-AuthType
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
- Negotiate oppure 0 (default)
- Basic oppure 1
-ComplexityEnabled
Specifica se la complessità della password è abilitata per il criterio della password. Se abilitata, la password deve contenere tre dei seguenti quattro tipi di caratteri:
- Caratteri maiuscoli (A, B, C, D, E, ...)
- Caratteri minuscoli (a, b, c, d, e, ...)
- Numeri (0, 1, 2, 3, ...)
- Caratteri speciali (#, $, *, %, ...)
I valori accettati per questo parametro sono:
- $False o 0. Disabilita la complessità della password.
- $True o 1. Abilita la complessità della password.
-Confirm
Se specificato, tale parametro mostra la richiesta di conferma prima di eseguire il cmdlet.
-Credential
Specifica un'account utente che ha i permessi necessari per eseguire l'operazione. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.
-Description
Specifica una descrizione dell'oggetto. Tale parametro imposta il valore della proprietà Description dell'oggetto.
-DisplayName
Specifica il display name dell'oggetto: imposta la proprietà DisplayName dell'oggetto.
-Instance
Specifica un'istanza di un oggetto fine-grained password policy da usare come modello per un nuovo oggetto fine-grained password policy.
È possibile utilizzare un'istanza di un oggetto fine-grained password policy esistente come modello o costruire un nuovo oggetto fine-grained password policy utilizzando la riga di comando di Windows PowerShell o uno script.
Metodo 1: utilizzare un oggetto fine-grained password policy esistente come modello per un nuovo oggetto. Per recuperare un'istanza di un oggetto fine-grained password policy esistente, utilizzare un cmdlet come Get-ADFineGrainedPasswordPolicy. Quindi fornire questo oggetto al parametro Instance del cmdlet New-ADFineGrainedPasswordPolicy. È possibile sovrascrivere i valori delle proprietà del nuovo oggetto impostando i parametri appropriati.
Metodo 2: creare un nuovo oggetto ADFineGrainedPasswordPolicy e impostare i valori delle proprietà utilizzando l'interfaccia della riga di comando di Windows PowerShell. Passare quindi questo oggetto al parametro Instance del cmdlet New-ADFineGrainedPasswordPolicy per creare il nuovo oggetto Active Directory fine-grained password policy.
-LockoutDuration
Specifica il periodo di tempo in cui un account viene bloccato dopo che il numero di tentativi di accesso falliti supera la soglia di blocco. Non è possibile accedere a un account bloccato finché il periodo di tempo di durata del blocco non è scaduto. Se si imposta il valore a 0, l'account deve essere sbloccato manualmente dall'amministratore. Questo parametro imposta la proprietà lockoutDuration di un oggetto criterio password. Il nome di visualizzazione LDAP (ldapDisplayName) di questa proprietà è msDS-LockoutDuration.
La durata del blocco deve essere maggiore o uguale al tempo di osservazione del blocco per un criterio di password. Utilizzare il parametro LockOutObservationWindow per impostare il tempo di osservazione del blocco.
Specificare l'intervallo di tempo della durata del blocco nel formato seguente:
D.H:M:S.F
dove:
D = Giorni (da 0 a 10675199)
H = Ore (da 0 a 23)
M = Minuti (da 0 a 59)
S = Secondi (da 0 a 59)
F = Frazioni di secondo (da 0 a 9999999)
-LockoutObservationWindow
Specifica l'intervallo di tempo massimo tra due tentativi di accesso non riusciti prima che il numero di tentativi di accesso non riusciti venga riportato a 0. Un account viene bloccato quando il numero di tentativi di accesso non riusciti supera la soglia di blocco del criterio della password. Questo parametro imposta la proprietà lockoutObservationWindow di un oggetto criterio password. Il nome di visualizzazione LDAP (ldapDisplayName) di questa proprietà è msDS-lockoutObservationWindow.
La finestra di osservazione del blocco deve essere minore o uguale alla durata del blocco di un criterio di password. Utilizzare il parametro LockoutDuration per impostare la durata del blocco.
Specificare l'intervallo di tempo nel formato seguente:
D:H:M:S.F
dove:
D = Giorni (da 0 a 10675199)
H = Ore (da 0 a 23)
M = Minuti (da 0 a 59)
S = Secondi (da 0 a 59)
F = Frazioni di secondo (da 0 a 9999999)
Nota: I valori possono essere compresi tra 0:0:0:0.0 e 10675199:02:48:05.4775807.
-LockoutThreshold
Specifica il numero di tentativi di accesso non riusciti consentiti prima che un account venga bloccato. Questo numero aumenta quando l'intervallo tra i tentativi di accesso non riusciti è inferiore al tempo specificato da LockoutObservationWindow. Questo parametro imposta la proprietà LockoutThreshold di un criterio di password.
-MaxPasswordAge
Specifica il periodo di tempo massimo in cui è possibile mantenere la stessa password. Dopo questo periodo di tempo, la password scade e bisogna crearne una nuova.
Questo parametro imposta la proprietà maxPasswordAge di un criterio di password. Il nome di visualizzazione LDAP (ldapDisplayName) per questa proprietà è maxPwdAge.
Specificare l'intervallo di tempo nel formato seguente:
D.H:M:S.F
dove:
D = Giorni (da 0 a 10675199)
H = Ore (da 0 a 23)
M = Minuti (da 0 a 59)
S = Secondi (da 0 a 59)
F = Frazioni di secondo (da 0 a 9999999)
Nota: I valori di tempo devono essere compresi tra 0 e 10675199:02:48:05.4775807.
-MinPasswordAge
Specifica il periodo di tempo minimo prima di poter modificare una password.
Questo parametro imposta la proprietà minPasswordAge di un criterio di password. Il nome di visualizzazione LDAP (ldapDisplayName) per questa proprietà è minPwdAge.
Specificare l'intervallo di tempo nel seguente formato:
D.H:M:S.F
dove:
D = Giorni (da 0 a 10675199)
H = Ore (da 0 a 23)
M = Minuti (da 0 a 59)
S = Secondi (da 0 a 59)
F = Frazioni di secondo (da 0 a 9999999)
Nota: I valori dell'ora devono essere compresi tra i seguenti 0 e 10675199:02:48:05.
-MinPasswordLength
Specifica il numero minimo di caratteri che una password deve contenere. Questo parametro imposta la proprietà MinPasswordLength del criterio della password.
-Name
Specifica il nome dell'oggetto. Questo parametro imposta la proprietà Name dell'oggetto Active Directory. Il nome di visualizzazione LDAP (ldapDisplayName) di questa proprietà è name.
-OtherAttributes
Specifica i valori degli attributi dell'oggetto per gli attributi non rappresentati dai parametri del cmdlet. Con questo parametro è possibile impostare uno o più parametri contemporaneamente. Se un attributo ha più di un valore, è possibile assegnare più valori. Per identificare un attributo, specificare il nome LDAPDisplayName (ldapDisplayName) definito per esso nello schema di Active Directory.
Sintassi:
Per specificare un singolo valore per un attributo:
OtherAttributes @{'AttributeLDAPDisplayName'=value}
Per specificare più valori per un attributo
OtherAttributes @{'AttributeLDAPDisplayName'=value1,value2,...}
È possibile specificare i valori per più di un attributo usando il punto e virgola per separare gli attributi. La sintassi seguente mostra come impostare i valori di più attributi:
OtherAttributes @{'Attribute1LDAPDisplayName'=value; 'Attribute2LDAPDisplayName'=value1,value2;...}
-PassThru
Restituisce un oggetto che rappresenta l'elemento con cui si sta lavorando. Per impostazione predefinita, questo cmdlet non genera alcun output.
-PasswordHistoryCount
Specifica il numero di password precedenti da salvare. Un utente non può riutilizzare una password nell'elenco delle password salvate. Questo parametro imposta la proprietà PasswordHistoryCount per un criterio di password.
-Precedence
Specifica un valore che definisce la precedenza di un criterio fine-grained password rispetto agli altri criteri. Questo parametro imposta la proprietà Precedence per una fine-grained password policy.Il nome di visualizzazione LDAP (ldapDisplayName) per questa proprietà è msDS-PasswordSettingsPrecedence.
Questo valore determina quale criterio di password utilizzare quando a un utente o a un gruppo si applicano più criteri di password. In caso di conflitto, il criterio di password che ha il valore più basso della proprietà Precedence ha la priorità più alta. Ad esempio, se PasswordPolicy1 ha un valore di Precedenza pari a 200 e PasswordPolicy2 ha un valore di Precedenza pari a 100, viene utilizzato PasswordPolicy2.
In genere, i valori di precedenza dei criteri di password sono assegnati in multipli di 10 o 100, per facilitare l'aggiunta di criteri in un secondo momento. Ad esempio, se si impostano i valori di precedenza iniziali per i criteri a 100 e 200, è possibile aggiungere un altro criterio con valore di precedenza pari a 150.
Se il parametro Precedence specificato è già assegnato a un altro oggetto criterio password, il cmdlet restituisce un errore di terminazione.
-ProtectedFromAccidentalDeletion
Specifica se impedire l'eliminazione dell'oggetto. Quando questa proprietà è impostata su true, non è possibile eliminare l'oggetto corrispondente senza modificare il valore della proprietà. I valori accettabili per questo parametro sono:
-ReversibleEncryptionEnabled
Specifica se la directory deve memorizzare le password utilizzando la crittografia reversibile. Questo parametro imposta la proprietà ReversibleEncryption per un criterio di password. I valori possibili sono:
-Server
Specifica l'istanza di Active Directory Domain Services a cui connettersi, fornendo uno dei seguenti valori per un nome di dominio o un server di directory corrispondente. Il servizio può essere uno dei seguenti: Active Directory Lightweight Domain Services, Active Directory Domain Services o Active Directory snapshot instance.
-WhatIf
Mostra cosa accadrebbe se il cmdlet venisse eseguito. Il cmdlet non viene eseguito.
Avviare Windows PowerShell (amministratore) ed eseguire il seguente comando per creare e impostare il Password Settings Object (PSO) allo stesso modo di come fatto tramite GUI
New-ADFineGrainedPasswordPolicy -ComplexityEnabled:$true -LockoutDuration:"00:30:00" -LockoutObservationWindow:"00:30:00" -LockoutThreshold:"5" -MaxPasswordAge:"30.00:00:00" -MinPasswordAge:"1.00:00:00" -MinPasswordLength:"12" -Name:"PSO_Domain_Admin" -PasswordHistoryCount:"24" -Precedence:"1" -ReversibleEncryptionEnabled:$false -Server:"Server1DC.mycompany.local"