Langsam aber sicher werden nun die letzten NT-Domänen in den Unternehmen zu einer Active Directory Umgebung migriert.
Die Administratoren die bereits seit längerem eine Active Directory Umgebung betreuen, haben sich bereits einiges an Wissen
die sie für eine Administration einer Active Directory-Domäne benötigen aufgebaut und andere wiederum, werden es noch tun.
In den Unternehmen die bereits seit längerem eine Active Directory Umgebung besitzen, wird langsam aber sicher der Ruf nach
gezielter Vergabe von Berechtigungen im Active Directory lauter und stärker. Gerade wenn Unternehmen fusionieren bzw. seit Jahren
stetig gewachsen sind, ist es zwingend notwendig gezielte Berechtigungen den Benutzern zu vergeben.


Im täglichen Leben des Administrators fallen viele Aufgaben an, die er möglichst zeitnah und zielgerecht auszuführen hat. Dabei hat er
bei der Ausführung seiner Aufgaben stets darauf zu achten, dass die Benutzer oder die IT-Support-Einheiten nur die Rechte in einem
Netzwerk erhalten, die sie für ihre Arbeit benötigen. Denn wenn Personen zu viele Rechte besitzen, kann das durchaus bedeuten das
im Endeffekt der Administrator dadurch einen unnötigen Mehraufwand hat. Daher lautet die Devise für den Administrator, nur soviel Rechte
zu vergeben wie sie auch tatsächlich benötigt werden, auch wenn das im ersten Moment mehr Arbeit für den Administrator bedeutet,
anstelle den Benutzer einfach in eine administrative Gruppe zu stecken und somit ggf. zuviele Rechte zu vergeben.


Eine weitere Grundregel wäre dabei, alle Benutzer die eine gleiche Anforderung haben (z.B. den Zugriff auf eine Ressource),
zu einer Sicherheitsgruppe hinzuzufügen und dieser Gruppe den Zugriff auf die Ressource zu gewähren, anstatt jedem einzelnen Benutzer
die Rechte auf die Ressource zu erteilen. Dabei hat sich das A-G-DL-P Prinzip etabliert. Oder anstelle den einzelnen Mitarbeitern aus dem
First-Level Support Domänen-Administrator Rechte zu geben, sollten die benötigten Rechte im Active Directory über die Objektverwaltung
oder mit dem Kommandozeilentool DSACLS entsprechend delegiert werden. Dabei ist es empfehlenswert, auch hier idealerweise einer
Sicherheitsgruppe die Rechte im Active Directory zu delegieren und nicht einzelnen Personen.


Damit ein Administrator das richtige Delegierungskonzept für seine Active Directory Gesamtstruktur erarbeiten kann,
muss er sich dessen bewußt sein, was technisch möglich ist und was nicht. Er sollte dabei auch die Hintergründe kennen.


Was passiert nun im Hintergrund, wenn einem Benutzer oder einer Sicherheitsgruppe Rechte im Active Directory durch die
Objektverwaltung oder durch das Kommandozeilentool DSACLS delegiert werden?  Und woher weiß das Active Directory,
das der Benutzer der eine Aufgabe durchführen möchte, das auch darf?


Um diese Fragen zu beantworten, müssen in diesem Zusammenhang die Begriffe SID,
Access Token, ACL, ACE, SD, DACL, SACL und SDDL erläutert werden.


 



Security Identifier (SID)


Jedes Sicherheitsprinzipal wie Benutzer, Gruppen, Computer usw. erhalten beim erstellen in einer Active Directory-Umgebung
oder auch lokal, eine einmalige Objekt-GUID sowie Objekt-SID. Der Security Identifier (zu deutsch, Identifikationsnummer),
der Teil des security descriptors ist, dient zur eindeutigen Kennzeichnug eines Objekts (z.B. eines Benutzers). Der leserfreundliche Name
eines Sicherheitsprinzipal ist eher für den Menschen gedacht, da er sich Namen einfacher merken kann, als eine Zahlenkombination.
Jede Berechtigung die einem Benutzerkonto für den Zugriff auf Objekte bzw. Ressourcen zugewiesen wird, werden vom
Windows-Betriebsystem immer direkt der SID zugewiesen. Oder werden einem Benutzer Aufgaben im Active Directory delegiert,
werden die Berechtigungen ebenfalls direkt der SID zugewiesen.


