Jump to content
  • entries
    44
  • comments
    107
  • views
    4181

WMI Filtering σε Group Policy Objects, φανταστικά χρήσιμο! -aka "αυτός ο άγνωστος"-


GSimos

916 views

 Share

Ξεκινάω λοιπόν το πρώτο μου blog post και σκέφτηκα να σας απασχολήσω με το "άγνωστο" WMI filtering που μπορεί να εφαρμοστεί σε Group Policy objects, θα μου πείτε "που θα χρειαστώ κάτι τέτοιο;", η απάντηση είναι: στις περιπτώσεις που χρειάζεται να εφαρμόσετε η όχι κάποια πολιτική, πχ σε ένα OU του Active Directory που έχει μεικτά αντικείμενα όπως Computers που είναι Servers αλλά και Clients (από άποψη λειτουργικού συστήματος).

Το WMI filtering χρησιμοποιεί ερωτήματα (queries) γραμμένα στη γλώσσα WQL που υποστηρίζει το WMI -ουσιαστικά SQL like είναι η σύνταξη τους-, και επιστρέφει τα αποτελέσματα στα group policy objects για περαιτέρω χρήση. Το δύσκολο κομάτι είναι η συγγραφή τέτοιων ερωτημάτων μιας που το documentation για το WMI είναι σχετικά "τρομακτικό" σε μέγεθος και όπως γνωρίζω πολύ καλά από την πλευρά του System Administrator, ο χρόνος για "πολύ" διάβασμα είναι λίγος.

"Να σημειωθεί ότι WMI Filtering υποστηρίζεται απο τα Windows XP λειτουργικά και άνω, δηλαδή Windows 2003, Vista, 2008."

Ας δούμε λοιπόν τι χρειάζεται για να κάνουμε τη δουλειά μας:

1) Group Policy Management Console, η οποία μπορεί να εγκατασταθεί είτε σε Server είτε σε Client O/S:

2) WMI Code Creator http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en εύχρηστο εργαλείο για την εκμάθηση και δημιουργία κώδικα με WMI queries χωρίς να πονοκεφαλιάζετε , απλά προσθέτετε ότι επιπλέον θέλετε, μετά από λίγη εξάσκηση και χρήση να είστε σίγουροι ότι θα παίζετε στα δάκτυλα τα τμήματα κώδικα που φτιάχνει, δημιουργεί κώδικα σε VBScript, C# και VB .Net!

3) Ένας Domain Controller με OUs και Objects μέσα τους, δεν μας απασχολεί η έκδοση του Server (Win 2003 και άνω όμως).

4) Τουλάχιστον ένα GPO (Group Policy Object) για να δοκιμάσουμε το query μας.

Σενάριο:

Ας πούμε ότι θέλουμε να κλείνουμε το Messenger Service σε όλους τους υπολογιστές που τρέχουν Windows 2003 Server λειτουργικό και υποθέτουμε ότι όλοι οι υπολογιστές είναι σε ένα OU που ονομάζεται "Company Computers" στο domain tiptoys.local, θεωρούμε ότι οι τύποι λειτουργικών είναι Windows XP και Windows 2003.

Είναι πολύ εύκολο να φτιάξουμε ένα GPO που να θέτει σε "disabled" το Messenger Service, αλλά πως εφαρμόζεται σε συγκεκριμένους υπολογιστές;

Η μια λύση είναι να μεταφερθούν οι υπολογιστές που μας ενδιαφέρουν σε άλλο OU στο AD και μετά να γίνει εκεί link του GPO, αυτό όμως δεν είναι πάντα εφικτό και εύχρηστό, οπότε τη λύση τη δίνει το WMI Filtering, μέσω του οποίου θα πούμε στο GPO να εφαρμόζεται μόνο σε λειτουργικά συστήματα Windows 2003 Server.

Οπότε μας απομένει η λύση της δημιουργίας ενός GPO με τις ρυθμίσεις που θέλουμε και το απαραίτητο WMI φίλτρο.


Εκτέλεση:

Group Policy Management Console (δε θα ειπισέλθω σε λεπτομέρειες χρήσης της κονσόλας)

Δημιουργούμε ένα νέο GPO με τις ακόλουθες ρυθμίσεις:

Name: "CC - Disable Messenger Service (Win2k3 Servers Only)", CC σημαίνει "Computer Configuration" και αφορά στο τμήμα που θα  εφαρμοστούν οι αλλαγές, ως γνωστόν οι Group Policy ρυθμίσεις χωρίζονται σε δυο κατηγορίες "Computer Configuration" και "User Configuration".

Settings τα παρακάτω: CC-Disable Messenger Service GPO

Όπως βλέπετε στο "System Services" το "Messenger (Startup Mode)" είναι "Disabled" και δεν έχουν οριστεί επιπλέον ρυθμίσεις όπως "Permissions" κ' "Auditing".

 


 

 Δημιουργία του WMI Filter

