Udostępnij za pośrednictwem


Język definicji deskryptora zabezpieczeń dla warunkowych kontroli dostępu

Warunkowa kontroli dostępu (ACE) umożliwia ocenę warunku dostępu podczas sprawdzania dostępu. Język definicji deskryptora zabezpieczeń (SDDL) zapewnia składnię do definiowania warunkowych kontroli dostępu w formacie ciągu.

SdDL dla warunkowej ACE jest taka sama jak w przypadku każdej ACE, ze składnią instrukcji warunkowej dołączonej na końcu ciągu ACE. Aby uzyskać informacje na temat języka SDDL, zobacz Security Descriptor Definition Language.

Znak "#" jest synonimem "0" w atrybutach zasobów. Na przykład D:AI(XA; OICI;FA;; Biały karzeł; (OctetStringType==#1#2#3#)) jest równoważne i interpretowane jako D:AI(XA; OICI;FA;; Biały karzeł; (OctetStringType==#01020300)).

Format warunkowego ciągu ACE

Każda aCE w deskryptorze zabezpieczeń ciąg jest ujęta w nawiasy. Pola ACE są w następującej kolejności i są oddzielone średnikami (;).

AceType**;AceFlags;Rights;ObjectGuid;InheritObjectGuid;AccountSid;(ConditionalExpression)**

Pola są opisane w ciągi ACE, z następującymi wyjątkami.

  • Pole AceType może być jednym z następujących ciągów.

    Ciąg typu ACE Stała w pliku Sddl.h Wartość AceType
    "XA"
    SDDL_CALLBACK_ACCESS_ALLOWED
    ACCESS_ALLOWED_CALLBACK_ACE_TYPE
    "XD"
    SDDL_CALLBACK_ACCESS_DENIED
    ACCESS_DENIED_CALLBACK_ACE_TYPE
  • Ciąg ACE zawiera co najmniej jedno wyrażenie warunkowe, ujęte w nawiasy na końcu ciągu.

Wyrażenia warunkowe

Wyrażenie warunkowe może zawierać dowolny z następujących elementów.

Expression, element Opis
AttributeName
Sprawdza, czy określony atrybut ma wartość niezerową.
istniejeAttributeName
Sprawdza, czy określony atrybut istnieje w kontekście klienta.
AttributeName,wartość
Zwraca wynik określonej operacji.
ConditionalExpression**||**ConditionalExpression
Sprawdza, czy którekolwiek z określonych wyrażeń warunkowych ma wartość true.
ConditionalExpression&&ConditionalExpression
Sprawdza, czy oba określone wyrażenia warunkowe są prawdziwe.
! (ConditionalExpression)
Odwrotność wyrażenia warunkowego.
Member_of{SidArray}
Sprawdza, czy tablica SID_AND_ATTRIBUTES kontekstu klienta zawiera wszystkie identyfikatory zabezpieczeń (SID) na liście rozdzielanej przecinkami określonymi przez SidArray.
W przypadku opcji Zezwalaj na acE identyfikator SID kontekstu klienta musi mieć atrybut SE_GROUP_ENABLED, który ma być traktowany jako dopasowanie.
W przypadku odmów acEs identyfikator SID kontekstu klienta musi mieć SE_GROUP_ENABLED lub atrybut SE_GROUP_USE_FOR_DENY_ONLY, który ma być traktowany jako dopasowanie.
Tablica SidArray może zawierać ciągi SID (na przykład "S-1-5-6") lub aliasy SID (na przykład "BA"

Atrybuty

Atrybut reprezentuje element w tablicy AUTHZ_SECURITY_ATTRIBUTES_INFORMATION w kontekście klienta. Nazwa atrybutu może zawierać dowolne znaki alfanumeryczne i dowolne znaki ":", "/", "." i "_".

Wartość atrybutu może być dowolnym z następujących typów.

Typ wartości Opis
Liczba całkowita
64-bitowa liczba całkowita w notacji dziesiętnej lub szesnastkowej.
Struna
Wartość ciągu rozdzielana cudzysłowami.
SID
SID(S-1-1-0) lub SID(BA). Musi być na RHS Member_of lub Device_Member_of.
BLOB
Liczba szesnastkowa, po której następuje liczba szesnastkowa. Jeśli długość liczb jest nieparzysta, wartość # jest tłumaczona na wartość 0, aby była parzysta. Ponadto wartość #wyświetlana w innym miejscu jest tłumaczona na wartość 0.

Operatorów

Następujące operatory są definiowane do użycia w wyrażeniach warunkowych do testowania wartości atrybutów. Wszystkie te operatory są operatorami binarnymi i używane w postaci AttributeNameOperatorValue.

Operator Opis
==
Konwencjonalna definicja.
!=
Konwencjonalna definicja.
<
Konwencjonalna definicja.
<=
Konwencjonalna definicja.
>
Konwencjonalna definicja.
>=
Konwencjonalna definicja.
Contains
wartość TRUE, jeśli wartość określonego atrybutu jest nadzbiorem określonej wartości; w przeciwnym razie false.
Any_of
wartość TRUE, jeśli określona wartość jest nadzbiorem wartości określonego atrybutu; w przeciwnym razie false.

Ponadto operatory jednoargumentowe istnieją, Member_of i negacja (!) są definiowane zgodnie z opisem w tabeli Wyrażenia warunkowe.

Operator "Contains" musi być poprzedzony białym znakiem, a następnie operator "Any_of" musi być poprzedzony białym znakiem.

Priorytet

Operatory są oceniane w następującej kolejności pierwszeństwa, a operacje równego pierwszeństwa są oceniane od lewej do prawej.

  1. Istnieje, Member_of
  2. Zawiera, Any_of
  3. ==, !=, <, <=, >, >=
  4. !
  5. &&
  6. ||

Ponadto każda część wyrażenia warunkowego może być ujęta w nawiasy. Wyrażenia w nawiasach są oceniane jako pierwsze.

Nieznane wartości

Wyniki wyrażeń warunkowych czasami zwracają wartość Unknown. Na przykład którakolwiek z operacji relacyjnych zwraca Nieznany, gdy określony atrybut nie istnieje.

W poniższej tabeli opisano wyniki operacji logicznej AND między dwoma wyrażeniami warunkowymi, ConditionalExpression1 i ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1&&ConditionalExpression2
true
true
true
true
FALSE
FALSE
true
NIEZNANY
NIEZNANY
FALSE
true
FALSE
FALSE
FALSE
FALSE
FALSE
NIEZNANY
FALSE
NIEZNANY
true
NIEZNANY
NIEZNANY
FALSE
FALSE
NIEZNANY
NIEZNANY
NIEZNANY

W poniższej tabeli opisano wyniki operacji logicznej OR między dwoma wyrażeniami warunkowymi, ConditionalExpression1 i ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1||ConditionalExpression2
true
true
true
true
FALSE
true
true
NIEZNANY
true
FALSE
true
true
FALSE
FALSE
FALSE
FALSE
NIEZNANY
NIEZNANY
NIEZNANY
true
true
NIEZNANY
FALSE
NIEZNANY
NIEZNANY
NIEZNANY
NIEZNANY

Negacja wyrażenia warunkowego z wartością UNKNOWN jest również UNKNOWN.

Warunkowa ocena ACE

W poniższej tabeli opisano wynik sprawdzania dostępu warunkowego ACE w zależności od ostatecznej oceny wyrażenia warunkowego.

Typ ACE PRAWDZIWY FAŁSZYWY NIEZNANY
Pozwolić
Pozwolić
Ignoruj ACE
Ignoruj ACE
Zaprzeczać
Zaprzeczać
Ignoruj ACE
Zaprzeczać

Przykłady

W poniższych przykładach pokazano, jak określone zasady dostępu są reprezentowane przez warunkową ACE zdefiniowaną przy użyciu języka SDDL.

zasady

Zezwalaj na wykonywanie wszystkim, jeśli zostaną spełnione oba następujące warunki:

  • Tytuł = PM
  • Dział = Finanse lub Dział = Sprzedaż

SDDL

D:(XA; ; FX;;; S-1-1-0; (@User.Title=="PM" && (@User.Division=="Finance" || @User.Division ==" Sales)))

zasady

Zezwalaj na wykonywanie, jeśli którykolwiek z projektów użytkownika przecina się z projektami plików.

SDDL

D:(XA; ; FX;;; S-1-1-0; (@User.Project Any_of @Resource.Project))

zasady

Zezwalaj na dostęp do odczytu, jeśli użytkownik zalogował się przy użyciu karty inteligentnej, jest operatorem kopii zapasowej i łączy się z maszyny z włączoną funkcją BitLocker.

SDDL

D:(XA; ;FR;; S-1-1-0; (Member_of {SID(Smartcard_SID), SID(BO)} && @Device.Bitlocker))

[MS-DTYP]: Język opisu deskryptora zabezpieczeń