Wird der Benutzer in eine andere Domäne verschoben, so ändert sich seine SID.
Denn in der SID ist auch die betreffende Domäne hinterlegt. Ein SID ist ein Zahlen-Array mit einer variablen Länge,
das sich wie folgt zusammensetzt:


S-1-5-21-956547467-2769573453-2154042951-500


S = SID
1 = Die Revisionsnummer
5 = Identifier Authority
21 = Typisierung des nachfolgenden SID-Teils
956547467-2769573453-2154042951 = Domäne
500 = Benutzer (in diesem Beispiel, der Administrator)



 


Access Token


Wenn ein Sicherheitsprinzipal (security principal) wie es ein Benutzer darstellt, seinen Benutzernamen sowie das Kennwort im
Logon-Fenster an einem Client eingibt, werden diese Anmeldeinformationen an einen Domänencontroller (DC), den der Client
durch das DNS mitgeteilt bekommt, übermittelt. Der DC überprüft ob das richtige Kennwort passend zum Benutzernamen
eingegeben wurde. Falls dies der Fall sein sollte, erstellt der DC während dem Anmeldeprozess ein Access Token und falls nicht,
erhält der Benutzer eine Fehlermeldung das der Benutzername oder das Kennwort falsch sei. Das Token wird dabei vom
Local Security Authority (LSA) Prozess des DCs erstellt. Das Access Token enthält Informationen über die
Identität und Privilegien des Sicherheitsprinzipal. In dem Access Token sind die folgenden SIDs und Informationen enthalten:




  • Die SID des Benutzers (der Benutzername sAMAccountName oder UPN ist Schall und Rauch für die Systeme,
    viel wichtiger ist die SID die dahintersteckt).


  • Falls vorhanden, die SID-History des Benutzers (von Migrationen).


  • Die SIDs von jeder domänenlokalen Gruppe, worin der Benutzer direkt oder transitiv Mitglied ist.


  • Die SIDs jeder gloablen Gruppe, in denen der Benutzer direkt sowie verschachtelt Mitglied ist und die SID-History der globalen Gruppen.


  • Die SIDs der universellen Gruppen in denen der Benutzer direkt sowie verschachtelt Mitglied ist, samt der SID-History
    der universellen Gruppen. Dabei werden die Informationen zu den universellen Gruppenmitgliedschaften des Benutzers,
    vom globalen Katalog (GC) geliefert.


  • Die SIDs von jeder BuiltIn Gruppe, in der der Benutzer direkt oder transitiv Mitglied ist.


  • Die SIDs von jeder lokalen Gruppen, in der der Benutzer direkt oder transitiv Mitglied ist.


  • Eine Liste mit Privilegien.


  • Andere Zugriffsinformationen.


Das Access Token hat allerdings eine Beschränkung. In einem Token für einen Sicherheitsprinzipal können maximal
1.024 Einträge enthalten sein. Daher sollte unbedingt darauf geachtet werden, das gerade wenn Benutzerkonten
über Jahre hinweg existieren und diese bereits mehrere Migrationen hinter sich haben, unbedingt die SID-History
nach jeder Migration zu bereinigen [1]. Sonst kann das später zu Problemen führen.


Bekommt der Benutzer bei der Windows-Anmeldung folgenden Fehler:

The system cannot log you on due to the following error:
During a logon attempt, the user`s security context accumulated too many security IDs

so liegt der Fehler darin, dass der Benutzer in zu vielen Gruppen enthalten ist oder die SID-History zu viele Einträge enthält.


Welche SIDs in dem Access Token enthalten sind, kann man sich mit dem Kommandozeilentool Whoami anzeigen lassen.
Der Befehl dazu lautet Whoami /All.


Wichtig ist zu wissen, dass Access Token wird nur ein einziges Mal und zwar während der Benutzeranmeldung erstellt.
Wird nun der Benutzer während seiner Benutzersitzung zu weiteren Gruppen hinzugefügt und es zeigt sich, dass der Benutzer
weiterhin auf die neue Ressource keinen Zugriff erhält, so sollte sich der Benutzer erneut anmelden, damit die neuen
Gruppeninformationen und somit die neuen Berechtigunen im Token enthalten sind.

Das Access Token in dem alle SIDs des Benutzers enthalten sind, ist quasi der Ausweis eines Benutzers im Netzwerk.
Jedes Objekt bzw. jede Ressource enthält auf der anderen Seite eine Zugriffskontrollliste (Access Control List, ACL).
Zu sehen ist die Zugriffskontrollliste in den Eigenschaften eines Objekts, im Reiter Sicherheit. In der Zugriffskontrollliste
eines Objekts stehen die SIDs (in Form von Namen) der zugriffsberechtigten Personen drin. Darin sind die Benutzer oder Gruppen
mit ihren entsprechenden Zugriffsrechten enthalten. Möchte nun ein Benutzer auf ein Objekt zugreifen, überprüft das
Windows-Betriebssystem das Access Token des Benutzers, mit der Zugriffskontrollliste des Objekts. Findet sich eine SID
die im Token enthalten ist auch in der Zugriffskontrollliste des Objekts wieder, erhält der Benutzer Zugriff auf das Objekt,
mit seinen dort definierten Rechten.



[1] How To Use Visual Basic Script to Clear SidHistory
Access Token Limitation


 



Access Control List (ACL)


Die Access Control List (zu deutsch, Zugriffskontrollliste), zu der die beiden Typen DACL und SACL gehören,
besteht aus Access Control Entries Einträgen. Die beiden ACL-Typen DACL und SACL befinden sich im security descriptor des
Objekts und sind Bestandteil der ACL. Die ACL ist eine Liste von festgelegten ACEs die spezifizieren, ob und mit welchen Rechten
der Zugriff auf ein Objekt erlaubt, verweigert oder erfolgreich bzw. fehlgeschlagen überwacht wird. Die Zugriffskontrollliste die in
den Eigenschaften eines jeden Objekts – im Reiter Sicherheit – zu finden ist, steuert den Zugriff auf ein Objekt. Damit der Reiter
Sicherheit in den Eigenschaften eines Benutzerkontos erscheint, ist in der MMC „Active Directory-Benutzer und -Computer“ (ADBuC)
unter „Ansicht“ die Option „Erweiterte Funktionen“ zu aktivieren.


Der Aufbau einer ACL sieht wie folgt aus:


ACL Size
Hier wird die Größe des zugewiesenen Speichers für die ACL gespeichert. Die Größe des Speicherbedarfs hängt von der Anzahl und Größe
der jeweiligen ACEs ab. Dabei kann eine ACL maximal 64kb groß werden. Das würde etwa 1820 ACEs entsprechen, wobei die Anzahl der
ACEs wiederum abhängig von der Größe der ACEs ist. Aus Performancegründen sollte die ACL so klein wie möglich sein und nicht bis
an ihre maximale Grenze wachsen.


ACL Revision
In diesem Eintrag wird die Revisionsnummer für die Datenstruktur der ACL gespeichert.


ACE Count
An dieser Stelle wird die Anzahl an ACEs in der ACL angegeben. Ist als Wert Null eingetragen, bedeutet dies, dass die ACL
keine ACEs enthält – es ist leer. Wobei eine leere DACL sich von einer Null-DACL unterscheidet. Bei einer leeren DACL erhält keiner
einen Zugriff auf das Objekt, aber eine Null-DACL gibt jedem uneingeschränkten Zugriff auf das Objekt.
Daher sollte diese Einstellung vermieden werden.


ACE
Dieser Eintrag enthält eine Liste mit den ACEs. Möchte ein Benutzer auf ein Objekt zugreifen,
werden die ACEs in der Reihenfolge in der sie aufgelistet sind kontrolliert.


 



Access Control Entries (ACEs)


Die einzelnen ACEs im security descriptor eines Objekts, werden in den erweiterten Sicherheitseinstellungen eines Objekts
angezeigt und legen den Zugriff entweder auf das gesamte Objekt oder auf ein einzelnes Attribut fest. Durch ACEs können
Zugriffsrechte präzise, bis auf ein einzelnes Attribut vergeben werden. Somit kann z.B. einem Benutzer oder einer Gruppe lediglich
das Recht zum lesen für das Feld Beschreibung (Attribut Description) eines Objekts erteilt werden, aber nicht das Schreibrecht.
Ehe mit dem Bearbeiten oder Erstellen von ACEs begonnen wird, sollte sich vorher der Aufbau und die Funktionsweise des
ACEs näher angeschaut werden.


Der Aufbau eines ACEs sieht wie folgt aus:


Access Mask
In der AccessMask werden die Rechte definiert, wobei es für jeden Objekttyp unterschiedliche Rechte gibt. Hier können die
gewünschten Berechtigungen ausgewählt werden, wie z.B. Vollzugriff, alle Eigenschaften lesen und schreiben, Besitzer ändern usw.
oder die zu überwachenden Ereignisse konfiguriert werden. Durch die AccessMask werden zum einen die zu vergebenen
Berechtigungen und zum anderen, die zu überwachenden Ereignisse festgelegt, abhängig von der durchzuführenden Aufgabe.


AceType
An dieser Stelle können die entsprechenden Berechtigungen zugelassen bzw. verweigert werden (der Typ ist ACCESS_ALLOWED_ACE (0)
oder ACCESS_DENIED_ACE (1)) oder die erfolgreiche bzw. fehlgeschlagene Überwachung aktiviert werden
(der Typ lautet immer SYSTEM_AUDIT_ACE). Es wird also definiert, ob für ein Objekt oder für eine Eigenschaft
die Berechtigung oder Überwachung festgelegt werden soll.


Trustee
Im Trustee wird der Benutzer bzw. die Gruppe (das Ziel) festgelegt (genauer, die SID in Form des Namen),
für den die Berechtigung oder die Überwachung gelten soll.


Aceflags
Die Aceflags definieren die Vererbungsoptionen, je nachdem ob in der ACE Berechtigungen oder Überwachungen konfiguriert wurden.
Diese Einstellung kann im Feld Übernehmen für: der ACE, dort betrifft es die ersten drei Einträge Nur dieses Objekt,
Dieses und alle untergeordneten Objekte, Nur untergeordnete Objekte, vorgenommen werden.


Flags
Alle ACEs enthalten die Eigenschaft Flags, durch das der ACE erkennt, welches Feld ObjectType oder InheritedObjectType
zusätzlich noch gesetzt ist.


ObjectType
Hier wird angegeben, auf welchen Objekttyp oder welches Attribut sich das ACE bezieht.
Als Wert wird die GUID des Objekts oder des Attributs gespeichert.


InheritedObjectType
Dieses Feld im ACE gibt die GUID des Objekts an, das den betreffenden ACE erben soll.



Diese Optionen sind in den Eigenschaften eines Objekts – im Reiter Sicherheit – dort auf Erweitert klicken -
im Reiter Berechtigungen (DACL)/oder im Reiter Überwachung (SACL) auf Hinzufügen… klicken – danach den Benutzer oder die Gruppe
auswählen bzw. eingeben – anschließend erscheint das Fenster „Berechtigungseintrag für… oder Überwachungseintrag für…“
was das ACE darstellt, zu finden.


 



Security Descriptor (SD)


Im Active Directory das auf Objekten basiert, wie es z.B. Benutzer, Grupppen, Computer, Container, Standorte usw. darstellen,
besitzen alle Objekte sogenannte security descriptors (zu deutsch, Sicherheitsbeschreibungen). Die Werte der Sicherheitseinstellungen
(wer darf mit welchen Rechten auf das Objekt zugreifen) werden in jedem Active Directory Objekt, in der Eigenschaft
n
TSecurityDescriptor gespeichert. Der Wert im nTSecurityDescriptor wird als SDDL-String gespeichert, den man sich z.B. mit
LDP.exe oder dem „Active Directory Explorer“ anzeigen lassen kann. In dieser Eigenschaft werden alle Sicherheitsinformationen
für das Objekt gespeichert. Das Windows Betriebssystem verwendet security descriptors um den Zugriff auf eine Ressource zu steuern.
In den security descriptors wird folgendes festgelegt:




  • Es werden die Benutzer sowie Gruppen angezeigt, die Zugriff auf das Objekt haben.


  • Weiterhin werden die Berechtigungen angegeben, mit denen ein Benutzer oder eine Gruppe Zugriff auf das Objekt erhält.


  • Es werden die Ereignisse auf den Objekten definiert, die überwacht werden sollen.


  • Es wird der Besitzer des Objekts angegeben.


  • Weiterhin enthält der SD Informationen darüber, welche Rechte das Objekt von übergeordneten Containern vererbt bekommt.


Es existieren selbstverständlich nicht nur im Active Directory diese security descriptors. Ganz im Gegenteil, man findet sie an
vielen Stellen auf einem System wieder, z.B. in Dateien  und Verzeichnissen die auf einem NTFS-Dateisystem gespeichert sind,
Freigaben, Drucker, Registry etc. Im Prinzip existieren security descriptors auf allen Objekten, auf denen eine Zugriffssteuerung
konfiguriert werden kann. Dabei befinden sich die Sicherheitsbeschreibungen in den erweiterten Sicherheitseinstellungen eines
Objekts (in den Eigenschaften eines Objekts – im Reiter Sicherheit – dort auf Erweitert).


Der security descriptor ist eine binäre Datenstruktur mit einer variablen Länge und besteht im wesentlichen aus den folgenden Teilen:



  • Der Header beinhaltet eine Revisionsnummer und eine Reihe von Optionen die beschreiben, welche Eigenschaften vorhanden
    sind und welche hinzugefügt oder geändert wurden.

  • In der Discretionary Access Control List (DACL) werden die einzelnen Zugriffsrechte für ein bestimmtes Objekt, in Form von
    Access Control Entries (ACEs) festgelegt. In der DACL sind die Benutzer und/oder Gruppen eingetragen, denen der Zugriff auf
    das Objekt erlaubt oder verweigert wird. Werden einem Benutzer oder einer Gruppe Aufgaben im Active Directory delegiert,
    so werden automatisch die SIDs der Personen in die DACL der Objekte geschrieben. Der Inhalt bzw- die Einträge in der
    DACL werden vom Besitzer kontrolliert.

  • Die SACL ist vergleichbar mit der DACL, allerdings mit dem Unterschied, dass die SACL für die Protokollierung – anstatt für
    den Zugriff auf ein Objekt zuständig ist. In der System Access Control List (SACL) sind die Überwachungseinstellungen enthalten.
    Auch hier befinden sich ACEs, die den definierten erfolgreichen oder fehlgeschlagenen Zugriff protokollieren. Findet ein Zugriff
    auf ein Objekt statt für den die Protokollierung aktiviert wurde (sei es erfolgreich oder fehlgeschlagen), verzeichnet das
    Betriebssystem im Sicherheitslog einen Eintrag.

  • Der Security Identifier (SID) des Besitzers (Owner). Der Besitzer eines Objekts kann die Berechtigungen bearbeiten und anderen
    Benutzern Rechte auf das Objekt erteilen.

  • Ein weiterer Bestandteil ist der SID der primären Gruppe des Besitzers
    (existiert aus Kompatibilitätsgründen zu Unix/Macintosh Systemen).





 


Security Descriptor Definition Language (SDDL)


Die Security Descriptor Definition Language stellt ein Textformat dar, das zur Beschreibung von security descriptors dient.
In diesem String, der natürlich jederzeit veränderbar ist, werden die Sicherheitsinformationen in Form von Access Control Lists (ACLs)
samt den einzelnen Access Control Entries (ACEs) eines Objekts, im nTSecurityDescriptor gespeichert. Microsoft verwendet
die SDDL immer dann, wenn ein security descriptor im String-Format definiert werden soll.


Die nachfolgend genannte kryptische Zeichenkette stellt einen SDDL-String dar (alles in einer Zeile):


O:BAG:SYD:(D;;0xf0007;;;AN)(D;;0xf0007;;;BG)(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x7;;;SO)
(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)


Solch einen SDDL-String findet man z.B. dann wieder, wenn einem Benutzer das Recht vergeben werden soll,
dass Eventlog eines DCs lesen zu können. Dazu existiert im folgenden Registry-Pfad des DCs:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\* in dem jeweiligen Schlüssel
(Application, Directory Service, DNS Server…) ein REG_SZ Eintrag mit dem Namen CustomSD [2]. Dort fndet sich als Wert solch
ein SDDL-String wieder. Oder in den Security Templates im Verzeichnis %windir%\security\templates trifft man ebenfalls
einen SDDL-String an. Eine andere Stelle an der man einen SDDL-String vorfindet, wäre in der Eigenschaft nTSecurityDescriptor
eines jeden Active Directoy Objekts.


Auf ein Active Directoy Objekt wirken mehrere Berechtigungen. Wird ein Objekt im Active Directory erstellt, erhält es standardmäßig
gewisse Sicherheitsinformationen, im SDDL-String, die im Schema im Attribut Default-Security-Descriptor festgelegt sind.
Zusätzlich erbt das erstellte Objekt weitere Berechtigungen, durch die darüberliegenden Einheiten (Container, OU, Domäne).
Anschließend kann der Administrator jederzeit noch die Berechtigungen des Objekts modifizieren.


Gerade für Administratoren die evtl. durch Skripte ihre tägliche Arbeit erleichtern möchten, ist es unerlässich zu verstehen,
wie ein SDDL-String sich zusammensetzt. Denn schließlich lässt sich die Delegierung von Rechten im Active Directory, im SDDL-String,
natürlich auch per Skript setzen. Des Weiteren ist es unerlässich einen SDDL-String zu verstehen, wenn mit dem
Active Directory-Kommandozeilentool DSACLS Rechte im Active Directory händisch oder per Skript delegiert bzw. gelesen werden sollen.
Auch um Security Templates zu lesen und zu bearbeiten ist es zwingend, die Syntax verstanden zu haben.


Kommen wir nun zur Erläuterung eines SDDL-Strings.
In einem SDDL-String werden die Zeichen fortlaufend durchgeschrieben und nicht durch Leerzeichen getrennt.
Die Länge eines SDDL-Strings ist nicht hartcodiert und kann variieren.
Die Schreibweise eines nTSecurityDescriptor SDDL-Strings würde so aussehen:


O:Owner-SIDG:Group-SIDD:DACL-Flags(ACE1- String)( ACE2- String)(…usw.)S:SACL-Flags(ACE1- String)( ACE2- String)(…usw.)



Jeder nTSecurityDescriptor SDDL-String besteht aus fünf Teilen. Diese wären:



  • Header: Der Header enthält Eigenschaften (Flags) die beschreiben,
    ob das Objekt die Vererbung von DACL und SACL erlaubt oder blockiert.



  • Owner: Der Besitzer eines Objekts trägt in einem SDDL-String das Präfix „O:“. Dieser Wert gibt an,
    welcher Trustee der Besitzer des Objekts ist. Hier die Erläuterung der geläufigsten SID-Strings (Abkürzungen)
    die der Wert Owner (sowie G:Group-SID) enthalten kann:

    AN = Anonymous
    AO = Account Operators
    AU = Authenticated Users
    BA = Builtin Administrators
    BO = Backup Operators
    CG = Creator Group
    CO = Creator Owner
    DA = Domain Administrators
    DU = Domain Users
    EA = Enterprise Admins
    LA = Local Administrator Account
    SA = Schema Administrators
    SO = Server Operatoren
    SY = Local System
    WD = Everyone (World)

    Die komplette Liste der SID-Strings befindet sich auf dieser Seite:
    SID Strings (Windows)


    Im o.g. SDDL-String ist in der kryptischen Zeichenkette als Owner der Eintrag O:BA“ enthalten und dieser steht für
    „Builtin Administrators“. Statt des SID-Strings kann auch eine SID verwendet werden,
    z.B. so: O:S-1-5-21-956547467-2769573453-2154042951-500G:SYD:(…).



  • Primary Group: Die primäre Gruppe erhält in einem SDDL-String das Präfix „G:“. Dieser Wert enthält den SID-String
    der primären Gruppe eines Objekts. Der Wert des Owner und der Primary Group entspricht einer einzigen SID.
    Der Eintrag „
    G:SY” bedeutet, dass die primäre Gruppe Local System lautet.



  • DACL: Die DACL wird in einem SDDL-String mit einem „D:“ eingeleitet.



  • DACL-Flags: Dieser Wert ist ein security descriptor control Flag, das auf das DACL angewendet wird.
    Dieser Eintrag kann mehrere Werte enthalten (z.B. D:PAI), muss aber keine enthalten. Folgende Wert lassen sich dabei eintragen:

    P = SDDL_PROTECTED. Das SE_DACL_PROTECTED Flag ist gesetzt.
    AR = SDDL_AUTO_INHERIT_REQ. Das SE_DACL_AUTO_INHERIT_REQ Flag ist gesetzt.
    AI = SDDL_AUTO_INHERITED. Das SE_DACL_AUTO_INHERITED Flag ist gesetzt.



  • SACL: Die SACL wird im SDDL-String als „S:“ gekennzeichnet.



  • SACL-Flags : Dieser Wert ist ein security descriptor control Flag das auf das SACL angewendet wird und ebenfalls (wie DACL-Flags)
    keine feste Länge hat. Bei dem SACL-Flags String werden die gleichen Werte wie bei dem DACL-Flags String verwendet.



  • ACE-String: Der ACE-String der in Klammern gesetzt ist, beschreibt einen ACE im security descriptor für den DACL und SACL.
    Der ACE-String lautet beim DACL sowie SACL gleich und setzt sich aus den folgenden sechs Feldern
    (jeweils getrennt durch ein Semikolon) zusammen, die nicht alle gesetzt sein müssen:

    (ACE-Type;ACE-Flags;Rights;ObjectGUID;Inherit-ObjectGUID;Account-SID)

    - Als ACE-Type könnten unter anderem A für Allow oder D für Deny eingetragen sein, was den Optionen „Zulassen“ oder „Verweigern“
    im security descriptor des Objekts entspricht. Bei einem Eintrag der SACL könnte als Wert AU für Audit (Überwachung) eingetragen sein.

    - Falls das Objekt ein Container sein sollte kann mit dem ACE-Flags String angegeben werden,
    das sich das ACE nur auf den Container oder seinen Inhalt bezieht.


    - Der Rights String gibt die Berechtigungen für den ACE an.

    - Der String ObjectGUID hat als Wert die GUID einer Objektklasse, eines Attributs oder Attribut Sets.

    - Im Inherit-ObjectGUID kann sich die GUID einer Objektklasse befinden. Falls es gesetzt ist, bezieht sich die Vererbung
    auf den ACE der untergeordneten Einträge der Objektklasse.

    - Im sechsten Teil Account-SID wird der Name des Benutzer- oder Gruppenkontos angegeben (Trustee), auf dem sich die
    Berechtigungen auswirken. Als Wert kann entweder ein SID-String (z.B. DA) oder die SID in Form von
    S-1-5-21 angegeben werden.


 
Ein ACE-String könnte dabei in der Praxis so aussehen: (A;;WP;;;DU) und hat dabei folgende Bedeutung:



  • ACE-Type lautet in dem String A, was für „Zulassen“ steht.
  • Ein Wert im ACE-Flags ist nicht gesetzt.
  • Als Berechtigung wurde der Wert WP (Write_Property) vergeben, was „Schreibberechtigung“ im Active Directory-Objekt bedeutet.
  • Es ist keine ObjektGUID eingetragen.
  • Ebenfalls ist der Wert Inherit-ObjektGUID nicht eingetragen.
  • Die Berechtigung wurde an DU (Domain_Users) vergeben, das für „Domänen-Benutzer“ steht.


Mit dem Kommandozeilentool SC kann man sich unter anderem die Sicherheitsinformationen von Diensten anzeigen lassen.
Der security descriptor des Dienstes NTDS auf einem Windows Server 2008 DC sieht so aus:


C:\SC SDSHOW NTDS


D:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)
(A;;CCLCSWLORC;;;BO)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)


Man kann erkennen, dass neben dem DACL auch die SACL durch das S: gesetzt ist.
Die Zugriffsrechte eines Active Directory Objekts werden dabei, durch die folgenden ACE-Strings geregelt:


CC = Create all child Objects
CR = All extended Rights
DC = Delete all Child Objects
DT = Delete Subtree
LC = List Contents
LO = List Object
RC = Read permissions
RP = Read all Properties
SD = Delete
SW = All Validated Writes
WD = Modify Permissions
WO = Modify Owner
WP = Write all Properties


Alle Werte die in einem ACE-String enthalten sein können, werden auf der folgenden Seite erläutert:
ACE Strings (Windows)


[2] How to set event log security locally or by using Group Policy in Windows Server 2003


 


Objektverwaltung zuweisen


Die technische Umsetzung einer Active Directory-Delegierung über die GUI, wird im Snap-In
Active Directory-Benutzer und -Computer durchgeführt. Mit einem Rechtsklick auf den Standardcontainer Users oder einer OU,
ruft man mit der Auswahl von Objektverwaltung zuweisen… den Assistent zum Zuweisen der Objektverwaltung auf
(der bereits seit Windows 2000 existiert). Nach Auswahl des Benutzers oder der Gruppe kann im darauffolgenden Schritt die Wahl
zwischen einem allgemeinen und benutzerdefinierten Task getroffen werden. Bei dem benutzerdefinierten Task gilt es auf den
darauffolgenden beiden Schritten, zum einen den Objekttyp für die Delegierung auszuwählen und zum anderen, die gewünschten
Berechtigungen die auf Attributebene aktiviert werden können auszuwählen.


Der gewiefte Administrator kann den Delegierungsassistenten im ADBuC überspringen und direkt in den erweiterten
Sicherheitseinstellungen des Containers (auch eine OU ist ein Container) die entsprechenden Berechtigungen vergeben.
Denn der Assistent für die Objektverwaltung macht auch nichts weiter, als die Personen mit den vergebenen Berechtigungen
im security descriptor des Containers einzutragen.


Um auf die Anfangsfrage zurückzukommen was im Hintergrund passiert, wenn einem Benutzer oder einer Sicherheitsgruppe
Rechte im Active Directory delegiert werden, ist nichts weiter, als das die Benutzer mit den vergebenen Rechten im
security descriptor des Objekts eingetragen werden.


Die bereits delegierten Rechte auf einem Objekt zeigt einem der Objektverwaltungs-Assistent leider nicht an.
Stattdessen ist in der MMC „ADBuC“ unter Ansicht die Option „Erweiterte Funktionen“ zu aktivieren, damit in den Eigenschaften
eines Objekts der Reiter Sicherheit erscheint. Danach kann in den erweiterten Sicherheitseinstellungen (im security descriptor)
die Person ausgewählt und mit einem Klick auf Bearbeiten… die gesetzten Berechtigungen eingesehen werden. Sollen die
vergebenen Berechtigungen dem Benutzer entzogen werden, so gilt es lediglich den Benutzer aus der ACL des Objekts zu entfernen.
Einen Assistenten für das Entfernen von Berechtigungen gibt es nicht.


Über die Kommandozeile lassen sich die Berechtigungen mit dem Tool DSACLS, das sich in den Windows Support Tools befindet
(z.B. auf der Windows Server 2003 CD im Verzeichnis Support\Tools), ebenfalls ansehen sowie vergeben. Mit dem folgenden Befehl
werden die Berechtigungen für den Standardcontainer USERS (im ADBuC) aufgelistet:
Dsacls CN=Users,DC=intra,DC=dikmenoglu,DC=de.


Alles was mit dem Assistenten delegiert werden kann, lässt sich auch in einem Skript mit DSACLS realisieren.
Die Syntax zu dem Tool wird in der Hilfe erläutert, die sich mit dem Befehl Dsacls -? aufrufen lässt.


Die vergebenen Berechtigungen können in Form von ACEs auch mit dem Kommandozeilentool DSREVOKE angezeigt und entfernt werden.



Objektdelegierungen einrichten
Der Objektdelegierungsassistent
Delegierte AD-Berechtigungen anzeigen und entfernen


 


Zusammenfassung


Das Delegierungskonzept sollte sorgfältig geplant, in einer Testumgebung getestet und ganz wichtig, dokumentiert werden.
In der Planungsphase sollten diese Fragen geklärt werden:



  • Welche Berechtigungen sollen die entsprechenden Personen erhalten?
    Dabei werden idealerweise Berechtigungen Gruppen und nicht einzelnen Personen zugewiesen.

  • Ist die gewünschte Berechtigung die delegiert werden soll technisch realisierbar?
  • Wenn es technisch realisierbar ist, können mit den Standard-MMCs wie z.B. „Active Directory-Benuzter und -Computer“
    die Aufgaben durchgeführt werden?

Wenn ein entsprechendes Konzept erarbeitet, getestet und implementiert wurde, gestaltet sich die tägliche Administration
in der Praxis mit dem geringsten Aufwand, wobei die Benutzer nur mit den notwendigsten Rechten ausgestattet werden.


Das Delegierungskonzept sollte dabei nicht übertrieben werden, ganz nach dem Motto „soviel wie nötig – so wenig wie möglich“.
Denn wenn unüberlegt Berechtigungen delegiert werden, kann das unter Ümständen zu Performance-Einbußen im Active Directory führen.


Large Numbers of ACEs in ACLs Impair Directory Service Performance



Des Weiteren sollte bei dem Delegierungskonzept unbedingt darauf geachtet werden,
dass einem der AdminSDHolder nicht in die Quere kommt.


Delegated permissions are not available and inheritance is automatically disabled


 



Weitere Informationen:
Security Descriptors and Access Control Lists Technical Reference
Security Descriptor Definition Language (Windows)
Best Practices for Delegating Active Directory Administration
Best Practices for Delegating Active Directory Administration Appendices
Best practices and guidance for writers of service discretionary access control lists
Well-known security identifiers in Windows operating systems

Comments are closed, but trackbacks and pingbacks are open.