Ας ξεκινήσουμε με τα βασικά, όλα τα queries για  WMI Filtering ξεκινούν έτσι:

Namespace: πχ root\CIMV2

Select * FROM WMI_Class WHERE PROPERTY [OPERATOR] VALUE

Εξηγώ όσα είναι με Bold λοιπόν:

WMI_CLASS: Δυναμική η στατική, περιέχει μεθόδους (METHODS) και ιδιότητες (PROPERTIES), προς το παρόν δε θα μας απασχολήσουν οι μέθοδοι. Οι κλάσσεις είναι σχετικά ξεκάθαρες απο τις ονομασίες τους, δυστυχώς πρέπει να ψάχνετε κάθε κλάση για να δείτε τι περιέχει, ειδάλως ανατρέχετε στο documentation της Microsoft http://msdn.microsoft.com/en-us/library/aa394554(VS.85).aspx.

PROPERTY: Ιδιότητες που περιέχονται μέσα σε μια κλάση WMI και επιστρέφουν τιμές Boolean, Alphanumeric, Text, Date, Time.

[OPERATOR]: Οι γνωστοί τελεστές, πχ το = , υπάρχουν και άλλοι όπως ο "like" -χωρίς τα "" για τον οποίο μπορείτε να διαβάσετε περισσότερα εδώ http://msdn.microsoft.com/en-us/library/aa392263%28VS.85%29.aspx 

VALUE: Η τιμή που θέλουμε να επιστραφεί στη GP Engine, βάσει αυτής φιλτράρονται τα αποτελέσματα, φυσικά μπορούμε να κάνουμε αρκετούς συσχετισμούς μέχρι να φτάσουμε στο επιθυμητό αποτέλεσμα, να θυμάστε όμως ότι όταν γράφετε το query προσπαθήστε να το διατηρήσετε σχετικά απλό, έτσι θα γλυτώσετε πολλές ώρες άδικου bug hunting.

Αν σκεφτούμε τι θέλουμε να κάνουμε για το σενάριο μας, βρίσκουμε ως λύση τον έλεγχο του τύπου των Windows, αυτό μπορεί να γίνει με πολλούς τρόπους όπως θα δείτε παρακάτω, αναφέρω τη λύση και την αντίστοιχη Property μαζί με τον τύπο και τις πιθανές τιμές αν υπάρχουν:

α) Ονομασία του λειτουργικού: πχ Windows XP Professional | Property: Caption, type string

β) Τύπος του λειτουργικού: πχ Server | Property: ProductType, type Numeric, τιμές 1=Work Station, 2=Domain Controller,  3=Server

γ) Τμήμα απο το λεκτικό που περιέχεται στο Boot.ini και αναφέρει το λειτουργικό αλλά και το partition στο οποίο έχει εγκατασταθεί, δε βολεύει ιδιαίτερα, ειδικά αν κάποιος κάνει αλλαγές στο boot.ini και αλλάξει το όνομα. | Property: Name, type String, πχ Name: Microsoft Windows Server 2003 R2 Enterprise Edition|C:\WINDOWS|\Device\Harddisk0\Partition1

δ) Να χρησιμοποιηθεί ο αριθμός κατασκεύης (Build Number) ή η Έκδοση μιας που είναι μοναδικοί αριθμοί και ξεχωρίζουν κάθε έκδοση | Property #1: BuildNumber, type: Numeric και Property #2: Version, type Numeric.

Αυτό λοιπόν που θα εφαρμόσουμε είναι ένα ερώτημα στο Caption του λειτουργικού και θα φροντίσουμε να το γενικεύσουμε όσον αφορά τους 2003 Servers.

Ανοίγουμε λοιπόν το WMI Code Creator και επιλέγουμε:

Namespace: root\CIMV2

Classes: Win32_OperatingSystem

Properties: Caption (μόνο)

Πατήστε το πλήκτρο "Search for Property Values" και ακριβώς απο κάτω εμφανίζεται το αποτέλεσμα μέσα σε αποσιωπητικά, προσέξτε που στους Servers 2003 το λεκτικό ξεκινά πάντα με "Microsoft® Windows® Server 2003," μετά το κόμμα ακολουθεί ο τύπος (Standard κτλ). Το γεγονός αυτό δυσκολεύει λίγο τα πράγματα γιατί χρειάζεται να βρούμε κάποιο τρόπο να περιγράψουμε στο query ότι θέλουμε τα λεκτικά Server 2003 να εντοπίζει μέσα στο λέκτικό του Caption.

Η λύση είναι η χρήση του LIKE operator μιας που μας επιτρέπει να ψάχνουμε για πρότυπα μέσα στα λεκτικά και η χρήση του operator "%" που ψάχνει γι' αυτά οπουδήποτε στο String, ανεξάρτητα απο τη θέση που βρίσκεται.

Προσέξτε στο δεξί τμήμα του WMI Code Creator τον κώδικα που έχει δημιουργηθεί, για να εντοπίσετε πως θα φτιάξετε το query εντοπίστε το σημείο που ξεκινά με:

SELECT * FROM

Το τελικό μας query διαμορφώνεται ως εξής:

SELECT * FROM Win32_OperatingSystem WHERE Caption LIKE "%Server 2003%"

Δημιουργούμε ένα νέο WMI Filter μέσω της GPMC και το ονομάζουμε "Apply to Windows 2003 Servers Only", πατάμε ADD και επιλέγουμε ως namespace "root\CIMv2" και Query: SELECT * FROM Win32_OperatingSystem WHERE Caption LIKE "%Server 2003%".

Αποθηκεύουμε το φίλτρο κάνουμε κλικ στο GPO που θέλουμε να εφαρμοστεί, μπορεί να εφαρμόζεται σε διαφορετικά GPOs αλλά δεν μπορούν να εφαρμοστούν διαφορετικά φίλτρα σε ένα GPO, μόνο ένα φίλτρο / GPO. Επιλεγουμε απο τη λίστα το φίλτρο που φτιάξαμε και στην ερώτηση απαντάμε καταφατικά (βλ φωτό):

WMI_Filtering_2

Σ' αυτό το σημείο έχουμε ολοκληρώσει το φίλτρο και το μόνο που απομένει είναι η σύνδεση του GPO με το OU που μας ενδιαφέρει, κάτι το οποίο σας αφήνω ως άσκηση.

Ακολουθεί ένα μικρό Quiz:

1) Πως θα εφαρμόσουμε πολλαπλά φίλτρα σε ένα GPO;

2) Μπορούμε στο WMI Code Creator να επιλέξουμε περισσότερες απο μια ιδιότητες έτσι ώστε να δημιουργηθεί το κατάλληλο query;

3) Τι θα γίνει αν χρησιμοποιήσουμε μόνο την ιδιότητα ProductType=3 και το OU έχει και Windows 2000 Servers μέσα;

4) Πως επαλήθέυουμε ότι ένα WMI filter λειτουργεί;

Απαντήστε με comment και θα στείλω σε comment τις απαντήσεις σε 10 ημέρες.

Technorati Tags:
 Share

8 Comments


Recommended Comments

Καλως ήρθες στο bloging, το άρθρο είναι super και φυσικά το WMI filtering ενώ είναι υπερχρήσιμο, το έχουμε παραμελήσει λόγω ...μανούβρας που χρειάζεται.

Οπότε εδώ μας δίνεις το κίνητρο για να επανέλθουμε και να το δούμε με ...συμπάθεια

Link to comment

Κοίτα φιλαράκι, εδώ στο autoexec είμαστε καλομαθημένοι, χωρίς δώρο δεν απαντάμε τίποτα.

Δώσε μας κάτι, ένα ποντίκι, μια ...γάτα, κάτι.

Link to comment

ΕΕΕ εγώ είμαι ένας απλός και ταπεινός blogger (κοινώς χαμάλης :P ), τα δώρα τα μοιράζετε εσείς οι κάτοχοι του Autoexec.gr (οι προύχοντες βρε παιδί μου).

Εγώ έβαλα ένα quiz για να αυξήσω το ενδιαφέρον στους αναγνώστες και για να κάνω λίγο διαδραστικό το blogging.

 

Υ.Γ. Θα βάζω σχεδόν σε κάθε post Quiz, οπότε θα βαρεθείτε να ψάχνετε sponsors :)

Link to comment

Μπράβο!! Πολύ καλό το άρθρο!

Τα WMI queries όπως λέει και ο Gsimos μας γλιτώνουν από αρκετά αδιέξοδα.

Πρέπει όμως να τα κρατάμε "λιτά" για τους εξής λόγους.

1) Κοστίζουν αρκετά σε χρόνο εκτέλεσης, με άμεσο αποτέλεσμα το αργό logon

2) Είναι δύσκολο το troubleshooting τους.

 

Περιμένουμε και άλλα τέτοια άρθρα!!!

Link to comment

Ευχαριστώ SOF να 'σαι καλά!

 

Όντως ισχύει η τήρηση της λιτότητας των WMI queries, κάτι το οποίο θα εξηγήσω στις απαντήσεις του Quiz.

 

Για το Troubleshooting υπάρχουν μέθοδοι, κυρίως ισχύει ότι αφού ξέρεις τι θές να κάνεις μπορείς και να το αναπαράγεις (για θέματα Group Policies πάντα).

 

Μιας που το έφερε η κουβέντα, το Quiz θέλεις να το απαντήσεις; Θεωρώ ότι για σένα θα είναι εύκολη υπόθεση.

 

Θα έρθουν και άλλα ενδιαφέροντα άρθρα, η λίστα μου είναι μεγάλη απλά τα δουλεύω αρκετά πριν τα βγάλω στη φόρα...

Link to comment

Συνήθως κανείς μας δεν δίνει τη δέουσα σημασία στα αντικείμενα Group Policy (GPO από εδώ και στο

Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...