ˇ ´I TECHNICKE ´ V BRNE ˇ VYSOKE´ UCEN BRNO UNIVERSITY OF TECHNOLOGY
ˇ ´ICH TECHNOLOGI´I FAKULTA INFORMACN ´ ´ U ˚ USTAV INTELIGENTN´ICH SYSTEM FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS
´ INSTALACE A KONFIGURACE SYSTEMU AVG POMOC´I POLITIKY ACTIVE DIRECTORY INSTALLATION AND CONFIGURATION OF AVG SYSTEM USING ACTIVE DIRECTORY POLICIES
´ RSK ˇ ´ PRACE ´ BAKALA A BACHELOR’S THESIS
´ AUTOR PRACE
ˇ CEK ˇ MICHAL SPA
AUTHOR
´ VEDOUC´I PRACE SUPERVISOR
BRNO 2008
ˇ ´I, Ph.D. Ing. RADEK KOC
Zad´ an´ı bakal´ aˇ rsk´ e pr´ ace 1. Seznamte se s problematikou spr´avy s´ıt´ı, zejm´ena s moˇznostmi instalace, konfigurace a sledov´ an´ı r˚ uzn´ ych programov´ ych produkt˚ u v s´ıt´ıch Microsoft Windows. 2. Nastudujte problematiku politik (group policies) v prostˇred´ı Microsoft Active Directory, klientsk´ ych rozˇs´ıˇren´ı a doplˇ nk˚ u editor˚ u skupinov´ ych politik, WMI a MMC. 3. Navrhnˇete a v jazyc´ıch C# a C++ implementujte klientsk´e rozˇs´ıˇren´ı (Group Policy Client-side Extension) s podporou Resultant Set of Policy a doplnˇek editoru skupinov´ ych politik (Group Policy Object Editor snap-in) pro spr´avu antivirov´eho programu AVG. 4. Proved’te hodnocen´ı v´ ysledk˚ u pr´ace a navrhnˇete moˇznosti dalˇs´ıch rozˇs´ıˇren´ı.
Licenˇ cn´ı smlouva Licenˇcn´ı smlouva je uloˇzena v archivu Fakulty informaˇcn´ıch technologi´ı Vysok´eho uˇcen´ı technick´eho v Brnˇe.
Abstrakt Tato pr´ ace se zab´ yv´ a funkc´ı syst´em˚ u Windows naz´ yvanou Z´asady Skupiny, kter´a slouˇz´ı k centralizovan´e spr´ avˇe a konfiguraci uˇzivatelsk´ ych u ´ˇct˚ u a poˇc´ıtaˇc˚ u v s´ıt´ıch Microsoft Windows. Tato pr´ ace popisuje architekturu tohoto modulu a moˇznosti rozˇs´ıˇren´ı jeho funkˇcnosti. Tyto teoretick´e poznatky jsou pak uplatnˇeny pˇri n´avrhu a implementaci rozˇs´ıˇren´ı, kter´e slouˇz´ı ke konfiguraci syst´emu AVG
Kl´ıˇ cov´ a slova Z´asady skupiny, Active Directory, Microsoft Windows
Abstract This thesis is about Group Policy, which is a feature of Microsoft Windows systems that provides centralized management and configuration of users and computers in Microsoft Windows networks. This thesis describes Group Policy architecture and possible ways of extending its features. This theoretical knowledge is later used for designing and implementing extension, which is used to configure AVG system
Keywords Group Policy, Active Directory, Microsoft Windows
Citace ˇ cek: Instalace a konfigurace syst´emu AVG pomoc´ı politiky Active Directory, Michal Spaˇ bakal´aˇrsk´ a pr´ ace, Brno, FIT VUT v Brnˇe, 2008
Instalace a konfigurace syst´ emu AVG pomoc´ı politiky Active Directory Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem tuto bakal´ aˇrskou pr´aci vypracoval samostatnˇe pod veden´ım pana Ing. Radka Koˇc´ıho, Ph.D. Dalˇs´ı informace mi poskytli zamˇestnanci firmy AVG Technologies CZ, s.r.o. Uvedl jsem vˇsechny liter´ arn´ı prameny a publikace, ze kter´ ych jsem ˇcerpal. ....................... ˇ cek Michal Spaˇ 12. kvˇetna 2008
ˇ cek, 2008. c Michal Spaˇ
Tato pr´ ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe informaˇcn´ıch technologi´ı. Pr´ ace je chr´ anˇena autorsk´ym z´ akonem a jej´ı uˇzit´ı bez udˇelen´ı opr´ avnˇen´ı autorem je nez´ akonn´e, s v´yjimkou z´ akonem definovan´ych pˇr´ıpad˚ u.
Obsah ´ 1 Uvod
3
2 Group Policy - Z´ asady skupiny
4
2.1
2.2
Architektura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1.1
Group Policy container . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1.2
Group Policy template . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.1.3
Linkov´ an´ı GPO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.1.4
Lok´ aln´ı GPO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.1.5
Zpracov´ an´ı Group Policy . . . . . . . . . . . . . . . . . . . . . . . .
7
2.1.6
Group Policy History Data . . . . . . . . . . . . . . . . . . . . . . .
11
V´ ysledn´ a sada z´ asad - RSoP . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2.1
Protokolovac´ı reˇzim RSoP . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2.2
Pl´ anovac´ı reˇzim RSoP . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3 Rozˇ s´ıˇ ren´ı Group Policy 3.1
13
Klientsk´e rozˇs´ıˇren´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.1.1
Registrace Klientsk´eho rozˇs´ıˇren´ı . . . . . . . . . . . . . . . . . . . . .
13
3.1.2
Callback funkce ProcessGroupPolicy (ProcessGroupPolicyEx) . . . .
13
3.1.3
Struktura GROUP POLICY OBJECT . . . . . . . . . . . . . . . . .
16
3.2
Rozˇs´ıˇren´ı Group Policy Object Editoru . . . . . . . . . . . . . . . . . . . . .
17
3.3
Implementace podpory RSoP . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.3.1
Definov´ an´ı RSoP sch´ematu . . . . . . . . . . . . . . . . . . . . . . .
19
3.3.2
Podpora protokolovac´ıho m´odu RSoP v klientsk´em rozˇs´ıˇren´ı . . . . .
20
3.3.3
Podpora pl´ anovac´ıho m´odu RSoP v klientsk´em rozˇs´ıˇren´ı . . . . . . .
21
3.3.4
Rozˇs´ıˇren´ı snap-inu V´ ysledn´a sada z´asad . . . . . . . . . . . . . . . .
22
4 N´ avrh a implementace rozˇ s´ıˇ ren´ı pro spr´ avu syst´ emu AVG
24
4.1
Struˇcn´ y popis syst´emu konfigurace AVG . . . . . . . . . . . . . . . . . . . .
24
4.2
Uloˇzen´ı konfiguraˇcn´ıch dat v GPO . . . . . . . . . . . . . . . . . . . . . . .
25
4.3
N´ avrh a implementace klientsk´eho rozˇs´ıˇren´ı . . . . . . . . . . . . . . . . . .
25
4.4
N´ avrh a implementace rozˇs´ıˇren´ı GPOE . . . . . . . . . . . . . . . . . . . . .
27
1
4.5
4.4.1
Implementace snap-inu pro GPOE . . . . . . . . . . . . . . . . . . .
27
4.4.2
Implementace GPmanageru . . . . . . . . . . . . . . . . . . . . . . .
28
Vyuˇzit´ı Group Policy k instalaci AVG . . . . . . . . . . . . . . . . . . . . .
29
5 Z´ avˇ er
31
A Pamˇ et’ov´ e m´ edium
33
B N´ avod k pouˇ zit´ı
34
2
Kapitola 1
´ Uvod V dneˇsn´ı dobˇe se ve velk´e m´ıˇre rozˇs´ıˇrilo pouˇz´ıv´an´ı priv´atn´ıch poˇc´ıtaˇcov´ ych s´ıt´ı, at’ uˇz se jedn´ a o komerˇcn´ı podnikov´e s´ıtˇe nebo nekomerˇcn´ı s´ıtˇe napˇr´ıklad ve ˇskol´ach. S rostouc´ım poˇctem uˇzivatel˚ u a poˇc´ıtaˇc˚ u v tˇechto s´ıt´ıch roste i probl´em, jak u ´ˇcinnˇe, efektivnˇe a s minim´aln´ımi n´aklady spravovat klientsk´e stanice, pouˇz´ıvan´ y software a tak´e samotn´e uˇzivatelsk´e u ´ˇcty. Mezi n´ astroje, kter´e umoˇzn ˇuj´ı centralizovanou spr´avu v prostˇred´ı s´ıt´ı Microsoft Windows, patˇr´ı Z´ asady Skupiny (anglicky Group Policy), kter´e jsou pˇr´ımo integrov´any do posledn´ıch verz´ı operaˇcn´ıch syst´em˚ u ˇrady Windows NT. Modul Z´ asady Skupiny je postaven na Active Directory, coˇz nen´ı nic jin´eho neˇz implementace LDAP adres´ aˇre pro pouˇzit´ı v prostˇred´ı Microsoft Windows. Zp˚ usob, jak´ ym se Active Directory pouˇz´ıv´ a pro uloˇzen´ı dat Z´ asad Skupin, a zp˚ usob, jak´ ym je zajiˇstˇeno prov´az´ an´ı tˇechto dat s uˇzivatelsk´ ymi u ´ˇcty a u ´ˇcty poˇc´ıtaˇc˚ u, jsou pops´any v kapitole 2.1. Samotnou funkˇcnost Z´ asad Skupin prov´adˇej´ı tzv. rozˇs´ıˇren´ı. Microsoft dod´av´a se sv´ ymi operaˇcn´ımi syst´emy nˇekolik takov´ ych pˇredinstalovan´ ych rozˇs´ıˇren´ı, kter´e umoˇzn ˇuj´ı spr´avu tˇechto syst´em˚ u a program˚ u, kter´e jsou s tˇemito syst´emy dod´av´any (jako je napˇr. Internet Explorer). V kapitole 3 jsou pops´any z´akladn´ı principy, kter´e je nutn´e pouˇz´ıt pro implementaci vlastn´ıho rozˇs´ıˇren´ı. V kapitole 4 je pak pops´an n´avrh a implementace rozˇs´ıˇren´ı, kter´e bude slouˇzit ke spr´ avˇe syst´emu AVG.
3
Kapitola 2
Group Policy - Z´ asady skupiny 2.1
Architektura
Group Policy je postaveno na architektuˇre klient-server. Na serveru se pouˇz´ıv´a Active Directory a SYSVOL1 pro uloˇzen´ı z´asad a pak n´astroje na spr´avu a editaci z´asad skupiny: Group Policy Management Console (GPMC) , Group Policy Object Editor (GPOE) a jeho rozˇs´ıˇren´ı. Klientskou ˇc´ ast tvoˇr´ı Group Policy Engine implementovan´ y v knihovnˇe userenv.dll, kter´ y bˇeˇz´ı v r´ amci sluˇzby Winlogon (implementovan´ y v winlogon.exe). Samostatnou aplikaci nastaven´ı pak prov´ adˇej´ı klientsk´a rozˇs´ıˇren´ı, kter´e jsou implementov´any v samostatn´ ych dll knihovn´ ach. Z´akladn´ı jednotkou nesouc´ı data Group Policy je virtu´aln´ı objekt naz´ yvan´ y Group Policy Object (GPO). V r´ amci Group Policy pak existuje logick´a i fyzick´a reprezentace kaˇzd´eho Group Policy Objectu. Logickou ˇc´ast´ı je Group Policy container, kter´ y je uloˇzen v Active Directory, fyzick´ a ˇc´ ast se pak naz´ yv´a Group Policy template (GPT), kter´ y je uloˇzen v souborov´em syst´emu na ˇradiˇci dom´eny. GPO m˚ uˇze b´ yt pˇrilinkov´ano ke kontejnerov´ ym objekt˚ um v AD (dom´enˇe, s´ıdlu a organizaˇcn´ı jednotce) a t´ım je urˇceno, na kter´e objekty se m´a konkr´etn´ı nastaven´ı aplikovat. Aplikace GPO m˚ uˇze b´ yt jeˇstˇe omezena nastaven´ım opr´avnˇen´ı u GPO, pˇr´ıpadnˇe WMI filtrem.
2.1.1
Group Policy container
GPC je v Active Directory reprezentov´an jako kontejnerov´ y objekt, konkr´etnˇe objekt tˇr´ıdy groupPolicyContainer. GPC je v Active Directory uloˇzen v kontejnerech Policies a System pro pˇr´ısluˇsnou dom´enu. Jako jm´eno (cn - Common-Name) je zvoleno GUID, kter´e je z´aroveˇ n i jednoznaˇcn´ ym identifik´ atorem GPO. Cel´a LDAP cesta ke GPC v Active Directory (pro dom´enu testing.local) pak vypad´ a takto: LDAP://CN={2B71864E-3BE4-4243-A4C6-50305E 049F87},CN=Policies,CN=System,DC=testing,DC=local. Pouˇzit´ım GUID jako jm´ena GPO je zaruˇceno, ˇze vˇsechny GPO maj´ı jedineˇcn´e jm´eno v r´amci Active Directory, i kdyˇz je pˇri vytv´aˇren´ı nov´eho GPO zvolen stejn´ y n´azev pro v´ıce GPO. 1
SYSVOL je veˇrejnˇe pˇr´ıstupn´ y sd´ılen´ y adres´ aˇr na serveru, kter´ y obsahuje kopie vˇsech veˇrejn´ ych soubor˚ u pro dom´enu. Adres´ aˇr SYSVOL je replikov´ an na vˇsechny ˇradiˇce dom´eny.
4
N´ azev atributu createTimeStamp displayName Flags
gPCFileSysPath gPCMachineExtensionNames
gPCUserExtensionNames
versionNumber
Popis Obsahuje datum a ˇcas kdy byl GPC vytvoˇren Obsahuje jm´eno, kter´e bylo zad´ano pˇri vytvoˇren´ı GPO Obsahuje status GPO: Flags = 0 - GPO je povolen´ y (Enabled) Flags = 1 - ˇc´ast konfigurace uˇzivatele je zak´azan´a Flags = 2 - ˇc´ast konfigurace poˇc´ıtaˇce je zak´azan´a Flags = 3 - GPO je zak´azan´ y (Disabled) Obsahuje cestu k pˇr´ısluˇsn´emu GPT Obsahuje seznam GUID klientsk´ ych rozˇs´ıˇren´ı, kter´e maj´ı zpracovat ˇc´ast konfigurace poˇc´ıtaˇce GPO a tak´e i GUID rozˇs´ıˇren´ı, kter´e uloˇzilo data do GPO Obsahuje seznam GUID klientsk´ ych rozˇs´ıˇren´ı, kter´e maj´ı zpracovat ˇc´ast konfigurace uˇzivatele GPO a tak´e i GUID rozˇs´ıˇren´ı, kter´e uloˇzilo data do GPO Urˇcuje aktu´aln´ı ˇc´ıslo verze GPO, d˚ uleˇzit´e k urˇcov´an´ı zmˇen v GPO
Tabulka 2.1: V´ yznamn´e atributy GPC Atributy GPC Samotn´ y GPC pak obsahuje z´ akladn´ı informace o GPO jako jsou displayName (pod jak´ ym n´azvem se GPO zobrazuje), ˇc´ıslo verze GPO, cestu ke GPT a access control list (ACL), kter´ y obsahuje seznam opr´ avnˇen´ı urˇcuj´ıc´ı, kdo m´a pˇr´ıstup ke zmˇenˇe nebo zpracov´an´ı GPO. GPC pak tak´e obsahuje i seznam klientsk´ ych rozˇs´ıˇren´ı, kter´e je nutn´e zavolat na klientsk´e stanici pro zpracov´ an´ı pˇr´ısluˇsn´eho GPO. Detailnˇejˇs´ı popis k nejd˚ uleˇzitˇejˇs´ım atribut˚ um je v tabulce 2.1. Uloˇ zen´ı vlastn´ıch dat v GPC Kromˇe tˇechto atribut˚ u m˚ uˇze Group Policy container obsahovat i konkr´etn´ı data, kter´e pak zpracov´ avaj´ı klientsk´e rozˇs´ıˇren´ı. Napˇr´ıklad rozˇs´ıˇren´ı Wireless Network Policy ukl´ad´ a sv´e nastaven´ı do objektu tˇr´ıdy msieee80211-Policy, kter´ y je v r´amci GPC uloˇzen v kontejnerech CN=Wireless, CN=Windows,CN=Microsoft . Je tˇreba si uvˇedomit, ˇze pokud se rozhodneme pˇri vytv´ aˇren´ı vlastn´ıho klientsk´eho rozˇs´ıˇren´ı ukl´adat data do GPC, bude pravdˇepodobnˇe nutn´e modifikovat Active Direcotry Schema v lesu2 , kde se bude naˇse rozˇs´ıˇren´ı pouˇz´ıvat. Pˇri t´eto modifikaci pak bude tˇreba nadefinovat vlastn´ı tˇr´ıdu objekt˚ u, kter´ y bude pak obsahovat data nov´eho rozˇs´ıˇren´ı. Pro modifikaci lze pouˇz´ıt Active Directory Schema Manager snap-in, pˇr´ıpadnˇe jin´e konzolov´e n´astroje. Je ale tˇreba si uvˇedomit, ˇze novˇe pˇridan´e atributy a tˇr´ıdy nelze ze sch´ematu vymazat, lze je pouze deaktivovat. Zobrazen´ı GPC Pro zobrazen´ı GPC je moˇzn´e pouˇz´ıt konzoli Active Directory Users and Computers, ale je nutn´e zaˇskrtnout poloˇzku Advanced Features v menu View. Pak lze GPC naj´ıt ve stromu JmenoDomeny→System→Policies. Toto zobrazen´ı ovˇsem nedovoluje zobrazit jednotliv´e 2
les (forest) je spojen´ a skupina dom´enov´ ych strom˚ u, kter´e pouˇz´ıvaj´ı stejn´e AD sch´ema
5
atributy. Pro detailn´ı zobrazen´ı je nutn´e pouˇz´ıt utilitu ADSI Edit. Tato konzola je ale dostupn´a aˇz po instalaci Windows Support Tools. ADSI Edit pak umoˇzn ˇuje zobrazit a editovat vˇsechny atributy, kter´e jsou uloˇzen´e v Active Directory.
2.1.2
Group Policy template
Group Policy template tvoˇr´ı fyzickou ˇc´ast GPO. Je reprezentov´an soubory uloˇzen´ ymi v souborov´em syst´emu. Kaˇzd´ y GPO m´a pˇridˇelen hlavn´ı adres´aˇr, kter´ y je uloˇzen v adres´ aˇri %SystemRoot%\SYSVOL\domain\Policies\. Po vytvoˇren´ı GPO Active Directory vytvoˇr´ı i pˇr´ısluˇsn´ y GPT pro dan´ y GPO. Jako jm´eno adres´aˇre GPT je zvoleno GUID - je identick´e s GUID pˇr´ısluˇsn´eho GPC. Cesta k adres´aˇri GPT je tak´e uloˇzena v GPC v atributu GPCFileSysPath. V r´ amci hlavn´ıho adres´aˇre GPT je pak vytvoˇreno nˇekolik dalˇs´ıch adres´aˇr˚ ua soubor˚ u, kter´e obsahuj´ı aktu´ aln´ı nastaven´ı GPO. Ze s´ıtˇe je pak GPT dostupn´ y v r´amci sd´ılen´eho adres´ aˇre SYSVOL. Pokaˇzd´e jsou tedy vytvoˇreny dvˇe kopie GPT: Prvn´ı v adres´ aˇri %SystemRoot%\SYSVOL\domain\Policies\GPOGUID a druh´a v ve sd´ılen´em adres´aˇri SYSVOL - SYSVOL\DomainName\Policies\GPOGUID (kde DomainName je FQDN dom´eny). Kaˇzd´ y GPT je tak´e replikov´ an na ˇradiˇce dom´eny v dom´enˇe za pomoc´ı sluˇzby File Replication Service. Struktura GPT V hlavn´ım adres´ aˇri GPT jsou vˇzdy vytvoˇreny dva adres´aˇre: Machine a User. Machine obsahuje nastaven´ı patˇr´ıc´ı do ˇc´ asti Konfigurace poˇc´ıtaˇce, User pak obsahuje nastaven´ı patˇr´ıc´ı do ˇc´asti Konfigurace uˇzivatele. V hlavn´ım adres´aˇri GPT je tak´e uloˇzen soubor Gpt.ini, kter´ y obsahuje ˇc´ıslo verze GPO (ekvivalentn´ı atributu versionNumber v GPC) a zobrazoˇ ıslo verze GPO je des´ıtkov´a interpretace ˇctyˇrbytov´eho van´e jm´eno GPO (display name). C´ ˇsestn´actkov´eho ˇc´ısla, pˇriˇcemˇz horn´ı dva byty oznaˇcuj´ı verzi ˇc´asti Konfigurace uˇzivatele GPO ˇ ısla verz´ı v GPT a GPC a doln´ı dva byty oznaˇcuj´ı verzi ˇc´ asti Konfigurace poˇc´ıtaˇce GPO. C´ se mohou liˇsit (m˚ uˇze to nastat napˇr´ıklad v pˇr´ıpadˇe, pokud se u upraven´eho GPO replikovala pouze ˇc´ ast GPC a GPT teprve ˇcek´a na replikaci). GPT tak´e m˚ uˇze obsahovat dalˇs´ı adres´ aˇre a soubory, podle toho, kter´e rozˇs´ıˇren´ı uloˇzilo do GPO sv´e nastaven´ı.
2.1.3
Linkov´ an´ı GPO
Linkov´ an´ı GPO urˇcuje, na kter´e poˇc´ıtaˇce a uˇzivatele se m´a dan´ y GPO aplikovat. GPO lze pˇrilinkovat ke tˇrem druh˚ um kontejnerov´ ych objekt˚ u v Active Directory: k dom´enˇe, s´ıdlu a organizaˇcn´ım jednotk´ am. Samotn´ y link je reprezentov´an atributem gPLink u tˇechto kontejnerov´ ych objekt˚ u a obsahuje celou LDAP cestu ke GPC ˇc´asti GPO a tak´e pˇr´ıznak status flag, kter´ y je od LDAP cesty oddˇelen stˇredn´ıkem. Hodnota atributu gPLink pak m˚ uˇze vypadat takto: LDAP://cn={E6AD4E44-5D5D-42E1-A49FFF50F03249E9},cn=policies,cn= system,DC=testing,DC=com;0 . Pokud je k dan´emu kontejnerov´emu objektu pˇrilinkov´ano v´ıce GPO, jsou jednotliv´e hodnoty pro dan´ y GPO v atributu gPLink uzavˇreny do hranat´ ych ˇ ıslo na konci tohoto atributu (status flag) pak ud´av´a, zda je link povolen a z´avorek ([]). C´ zda je link vynucen´ y (enforced ): hodnota 0 znamen´a, ˇze link je povolen a nen´ı vynucen, 1 nen´ı povolen a nen´ı vynucen, 2 je povolen a vynucen, 3 nen´ı povolen a je vynucen. U kontejnerov´ ych objekt˚ u je pak jeˇstˇe jeden atribut gPOptions, kter´ y je nastaven, pokud je povoleno blokov´ an´ı dˇediˇcnosti Group Policy. Standardnˇe vˇsechny n´aslednick´e objekty dˇed´ı GPO objekty sv´eho pˇredch˚ udce - nastaven´ım tohoto pˇr´ıznaku lze toto chov´an´ı zak´azat.
6
2.1.4
Lok´ aln´ı GPO
Lok´aln´ı Group Policy Object je uloˇzen na jednotliv´ ych poˇc´ıtaˇc´ıch, pˇriˇcemˇz kaˇzd´ y poˇc´ıtaˇc m´ a pr´avˇe jeden lok´ aln´ı GPO. Tento objekt obsahuje vˇzdy jen ˇc´ast GPT, konkr´etnˇe v adres´ aˇri %systemroot%\System32\GroupPolicy. Struktura soubor˚ u v tomto adres´aˇri je stejn´a jako struktura norm´ aln´ıho GPO v Active Directory, jen v souboru GPT.ini je nav´ıc uloˇzena informace o parametrech gPCMachineExtensionNames a gPCMachineUserNames, kter´e jsou norm´ alnˇe uloˇzeny v GPC, ale protoˇze GPC ˇc´ast v lok´aln´ım GPO nen´ı, je tˇreba je m´ıt v tomto souboru. Lok´ aln´ı GPO m´ a nejmenˇs´ı vliv na zpracov´an´ı Group Policy, protoˇze je vˇzdy zpracov´av´ an jako prvn´ı a tak´e proto, ˇze nastaven´ı v Active Directory maj´ı vˇetˇs´ı prioritu.
2.1.5
Zpracov´ an´ı Group Policy
Zpracov´ an´ı Group Policy m´ a na starosti Group Policy Engine, kter´ y seˇrazuje GPO do seznam˚ u, kter´e pˇred´ av´ a jednotliv´ ym klientsk´ ym rozˇs´ıˇren´ım, jenˇz n´aslednˇe prov´adˇej´ı samostatn´e zpracov´ an´ı GPO. Klientsk´ a rozˇs´ıˇren´ı Group Policy jsou implementov´any v samostatn´ ych ˇ dll knihovn´ ach. V´ yjimku tvoˇr´ı rozˇs´ıˇren´ı Sablony pro spr´ avu (Administrative Templates), kter´e je implementov´ ano pˇr´ımo v knihovnˇe userenv.dll a je vˇzdy zpracov´ano jako prvn´ı. Existuj´ı dva typy zpracov´ an´ı z´asad: na popˇred´ı (foreground processing, taky naz´ yvan´e prvotn´ı zpracov´ an´ı) a na pozad´ı (background processing). Zpracov´ an´ı na popˇ red´ı Zpracov´ an´ı na popˇred´ı nast´ av´ a pˇri startu poˇc´ıtaˇce a pˇri pˇrihl´aˇsen´ı uˇzivatele. Zpracov´an´ı na popˇred´ı je typick´e v tom, ˇze je dokonˇceno pˇredt´ım, neˇz je uˇzivateli k dispozici plocha a neˇz je mu umoˇznˇeno s n´ı interaktivnˇe pracovat. Je tedy vhodn´e pro zpracov´an´ı takov´ ych druh˚ u nastaven´ı, kde je tˇreba prostˇred´ı bez uˇzivatele. Zpracov´ an´ı na pozad´ı Zpracov´ an´ı na pozad´ı nast´ av´ a periodicky a asynchronnˇe na ostatn´ıch procesech. Je vhodn´e pro takov´e nastaven´ı, kter´e je nutn´e aplikovat periodicky. Zpracov´an´ı na pozad´ı nast´av´a na klientsk´ ych stanic´ıch a na serverech, kter´e nejsou ˇradiˇci dom´eny, kaˇzd´ ych 90 minut. K tˇemto devades´ ati minut´ am je pˇriˇcten n´ ahodn´ y ˇcas aˇz 30 minut. Zpracov´an´ı na pozad´ı pro ˇradiˇce dom´eny je prov´ adˇeno kaˇzd´ ych 5 minut. Tyto parametry lze zmˇenit pomoc´ı pˇr´ısluˇsn´ ych nastaven´ı. Synchronn´ı a asynchronn´ı zpracov´ an´ı Ve Windows 2000 se zpracov´ an´ı na popˇred´ı vˇzdy dˇelo synchronnˇe, to znamen´a, ˇze z´asady pro poˇc´ıtaˇc byly zpracov´ any, neˇz se uˇzivateli zobrazila pˇrihlaˇsovac´ı obrazovka a z´asady pro uˇzivatele byly zpracov´ any dˇr´ıv, neˇz byla uˇzivateli k dispozici plocha. Ve Windows XP pˇribyla moˇznost asynchronn´ıho zpracov´ an´ı na popˇred´ı, kter´e je podporov´ano mechanismem fast logon optimization. Pokud je zapnuta (coˇz je v´ ychoz´ı nastaven´ı), tak Windows neˇcek´a na kompletn´ı inicializaci s´ıtˇe a umoˇzn ˇuje existuj´ıc´ım uˇzivatel˚ um pˇrihl´asit se pomoc´ı uloˇzen´ ych osobn´ıch u ´daj˚ u (uˇzivatel se uˇz dˇr´ıve pˇrihlaˇsoval z dan´e pracovn´ı stanice). Tato optimalizace pak umoˇzn ˇuje uˇzivateli zaˇc´ıt pracovat, zat´ımco jsou skupinov´e z´asady aplikov´any na pozad´ı - to je aˇz v okamˇziku, kdy je dostupn´a s´ıt’. Je tedy velice podobn´a procesu zpracov´an´ı group policy na pozad´ı. Tato optimalizace je vˇzdy vypnuta za n´asleduj´ıc´ıch podm´ınek: Uˇzivatel se 7
poprv´e pˇrihlaˇsuje k poˇc´ıtaˇci, uˇzivatel m´a cestovn´ı uˇzivatelsk´ y profil nebo domovsk´ y adres´ aˇr, a kdyˇz uˇzivatel m´ a synchronn´ı pˇrihlaˇsovac´ı skripty. Optimalizaci lze vypnout pomoci nastaven´ı pˇr´ısluˇsn´e politiky, pak se stanice s Windows XP bude chovat stejnˇe jako stanice s Windows 2000. Postup pˇ ri aplikaci z´ asad Samotn´ a aplikace z´ asad skupiny pak prob´ıh´a v nˇekolika kroc´ıch. Prvotn´ı zpracov´an´ı z´asad pro u ´ˇcet poˇc´ıtaˇce prob´ıh´ a takto: 1. Poˇc´ıtaˇc nalezne ˇradiˇc dom´eny (vyuˇz´ıv´a pˇritom DNS) a pˇrihl´as´ı se do dom´eny. 2. Poˇc´ıtaˇc pouˇzije ICMP ping na ˇradiˇc dom´eny aby zjistil, zda je pˇripojen pˇres pomalou linku k ˇradiˇci dom´eny. 3. Pomoc´ı LDAP dotazu se z´ısk´a z Active Directory vˇsechny GPO, kter´e jsou pˇrilinkov´ any k organizaˇcn´ım jednotk´ am, dom´enˇe a s´ıdlu, ke kter´ ym patˇr´ı u ´ˇcet poˇc´ıtaˇce. Z v´ ysledku dotazu sestav´ı seznam vˇsech DN (distinguished name) GPO, kter´e se maj´ı aplikovat pro dan´ y poˇc´ıtaˇc. 4. Za pomoci v´ ysledk˚ u z´ıskan´ ych v pˇredchoz´ım kroku, poˇc´ıtaˇc sestav´ı LDAP dotazy, kter´e z´ıskaj´ı z Active Directory ˇradu atribut˚ u GPO, jako je napˇr. cesta ke GPT a seznam GUID klientsk´ ych rozˇs´ıˇren´ı, kter´e je tˇreba zavolat pro zpracov´an´ı politiky. 5. Windows se pak pomoc´ı SMB protokolu pˇripoj´ı ke sd´ılen´emu adres´aˇri SYSVOL a pˇreˇcte obsah souboru Gpt.ini pro kaˇzd´ y GPO nalezen´ y v kroku 3. Ze vˇsech z´ıskan´ ych atribut˚ u pak sestav´ı seznamy GPO, kter´e pˇred´av´a klientsk´ ym rozˇs´ıˇren´ım. Pˇri sestavov´ an´ı seznamu GPO se testuje, zda m´a poˇc´ıtaˇc opr´avnˇen´ı Apply Group Policy. Pokud ne, nen´ı GPO do seznamu zaˇrazeno. D´ale se tak´e vyhodnocuj´ı dotazy WMI oproti klientsk´emu WMI reposit´aˇri a urˇcuje se, zda poˇc´ıtaˇc splˇ nuje poˇzadavky tohoto dotazu. Pokud ne, GPO opˇet nen´ı do seznamu zaˇrazeno. Group policy engine pak vol´ a jednotliv´e klientsk´e rozˇs´ıˇren´ı a pˇred´av´a jim seznam GPO ke zpracov´an´ı. 6. Klientsk´e rozˇs´ıˇren´ı pak porovn´av´a ˇc´ıslo verze GPO s ˇc´ıslem verze GPO, kter´e je uloˇzeno v registrech v kl´ıˇc´ıch Group Policy history (bude vysvˇetleno d´ale). 7. Pokud se ˇc´ısla verz´ı shoduj´ı (nezmˇenilo se od posledn´ıho zpracov´an´ı), je GPO pˇreskoˇceno. Pokud od posledn´ıho zpracov´an´ı doˇslo ke smaz´an´ı nˇekter´eho GPO, klientsk´e rozˇs´ıˇren´ı odstran´ı toto nastaven´ı. 8. Klientsk´e rozˇs´ıˇren´ı pak ˇcte obsah GPT (pˇr´ıpadnˇe tak´e GPC) a aplikuje nastaven´ı 9. Po dokonˇcen´ı zpracov´ an´ı vˇsech GPO, klientsk´e rozˇs´ıˇren´ı zapisuje RSoP data do WMI v CIMOM datab´ azi. Po pˇrihl´ aˇsen´ı uˇzivatele se opakuje podobn´ y proces, jen je m´ısto u ´ˇctu poˇc´ıtaˇce pouˇzit u ´ˇcet uˇzivatele. Zpracov´ an´ı na pozad´ı prob´ıh´a tak´e podobnˇe. Sch´ema 2.1 shrnuje proces sestaven´ı seznamu GPO a sch´ema 2.2 shrnuje proces vol´ an´ı klientsk´ ych rozˇs´ıˇren´ı a zpracov´ an´ı tohoto seznamu. Zpracov´ an´ı na pozad´ı lze tak´e vyvolat manu´alnˇe pomoc´ı utility gpupdate.exe. Aplikace m˚ uˇzou ˇz´ adat o aktualizaci politiky pomoc´ı funkce RefreshPolicy, pˇr´ıpadnˇe RefreshPolicyEx, kter´ a na rozd´ıl od pˇredchoz´ı umoˇzn ˇuje zadat druh´ y atribut RP FORCE - m´a to stejn´ y u ´ˇcinek jako pˇri pouˇzit´ı gpupdate.exe /force - ignoruje se veˇsker´a optimalizace zpracov´an´ı a znovu se pouˇzij´ı vˇsechna nastaven´ı, i kdyˇz nebyly detekov´any ˇz´adn´e zmˇeny v GPO. 8
Obr´ azek 2.1: Sch´ema vytvoˇren´ı seznamu GPO
9
Obr´ azek 2.2: Sch´ema vol´ an´ı klientsk´ ych rozˇs´ıˇren´ı a zpracov´an´ı seznamu GPO
10
2.1.6
Group Policy History Data
Na kaˇzd´em poˇc´ıtaˇci, kter´ y je spravov´an pomoc´ı Group Policy se ukl´adaj´ı data o historii vˇsech zpracov´ avan´ ych GPO. Group Policy engine ukl´ad´a tyto data do registr˚ u do HKEY LOCAL MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\History. Pod t´ımto kl´ıˇcem jsou kl´ıˇce reprezentuj´ıc´ı jednotliv´e klientsk´e rozˇs´ıˇren´ı, kter´e zpracov´ avaj´ı GPO a jsou pojmenov´any pomoc´ı GUID pˇr´ısluˇsn´ ych klientsk´ ych rozˇs´ıˇren´ı. Pod t´ımto kl´ıˇcem jsou kl´ıˇce ˇc´ıslov´ any od 0 a tyto kl´ıˇce reprezentuj´ı GPO, kter´e se zpracov´avaly v posledn´ım zpracov´ an´ım Group Policy. Jedn´ım z hlavn´ıch d˚ uvod˚ u ukl´ad´an´ı tˇechto dat je, aby klientsk´e rozˇs´ıˇren´ı bylo schopn´e rozliˇsit, zda se dan´ y GPO objekt zmˇenil od minul´eho zpracov´ an´ı (zmˇenilo se ˇc´ıslo verze) a optimalizovat tak zpracov´an´ı Group Policy. Kromˇe ˇc´ısla verze se do registr˚ u ukl´ adaj´ı prakticky vˇsechny data, kter´e jsou dostupn´a klientsk´emu rozˇs´ıˇren´ı o konkr´etn´ım GPO ze struktury GROUP POLICY OBJECT (bude vysvˇetleno d´ale).
2.2
V´ ysledn´ a sada z´ asad - RSoP
Funkce V´ysledn´ a sada z´ asad (Resultant Set of Policy) slouˇz´ı k simulaci aplikace z´asad a tak´e k ˇreˇsen´ı pot´ıˇz´ı pˇri aplikaci z´ asad. RSoP m´a dva reˇzimy: protokolovac´ı a pl´anovac´ı. Reˇzim protokolov´ an´ı RSoP (Group Policy Results) slouˇz´ı k zobrazen´ı konkr´etn´ıch poˇzit´ ych nastaven´ıch z´ asad pro dan´ y poˇc´ıtaˇc nebo uˇzivatele. Pl´anovac´ı reˇzim (Group Policy Modeling) simuluje nastaven´ı z´ asad, kter´e budou pouˇzity pro poˇc´ıtaˇce nebo uˇzivatele. K zobrazen´ı dat RSoP pak lze pouˇz´ıt konzoli V´ysledn´ a sada z´ asad (rsop.msc), konzolov´ y n´astroj gpresult nebo tak´e pˇr´ımo Group Policy Management console.
2.2.1
Protokolovac´ı reˇ zim RSoP
Reˇzim protokolov´ an´ı RSoP slouˇz´ı spr´avc˚ um ke kontrole existuj´ıc´ıch nastaven´ı z´asad pouˇzit´e pro poˇc´ıtaˇce nebo uˇzivatele. Pouˇz´ıv´a se v situac´ıch, kdy je tˇreba zjistit, kter´e konkr´etn´ı nastaven´ı z´ asad jsou pouˇzity pro dan´ y poˇc´ıtaˇc nebo uˇzivatele, nebo kdyˇz je nutn´e vyhledat pˇrepsan´e zabezpeˇcen´ı ne´ uspˇeˇsn´ ych z´asad pˇr´ıpadnˇe zjistit, jak´ ym zp˚ usobem ovlivˇ nuj´ı skupiny zabezpeˇcen´ı nastaven´ı z´ asad. Napˇr´ıklad pokud jsou z´asady uplatˇ nov´any na v´ıce u ´rovn´ıch (napˇr´ıklad s´ıt’, dom´ena, ˇradiˇc dom´eny a organizaˇcn´ı jednotka), m˚ uˇze doj´ıt ke konflikt˚ um ve v´ ysledc´ıch. V´ ysledn´ a sada z´asad pom´ah´a urˇcit sadu pouˇzit´ ych z´asad a poˇrad´ı tˇechto z´ asad, ve kter´em jsou uplatˇ nov´any. Pro uloˇzen´ı RSoP dat se pouˇz´ıv´a CIMOM (Common Information Model Object Management) datab´ aze na lok´ aln´ım poˇc´ıtaˇci. Tato datab´aze je pak pˇr´ıstupn´a pomoc´ı sluˇzby 3 WMI .
2.2.2
Pl´ anovac´ı reˇ zim RSoP
Pl´anovac´ı reˇzim funkce RSoP pom´ah´a spr´avc˚ um pl´anovat rozˇsiˇrov´an´ı a reorganizaci s´ıtˇe. Pomoc´ı pl´ anovac´ıho reˇzimu funkce RSoP lze od existuj´ıc´ıch GPO z´ıskat veˇsker´a pouˇziteln´ a nastaven´ı z´ asad. Pl´ anovac´ı reˇzim se pouˇz´ıv´a v situac´ıch, kdy je tˇreba simulovat u ´ˇcinek konkr´etn´ıho nastaven´ı pro poˇc´ıtaˇc nebo uˇzivatele, nebo je tˇreba otestovat prioritu GPO, kdyˇz je u ´ˇcet uˇzivatele nebo poˇc´ıtaˇce pˇresouv´an do nov´eho um´ıstˇen´ı v r´amci Active Directory, pˇr´ıpadnˇe je pˇresouv´ an nebo pˇrid´ av´an do nov´e skupiny zabezpeˇcen´ı. 3
[6] Sluˇzba Windows Management Instrumentation (WMI) je implementace spr´ avy WBEM (Web-Based Enterprise Management) spoleˇcnosti Microsoft. Spr´ ava WBEM je iniciativa k ustanoven´ı standard˚ u pro pˇr´ıstup a sd´ılen´ı informac´ı spr´ avy v rozlehl´e s´ıti.
11
V pl´ anovac´ım reˇzimu RSoP simuluje aplikaci z´asad pomoc´ı Group Policy Directory Access Service (GPDAS) na ˇradiˇci dom´eny. GPDAS simuluje aplikaci GPO t´ım, ˇze pˇred´ av´ a GPO virtu´ aln´ım klientsk´ ym rozˇs´ıˇren´ım, kter´e pak zapisuj´ı RSoP data do lok´aln´ı datab´ aze CIMOM na ˇradiˇci dom´eny, odkud jsou pak vyˇcteny pˇr´ısluˇsn´ ym n´astrojem pro zobrazen´ı RSoP dat.
12
Kapitola 3
Rozˇ s´ıˇ ren´ı Group Policy 3.1
Klientsk´ e rozˇ s´ıˇ ren´ı
Jak jiˇz bylo zm´ınˇeno v pˇredchoz´ım textu, klientsk´e rozˇs´ıˇren´ı se implementuj´ı jako dll knihovny. Tato knihovna pak mus´ı implementovat a exportovat callback funkci ProcessGroupPolicy nebo ProcessGroupPolicyEx. ProcessGroupPolicyEx je nutn´e pouˇz´ıt v tom pˇr´ıpadˇe, ˇze chceme podporovat reˇzim protokolov´an´ı RSoP. ProcessGroupPolicyEx je podporov´ana aˇz od Windows XP, protoˇze RSoP bylo uvedeno aˇz v t´eto verzi Windows. Pokud je nutn´a funkˇcnost i pod verz´ı Windows 2000, je nutn´e implementovat i funkci ProcessGroupPolicy. Knihovna klientsk´eho rozˇs´ıˇren´ı by mˇela tak´e implementovat a exportovat funkce DllRegisterServer a DllUnregisterServer, kter´e registruj´ı (a odregistruj´ı) klientsk´e rozˇs´ıˇren´ı z registr˚ u zaps´ an´ım (smaz´ an´ım) pˇr´ısluˇsn´ ych kl´ıˇc˚ u a hodnot. K registraci pak slouˇz´ı utilita RegSvr32.exe, kter´e se pˇred´ a cesta k dll knihovnˇe. Odregistrace se prov´ad´ı zad´an´ım parametru /u.
3.1.1
Registrace Klientsk´ eho rozˇ s´ıˇ ren´ı
Kaˇzd´e klientsk´e rozˇs´ıˇren´ı mus´ı b´ yt registrov´ano na klientsk´e stanici. V kl´ıˇci HKEY LOCALMACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\ GPExtensions\ je pro rozˇs´ıˇren´ı nutn´e zapsat kl´ıˇc, jehoˇz jm´eno je GUID klientsk´eho rozˇs´ıˇren´ı. V tomto kl´ıˇci by pak mˇely b´ yt hodnoty popsan´e v tabulce 3.1.
3.1.2
Callback funkce ProcessGroupPolicy (ProcessGroupPolicyEx)
Tato funkce pokr´ yv´ a hlavn´ı funkˇcnost klientsk´eho rozˇs´ıˇren´ı, tedy zpracov´an´ı vˇsech GPO. Pˇri implementaci t´eto funkce je nutn´e vz´ıt na vˇedom´ı, ˇze funkce je vol´ana sluˇzbou winlogon (winlogon.exe / userenv.dll) pod lok´aln´ım syst´emov´ ym u ´ˇctem, jak´akoliv chyba tedy m˚ uˇze zp˚ usobit nestabilitu Windows - Napˇr´ıklad chybn´a pr´ace s pamˇet´ı m˚ uˇze v´est aˇz k ukonˇcen´ı procesu winlogon.exe, na coˇz reaguje Windows zobrazen´ım modr´e obrazovky s chybovou hl´aˇskou, ˇze proces winlogon.exe byl neoˇcek´avanˇe ukonˇcen. Vlastn´ı seznam GPO, kter´e se maj´ı aplikovat, je funkci pˇred´av´an jako obousmˇernˇe v´azan´ y seznam (vysvˇetleno u popisu parametr˚ u). Funkce m´a vracet hodnotu typu Win32 error code. Hodnota ERROR SUCCESS znamen´a, ˇze aplikace politiky byla u ´spˇeˇsn´a. Pokud v seznamu GPO objekt˚ u nebyla detekov´ana ˇz´adn´a zmˇena a je nutn´e zajistit znovu vol´ an´ı klientsk´eho rozˇs´ıˇren´ı, i pokud je v registrech nastaveno NoGPOListChanges, funkce m˚ uˇze
13
DllName
EnableAsynchronousProcessing
ExtensionEventSource
GenerateGroupPolicy
MaxNoGPOListChangesInterval
NoBackgroundPolicy NoGPOListChanges NoMachinePolicy NoSlowLink NotifyLinkTransition
NoUserPolicy PerUserLocalSettings ProcessGroupPolicy
ProcessGroupPolicyEx RequiresSuccessfulRegistry
hodnota typu REG EXPAND SZ obsahuj´ıc´ı cestu k dll knihovnˇe klientsk´eho rozˇs´ıˇren´ı, kter´a obsahuje callback funkci pokud je nastaveno na 1, callback funkce dokonˇcuje sv´e zpracov´an´ı asynchronnˇe a po dokonˇcen´ı zpracov´an´ı by mˇela zavolat funkci ProcessGroupPolicyCompleted nebo ProcessGroupPolicyCompletedEx (podle toho zda je callback funkce ProcessGroupPolicy nebo ProcessGroupPolicyEx ) hodnota typu REG MULTI SZ, kter´a specifikuje event source name a event log name pro klientsk´e rozˇs´ıˇren´ı (nen´ı podporov´ano pod Windows 2000) hodnota typu REG SZ, kter´a obsahuje jm´eno GenerateGroupPolicy callback funkce, kter´a slouˇz´ı ke generaci dat RSoP v pl´anovac´ım m´odu RSoP specifikuje maxim´aln´ı poˇcet minut, kdy se m˚ uˇze klientsk´e rozˇs´ıˇren´ı pˇreskoˇcit, pokud nebyla detekov´ ana ˇz´adn´a zmˇena v seznamu GPO. Pokud je limit pˇrekroˇcen, je rozˇs´ıˇren´ı vol´ano standardn´ım zp˚ usobem a nen´ı nastaven pˇr´ıznak GPO INFO FLAG NOCHANGES (viz d´ale u popisu parametr˚ u funkce ProcessGroupPolicy) pokud je nastaveno na 1, klientsk´e rozˇs´ıˇren´ı nen´ı vol´ ano, pokud se m´a aplikovat policy na pozad´ı pokud je nastaveno na 1, klientsk´e rozˇs´ıˇren´ı nen´ı vol´ ano, pokud nen´ı detekov´ana ˇz´adn´a zmˇena v seznamu GPO pokud je nastaveno na 1, klientsk´e rozˇs´ıˇren´ı nen´ı vol´ ano, pokud se m´a zpracov´avat ˇc´ast konfigurace poˇc´ıtaˇce pokud je nastaveno na 1, klientsk´e rozˇs´ıˇren´ı nen´ı vol´ ano, ’ pokud je detekov´ana pomal´a linka s´ıt ov´eho pˇripojen´ı zavol´a callback funkci klientsk´eho rozˇs´ıˇren´ı, aby bylo informov´ano, ˇze doˇslo ke zmˇenˇe rychlosti linky mezi aplikacemi policy pokud je nastaveno na 1, klientsk´e rozˇs´ıˇren´ı nen´ı vol´ ano, pokud se m´a zpracov´avat ˇc´ast konfigurace uˇzivatele Pokud je nastaveno na 1, nastaven´ı policy se m´a ukl´ adat v cache podle uˇzivatele a podle poˇc´ıtaˇce hodnota typu REG SZ, kter´a specifikuje jm´eno callback funkce ProcessGroupPolicy v klientsk´em rozˇs´ıˇren´ı, kter´ a se m´a volat pro zpracov´an´ı policy. Pokud je na Windows XP a novˇejˇs´ıch verz´ıch Windows pˇr´ıtomna i hodnota ProcessGroupPolicyEx, je pouˇzito jm´eno funkce uloˇzen´a v hodnotˇe ProcessGroupPolicyEx. specifikuje callback funci ProcessGroupPolicyEx, nen´ı podporov´ano na Windows 2000 pokud je nastaveno na 1, klientsk´e rozˇs´ıˇren´ı je vol´ano jen tehdy, pokud bylo u ´spˇeˇsnˇe zpracov´ano klientsk´e rozˇs´ıˇren´ı registry
Tabulka 3.1: Hodnoty definovan´e v registrech pro klientsk´e rozˇs´ıˇren´ı 14
vr´atit hodnotu ERROR OVERRIDE NOCHANGES. Vˇsechny ostatn´ı hodnoty znamenaj´ı, ˇze zpracov´an´ı selhalo. Group Policy engine pˇred´ av´ a callback funkci tyto parametry: 1. DWORD dwFlags - pˇr´ıznaky, m˚ uˇzou nab´ yvat tˇechto hodnot: (a) GPO INFO FLAG MACHINE - znaˇc´ı, ˇze by se mˇela aplikovat ˇc´ast konfigurace poˇc´ıtaˇce m´ısto ˇc´ asti konfigurace uˇzivatele. (b) GPO INFO FLAG BACKGROUND - znaˇc´ı, ˇze klientsk´e rozˇs´ıˇren´ı je vol´ano za u ´ˇcelem aplikov´ an´ı group policy na pozad´ı (co to je aplikace na pozad´ı je vysvˇetleno v pˇredchoz´ım textu) (c) GPO INFO FLAG ASYNC FOREGROUND - m´a se vykonat asynchronn´ı aplikace na popˇred´ı (tak´e vysvˇetleno v pˇredchoz´ım textu) (d) GPO INFO FLAG SLOWLINK - byla detekov´ana pomal´a linka (e) GPO INFO FLAG VERBOSE - rozˇs´ıˇren´ı by mˇelo zapsat do event logu podrobn´e informace (f) GPO INFO FLAG NOCHANGES - nebyly detekov´any ˇz´adn´e zmˇeny v seznamu GPO (g) GPO INFO FLAG LINKTRANSITION - byla detekov´ana zmˇena rychlosti linky mezi aplikacemi Group Policy (h) GPO INFO FLAG LOGRSOP TRANSITION - byla detekov´ana zmˇena v logov´an´ı dat RSoP mezi aplikac´ı pˇredchoz´ı politiky a aktu´aln´ı politiky (i) GPO INFO FLAG FORCED REFRESH - jedn´a se o vynucen´e aplikov´an´ı policy - mˇely by se aplikovat vˇsechny GPO nez´avisle na verzi GPO (po vol´an´ı gpupdate /force) (j) GPO INFO FLAG SAFEMODE BOOT - informuje o tom, ˇze syst´em Windows byl spuˇstˇen v nouzov´em reˇzimu 2. HANDLE hToken - token pro u ´ˇcet uˇzivatele nebo u ´ˇcet poˇc´ıtaˇce. Protoˇze klientsk´e rozˇs´ıˇren´ı bˇeˇz´ı pod lok´ aln´ım syst´emov´ ym u ´ˇctem, je nutn´e pouˇz´ıt tento token k pˇr´ıstupu k s´ıt’ov´ ym zdroj˚ um. 3. HKEY hKeyRoot - handle k registrov´emu kl´ıˇci HKEY LOCAL MACHINE nebo HKEY CURRENT USER (podle toho, zda se aplikuje GPO pro poˇc´ıtaˇc nebo uˇzivatele) 4. PGROUP POLICY OBJECT pDeletedGPOList - ukazatel, pˇres kter´ y se pˇred´av´a seznam smazan´ ych GPO, kter´e jsou implementov´any jako struktura GROUP POLICY OBJECT. Seznam je implementov´ an jako obousmˇernˇe v´azan´ y, to znamen´a, ˇze ve struktuˇre jsou ukazatele na pˇredchoz´ı i n´ asleduj´ıc´ı GPO, lze ho tak snadno proch´azet. GPO jsou uspoˇr´ ad´ any v poˇrad´ı ve kter´em se maj´ı zpracov´avat (to znamen´a, ˇze ty co maj´ı nastaven´e u linku Enforced jsou zaˇrazeny na konec apod) 5. PGROUP POLICY OBJECT pChangedGPOList - pˇres tento ukazatel jsou pˇred´av´any ukazatele GPO, kter´e se maj´ı aplikovat 6. ASYNCCOMPLETIONHANDLE pHandle - handle, kter´ y se pˇred´av´a pˇri vol´an´ı funkc´ı ProcessGroupPolicyCompleted a ProcessGroupPolicyCompletedEx, kter´e informuj´ı syst´em, ˇze klientsk´e rozˇs´ıˇren´ı dokonˇcilo asynchronn´ı aplikaci politiky. Pokud rozˇs´ıˇren´ı aplikaci nepodporuje, je hodnota tohoto atributu 0
15
7. BOOL* pbAbort - ukazatel na BOOL hodnotu, kter´a znaˇc´ı, jestli se m´a pokraˇcovat ve zpracov´ an´ı GPO. Pokud nabude hodnoty TRUE, klientsk´e rozˇs´ıˇren´ı m´a pˇreruˇsit zpracov´ an´ı GPO. V opaˇcn´em pˇr´ıpadˇe se pokraˇcuje ve zpracov´an´ı. (nast´av´a napˇr´ıklad pokud se uˇzivatel odhl´ as´ı nebo se vyp´ın´a poˇc´ıtaˇc) 8. PFNSTATUSMESSAGECALLBACK pStatusCallback - ukazatel na StatusMessageCallback funkci, kter´ a zobrazuje informaci v uˇzivatelsk´em rozhran´ı o aplikaci politiky, m˚ uˇze b´ yt null. N´asleduj´ıc´ı parametry jsou definov´any nav´ıc v ProcessGroupPolicyEx pro podporu logov´ an´ı RSoP dat: 9. IWbemServices* pWbemServices - definuje jmenn´ y prostor RSOP kam m´a klientsk´e rozˇs´ıˇren´ı zapsat data. Pokud je NULL, rozˇs´ıˇren´ı nem´a logovat RSOP 10. HRESULT* pRsopStatus - pˇres tento ukazatel rozˇs´ıˇren´ı vrac´ı n´avratov´ y k´od, kter´ y znaˇc´ı, zda bylo logov´ an´ı RSoP dat u ´spˇeˇsn´e
3.1.3
Struktura GROUP POLICY OBJECT
Tato struktura je deklarov´ ana v souboru userenv.h a poskytuje informace o jednotliv´ ych GPO v seznamu GPO. Struktura obsahuje dva ukazatele pNext a pPrev, kter´e umoˇzn ˇuj´ı spojen´ı v´ıce GPO do obousmˇern´eho seznamu, kter´ y se pak pˇred´av´a funkci ProcesGroupPolicy. Struktura m´ a tyto ˇcleny: 1. DWORD dwOptions - specifikuje pˇr´ıznaky linku. M˚ uˇze nab´ yvat tˇechto hodnot: (a) GPO FLAG DISABLE - GPO je zak´azan´ y (b) GPO FLAG FORCE - znaˇc´ı, ˇze nastaven´ı uloˇzen´e v tomto GPO se maj´ı aplikovat nez´ avisle na tom, zda se GPO zmˇenil od posledn´ı aplikace 2. DWORD dwVersion - ˇc´ıslo verze GPO, lze porovn´avat s minulou verz´ı GPO (kter´a je uloˇzen´ a v registrech) a tak detekovat, zda se objekt zmˇenil, a pˇr´ıpadnˇe optimalizovat t´ım, ˇze se nezmˇenˇen´e GPO pˇreskoˇc´ı 3. LPCTSTR lpDSPath - cesta k GPC ˇc´asti (v Active Directory) 4. LPCTSTR lpFileSysPath - cesta k GPT (v souborov´em syst´emu - SYSVOL) 5. LPCTSTR lpDisplayName - ˇretˇezec, kter´ y obsahuje zobrazovan´e jm´eno GPO (kter´e jsme zadali pˇri vytv´ aˇren´ı GPO) 6. TCHAR szGPOName[50] - obsahuje unik´atn´ı jm´eno, kter´e jednoznaˇcnˇe identifikuje GPO (GUID) 7. GPO LINK GPOLink - Specifikuje informaci, k ˇcemu je tento GPO pˇrilinkov´an: (a) GPLinkUnknown - nen´ı dostupn´a ˇz´adn´a informace o linku (b) GPLinkMachine - GPO je pˇrilinkov´an k lok´aln´ımu nebo vzd´alen´emu poˇc´ıtaˇci (c) GPLinkSite - GPO je pˇrilinkov´an k s´ıdlu
16
(d) GPLinkDomain - GPO je pˇrilinkov´an k dom´enˇe (e) GPLinkOrganizationalUnit - GPO je pˇrilinkov´an k organizaˇcn´ı jednotce 8. LPARAM lParam - User-supplied data. 9. struct GROUP POLICY OBJECT* pNext - ukazatel na n´asleduj´ıc´ı GPO v seznamu 10. struct GROUP POLICY OBJECT* pPrev - ukazatel na pˇredchoz´ı GPO v seznamu 11. LPTSTR lpExtensions - Obsahuje GUID klientsk´ ych rozˇs´ıˇren´ı a GUID rozˇs´ıˇren´ı GroupPolicy Object Editoru, kter´e uloˇzily data do GPO. 12. LPARAM lParam2 - User-supplied data. 13. LPTSTR lpLink - Cesta k s´ıdlu, dom´enˇe nebo organizaˇcn´ı jednotce, ke kter´e je GPO pˇrilinkov´ an. Pokud se jedn´ a o lok´aln´ı GPO hodnota je ”local” Pozn´ amka k sestavov´ an´ı dll knihovny klientsk´eho rozˇs´ıˇren´ı: Struktura GROUP POLICY OBJECT m´a jak ansi variantu GROUP POLICY OBJECTA tak i unicode variantu GROUP POLICY OBJECTW. Kter´a z nich se pouˇzije pˇri pˇrekladu se rozhodne podle toho, se kter´ ym k´ odov´ an´ım se pˇrekl´ad´a (v z´avislosti na tom, jestli je definov´ano makro UNICODE). Bohuˇzel ANSI varianta mi nefungovala. Pˇri pˇrekladu s nastaven´ ym k´odov´an´ım ANSI maj´ı pak atributy typu LPCTSTR obsahovat ˇretˇezce s ANSI k´odov´an´ım, ale ve skuteˇcnosti obsahovaly unicode ˇretˇezce. Pˇri pokusu o logov´an´ı tˇechto ˇretˇezc˚ u se to projev´ı t´ım, ˇze se zap´ıˇse jen prvn´ı znak, jelikoˇz za n´ım n´asleduje hned nulov´ y znak, protoˇze unicode znaky zab´ıraj´ı dva byty. Tento probl´em by se dal lehce vyˇreˇsit, bohuˇzel se ovˇsem projevuje i dalˇs´ı chyba, kter´ a se projevovala u ukazatele pNext. Tento ukazatel by mˇel b´ yt NULL, pokud je v seznamu pouze jeden GPO. Bohuˇzel ale nebyl a tak zpracov´an´ı zhavarovalo na chybˇe pˇr´ıstupu do pamˇeti, kdyˇz se proch´azel seznam GPO pomoc´ı cyklu. Proto doporuˇcuji pˇrekl´adat radˇeji jen s nastaven´ ym k´odov´an´ım Unicode.
3.2
Rozˇ s´ıˇ ren´ı Group Policy Object Editoru
Group Policy Object Editor 3.1 (GPOE) s´am o sobˇe ˇz´adnou funkˇcnost neobsahuje. Tu vykon´avaj´ı aˇz jeho rozˇs´ıˇren´ı, kter´e ukl´adaj´ı data do GPO. GPOE je implementov´an jako snap-in pro Microsoft Management Console (MMC) a jeho rozˇs´ıˇren´ı jsou tak´e moduly snapin pro tuto konzoli, kter´e rozˇsiˇruj´ı jmenn´ y prostor GPOE. Ten je organizov´an n´asleduj´ıc´ım zp˚ usobem: Na koˇrenov´ y uzel GPOE navazuj´ı uzly Konfigurace poˇc´ıtaˇce (Computer Configuration) a Konfigurace uˇzivatele (User Configuration). Jasnˇe je tak rozdˇeleno nastaven´ı, kter´e se aplikuje na poˇc´ıtaˇce a kter´e na uˇzivatele (tak jak bylo vysvˇetleno v pˇredchoz´ım textu). V obou uzlech se nach´ az´ı dalˇs´ı tˇri uzly: Nastaven´ı softwaru (Software settings), Nastaven´ı ˇ syst´emu Windows (Windows settings) a Sablony pro spr´ avu (Administrative Templates). Uzly Nastaven´ı softwaru a Nastaven´ı syst´emu Windows mohou obsahovat rozˇs´ıˇren´ı jak pro ˇ ˇc´ast Konfigurace poˇc´ıtaˇce tak i pro ˇc´ast Konfigurace uˇzivatele. Uzel Sablony pro spr´ avu obsahuje nastaven´ı, kter´e je zaloˇzeno na registrech, a m˚ uˇze b´ yt rozˇs´ıˇren pomoc´ı Administrativn´ıch ˇsablon, coˇz jsou speci´ aln´ı .adm soubory. GUID uzl˚ u, kter´e mohou b´ yt rozˇs´ıˇreny, jsou definov´ any v souboru gpedit.h.
17
Obr´ azek 3.1: Group Policy Object Editor Rozˇ s´ıˇ ren´ı GPOE Samotn´e rozˇs´ıˇren´ı GPOE je tedy snap-in pro MMC konzoli, kter´ y rozˇsiˇruje jeho jmenn´ y prostor. Pro v´ yvoj takov´eho snap-in existuj´ı prakticky dva zp˚ usoby implementace. Prvn´ı zp˚ usob je jen pro nejnovˇejˇs´ı verzi konzole MMC verze 3.0., druh´ y zp˚ usob je implementace standardn´ı dll knihovny v c++, kter´a jde pouˇz´ıt ve vˇsech verz´ıch MMC konzole. Implementace GPOE snap-inu v jazyce C# Pro verzi 3.0 MMC konzole se implementuj´ı snap-iny v jazyce C# pro platformu .NET. Pro implementaci z´ akladn´ı funkˇcnosti rozˇs´ıˇren´ı jmenn´eho prostoru staˇc´ı implementovat jen tˇr´ıdu zdˇedˇenou ze tˇr´ıdy NamespaceExtension a nastavit atribut ExtendsNodeTypeAttribute, kter´ y oznaˇcuje GUID prim´ arn´ıho uzlu, pod kter´ y se m´a pˇripojit n´aˇs uzel. V t´eto tˇr´ıdˇe pak pro nejjednoduˇsˇs´ı funkˇcnost staˇc´ı implementovat konstruktor, ve kter´em vytvoˇr´ıme nov´ y objekt tˇr´ıdy ScopeNode a pomoc´ı zdˇedˇen´e vlastnosti PrimaryNode ho pˇridat do jmenn´eho prostoru: ScopeNode extensionRootNode = new ScopeNode(); PrimaryNode.Children.Add(extensionRootNode); Toto n´ am zajist´ı velice z´ akladn´ı funkˇcnost - zobrazen´ı naˇseho rozˇs´ıˇren´ı ve stromu jmenn´eho prostoru.
18
Implementace GPOE snap-inu v jazyce C++ Druh´ y zp˚ usob psan´ı snap-in˚ u lze pouˇz´ıt ve vˇsech verz´ıch MMC konzole. Implementace takov´eho snap-in je vlastnˇe implementace COM serveru. Nejz´akladnˇejˇs´ı snap-in mus´ı implementovat MMC rozhran´ı IComponentData a IComponent, a nav´ıc jeˇstˇe dvˇe standardn´ı COM rozhran´ı IDataObject a IClassFactory. Pro kaˇzd´e dalˇs´ı rozˇs´ıˇren´ı funkˇcnosti (pˇrid´ an´ı tlaˇc´ıtek na panel, pˇrid´ an´ı poloˇzek do kontextov´eho menu apod.) je nutn´e implementovat dalˇs´ı pˇr´ısluˇsn´e rozhran´ı. Snap-in, kter´ y rozˇsiˇruje jmenn´ y prostor mus´ı b´ yt zaregistrov´ an v registrech na pˇr´ısluˇsn´ ych m´ıstech a mus´ı implementovat metodu IComponentData::Notify. MMC konzole vol´ a tuto metodu, kdyˇz uˇzivatel vybere uzel, kter´ y rozˇsiˇrujeme, a zas´ıl´ a zpr´avu MMCN EXPAND. Snap-in v reakci na tuto zpr´avu implementuje pˇrid´an´ı sv´ ych uzl˚ u pod rozˇsiˇrovan´ y uzel. Je tedy jasnˇe vidˇet, ˇze tento zp˚ usob implementace je mnohon´asobnˇe sloˇzitˇejˇs´ı neˇz pˇredchoz´ı. Komunikace rozˇ s´ıˇ ren´ı s GPOE Kromˇe toho ˇze snap-in rozˇsiˇruje jmenn´ y prostor GPOE (zobrazuje se v nˇem) mus´ı rozˇs´ıˇren´ı i nˇejak´ ym zp˚ usobem komunikovat s GPOE aby zjistilo informace o editovan´em GPO, cestu ke GPT (kam ukl´ adat data) a hlavnˇe tak´e informovat GPOE, ˇze jsme do GPO uloˇzili nˇejak´e data, aby GPOE mohl zapsat pˇr´ısluˇsn´e data do GPC (GUID klientsk´eho rozˇs´ıˇren´ı). Tyto funkce jsou implementov´ any v metod´ach rozhran´ı IGPEInformation. K tomuto rozhran´ı se ned´a bohuˇzel dostat, pokud se implementuje snap-in prvn´ım zp˚ usobem, tedy v C#. Pokud implementujeme rozˇs´ıˇren´ı GPOE druh´ ym zp˚ usobem, lze rozhran´ı z´ıskat n´asledovnˇe: Mus´ıme implementovat metodu IComponentData::Notify a reagovat na zpr´avu MMCN EXPAND, coˇz dˇel´ame, pokud se naˇse rozˇs´ıˇren´ı uˇz zobrazuje ve jmenn´em prostoru GPOE. Pokud tedy pˇrijde zpr´ ava MMCN EXPAND a parametr arg je nastaven na TRUE, m˚ uˇzeme rozhran´ı z´ıskat napˇr´ıklad do promˇenn´e m pGPTInformation pomoc´ı vol´an´ı (lpDataObject je parametr metody IComponentData::Notify): lpDataObject->QueryInterface(IID_IGPEInformation, (LPVOID *)&m_pGPTInformation); Ze tohoto zp˚ usobu z´ısk´ an´ı rozhran´ı je jasn´e, ˇze nelze pouˇz´ıt COM Interop1 a zpˇr´ıstupnit tak rozhran´ı IGPEInformation v ˇr´ızen´em k´odu a implementovat snap-in v C#. Pokud tedy chceme implementovat rozˇs´ıˇren´ı GPOE, mus´ıme pouˇz´ıt druh´ y znaˇcnˇe sloˇzitˇejˇs´ı zp˚ usob implementace v C/C++.
3.3 3.3.1
Implementace podpory RSoP Definov´ an´ı RSoP sch´ ematu
Kaˇzd´e klientsk´e rozˇs´ıˇren´ı mus´ı definovat sch´ema pro RSoP data, kter´a bude ukl´adat do datab´aze CIMOM. Tˇr´ıda objekt˚ u, kter´e se do t´eto datab´aze ukl´adaj´ı, se vytvoˇr´ı jako tˇr´ıda zdˇedˇen´ a od tˇr´ıdy RSOP PolicySetting, kter´a jiˇz obsahuje z´akladn´ı atributy pro RSoP (creationTime, GPOID, id, name, precedence, SOMID). V t´eto zdˇedˇen´e tˇr´ıdˇe je nutn´e definovat atributy, kter´e jsou relevantn´ı k dat˚ um klientsk´eho rozˇs´ıˇren´ı, a tak´e znovu definovat atributy id a precedence jako kl´ıˇce(key). Definice t´eto tˇr´ıdy se zapisuje do soubor˚ u .MOF (Managed Object Format), pomoc´ı speci´aln´ıho jazyka podobn´eho c++, kter´ y vych´az´ı z IDL 1
COM Interop umoˇznuje pouˇzit´ı st´ avaj´ıc´ıch COM objekt˚ u v ˇr´ızen´em k´ odu aplikac´ı .NET
19
(Interface Definition Language). Po vytvoˇren´ı .MOF souboru je pak nutn´e tento soubor zkompilovat pˇri instalaci klientsk´eho rozˇs´ıˇren´ı a t´ım jej zahrnout do jmenn´eho prostoru WMI. Ke kompilaci .MOF soubor˚ u slouˇz´ı program mofcomp.exe. Pˇr´ıklad takov´e zdˇedˇen´e tˇr´ıdy: // RSOP_SamplePolicySetting // Comment: Sample class for GroupPolicy extension // [ Description("Sample class descritption") ] class RSOP_SamplePolicySetting : RSOP_PolicySetting { [key, Description("Inherited from RSOP_PolicySetting"), Read, DisplayName("ID")] string id; [key, Description("Inherited from RSOP_PolicySetting"), Read, DisplayName("Precedence")] uint32 precedence; [Description("Sample string value"), Read, DisplayName("string value")] string stringValue = ""; [Description("Sample integer value"), Read, DisplayName("integer value")] uint32 integerValue = 0; [Description("Sample array of bytes"), Read, DisplayName("byte array")] uint8 byteArray[]; [Description("Sample boolean value"), Read, DisplayName("boolean value")] boolean booleanValue = false; };
3.3.2
Podpora protokolovac´ıho m´ odu RSoP v klientsk´ em rozˇ s´ıˇ ren´ı
Jak jiˇz bylo zm´ınˇeno v kapitole 3.1.2, pro podporu protokolovac´ıho m´odu je nutn´e implementovat funkci ProcessGroupPolicyEx. Pro zaps´an´ı RSoP dat je nejprve nutn´e z´ıskat pˇr´ıstup k naˇs´ı tˇr´ıdˇe RSOP SamplePolicySetting a to pomoc´ı vol´an´ı metody GetObject objektu pWbemServices, kter´ y byl jako parametr pˇred´an funkci ProcessGroupPolicyEx: IWbemClassObject* pClass; HRESULT hr = pWbemServices->GetObject( SysAllocString(L"RSOP_SamplePolicySetting"), 0L, NULL, &pClass, NULL );
20
D´ale je pak nutn´e vytvoˇrit novou instanci naˇs´ı tˇr´ıdy, coˇz uˇcin´ıme pomoc´ı vol´an´ı metody SpawnInstance: IWbemClassObject *pInstance = NULL; HRESULT hr = pClass->SpawnInstance( 0, &pInstance ); Pokud jiˇz m´ ame vytvoˇren´ y nov´ y objekt, m˚ uˇzeme do nˇej zapisovat RSoP data pomoc´ı vol´ an´ı metody Put. Vˇsechny typy dat se pˇred´avaj´ı t´eto metodˇe jako typ VARIANT. Napˇr´ıklad hodnotu vlastnosti booleanValue m˚ uˇzeme zapsat takto: VARIANT var; var.vt = VT_BOOL; var.boolVal = VARIANT_TRUE; hr = pInstance->Put( L"booleanValue", 0, &var, 0 ); Pokud jiˇz jsou uloˇzeny vˇsechny atributy, m˚ uˇzeme objekt uloˇzit do datab´aze pomoc´ı vol´ an´ı metody PutInstance: hr = pWbemServices->PutInstance( pInstance, WBEM_FLAG_CREATE_OR_UPDATE, NULL, NULL );
3.3.3
Podpora pl´ anovac´ıho m´ odu RSoP v klientsk´ em rozˇ s´ıˇ ren´ı
Pro podporu pl´ anovac´ıho m´ odu RSoP v klientsk´em rozˇs´ıˇren´ı je nutn´e implementovat a exportovat funkci GenerateGroupPolicy. Tato funkce je vol´ana sluˇzbou Group Policy Data Access Service, kter´ a simuluje aplikaci GPO. Funkce GenerateGroupPolicy m´a tyto atributy: 1. DWORD dwFlags - pˇr´ıznaky, m˚ uˇzou nab´ yvat tˇechto hodnot: (a) GPO INFO FLAG SLOWLINK - pokud je nastaven tento pˇr´ıznak, m´a se simulovat pˇripojen´ı pˇres pomalou linku (b) GPO INFO FLAG VERBOSE - rozˇs´ıˇren´ı by mˇelo zapsat do event logu podrobn´e informace 2. BOOL* pbAbort - pokud je tento parametr nastaven na TRUE, rozˇs´ıˇren´ı m´a okamˇzitˇe ukonˇcit zpracov´ an´ı 3. WCHAR* pwszSite - ukazatel na ˇretˇezec, kter´ y obsahuje jm´eno s´ıtˇe 4. PRSOP TARGET pComputerTarget - ukazatel na strukturu RSOP_TARGET. Tento parametr m˚ uˇze b´ yt NULL, ale pokud je NULL, je poˇzadov´ana nastaven´a atribut pUserTarget 5. PRSOP TARGET pUserTarget - ukazatel na strukturu RSOP_TARGET. Tento parametr m˚ uˇze b´ yt NULL, ale pokud je NULL, je poˇzadov´ana nastaven´a atribut pComputerTarget Vlastn´ı seznam GPO objekt˚ u, kter´e jsou nutn´e pro simulaci aplikace GPO, je pˇredav´ an v r´amci stuktury RSOP_TARGET, kter´a obsahuje tyto atributy: 1. WCHAR* pwszAccountName - ukazatel na ˇretˇezec, kter´ y obsahuje jm´eno u ´ˇctu poˇc´ıtaˇce nebo uˇzivatele 21
2. WCHAR* pwszNewSOM - ukazatel na ˇretˇezec, kter´ y obsahuje novou dom´enu nebo novou organizaˇcn´ı jednotku, kter´e je ˇclenem u ´ˇcet v atributu pwszAccountName 3. SAFEARRAY* psaSecurityGroups - ukazatel na pole, kter´e obsahuje skupiny zabezpeˇcen´ı 4. PRSOPTOKEN pRsopToken - ukazatel na RSOPTOKEN, kter´ y je nutn´e pouˇz´ıt pˇri vol´ an´ı funkc´ı RSoPAccessCheckByType a RSoPFileAccessCheck 5. PGROUP POLICY OBJECT pGPOList - ukazatel na seznam GPO objekt˚ u, tento seznam se proch´ az´ı stejnˇe jako ve funkci ProcessGroupPolicy 6. IWbemServices* pWbemServices - definuje jmenn´ y prostor RSOP kam m´a klientsk´e rozˇs´ıˇren´ı zapsat RSoP data RSoP data se zapisuj´ı stejn´ ym zp˚ usobem, jako v pˇr´ıpadˇe protokolovac´ıho m´odu. Opˇet je nutn´e vyuˇz´ıt atribut pWbemServices. Pokud je nav´ıc pouˇzito i stejn´e sch´ema, je postup naprosto stejn´ y jako v pˇredchoz´ı kapitole 3.3.2
3.3.4
Rozˇ s´ıˇ ren´ı snap-inu V´ ysledn´ a sada z´ asad
MMC snap-in V´ysledn´ a sada z´ asad slouˇz´ı k zobrazen´ı RSoP dat. Tento snap-in m´a prakticky stejnou architekturu jako Group Policy Object Editor, takˇze je v´ yhodn´e pouˇz´ıt jiˇz existuj´ıc´ı snap-in pro GPOE a jen do nˇej dopsat podporu pro zobrazen´ı dat RSoP, kter´e se zobraz´ı v jiˇz st´ avaj´ıc´ım uˇzivatelsk´em rozhran´ı, kter´e samozˇrejmˇe mus´ı b´ yt pˇr´ıstupn´e pouze v reˇzimu pro ˇcten´ı. Postup pro implementaci tohoto snap-inu je tedy podobn´ y implementaci rozˇs´ıˇren´ı pro Group Policy Object Editor, ale pokud pˇrid´av´ame podporu pro RSoP do jiˇz st´avaj´ıc´ıho rozˇs´ıˇren´ı pro GPOE, je vhodn´e pro snap-in zaregistrovat pod druh´ ym Class ID (CLSID), aby se dalo v k´ odu rozeznat (konkr´etnˇe ve funkci DllGetClassObject), ve kter´em m´odu snap-in bˇeˇz´ı a t´ım patˇriˇcnˇe upravit uˇzivatelsk´e rozhran´ı. Komunikace rozˇ s´ıˇ ren´ı se snap-inem V´ ysledn´ a sada z´ asad Kromˇe pˇrid´ an´ı naˇseho rozhran´ı do jmenn´eho prostoru snap-inu V´ysledn´ a sada z´ asad je tak´e nutn´e s t´ımto snap-inem komunikovat. K tomu slouˇz´ı rozhran´ı IRSOPInformation. Pˇr´ıstup k tomuto rozhran´ı lze z´ıskat stejn´ ym zp˚ usobem, jako rozhran´ı IGPEInformation v pˇr´ıpadˇe rozˇs´ıˇren´ı GPOE, tedy pomoc´ı vol´an´ı metody QueryInterface objektu lpDataObject, kter´ y jsme z´ıskali, kdyˇz MMC konzole volala naˇsi implementaci metody IComponentData::Notify, jej´ıˇz prostˇrednictv´ım n´am byla zasl´ana zpr´ava MMCN_EXPAND. Z rozhran´ı IRSOPInformation budeme potˇrebovat zejm´ena metodu GetNamespace, pomoc´ı n´ıˇz z´ısk´ame ˇretˇezec obsahuj´ıc´ı jmenn´ y prostor, kde jsou uloˇzeny RSoP data pro dan´ y poˇc´ıtaˇc nebo uˇzivatele. K tomuto jmenn´emu prostoru se pak lze pˇripojit pomoc´ı metody IWbemLocator:: ConnectServer (objekt WbemLocator z´ısk´ame standardn´ım zp˚ usobem pomoc´ı vol´an´ı funkce CoCreateInstance) a t´ım z´ısk´ ame pˇr´ıstup k rozhran´ı IWbemServices, jehoˇz metody vyuˇzijeme pˇri z´ısk´ av´ an´ı konkr´etn´ıch RSoP objekt˚ u. Pro tento u ´ˇcel nejprve zavol´ame metodu IWbemServices::ExecQuery, pomoc´ı kter´e m˚ uˇzeme vyhledat objekty urˇcit´e tˇr´ıdy. Samotn´e hled´an´ı se prov´ ad´ı pomoc´ı jazyka WQL (WMI Query Language), coˇz je podmnoˇzina jazyka ANSI SQL (SQL 92). Tento jazyk nem´a podporu pro modifikace, to znamen´a ˇze nepodporuje pˇr´ıkazy INSERT a UPDATE. Vˇsechny objekty naˇs´ı tˇr´ıdy pak lze z´ıskat pomoc´ı dotazu SELECT * FROM RSOP SamplePolicySetting. Metoda IWbemServices::ExecQuery ovˇsem
22
nevrac´ı pˇr´ımo hledan´e objekty, ale vrac´ı n´am ukazatel na rozhran´ı IEnumWbemClassObject, kter´e pouˇzijeme pro proch´ azen´ı objekt˚ u odpov´ıdaj´ıc´ı pˇr´ısluˇsn´emu WQL dotazu. Konkr´etnˇe pouˇzijeme metodu IEnumWbemClassObject::Next, kter´a vrac´ı jednu nebo v´ıce instanc´ı z v´ ysledku (objekty se ukl´ adaj´ı do pole, proto je moˇzn´e zavolat tuto metodu pro z´ısk´an´ı v´ıce instanc´ı). Vlastn´ı objekt je pak reprezentov´an stejnˇe jako v pˇr´ıpadˇe klientsk´eho rozˇs´ıˇren´ı, kter´e do nˇej data zapisovalo, pomoc´ı rozhran´ı IWbemClassObject. Pro z´ısk´an´ı konkr´etn´ı hodnoty nˇejak´eho atributu pak lze zavolat metodu IWbemClassObject::Get, pˇriˇcemˇz hodnoty se opˇet vracej´ı jako typ VARIANT. Po skonˇcen´ı zpracov´an´ı RSoP dat nesm´ıme zapomenout uvolnit enumerator v´ ysledku pomoc´ı metody IEnumWbemClassObject::Release.
23
Kapitola 4
N´ avrh a implementace rozˇ s´ıˇ ren´ı pro spr´ avu syst´ emu AVG 4.1
Struˇ cn´ y popis syst´ emu konfigurace AVG
Konfigurace AVG je uloˇzena v konfiguraˇcn´ıch souborech .cfg, kter´e se standardnˇe nach´azej´ı v adres´ aˇri C:\Documents and Settings\All Users\Data aplikac´ ı\avg8\Cfg. K tˇemto soubor˚ um a cel´e konfiguraci je moˇzn´e pˇristupovat pomoc´ı nˇekolika metod definovan´ ych v rozhran´ıch IAvgConfigManager a IAvgConfig. Metody tˇechto rozhran´ı jsou implementov´any v knihovnˇe avgcfgx.dll, kter´a je souˇc´ast´ı instalace AVG. Struktura konfigurace AVG Vˇsechny konfiguraˇcn´ı hodnoty jsou uloˇzeny v nˇekolika stromov´ ych struktur´ach. Kaˇzd´ y tento strom ma sv˚ uj koˇren (root). Rozdˇelen´ı konfigurace do v´ıce strom˚ u oddˇeluje r˚ uzn´e konfigurace ˇc´ ast´ı syst´emu AVG. Napˇr´ıklad koˇren krnl obsahuje konfiguraci j´adra AVG (jako je napˇr´ıklad konfigurace rezidentn´ıho ˇs´ıtu). Existuje mnoho dalˇs´ıch root˚ u pro dalˇs´ı ˇc´asti syst´emu AVG. Kaˇzd´ y root obsahuje obecnˇe v´ıce instanc´ı konfigurac´ı. Vˇetˇsina koˇren˚ u vˇcetnˇe krnl obsahuje pouze jednu instanci (u toho koˇrenu v´ıce instanc´ı nem´a smysl), ale napˇr´ıklad pro konfigurace scan˚ u existuje v´ıce instanc´ı. Typy konfiguraˇ cn´ıch hodnot Kaˇzd´a konfiguraˇcn´ı poloˇzka je urˇcit´eho typu. Tˇechto z´akladn´ıch typ˚ u je pouze ˇsest: 1. BOOL - boolovsk´ y typ, m˚ uˇze nab´ yvat pouze hodnoty TRUE a FALSE 2. DWORD - celoˇc´ıseln´ y typ 3. STRING - ˇretˇezec znak˚ u 4. DATE - typ, jehoˇz hodnoty urˇcuj´ı datum a ˇcas 5. MULTISTRING - pole ˇretˇezc˚ u 6. BYTEARRAY - pole byt˚ u, pouˇz´ıv´a se pro uloˇzen´ı ostatn´ıch dat v bin´arn´ı podobˇe
24
4.2
Uloˇ zen´ı konfiguraˇ cn´ıch dat v GPO
Soubory s konfigurac´ı v GPT Pro uloˇzen´ı dat v GPO byla zvolena ˇc´ast GPT, tedy uloˇzen´ı dat v souborov´em syst´emu. Tato moˇznost byla zvolena hlavnˇe s ohledem na jednoduˇsˇs´ı implementaci, kdy k pˇr´ıstup˚ um k dat˚ um staˇc´ı vyuˇz´ıt standardn´ı funkce pro pˇr´ıstup k soubor˚ um. V r´amci GPT tak bude pˇrid´an adres´ aˇr AVG, kter´ y bude obsahovat jednotliv´e soubory s konfiguracemi. Kaˇzd´ y tento soubor bude pˇredstavovat jednu konkr´etn´ı instanci konfigurace pro dan´ y koˇren. Jako jm´eno souboru byl zvolen n´ azev koˇrenu, pak n´asleduje teˇcka a za n´ı ˇc´ıslo konfiguraˇcn´ı instance. Jako pˇr´ıpona byla zvolena pˇr´ıpona .dat. Form´ at .dat soubor˚ u V kaˇzd´em souboru je nutn´e m´ıt pro jednotliv´e konfiguraˇcn´ı hodnoty n´azev hodnoty, typ hodnoty a samotnou hodnotu. Vzhledem k tˇemto fakt˚ um byl navrhnut co nejjednoduˇsˇs´ı form´at uloˇzen´ı dat. Ty se tedy ukl´adaj´ı v textov´e formˇe, kde kaˇzd´e jedn´e hodnotˇe pˇr´ısluˇs´ı jeden ˇr´ adek textov´eho souboru. Jako n´azev k hodnoty se pouˇzije cel´a cesta v konfiguraˇcn´ım stromu a to zejm´ena z toho d˚ uvodu, ˇze tento cel´ y n´azev lze pouˇz´ıt v metod´ach rozhran´ı IAvgConfig. Za cel´ ym n´ azvem hodnoty pak n´asleduje typ hodnoty uzavˇren´ y v hranat´ ych z´avork´ ach ([ ]). Za pravou hranatou z´avorkou pak n´asleduje znak =, za kter´ ym je uvedena konkr´etn´ı textov´ a reprezentace hodnoty. Zp˚ usob reprezentace hodnoty z´avis´ı na typu hodnoty. Pro typ BOOL je povolena pouze hodnota T nebo F, pro DWORD je to sekvence ˇc´ıslic 0 aˇz 9, pro STRING jsou pˇr´ıpustn´e ASCII znaky. Typ DATE mus´ı b´ yt ve form´atu YYYY-MMDD/HH-MM-SS (rok, mˇes´ıc, den, hodina, minuta, sekunda) nebo m˚ uˇze obsahovat hodnotu INVALIDTIME, kter´ a oznaˇcuje neplatn´e datum. Typ MULTISTRING je reprezentov´an jedn´ım ˇretˇezecem, kter´ y obsahuje vˇsechny podˇretˇezce. Ty jsou oddˇeleny znakem |. Pokud je nutn´e m´ıt znak | v ˇretˇezci, pouˇzije se zpˇetn´e lom´ıtko \|. Dva po sobˇe n´asleduj´ıc´ı znaky | pak znamenaj´ı pr´ azdn´ y podˇretˇezec. Jelikoˇz poloˇzky typu BYTEARRAY m˚ uˇzou obsahovat jak´ekoliv hodnoty, tedy i hodnoty jako je konec ˇr´adku, byl pro tento typ zvolen zp˚ usob uloˇzen´ı dat zak´odov´ an´ım do form´ atu Base64. Pˇ r´ıklad hodnoty konfigurace Pˇr´ıklad jedn´e hodnoty konfigurace (povolen´ı scanov´an´ı komunikace v s´ıti ICQ): krnl.networkscanner.imscanner.icq.enabled[BOOL]=T
4.3
N´ avrh a implementace klientsk´ eho rozˇ s´ıˇ ren´ı
Klientsk´e rozˇs´ıˇren´ı implementuje z´akladn´ı funkˇcnost rozˇs´ıˇren´ı Group Policy. Jeho hlavn´ı ˇcinnost´ı je ˇcten´ı konfiguraˇcn´ıch dat ze seznamu GPO objekt˚ u a aplikov´an´ı konfigurace na syst´em AVG. Dalˇs´ı ˇcinnost´ı je spojen´ı dat z v´ıce GPO, kde jsou v z´asadˇe pouˇzity z´akladn´ı principy Group Policy, kdy GPO um´ıstˇen´e ke konci seznamu GPO pˇrepisuj´ı nastaven´ı pˇredchoz´ıch GPO. J´ adro klientsk´ eho rozˇ s´ıˇ ren´ı Jak jiˇz bylo nˇekolikr´ at zm´ınˇeno v pˇredchoz´ım textu, klientsk´e rozˇs´ıˇren´ı je implementov´ano jako dll knihovna. Vˇsechny hlavn´ı exportovan´e funkce t´eto knihovny jsou implementov´any 25
v souboru cse.cpp - je zde tedy implementov´ana z´akladn´ı funkce ProcessGroupPolicy, funkce DllMain - vstupn´ı bod do dll knihovny a registraˇcn´ı a odregistraˇcn´ı funkce DllRegisterServer a DllUnregisterServer. Funkce DllMain je vol´ ana pˇri inicializaci dll knihovny. Je v n´ı implementov´ana inicializace logger˚ u, coˇz jsou objekty zapouzdˇruj´ıc´ı pr´aci s logy. K samotn´emu logov´an´ı je vyuˇzito logger˚ u syst´emu AVG, kter´e jsou implementov´any v dll knihovnˇe, kter´a je souˇc´ast´ı instalace AVG. Pokud inicializace log˚ u selˇze, vrac´ı funkce DllMain hodnotu FALSE, ˇc´ımˇz d´ av´ a najevo, ˇze se inicializace nezdaˇrila. Knihovna userenv.dll pak zpr´avu o ne´ uspˇeˇsn´e inicializaci zap´ıˇse do Windows Event Logu, ˇc´ımˇz je administr´ator upozornˇen, ˇze je nˇeco ˇspatnˇe s instalac´ı AVG. Pokud se inicializace logu zdaˇrila, jsou veˇsker´e chybov´e, varovn´e i informaˇcn´ı hl´ aˇsky, kter´e vznikaj´ı pˇri zpracov´an´ı z´asad, zapisov´any pomoc´ı loggeru do souboru avggp.log, kter´ y se nach´ az´ı ve stejn´em adres´aˇri jako ostatn´ı logy syst´emu AVG, tedy standardnˇe v adres´ aˇri C:\Documents and Settings\All Users\Data aplikac´ ı\avg8\log. Implementace zpracov´ an´ı GPO Funkce ProcessGroupPolicy pak podle nastaven´ ych pˇr´ıznak˚ u vyhodnot´ı, zda je nutn´e aplikovat konfiguraci (pokud nen´ı detekov´ana ˇz´adn´a zmˇena od pˇredchoz´ıho zpracov´an´ı z´asad, nastaven´ı se znovu neaplikuje). Funkce pomoc´ı cyklu proch´az´ı seznam GPO a sestavuje seznam cest k jednotliv´ ym GPT. Tento seznam pˇred´av´a GPOhandleru, coˇz je tˇr´ıda zapouzdˇruj´ıc´ı pr´ aci s GPO. Seznam GPT je pˇred´an pomoc´ı metody GPOhandler::ReadAndMergeGPO, kter´ a pak pˇreˇcte nastaven´ı ze vˇsech GPO a vˇsechna nastaven´ı do jednoho seznamu hodnot. Jelikoˇz m˚ uˇze b´ yt v seznamu v´ıce GPO objekt˚ u, vznikaj´ı konflikty. Jako pˇrednostn´ı hodnota je vybr´ ana ta, kter´a je zpracov´av´ana jako posledn´ı. Samotn´e ˇcten´ı soubor˚ u je implementov´ ano ve tˇr´ıdˇe AvgGpoParser. V metodˇe GPOhandler::ReadAndMergeGPO se pak tento parser vol´ a na vˇsechny .dat soubory adres´aˇri AVG v r´amci vˇsech GPO. Samotn´e parsov´ an´ı je implementov´ ano v metodˇe AvgGpoParser::ParseFile, kde pro kaˇzdou konfiguraˇcn´ı poloˇzku vytv´ aˇr´ı objekt tˇr´ıdy AvgGpoParserItem. Objekt t´eto tˇr´ıdy ma konfiguraˇcn´ı hodnotu uloˇzenou jako ˇretˇezec. Pro pˇr´ıstup ke konkr´etn´ım typ˚ um jsou implementov´any metody GetBoolValue, GetDWordValue, GetStringValue, GetDateValue, GetMultiStringValue a GetByteArrayValue. Tyto metody pˇrev´adˇej´ı intern´ı typ na konkr´etn´ı pˇr´ısluˇsn´ y typ, kter´ y je pouˇziteln´ y pro metody rozhran´ı IAvgConfig. Kaˇzd´ y objekt tˇr´ıdy AvgGpoParserItem je pak uloˇzen v asociativn´ım poli, kde je pak uloˇzen ˇretˇezec obsahuj´ıc´ı n´azev hodnoty konfigurace a pak samotn´ y ukazatel na objekt AvgGpoParserItem. Aplikace konfigurace Aplikace z´ asad je implementov´ ana v metodˇe GPOhandler::ApplyGP. V t´eto metodˇe je tak´e implementov´ an pˇr´ıstup ke konfiguraci AVG. Ten je impelementov´an pomoc´ı intern´ıho mechanismu AVG, kter´ y je principi´alnˇe podobn´ y technologii COM. Tohoto mechanismu je vyuˇzito k pˇr´ıstupu k rozhran´ı IAvgConfigManager, kter´e zapouzdˇruje celou konfiguraci AVG. Pomoc´ı jeho metod lze z´ıskat seznam vˇsech koˇren˚ u konfigurace, id tˇechto koˇren˚ u a samozˇrejmˇe tak´e seznam konfiguraˇcn´ıch instanc´ı pro kaˇzd´ y koˇren. Na z´akladˇe id rootu a id konfiguraˇcn´ı instance lze z´ıskat pˇr´ıstup k rozhran´ı IAvgConfig, kter´e zapouzdˇruje pr´aci s jednou konfiguraˇcn´ı instanc´ı. Toto rozhran´ı obsahuje metody pro z´apis i ˇcten´ı konfiguraˇcn´ıch hodnot pro vˇsechny moˇzn´e typy pouˇziteln´e pro konfiguraci. Nav´ıc jsou zde tak´e metody pro nastaven´ı r˚ uzn´ ych pˇr´ıznak˚ u, kter´e znemoˇzn´ı uˇzivateli editaci tˇechto hodnot skrze uˇzivatelks´e rozhran´ı AVG. Metoda ApplyGP tedy proch´az´ı asociativn´ı pole hodnot konfigurac´ı, na z´ akladˇe jm´ena rootu a jm´ena hodnoty z´ısk´a id hodnoty a pak podle 26
pˇr´ısluˇsn´eho typu hodnoty vol´ a konkr´etn´ı metodu rozhran´ı IAvgConfig pro uloˇzen´ı konkr´etn´ı hodnoty (napˇr´ıklad pro typ bool vol´a metodu putBoolValue). Pokud dojde pˇri ukl´ad´ an´ı k chybˇe, je chybov´ a hl´ aˇska zaps´ ana do logu.
4.4
N´ avrh a implementace rozˇ s´ıˇ ren´ı GPOE
Pˇri n´avrhu rozˇs´ıˇren´ı Group Policy Object Editoru byla snaha o maxim´aln´ı vyuˇzit´ı jiˇz existuj´ıc´ıch komponent, zejm´ena pak bylo pouˇzito komponenty tzv. ”Advaced GUI”, coˇz je dll knihovna (guiadv.dll), ve kter´e je implementov´ano uˇzivatelsk´e rozhran´ı pokroˇcil´eho nastaven´ı AVG (viz obr´ azek 4.3). Funkˇcnost snap-inu je tedy pouze ta, ˇze pomoc´ı rozhran´ı IGPEInformation z´ısk´ a poˇzadovan´e u ´daje od GPOE (cestu ke GPT), pˇreˇcte u ´daje z GPO (pokud se nejedn´ a o novˇe vytvoˇren´ y GPO) a pˇred´a tyto u ´daje knihovnˇe guiadv.dll. Samotn´e pˇred´an´ı konkr´etn´ı konfigurace se dˇeje pomoc´ı tzv. Proxy, coˇz je tˇr´ıda, kter´a zprostˇredkov´ av´ a komunikaci s Advanced GUI. Samotn´e naˇc´ıt´an´ı a ukl´ad´an´ı dat konfigurace m´a na starosti tzv. Manager, kter´ y vznikne implementac´ı tˇr´ıdy zdˇedˇen´e z abstraktn´ı tˇr´ıdy CAvgManagerBase. Nav´ıc manager poskytuje proxy metadata - popis vˇsech konfiguraˇcn´ıch hodnot, jejich typy a defaultn´ı hodnoty. Jako proxy vrstva byla pˇri implementaci vyuˇzita proxy vrstva CAdminProxyUI implementovan´ a v r´amci projektu AVG Admin 1 (ten pak vyuˇz´ıv´a Protocol Manager, coˇz je tak´e implementace CAvgManagerBase, kter´a ovˇsem ˇcte data ze s´ıtˇe). Tato architektura je pak struˇcnˇe zachycena na sch´ematu 4.1.
Obr´ azek 4.1: Tok dat mezi GPO a AdvGUI Cel´ y n´ avrh a implementace jsou rozdˇeleny do dvou vˇetˇs´ıch ˇc´ast´ı: Implementace samotn´eho snap-inu pro Group Policy Object Editor a implementace GPmanageru, kter´ y m´a na starosti naˇcten´ı a ukl´ ad´ an´ı dat do GPO.
4.4.1
Implementace snap-inu pro GPOE
Pˇri implementaci snap-inu jsem vych´azel z pˇr´ıklad˚ u implementac´ı snap-in˚ u pro MMC kon2 zoli, kter´e jsou dostupn´e v Platform SDK . Zdrojov´e k´ody tˇechto pˇr´ıklad˚ u jsem pak vyuˇzil k implementaci z´ akladn´ı funkˇcnosti snap-inu pro GPOE. 1
AVG Admin je n´ astroj pro vzd´ alenou spr´ avu AVG, pˇriˇcemˇz k nastaven´ı se pouˇz´ıv´ a datab´ azov´ y server, ke kter´emu se pˇripojuj´ı klienti AVG pˇres TCP/IP 2 R Server 2003 SP1 Platform SDK a starˇ Tyto pˇr´ıklady jsou dostupn´e pouze ve verzi Windows s´ıch, ve R Windows Server R 2003 R2 Platform SDK jsou jiˇ Microsoft z dostupn´e pouze pˇr´ıklady pro konzoli MMC 3.0 napsan´e v jazyce C#
27
Implementace snap-inu pro GPOE jako implementace COM serveru Jak jiˇz bylo ˇreˇceno, snap-in pro MMC je COM server, kter´ y poskytuje pˇr´ıstup MMC konzoli k implementaci nˇekolika rozhran´ı. Vstupn´ı bod do snap-inu je v souboru BaseSnap.cpp, ve kter´em je implementov´ano rozhran´ı IClassFactory jako tˇr´ıda CClassFactory. Vol´an´ım metody CClassFactory::CreateInstance je pak vytvoˇrena instance tˇr´ıdy CComponentData, coˇz je implementace rozhran´ı IComponentData, kter´ a se nach´az´ı v souboru CompData.cpp. V t´eto tˇr´ıdˇe pak je implementov´ ana ˇrada metod, kter´e jsou vol´any konzol´ı MMC pro pr´aci s tzv. Stromem konzoly, coˇz je panel v lev´e ˇc´ asti konzoly obsahuj´ıc´ı strom vˇsech poloˇzek (anglicky se tato ˇc´ast GUI MMC naz´ yv´ a Scope Pane). Pro pr´ aci s hlavn´ı ˇc´ asti uˇzivatelsk´eho rozhran´ı MMC (anglicky naz´ yvanou Result Pane) slouˇz´ı rozhran´ı IComponent. kter´e je implementov´ano jako tˇr´ıda CComponent v souboru Comp.cpp. Instance t´eto tˇr´ıdy je vytvoˇrena v metodˇe CComponentData::CreateComponent, kterou se tak´e pak vrac´ı reference na novˇe vytvoˇren´ y objekt MMC konzoli. Mezi nejd˚ uleˇzitˇejˇs´ı ˇcinnost´ı implementovan´ ych ve tˇr´ıdˇe CComponentData, je z´ısk´an´ı pˇr´ıstupu k rozhran´ı IGPEInformation. To je implementov´ano pˇresnˇe tak, jak je pops´ano v kapitole 3.2, a to zachycen´ım zpr´ avy MMCN_EXPAND. Pˇri zpracov´an´ı t´eto zpr´avy je tak´e implementov´ano samotn´e pˇrid´ an´ı uzlu AVG do stromu konzoly. Toto pˇrid´an´ı je implementov´ano v metodˇe OnExpand, ve kter´e je vytvoˇrena nov´a instance tˇr´ıdy CStaticNode (implementace je v souboru StaticNode.cpp), kter´ a pˇredstavuje n´aˇs uzel AVG. Pˇri inicializaci tohoto uzlu se tak´e vytv´aˇrej´ı poloˇzky, kter´e se po rozbalen´ı uzlu AVG zobraz´ı v Result Pane. V naˇsem pˇr´ıpadˇe je to pouze jedna poloˇzka s textem ”AVG configuration”, ale je moˇzn´e v budoucnu pˇridat libovoln´e mnoˇzstv´ı tˇechto poloˇzek. Tato poloˇzka je implementov´ana ve tˇr´ıdˇe CParamNode. Dvojklikem na tuto poloˇzku pak doch´az´ı k otevˇren´ı okna konfigurace AVG. Samotn´ y dvojklik je zachycen jako zpr´ ava MMCN_DBLCLICK od MMC konzole, kter´a je pˇred´ana pomoc´ı metody CComponent::Notify. D´ale je k poloˇzce ”AVG configuration” pˇriˇrazeno kontextov´e menu. Toho je dosaˇzeno implementac´ı rozhran´ı IExtendContextMenu v tˇr´ıdˇe CComponent. Pˇr´ısluˇsn´e vol´an´ı metod tohoto rozhran´ı jsou pak delegov´ any k objektu tˇr´ıdy CParamNode, kde je implementov´ano pˇrid´an´ı poloˇzek do menu a reakce na jejich stisknut´ı. V tomto menu se konkr´etnˇe nach´azej´ı dvˇe poloˇzky: ”Open AVG configuration”, kter´a otevˇre okno konfigurace stejnˇe jako dvojklik, a poloˇzka ”Delete all AVG settings from this GPO”, pomoc´ı kter´e se vymaˇze veˇsker´e nastaven´ı AVG z GPO (tedy vymaˇze veˇsker´e soubory v adres´aˇri AVG v GPT a informuje se GPOE, ˇze doˇslo ke smaz´ an´ı konfigurace). V´ ysledn´ y snapin je na obr´ azku 4.2.
4.4.2
Implementace GPmanageru
GPmanager je implementace tˇr´ıdy zdˇedˇen´e z tˇr´ıdy CAvgManagerBase. V t´eto tˇr´ıdˇe jsou implementov´ any vˇsechny ˇctyˇri metody, kter´e potˇrebuje Proxy k u ´spˇeˇsn´emu naˇc´ıt´an´ı a ukl´ad´ an´ı dat. Jelikoˇz je tˇreba vyuˇz´ıt nˇekter´ ych funkc´ı, kter´e byly implementov´any pro klientsk´e rozˇs´ıˇren´ı (jako je napˇr naˇc´ıt´ an´ı dat z GPO), byla pˇri implementaci pouˇzita tˇr´ıda GPOhandler, do kter´e byly doplnˇeny vˇeci nutn´e pro spr´avnou funkˇcnost s GPmanagerem. Naˇ cten´ı metadat Prvn´ı metodou, kterou bylo nutno implementovat v GPmanageru, je metoda GetMetaData. Tato metoda vrac´ı metadata, tedy popis struktury konfigurace (vˇsechny koˇrenov´e 28
uzly, datov´e typy hodnot a defaultn´ı hodnoty). Metadata jsou uloˇzena ve dvou souborech .dct: GpMetaFields.dct obsahuje metadata vˇsech konfiguraˇcn´ıch hodnot (jejich n´azvy, id, id pˇr´ısluˇsn´eho rootu a mnoho dalˇs´ıch u ´daj˚ u) a GpMetaTables.dct obsahuje seznam vˇsech root˚ u, jejich jm´ena a id. Metoda GetMetaData vrac´ı tyto metadata ve formˇe objektu tˇr´ıdy CAvgMetaDatabase. Naˇcten´ı soubor˚ u .dct je implementov´ano ve statick´e metodˇe CAvgReportBaseFileSerializer::Deserialize, kter´a naˇcte obsah soubor˚ u do objektu tˇr´ıdy CAvgReport, kter´ y pak lze vyuˇz´ıt k naˇcten´ı metadat pomoc´ı metody CAvgMetaDatabase::DeserializeTablesFieldsFromReports. Naˇ cten´ı konfigurace z .dat soubor˚ u Naˇc´ıt´an´ı dat z GPO maj´ı na starosti metody LoadMergedConfig a LoadRawConfig. Tyto metody byly p˚ uvodnˇe vymyˇsleny pro pouˇzit´ı v programu AVGAdmin, kde je nutn´e zobrazovat i nastaven´ı z v´ıce zdroj˚ u, a ty pak spojit do jedno konkr´etn´ı konfigurace (existuje glob´aln´ı konfigurace, konfigurace pro skupinu a konfiguraci pro konkr´etn´ı stanici), ale jelikoˇz v GPO je uloˇzena vˇzdy je jedna konfigurace, vrac´ı obˇe metody stejn´e data. Konfiguraˇcn´ı data se vracej´ı jako pole objekt˚ u CAvgReport. Tato tˇr´ıda je zjednoduˇsenˇe ˇreˇceno implementac´ı tabulky, kde kaˇzd´ y sloupec odpov´ıd´a jedn´e konfiguraˇcn´ı hodnotˇe a kaˇzd´ y ˇr´adek pak odpov´ıd´ a jedn´e konfiguraˇcn´ı instanci. Naˇcten´ı dat do tˇechto report˚ u je implementov´ano v metodˇe GPOhandler::ReadConfigToReport, kter´a opˇet vyuˇz´ıv´a AvgGpoParser k naˇc´ıt´ an´ı .dat soubor˚ u. Uloˇ zen´ı dat do .dat soubor˚ u Ukl´ad´an´ı dat je ˇreˇseno pomoc´ı metody StoreMergedConfig, kde jsou data pˇred´avan´a GPmanageru opˇet pomoc´ı objekt˚ u tˇr´ıdy CAvgReport. Samotn´e ukl´ad´an´ı dat je implementov´ano ve tˇr´ıdˇe GPOhandler. Pomoc´ı metody SaveValue se vkl´ad´a jedna konfiguraˇcn´ı hodnota do mapy konfiguraˇcn´ıch hodnot. Metoda SaveValues pak uloˇz´ı konkr´etn´ı instanci do .dat souboru.
4.5
Vyuˇ zit´ı Group Policy k instalaci AVG
Operaˇcn´ı syst´emy Windows obsahuj´ı pˇreinstalovan´e rozˇs´ıˇren´ı Software Installation, kter´e umoˇzn ˇuje vzd´ alenou instalaci a odinstalaci softwaru. Programy m˚ uˇzou b´ yt pomoc´ı tohoto rozˇs´ıˇren´ı instalov´ any ve dvou m´odech: Assigned - pˇriˇrazuje aplikaci uˇzivatel˚ um nebo poˇc´ıtaˇc˚ um, software je nainstalov´an automaticky; Published - lze nastavit pouze pro uˇzivatele, software nen´ı nainstalov´ an, ale uˇzivatel si jej m˚ uˇze nainstalovat s´am pomoc´ı pomoc´ı ovl´adac´ıho panelu Pˇridat nebo Odebrat programy. Tento zp˚ usob instalace software ma ovˇsem jednu ”nev´ yhodu”. Protoˇze pouˇz´ıv´a sluˇzbu Windows Installer, je nutn´e pro kaˇzd´ y program, kter´ y chceme instalovat, m´ıt k dispozici MSI bal´ıˇcek. Lze sice vyuˇz´ıt .zap soubory, coˇz jsou textov´e soubory, kter´e obsahuj´ı cestu k instalaci programu ve forme setup.exe, ale funkˇcnost instalace je omezena - lze pouˇz´ıt pouze moˇznost published, takˇze software nelze instalovat automaticky. Proto zat´ım nelze pouˇz´ıt tuto sluˇzbu k instalaci AVG, ale v budoucnu je podpora MSI bal´ıˇck˚ u pl´ anovan´ a, takˇze to bude moˇzn´e.
29
Obr´ azek 4.2: AVG snap-in do Group Policy Object Editoru
Obr´ azek 4.3: Okno pokroˇcil´eho nastaven´ı AVG 30
Kapitola 5
Z´ avˇ er C´ılem t´eto pr´ ace bylo nastudovat problematiku GroupPolicy a pot´e implementovat rozˇs´ıˇren´ı GroupPolicy slouˇz´ıc´ı ke konfiguraci syst´emu AVG. Tento c´ıl se podaˇrilo z velk´e ˇc´asti splnit. V r´ amci t´eto pr´ ace byla detailnˇe nastudov´ana a pops´ana architektura GroupPolicy. Byly tak´e nastudov´ any postupy, jak implementovat klientsk´e rozˇs´ıˇren´ı i rozˇs´ıˇren´ı Group Policy Object Editoru. V kapitole 3.2 bylo pops´ano, proˇc bylo nutn´e implementovat GPOE snap-in v jazyce C++, aˇckoliv se p˚ uvodnˇe v zad´an´ı poˇc´ıtalo s implementac´ı v jazyce C#. Tento poznatek vedl k nutn´emu dalˇs´ımu studiu, bylo tˇreba nastudovat z´aklady technologie COM, jej´ıˇz znalost je nutn´ a pro implementaci snap-inu pro konzoli MMC 2.0. Bylo tak´e nutn´e nastudovat samotnou architekturu konzole MMC 2.0. To tak´e vedlo k ˇc´asteˇcn´emu prodlouˇzen´ı doby implementace, na z´akladˇe ˇcehoˇz se nestihla implementovat podpora RSoP pro obˇe rozˇs´ıˇren´ı. Samotn´ a konfigurace antivirov´eho programu AVG 8.0 pomoc´ı GroupPolicy je plnˇe funkˇcn´ı. Rozˇs´ıˇren´ı byla testov´ ana v prostˇred´ı testovac´ı dom´eny ve virtu´aln´ı s´ıti vytvoˇren´e v programu VMware Workstation, kde ˇradiˇc dom´eny tvoˇril Windows Server 2003 R2 a klientskou stanici Windows XP. Pr´ace na rozˇs´ıˇren´ı budou nad´ale pokraˇcovat, poˇc´ıt´a se hlavnˇe s dokonˇcen´ım implementace (pˇrid´ an´ı podpory RSoP). V budoucnu bude tak´e pˇrid´ana podpora pro konfiguraci dalˇs´ıch ˇc´ ast´ı syst´emu AVG, zejm´ena firewallu. Pot´e bude nutn´e podrobit tyto rozˇs´ıˇren´ı intenzivn´ım test˚ um, hlavnˇe v prostˇred´ı r˚ uzn´ ych verz´ı syst´em˚ u Windows, jako je napˇr´ıklad novˇe uveden´ y Windows Server 2008. Bude tak´e dobr´e prostudovat novinky spojen´e s GroupPolicy, kter´e Microsoft uvedl s touto verz´ı operaˇcn´ıho syst´emu, a pˇr´ıpadnˇe jich i vyuˇz´ıt k vylepˇsen´ı st´ avaj´ıc´ı implementace. Po testech pˇrijde i na ˇradu testov´an´ı v re´aln´e poˇc´ıtaˇcov´e s´ıti a snad tak´e by mˇelo doj´ıt k uvolnˇen´ı rozˇs´ıˇren´ı na komerˇcn´ı trh kde budou zaˇrazeny do jednoho z produkt˚ u AVG. V r´ amci t´eto bakal´ aˇrsk´e pr´ ace jsem se nejen sezn´amil s jednou z nejpouˇz´ıvanˇejˇs´ıch technologi´ı vyuˇz´ıvan´ ych ke spr´ avˇe v s´ıt´ıch zaloˇzen´ ych na syst´emech Microsoft Windows, ale tak´e jsem mˇel ˇsanci proniknout do v´ yvoje komerˇcn´ıho produktu, jak´ ym je AVG Internet Security, coˇz pro je mˇe jako studenta neoceniteln´a zkuˇsenost.
31
Literatura [1] Robbie Allen and Alistair G. Lowe-Norris. Active Directory: implementace a spr´ ava Microsoft Active Directory. Grada Publishing, 2005. ISBN 8024709732. [2] Michael Dunn. Introduction to COM. http://www.codeproject.com/KB/COM/comintro.aspx. [3] Jeff Glatt. COM in plain C. http://www.codeproject.com/KB/COM/com in c1.aspx ; http://www.codeproject.com/KB/COM/com in c2.aspx. [4] Darren Mar-Elia, Derek Melber, William Stanek, and MS Group Policy Team. Microsoft WINDOWS Group Policy Guide. Microsoft Press, 2005. ISBN 978-0735622173. [5] Microsoft. MSDN Library. http://msdn2.microsoft.com/en-us/library/default.aspx. [6] Microsoft. Windows Server TechCenter. http://technet2.microsoft.com/. [7] Simon Robinson. Professional ADSI Programming. Wrox Press, 1999. ISBN 1-961002-26-2. [8] WWW str´ anky. GPOGUY.COM - The Group Policy Hub. http://www.gpoguy.com/. [9] Craig Tunstall and Gwyn Cole. Developing WMI Solutions: A Guide to Windows Management Instrumentation. Addison-Wesley Professional, 2002. ISBN 0-201-61613-0.
32
Pˇ r´ıloha A
Pamˇ et’ov´ e m´ edium K bakal´ aˇrsk´e pr´ aci je pˇriloˇzeno pamˇet’ov´e m´edium (DVD) obsahuj´ıc´ı elektronickou verzi technick´e zpr´ avy a zdrojov´e k´ ody klientsk´eho rozˇs´ıˇren´ı i rozˇs´ıˇren´ı Group Policy Object Editoru.
33
Pˇ r´ıloha B
N´ avod k pouˇ zit´ı Pro spr´ avu Group Policy doporuˇcuji pouˇzit´ı konzole Group Policy Management Console. Pokud GPMC nen´ı nainstalov´ ana, lze ji z´ıskat zde: http://www.microsoft.com/downloads/ details.aspx?FamilyId=0A6D4C24-8CBD-4B35-9272-DD3CBFC81887. Pro pouˇzit´ı konfigurace AVG pomoc´ı GroupPolicy se pˇredpokl´ad´a, ˇze obˇe rozˇs´ıˇren´ı i antivirus AVG jsou spr´ avnˇe nainstalov´any. Postup pro spr´avnou instalaci je uveden v souboru readme.txt na pˇriloˇzen´em pamˇet’ov´em m´ediu. Pro vytvoˇren´ı nov´e konfigurace nebo editaci st´avaj´ıc´ı konfigurace tedy spust´ıme GPMC (napˇr. pomoc´ı Start → Run → gpmc.msc). Ve stromu v lev´e ˇc´asti konzole vybereme pˇr´ısluˇsn´ y kontejnerov´ y objekt, kter´ y obsahuje u ´ˇcty poˇc´ıtaˇc˚ u, pro kter´e chceme vytvoˇrit novou konfiguraci AVG. Kliknut´ım prav´ ym tlaˇc´ıtkem na tento objekt vyvol´a kontextov´e menu, zde zvol´ıme poloˇzku Create and Link a GPO here... To zaruˇc´ı vytvoˇren´ı nov´eho GPO objektu, kter´ y je z´ aroveˇ n automaticky pˇrilinkov´an k vybran´emu objektu. Kliknut´ım prav´ ym tlaˇc´ıtkem na novˇe vytvoˇren´ y GPO nebo novˇe vytvoˇren´ y link vyvol´a dalˇs´ı kontextov´e menu, kde zvol´ıme poloˇzku Edit. T´ımto se otevˇre Group Policy Object Editor. V lev´e rozbal´ıme poloˇzku Computer configuration pak rozbal´ıme poloˇzku Software settings a n´aslednˇe i poloˇzku AVG. V prav´e ˇc´asti konzole se pak dvojklikem na poloˇzku Open AVG configuration otevˇre konfiguraˇcn´ı okno pokroˇcil´eho nastaven´ı AVG. V tomto oknˇe pak nastav´ıme poˇzadovan´e hodnoty konfigurace. Stisknut´ım tlaˇc´ıtka OK se konfigurace uloˇz´ı do GPO. T´ımto je konfigurace vytvoˇrena. Konfigurace bude uplatnˇena pˇri dalˇs´ım aplikaci GroupPolicy na klientsk´ ych stanic´ıch.
34