Lenguaje de definición de descriptor de seguridad para ACE condicionales
Una entrada de control de acceso (ACE) condicional permite evaluar una condición de acceso cuando se realiza una comprobación de acceso. El lenguaje de definición de descriptores de seguridad (SDDL) proporciona sintaxis para definir ACE condicionales en un formato de cadena.
El SDDL para una ACE condicional es el mismo que para cualquier ACE, con la sintaxis de la instrucción condicional anexada al final de la cadena de la ACE. Para más información, vea Lenguaje de definición de descriptores de seguridad.
El signo "#" es sinónimo de "0" en los atributos de recursos. Por ejemplo, D:AI(XA;OICI;FA;;;WD;(OctetStringType==#1#2#3##)) es equivalente y se interpreta como D:AI(XA;OICI;FA;;;WD;(OctetStringType==#01020300)).
- Formato de cadena de ACE condicional
- Expresiones condicionales
- Atributos
- Operadores
- Prioridad de los operadores
- Valores desconocidos
- Evaluación de ACE condicionales
- Ejemplos
- Temas relacionados
Formato de cadena de ACE condicional
Cada ACE de una cadena de descriptor de seguridad se incluye entre paréntesis. Los campos de la ACE están en el orden siguiente y se separan mediante punto y coma (;).
TipoDeACE**;MarcasDeACE;Derechos;GUIDDeObjeto;GUIDDeObjetoHeredado;SIDDeCuenta;(ExpresiónCondicional)**
Los campos son como se describe en Cadenas de ACE, con las siguientes excepciones.
El campo TipoDeACE puede ser una de las cadenas siguientes.
Tipo de cadena de ACE Constante en Sddl.h Valor de TipoDeACE "XA" SDDL_CALLBACK_ACCESS_ALLOWED ACCESS_ALLOWED_CALLBACK_ACE_TYPE "XD" SDDL_CALLBACK_ACCESS_DENIED ACCESS_DENIED_CALLBACK_ACE_TYPE La cadena ACE incluye una o varias expresiones condicionales entre paréntesis al final de la cadena.
Expresiones condicionales
Una expresión condicional puede incluir cualquiera de los elementos siguientes.
Elemento de expresión | Descripción |
---|---|
AttributeName |
Comprueba si el atributo especificado tiene un valor distinto de cero. |
exists AttributeName |
Comprueba si el atributo especificado existe en el contexto del cliente. |
AttributeName Operator Value |
Devuelve el estado de la operación especificada. |
ExpresiónCondicional**||**ExpresiónCondicional |
Comprueba si cualquiera de las expresiones condicionales especificadas es true. |
ConditionalExpression && ConditionalExpression |
Comprueba si las dos expresiones condicionales especificadas son true. |
!(ExpresiónCondicional) |
Lo contrario de una expresión condicional. |
Member_of{MatrizDeSID} |
Comprueba si la matrizSID_AND_ATTRIBUTES del contexto de cliente contiene todos los identificadores de seguridad (SID) de la lista separada por comas especificada por SidArray. Para las ACE Permitir, un SID de contexto de cliente debe tener establecido el atributo SE_GROUP_ENABLED para que se considere una coincidencia. El caso de las ACE de denegación, un SID de contexto de cliente debe tener el atributo SE_GROUP_ENABLED o SE_GROUP_USE_FOR_DENY_ONLY establecido para que se considere una coincidencia. La matriz matrizDeSID puede contener cadenas de SID (por ejemplo, "S-1-5-6") o alias de SID (por ejemplo, "BA" |
Atributos
Un atributo representa un elemento de la matriz AUTHZ_SECURITY_ATTRIBUTES_INFORMATION en el contexto del cliente. Un nombre de atributo puede contener cualquier carácter alfanumérico y cualquiera de los caracteres ":", "/", "." y "_".
Un valor de atributo puede ser cualquiera de los tipos siguientes.
Tipo de valor | Descripción |
---|---|
Entero |
Entero de 64 bits en notación decimal o hexadecimal. |
Cadena |
Valor de cadena delimitado por comillas. |
SID |
SID(S-1-1-0) o SID(BA). Tiene que estar en el RHS de Member_of o Device_Member_of. |
BLOB |
# seguido de números hexadecimales. Si la longitud de los números es impar, el número se traduce a 0 para que sea par. También se traduce a 0 cualquier # que aparezca en otro lugar del valor. |
Operadores
Los operadores siguientes se definen para su uso en expresiones condicionales a fin de probar los valores de los atributos. Todos son operadores binarios y se usan con el formato AttributeName Operator Value.
Operator | Descripción |
---|---|
== |
Definición convencional. |
!= |
Definición convencional. |
< |
Definición convencional. |
<= |
Definición convencional. |
> |
Definición convencional. |
>= |
Definición convencional. |
Contiene |
TRUE si el valor del atributo especificado es un superconjunto del valor especificado; de lo contrario, FALSE. |
Any_of |
TRUE si el valor especificado es un superconjunto del valor del atributo especificado; de lo contrario, FALSE. |
Además, los operadores unarios Exists, Member_of y de negación (!) se definen como se describe en la tabla Expresiones condicionales.
El operador "Contains" debe ir precedido y seguido de espacios en blanco, y el operador "Any_of" debe ir precedido por espacios en blanco.
Prioridad de los operadores
Los operadores se evalúan en el siguiente orden de prioridad, y las operaciones de igualdad de prioridad se evalúan de izquierda a derecha.
- Exists, Member_of
- Contains, Any_of
- ==, !=, <, <=, >, >=
- !
- &&
- ||
Además, cualquier parte de una expresión condicional se puede incluir entre paréntesis. Las expresiones entre paréntesis se evalúan primero.
Valores desconocidos
Los resultados de las expresiones condicionales a veces devuelven un valor de Unknown. Por ejemplo, cualquiera de las operaciones relacionales devuelve Unknown cuando el atributo especificado no existe.
En la tabla siguiente se describen los resultados de una operación AND lógica entre dos expresiones condicionales, ExpresiónCondicional1y ExpresiónCondicional2.
ExpresiónCondicional1 | ExpresiónCondicional2 | ConditionalExpression1 && ConditionalExpression2 |
---|---|---|
VERDADERO |
VERDADERO |
VERDADERO |
VERDADERO |
FALSO |
FALSE |
VERDADERO |
UNKNOWN |
DESCONOCIDO |
FALSO |
VERDADERO |
FALSO |
FALSO |
FALSO |
FALSO |
FALSO |
DESCONOCIDO |
FALSO |
DESCONOCIDO |
VERDADERO |
UNKNOWN |
DESCONOCIDO |
FALSE |
FALSO |
UNKNOWN |
DESCONOCIDO |
DESCONOCIDO |
En la tabla siguiente se describen los resultados de una operación OR lógica entre dos expresiones condicionales, ExpresiónCondicional1y ExpresiónCondicional2.
ExpresiónCondicional1 | ExpresiónCondicional2 | ConditionalExpression1 || ConditionalExpression2 |
---|---|---|
VERDADERO |
VERDADERO |
VERDADERO |
VERDADERO |
FALSE |
VERDADERO |
VERDADERO |
DESCONOCIDO |
VERDADERO |
FALSE |
VERDADERO |
VERDADERO |
FALSO |
FALSO |
FALSO |
FALSO |
UNKNOWN |
DESCONOCIDO |
UNKNOWN |
TRUE |
VERDADERO |
DESCONOCIDO |
FALSO |
UNKNOWN |
DESCONOCIDO |
DESCONOCIDO |
DESCONOCIDO |
La negación de una expresión condicional con un valor UNKNOWN también es UNKNOWN.
Evaluación de ACE condicionales
En la tabla siguiente se describe el resultado de la comprobación de acceso de una ACE condicional en función de la evaluación final de la expresión condicional.
Tipo de ACE | VERDADERO | FALSE | DESCONOCIDO |
---|---|---|---|
Permitir |
Permitir |
Ignore ACE |
Ignore ACE |
Denegar |
Denegar |
Ignore ACE |
Denegar |
Ejemplos
En los ejemplos siguientes se muestra cómo se representan las directivas de acceso especificadas con una ACE condicional definida mediante SDDL.
-
Directiva
-
Permitir ejecutar a todos si se cumplen las dos condiciones siguientes:
- Puesto = PM
- División = Finanzas o División = Ventas
-
SDDL
-
D:(XA; ;FX;;;S-1-1-0; (@User.Title=="PM" && (@User.Division=="Finanzas" || @User.Division ==" Ventas")))
-
Directiva
-
Permitir la ejecución si alguno de los proyectos del usuario forma intersección con los proyectos del archivo.
-
SDDL
-
D:(XA; ;FX;;;S-1-1-0; (@User.Project Any_of @Resource.Project))
-
Directiva
-
Permitir el acceso de lectura si el usuario ha iniciado sesión con una tarjeta inteligente, es un operador de copia de seguridad y se conecta desde una máquina con Bitlocker habilitado.
-
SDDL
-
D:(XA; ;FR;;;S-1-1-0; (Member_of {SID(Smartcard_SID), SID(BO)} && @Device.Bitlocker))