Vorsicht, Falle! Vererbung im AD

Im Active Directory kann man ja, wie allseits bekannt, auf OUs etc. auch Rechte vergeben. Und natürlich lassen sich diese Rechte auch vererben an darunter liegende Objekte. Dass diese Vererbung nicht immer ganz einleuchtend ist, zeigt folgendes Beispiel:

Eine OU=Deutschland, darunter eine OU=Bayern und darunter eine OU=Franken. Dazu noch eine Gruppe CN=Bayrisch,OU=Deutschland und eine Gruppe CN=Hessisch,OU=Deutschland. Alles klar? Wir haben also zwei Gruppen, „Bayrisch” und “Hessisch”, und eine OU Bayern mit einer Unter-OU Franken.

Aufgabenstellung: In der OU Bayern sollen nur Mitglieder der Gruppe “Bayrisch” lesen dürfen.

Erster Ansatz: Für die OU Bayern der Gruppe “Authentifizierte Benutzer” das Leserecht verweigern und Mitgliedern der Gruppe ”Bayrisch” das Leserecht gewähren. Ausprobieren – Fehler! Warum?

Alle Mitglieder der Gruppe “Bayrisch” sind ja automatisch auch Mitglied der Gruppe “Authentifizierte Benutzer”. Betrachtet man die Rechte auf der OU Bayern, dann steht da also für ein Mitglied der Gruppe “Bayrisch” ein “Verweigern” (wegen “Authentifizierte Benutzer) und ein “Lesen” (weil “Bayrisch”). Verweigern schlägt Lesen, also darf keiner mehr lesen.

Zweiter Ansatz: Für die Gruppe “Authentifizierte Benutzer” das Leserecht auf der OU Bayern entfernen (also nur löschen, nicht verweigern anklicken!) und für die Gruppe “Bayrisch” hinzufügen, vererbt nach unten. Ausprobieren – Geht, aber…

Schaut man sich die Unter-OU Franken an, dann sieht man, dass dort zwar wie erwartet die Gruppe “Bayrisch” Leserechte hat (vererbt von oben), aber die “Authentifizierten Benutzer” auch noch. Wir haben das Leserecht ja nur an der OU Bayern entfernt, nicht an den darunter liegenden OUs. Das Leserecht für “Authentifizierte Benutzer” wird beim Anlegen der OU dieser direkt zugewiesen, d. h. nicht vererbt. Nutzt man einen LDAP Browser (LDP oder ADSIEdit oder ähnliches) und gibt als Basis direkt die Franken-OU an, dann sieht man wieder alle Inhalte.

Also ist es auch nicht damit getan, an einer obersten OU das Recht zu löschen, da es nicht vererbt wird und somit nicht bei darunter liegenden OUs entfernt wird.

Dritter Ansatz: Eigentlich ist es den Bayern egal, wer in der OU lesen darf, solange es bloß nicht die Hessen sind. Also wäre ein möglicher Ausweg, auf die OU Bayern der Gruppe “Hessisch” (und allen anderen unerwünschten) einfach das Leserecht zu verweigern, und natürlich vererbt auf alle darunter liegenden Objekte! Gesagt – getan. Ausprobieren – Fehler!

Auf der OU Bayern sieht man jetzt ein Leserecht für “Authentifizierte Benutzer” und ein Verweigern für die Gruppe “Hessisch”. Ein Hesse darf somit nicht lesen, und das ist auch tatsächlich so. Aber…

Auf der Unter-OU Franken sieht man diese Rechte ebenfalls, allerdings darf hier ein Hesse nach wie vor lesen (zumindest mit LDP)! Überrascht? Fein!

Wie kommt das? Überschreibt ein “Verweigern” nicht immer ein “Erlauben”? Offenbar nicht.

Active Directory unterscheidet zwischen direkt zugewiesenen Rechten und vererbten Rechten. Die Reihenfolge der Überprüfung ist:

  1. direkt zugewiesenes Verweigern?
  2. direkt zugewiesenes Erlauben?
  3. vererbtes Verweigern?
  4. vererbtes Erlauben?

Sobald eine Bedingung zutrifft, wird die Abarbeitung beendet und der Zugriff gewährt bzw. verweigert. Die Liste wird also nicht immer vollständig durchgearbeitet.

Zurück zur OU Franken und die Reihenfolge Schritt für Schritt durchgehen:

  1. direkt zugewiesenes Verweigern? Nein, keines vorhanden. Das “Verweigern” für die Gruppe “Hessisch” ist ein vererbtes Recht!
  2. direkt zugewiesenes Erlauben? Ja! Das Leserecht für “Authentifizierte Benutzer” wird, wie oben erwähnt, beim Erstellen einer OU dieser direkt zugewiesen. Da ein Mitglied der Gruppe “Hessisch” aber stets auch Mitglied der Gruppe “Authentifizierte Benutzer” ist, greift hier dieses Recht.
  3. Hier würde der Gruppe “Hessisch” zwar das Lesen verweigert, die Abarbeitung wurde aber nach Punkt 2 schon abgebrochen. Somit kommt dieses Recht gar nicht zum Tragen.

Interessanterweise verweigert ein ADSIEdit in diesem Fall auch das Lesen auf die Franken-OU, auch wenn man den DN der OU direkt angibt. Der LDP (und andere LDAP-Browser) zeigen die OU und den Inhalt aber an, wenn man den direkten Pfad angibt…

Wie macht man es jetzt richtig? Die korrekte (Consultant)-Antwort lautet: Kommt drauf an…

Da das Leserecht für “Authentifizierte Benutzer” bei jeder neu angelegten OU direkt zugewiesen wird, bleibt einem beim geschilderten Szenario nicht viel anderes übrig, als entweder auf allen OUs und Unter-OUs die Gruppe „Authentifizierte Benutzer“ rauszulöschen (nicht Verweigern!), und alle Gruppen, die Zugriff benötigen, hinzuzufügen (wobei letzteres auf der obersten OU reicht, da dies problemlos nach unten vererbt werden kann). Taucht dieses Szenario öfter auf, dann kann man auch im AD-Schema die Standard-Sicherheitseinstellungen für eine neu angelegte OU verändern und dort die “Authentifizierten Benutzer” rausnehmen. Aber Vorsicht: Das gilt für ALLE neuen OUs im gesamten Forest! Sicherheitseinstellungen an bestehenden OUs werden dadurch nicht verändert.

Advertisements

Über Ralf Wigand

...arbeitet für Microsoft und war von 2008-2015 MVP für Directory Services.
Dieser Beitrag wurde unter Active Directory, LDAP abgelegt und mit verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s