Active Directory Cookbook by

Discusión

Muchos atributos en Active Directory están compuestos por banderas de bits. Una bandera de bits se utiliza a menudo para codificar las propiedades de un objeto en un solo atributo. Por ejemplo, el atributo groupType de los objetos group es un indicador de bits que se utiliza para determinar el ámbito y el tipo de grupo.

El atributo userAccountControl de los objetos user y computer se utiliza para describir toda una serie de propiedades, incluyendo el estado de las cuentas (es decir, habilitado o deshabilitado), bloqueo de cuenta, contraseña no requerida, autenticación de tarjeta inteligente requerida, etc.

Los atributos searchFlags y systemFlags de los objetos attributeSchema definen, entre otras cosas, si un atributo se construye, se indexa y se incluye como parte de la Resolución de nombres ambiguos (ANR).

Para buscar en estos tipos de atributos, es necesario utilizar filtros de búsqueda por bits. Hay dos tipos de filtros de búsqueda por bits que se pueden utilizar, uno que representa un OR lógico y otro que representa un AND lógico. Esto se implementa dentro de un filtro de búsqueda como una regla de coincidencia. Una regla de coincidencia es simplemente una forma de informar al servidor LDAP (en este caso, un controlador de dominio) para que trate parte del filtro de forma diferente. Este es un ejemplo de una regla de coincidencia:

(userAccountControl:1.2.840.113556.1.4.803:=514)

El formato es (attributename:MatchingRuleOID:=value). El OID de la regla lógica AND es 1.2.840.113556.1.4.803 y el OID de la regla lógica OR es 1.2.840.113556.1.4.804. Estos OIDs ordenan al servidor que realice un procesamiento especial en el filtro. Un filtro lógico OR tendrá éxito si cualquier bit especificado por value, está almacenado en attributename. Por otra parte, el filtro lógico AND tendrá éxito si todos los bits especificados por value coinciden con el valor de attributename. Quizás un ejemplo ayude a aclarar esto.

Para crear una cuenta de usuario normal, hay que poneruserAccountControl a 514. El número 514 se calculó sumando el indicador de cuenta de usuario normal de 512 junto con el indicador de cuenta desactivada de 2 (512 + 2 = 514). Si se utiliza la siguiente regla de coincidencia lógica OR con el valor 514, como se muestra aquí:

(useraccountcontrol:1.2.840.113556.1.4.804:=514)

entonces se devolverán todas las cuentas de usuario normales (indicador 512) O las cuentas desactivadas (indicador2). Esto incluiría las cuentas de usuario habilitadas (de la bandera 512), las cuentas de ordenador deshabilitadas (de la bandera 2) y las cuentas de usuario deshabilitadas (de la bandera 2). En el caso deuserAccountControl, la bandera 2 puede aplicarse tanto a las cuentas de usuario como a las de ordenador y, por lo tanto, por qué ambas se incluirían en las entradas devueltas.

Una forma de ver los beneficios de las reglas de coincidencia a nivel de bits es que le permiten combinar un montón de comparaciones en un solo filtro. De hecho, puede ayudar a pensar que el filtro OR anterior que acabo de mostrar también podría escribirse utilizando dos expresiones:

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

Al igual que antes, esto coincidirá con userAccountControlatributos que contengan los indicadores 2 o 512.

Para el AND lógico, se aplican principios similares. En lugar de que cualquiera de los bits de la bandera sea una posible coincidencia, TODOS los bits de la bandera deben coincidir para que se devuelva un éxito. Si cambiamos nuestro ejemplo deuserAccountControl para usar el AND lógico, se vería así:

(useraccountcontrol:1.2.840.113556.1.4.803:=514)

En este caso, sólo se devolverían las cuentas de usuario normales que también están deshabilitadas. El mismo filtro podría reescribirse utilizando el operador& en lugar de | como en lo siguiente:

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

Una sutileza importante a tener en cuenta es que cuando se está comparando sólo un valor de bandera de bits, la regla de coincidencia lógica OR y lógica AND devolvería el mismo resultado. Por lo tanto, si quisiéramos encontrar cualquier cuenta de usuario normal, podríamos buscar en la bandera de un solo bit de 512 utilizando uno de los siguientes valores:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada.