Active Directory Cookbook by

Discussione

Molti attributi in Active Directory sono composti da bit flags. Un bitflag è spesso usato per codificare le proprietà di un oggetto in un singolo attributo. Per esempio, l’attributo groupType sugli oggetti group è un bit flag che viene usato per determinare l’ambito e il tipo di gruppo.

L’attributo userAccountControl sugli oggetti user e computer viene usato per descrivere tutta una serie di proprietà, incluso lo stato degli account (es, abilitato o disabilitato), blocco dell’account, password non richiesta, autenticazione con smartcard richiesta, ecc.

Gli attributi searchFlags e systemFlags sugli oggetti attributeSchema definiscono, tra le altre cose, se un attributo è costruito, indicizzato e incluso come parte dell’Ambiguous Name Resolution (ANR).

Per cercare tra questi tipi di attributi, è necessario usare filtri di ricerca bitwisesearch. Ci sono due tipi di filtri di ricerca bitwise che puoi usare, uno che rappresenta un OR logico e uno che rappresenta un AND logico. Questo è implementato in un filtro di ricerca come regola di corrispondenza. Una regola di corrispondenza è semplicemente un modo per informare il server LDAP (in questo caso, un controller di dominio) di trattare diversamente una parte del filtro. Ecco un esempio di come appare una regola di corrispondenza:

(userAccountControl:1.2.840.113556.1.4.803:=514)

Il formato è (attributename:MatchingRuleOID:=value).Come ho detto, ci sono due regole di corrispondenza bitwise, che sono definite da OID. L’OID della regola di corrispondenza logica AND è1.2.840.113556.1.4.803 e l’OID della regola di corrispondenza logica OR è1.2.840.113556.1.4.804. Questi OID istruiscono il server ad eseguire un’elaborazione speciale sul filtro. Un filtro OR logico restituirà un successo se qualsiasi bit specificato da value, è memorizzato in attributename. In alternativa, il filtro AND logico restituirà successo se tutti i bit specificati davalue, corrispondono al valore diattributename. Forse un esempio aiuterà a chiarire questo.

Per creare un normale account utente, dovete impostareuserAccountControl su 514. Il numero 514 è stato calcolato aggiungendo il flag dell’account utente normale di 512 insieme al flag dell’account disabilitato di 2 (512 + 2 = 514). Se si usa la seguente regola di corrispondenza logica OR contro il valore 514, come mostrato qui:

(useraccountcontrol:1.2.840.113556.1.4.804:=514)

allora tutti gli account utente normali (flag 512) O disabilitati (flag2) verrebbero restituiti. Questo includerebbe i conti utente abilitati (dal flag 512), i conti computer disabilitati (dal flag 2), e i conti utente disabilitati (dal flag 2). Nel caso diuserAccountControl, il flag 2 può essere applicato sia agli account utente che agli account computer e, quindi, entrambi sarebbero inclusi nelle voci restituite.

Un modo per vedere i benefici delle regole di corrispondenza bitwise è che permettono di combinare un mucchio di confronti in un singolo filtro. Infatti, può aiutare pensare che il precedente filtro OR che ho appena mostrato potrebbe anche essere scritto usando due espressioni:

(|(useraccountcontrol:1.2.840.113556.1.4.804:=2) (useraccountcontrol:1.2.840.113556.1.4.804:=512))

Come prima, questo corrisponderà a userAccountControlattributi che contengono i flag 2 o 512.

Per l’AND logico, si applicano principi simili. Invece di uno qualsiasi dei bit nel flag che è un possibile match, TUTTI i bit nel flag devono corrispondere per restituire un successo. Se cambiassimo il nostro esempiouserAccountControl per usare l’AND logico, sarebbe come questo:

(useraccountcontrol:1.2.840.113556.1.4.803:=514)

In questo caso, verrebbero restituiti solo gli account utente normali che sono anche disabilitati. Lo stesso filtro potrebbe essere riscritto usando l’operatore& invece di | come segue:

(&(useraccountcontrol:1.2.840.113556.1.4.803:=2) (useraccountcontrol:1.2.840.113556.1.4.803:=512))

Un’importante sottigliezza da notare è che quando si confronta solo il valore di un singolo bit-flag, la regola di corrispondenza OR logico e AND logico restituisce lo stesso risultato. Quindi, se volessimo trovare qualsiasi account utente normale, potremmo cercare sul singolo bit flag di 512 usando uno dei seguenti:

(useraccountcontrol:1.2.840.113556.1.4.803:=512)(useraccountcontrol:1.2.840.113556.1.4.804:=512)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.