PREMESSA

Le Group Policy sono state introdotte da Microsoft con Windows 2000 potenziando il vecchio POLEDIT.EXE di NT4 come meccanismo per "configurare" (= segare le mani) le postazioni utente (notoriamente l'anello debole del sistema informativo dopo i programmatori ). Con il passare degli anni le GPO  hanno iniziato ad essere usate per "configurare" le macchine degli utenti (ed anche i server dato che è comodo fare certe impostazioni una volta sola).

Naturalmente non è tutto oro quello che luccica ed in alcuni casi si è abusato delle GPO, con risultati decisamente strani: si va dalla classica "lentezza" all'avvio (ultimamente mi è capitato più volte...) fino ad arrivare alla più ovvia domanda "ma perchè cavolo mi ritrovo questa impostazione?".

 L'idea di questi due articoli è proprio quella di entrare un po' più nel dettaglio delle GPO per evitare che diventino "a pain in the ass" per il malcapitato amministratore. Si dà comunque per scontato che le basi delle GPO siano note e conosciute.

I CSE ovvero I "MOTORI" DELLE GPO
Tutti sappiamo che le GPO vengono processate rispettivamente all'avvio di Windows (policy Computer) e al logon dell'utente (policyUser): il compito di processare le policy è affidato al processo WINLOGON che so occupa di autenticare gli utenti e le macchine. A sua volta, Winlogon affida la valutazione e l'applicazione delle policy ad una specifica libreria denominata userenv.dll (altro nome sicuramente noto agli amministratori): in realtà userenv.dll è una libreria che implementa una una lunga serie di funzioni, tutte legate al caricamento del profilo dell'utente (detto all'inglese, dello user environment) indipendentemente dalla presenza delle policy e dei domini. 
In questo lungo elenco di funzioni ne troviamo una serie ben specifica che implementa il Group Policy Engine che rappresenta il vero motore per l'applicazione delle policy. Questo motore non è però monolitico, ma fa a sua volta affidamento in su una serie di librerie aggiuntive denominate Client Side Extensions (CSE per gli amici): ciascun CSE si prende carico di applicare un sottoinsieme ben specifico delle impostazioni presenti in una GPO. 

Sebbene ad un primo sguardo questa struttura possa assomigliare ad una matrioska, presenta però l'indubbio vantaggio di essere estensibile, dato che chiunque può scrivere una CSE personalizzata per estendere le funzionalità delle group policy: tanto per fare un esempio pratico, la stessa Microsoft ha negli anni aggiunto una serie di CSE per gestire alcune applicazioni specifiche (es. il supporto NAP su Windows XP sp3 oppure la configurazione di IE8). La figura sottostante dovrebbe aiutare a mettere insieme le varie componenti (nota: l'ho spudoratamente rifatta da un documento Microsoft!)

L'elenco delle CSE lo trovate nel seguente percorso nel registro su qualunque macchina Windows:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GPExtensions

(nota: non ci dobbiamo meravigliare che questi signori siano sotto la chiave WINLOGON sulla base della discussione precedente).
Ogni estensione è identificata da un GUID (tanto per cambiare ) riportato come sottochiave del percorso precedentemente citato:per ogni GUID viene riportata la DLL che ha il compito di "applicare" le relative modifiche (l'immagine successiva fa riferimento alla mia macchina XP con SP3):

Da questa immagine emerge che ci sono ben 15 Client Side Extension: se poi ci si sposta chiave per chiave si trova anche la relativa DLL:

Chiave DLL Compito
0ACDD40C-75AC-47ab-BAA0-BF6DE7E7FE63 gptext.dll Impostazioni connessioni Wireless
25537BA6-77A8-11D2-9B6C-0000F8080861 fdeploy.dll Folder Redirection
35378EAC-683F-11D2-A89A-00C04FBBCFA2   Chiavi di registro
3610EDA5-77EF-11D2-8DC5-00C04FA31A66 dskquota.dll Quote Disco
426031C0-0B47-4852-B0CA-AC3D37BFCB39 gptext.dll Configurazione QoS
42B5FAAE-6536-11d2-AE5A-0000F87571E3 gptext.dll Esecuzione Scripts
4CFB60C1-FAA6-47f1-89AA-0B18730C9FD3 iedkcs32.dll Configurazione Zone Internet Explorer
7B489A69-220F-451E-B3FE-2CB811AF94AE iedkcs32.dll IE8 - configurazione accelerators
827D319E-6EAC-11D2-A4EA-00C04F79F83A scecli.dll Impostazioni "security"
A2E30F80-D7DE-11d2-BBDE-00C04F86AE3B iedkcs32.dll Configurazione Internet Explorer
B1BE8D72-6EAC-11D2-A4EA-00C04F79F83A scecli.dll Configurazione Recovery Agent EFS
C631DF4C-088F-4156-B058-4375F0853CD8 cscui.dll Offline Files
C6DC5466-785A-11D2-84D0-00C04FB169F7 appmgmts.dll Installazione Software
E437BC1C-AA7D-11D2-A382-00C04F991E27 gptext.dll Configurazione IPSec

 

Questo elenco non vuole assolutamente essere conclusivo, dato che il numero di "motori" client dipende dalla versione del sistema operativo (es. Vista ne ha moolti di più) ma anche dalla versione del browser (es. il prossimo IE8 aggiunge alcune voci per la gestione degli "accelerators") e comprende ad esempio una componente di recente aggiunta che è la policy per il NAP.

Se scorriamo con un pochino di attenzione questo elenco troviamo che forse manca il protagonista più importante ovvero manca il nome della DLL responsabile dell'applicazione delle chiavi di registro, ovvero dei settaggi che si trovano nei rami Administrative templates (che guarda caso è quello più "corposo): questa mancanza non è assolutamente casuale, dato che le impostazioni presenti nei rami Administrative Templates di una GPO vengono elaborate dalla userenv.dll stessa. Non solo: dato che userenv.dll viene SEMPRE invocata da WINLOGON (se non altro per caricare il profilo utente), possiamo anche dedurre che questo signore aprirà SEMPRE le GPO alla ricerca delle proprie impostazioni, anche se magari non ne troverà nessuna. Al contrario, i vari CSE sono invocati soltanto se si trova una impostazione nella policy che li riguarda (es. se non si usa l'installazione del sotware via GPO, la appmgmts.dll non viene mai caricata).

Oltre alle client side extension, esistono delle server side extensions che tuttavia ricoprono un ruolo più semplice: il loro compito infatti è quello di gestire l'organizzazione delle impostazioni nell'editor delle Group Policy; in altre parole, le server side extensions altro non sono che degli snap-in dell'MMC attraverso i quali gestire le varie impostazioni di una GPO. 
Non è detto che il numero delle Client Side Extension sia uguale a quello delle server side: ne è un esempio pratico le disk quotas che usano lo stesso ramo in administrative templates. Un (parziale) elenco delle server-side extension è il seguente (grazie a Mr. Darren Mar Elia, MVP di Windows 2003 - comunque l'ho riprovate tutte!):
 

ID Nome DLL Funzione
88E729D6-BDC1-11D1-BD2A-00C04FB9603F fde.dll Folder Redirection
FC715823-C5FB-11D1-9EEF-00A0C90347FF ieaksie.dll Internet Explorer Maintenance
0F6B957E-509E-11D1-A7CC-0000F87571E3 gptext.dll Administrative Templates e script
 DEA8AFA0-CC85-11D0-9CE2-0080C7221EBD ipsecsnp.dll IP Security
 53D6AB1D-2488-11D1-A28C-00C04FB94F17 certmgr.dll Certificati
 3060E8CE-7020-11D2-842D-00C04FA372D4 rigpsnap.dll Servizi RIS
 803E14A0-B4FB-11D0-A0D0-00A0C90F574B wsecedit.dll Impostazioni Security
 942A8E4F-A261-11D1-A760-00C04FB9603F appmgr.dll Software Installation
2DA6AA7F-8C88-4194-A558-0D36E7FD3E64 wlnsp.dll Impostazioni Wireless

 

Naturalmente è probabile che in futuro verranno aggiunte ulteriori server-side extensions: sicuramente in questo elenco manca quella relativa al deploy delle stampanti, feature disponibile a partire da WIndows 2003 R2.

Nella parte 2 si affrontano le varie opzioni presenti nei CSE