Fine Grained Password Policies e Shadow Groups

Con Windows Server 2008 sono state introdotte le Fine Grained Password Policies (FGPP) che permettono di gestire policy di password diverse per Gruppi di protezione Globali o Utenti (oggetti inetOrgPerson se usati al posto degli oggetti utente).

La configurazione delle FGPP in Windows Server 2008 avviene tramite Group Policy Management Editor (gpmc.msc), mentre per l’assegnazione a Gruppi di protezione Globali o Utenti occorre utilizzare ADSIEdit (adsiedit.msc) o ldifde, a riguardo si veda Windows Server 2008 – Fine Grained Password Policy Walkthrough.

In Windows Server 2008 R2 grazie all’introduzione del modulo PowerShell per Active Directory è possibile configurare e assegnare le FGPP tramite PowerShell, a riguardo si veda AD DS Fine-Grained Password and Account Lockout Policy Step-by-Step Guide.

In Windows Server 2012 la configurazione e l’assegnazione delle FGPP può essere fatto tramite interfaccia grafica utilizzando Active Directory Administrative Center (Dsac.exe), a riguardo si veda Creating fine grained password policies through GUI Windows server 2012 “Server 8 beta”.

Come detto precedentemente le FGPP si possono associare a Gruppi di protezione Globali o Utenti oppure volendo a Organizational Unit utilizzando uno shadow group.

Uno Shadow Group è un Gruppo di protezione Globale logicamente mappato ad una OU come indicato in Passwords Technical Overview – Password Policy.

“To apply a fine-grained password policy to users of an OU, you can use a shadow group. A shadow group is a global security group that is logically mapped to an OU to enforce a fine-grained password policy. You add users of the OU as members of the newly created shadow group and then apply the fine-grained password policy to this shadow group. You can create additional shadow groups for other OUs as needed. If you move a user from one OU to another, you must update the membership of the corresponding shadow groups.”

La mappatura logica del gruppo shadows deve quindi essere gestita manualmente andando a sincronizzare le membership del gruppo con gli utenti del gruppo, per assolvere a questa incombenza è possibile ad esempio utilizzare uno script PowerShell schedulato periodicamente che si basa sui cmdlets del modulo PowerShell per Active Directory introdotto con Windows Server 2008 R2.

Di seguito riporto un esempio di script che elimina le membership del gruppo e riaggiunge a quest’ultimo gli utenti della OU.

$OU=”Organizational Unit Distinguished Name”
$Group=”Shadow Group Distinguished Name”

Get-ADGroupMember –Identity $Group | Where-Object {$_.distinguishedName –NotMatch $OU} | ForEach-Object {Remove-ADPrincipalGroupMembership –Identity $_ –MemberOf $Group –Confirm:$false}

Get-ADUser –SearchBase $OU –SearchScope OneLevel –LDAPFilter “(!memberOf=$Group)” | ForEach-Object {Add-ADPrincipalGroupMembership –Identity $_ –MemberOf $Group}