Active Directory 2012 LDAP-Integrationsdienst Principal Name Eintrag wird nicht mehr angezeigt?

8

Erstellen eines Python-Dienstes zum Abfragen von AD-Attributen

Ich integriere unser AD in Webdienste, auf denen Python unter Linux ausgeführt wird, und verwende Python-LDAP über SASL (DIGEST-MD5), um AD 2012-Benutzerattribute (Abteilung, Abteilung, Telefonerweiterung, E-Mail usw.) abzufragen. Nachdem ich die für meinen Dienst spezifischen Probleme mit einem AD 2003 behoben hatte, trat bei unserem neuen AD 2012 ein SPN-Fehler auf, bei dem der Digest-Uri nicht mit den SPNs auf dem Server übereinstimmte. Ich habe die SPN-Liste für beide Server referenziert und sie enthalten identische Analoga voneinander.

Der Fehler: Die Digest-URL entspricht nicht den für diesen Server registrierten LDAP-SPNs

Die Reparatur?

Dies wurde behoben durch Ausführen von:

setspn -A ldap/<Domain_Name> <Computer_Name>

Beachten Sie, dass das Erstellen eines Dienstkontos meinen SPN-Fehler nicht behoben hat, selbst wenn der folgende Befehl ausgeführt wurde:

setspn -A ldap/<Domain_Name> <Domain_Name>/<Service_Account_Name>

simple_bind_s () benötigt keinen SPN, sasl_interactive_bind_s () benötigt SPN

Nur das Hinzufügen des SPN zur SPN-Liste des lokalen Computers funktionierte für meinen Python-LDAP-Dienst mit sasl_interactive_bind_s (). Ich sollte auch beachten, dass der SPN-Schritt übersprungen werden kann, wenn ich simple_bind_s () verwende, diese Methode jedoch Anmeldeinformationen im Klartext sendet, was nicht akzeptabel ist.

Ich habe jedoch festgestellt, dass der Datensatz nur etwa eine Minute auf der SPN-Liste bleibt, bevor er verschwindet. Es gibt keine Fehler, wenn ich den Befehl setspn ausführe, die Ereignisprotokolle sind vollständig leer, es gibt nirgendwo Duplikate, die mit der Wald-weiten Suche auf der Basis dn überprüft wurden und nichts. Ich habe den SPN hinzugefügt und versucht, ihn erneut hinzuzufügen, zu entfernen und von Objekt zu Objekt zu verschieben, um sicherzustellen, dass er sich nirgendwo versteckt. In der Sekunde, in der ich das Objekt irgendwo hinzufüge und dann versuche, es erneut hinzuzufügen, werde ich über ein Duplikat informiert. Ich bin also sehr zuversichtlich, dass irgendwo kein Duplikat versteckt ist.

Der Hack

Im Moment habe ich eine geplante Aufgabe, die den Befehl erneut ausführt, um die Aufzeichnung in der Liste zu halten, damit mein Dienst mit dem passenden Namen "SPN Hack" funktioniert.

cmd.exe /C "setspn -A ldap/<Domain_Name> <Computer_Name>"

bis ich herausfinden kann, warum der SPN von der Liste gestrichen wird.

Ich bin nicht der Hauptadministrator für diese bestimmte AD. Könnte der Administrator einen Dienst ausführen, der den SPN von einem anderen Dienst auf der AD synchronisiert, und sich dessen nicht bewusst sein? Mein Titel ist Web Developer, nicht als Entschuldigung, sondern um meine Unwissenheit über Active Directory zu erklären. Mir wurde gesagt, dass ich die AD zur Hauptbenutzer-Datenbank machen soll, und ich habe viel gelesen, aber ich kann nirgendwo finden, wo Leute ein Problem damit haben, dass der SPN regelmäßig "überschrieben" oder "bereinigt" wird und keiner der Administratoren sind mit SPN außerhalb von SQLServer-Einträgen sehr vertraut.

Warum brauche ich den Hack?

Bisher scheint mein Hack keine Probleme für Benutzer oder Dienste verursacht zu haben und hat keine Fehler generiert. Der Administrator sagt also, er lasse es einfach laufen und ich werde weiter suchen. Aber dann befinde ich mich in der prekären Situation, einen Dienst zu schreiben, auf dessen Implementierung aufgebaut ist, im Wesentlichen ein Cron-Hack / Shiver ... Also wäre jede Hilfe dankbar.


Aktualisieren

Nach einem Gespräch mit dem Systemadministrator hat er zugestimmt, dass das Erstellen eines Dienstes auf einem Hack keine Lösung darstellt. Daher hat er mir die Erlaubnis erteilt, einen lokalen Dienst mit Endpunktverschlüsselung zu starten, den ich für meine Zwecke verwenden kann. Das Ergebnis ist dasselbe . Ich werde ein Auge darauf werfen, was dazu führt, dass der SPN gelöscht wird. Lokale Bindungen sind mit Python-LDAP kein Problem, und der lokale Dienst ist bereits nach etwa einer Stunde betriebsbereit. Es ist bedauerlich, dass ich im Wesentlichen Funktionen einbinde, die in LDAP integriert sind, aber wir tun, was wir tun müssen.

Melignus
quelle
Nun, das ist ein Rätsel. SPNs verschwinden normalerweise nicht einfach von alleine. Ich wette, dass eine Anwendung sie löscht. Registriert Python-Ldap automatisch seine eigenen SPNs? Wenn ja, macht es das richtig? Darüber hinaus müssen Sie möglicherweise die Objektzugriffsüberwachung auf dem Domänencontroller konfigurieren, um alle paar Minuten herauszufinden, wer für das Löschen des SPN verantwortlich ist.
Ryan Ries
1
Python-LDAP registriert keinen eigenen SPN. Ich habe meine Testdienste verdrahtet und netzwerkmäßig sieht es nur wie ein Standard-Anmeldefluss aus, jetzt, ob die anfängliche Anforderung das auf der AD-Seite registrieren würde oder nicht, was den Zweck des SPN zu vereiteln scheint an erster Stelle? Ich weiß, dass die Klartextbindung ohne SPN funktioniert, es ist nur die Sasl-Anforderung, die ohne den SPN-Datensatz auf dem AD fehlschlägt ... Ich habe angefangen, nach Diensten zu suchen, die den SPN außerhalb verwalten könnten, fühlt sich fast wie ein Löschen an und Ersetzungsskript läuft irgendwo ...
Melignus
Hey, hast du herausgefunden, warum dein SPN verschwunden ist? Wir scheinen das gleiche Verhalten nach ein paar Stunden zu haben ...
David

Antworten:

6

Dies ist ein wirklich interessantes (und nerviges) Phänomen, und ich bestehe darauf, dass wir herausfinden, was hier vor sich geht.

Glücklicherweise verfügt Windows Server seit 2008 über einige detaillierte Überwachungsrichtlinien, und wir können die Überwachung verwenden, um festzustellen, wer dies getan hat. Dazu müssen wir:

  1. Finden Sie heraus, wo die SPN-Änderung auftritt
  2. Aktivieren Sie die AD DS-Objektänderungsüberwachung
  3. Legen Sie einen Überwachungs-ACE für das Objekt fest
  4. Reproduzieren Sie den Fehler
  5. Überprüfen Sie das Sicherheitsprotokoll auf dem fehlerhaften DC

Finden Sie heraus, wo die SPN-Änderung auftritt:

Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten auf einem Domänencontroller und geben Sie diesen Befehl ein:

repadmin /showobjmeta . "CN=computerAccount,DC=domain,DC=local"|findstr servicePricipalName

Die Ausgabe enthält den Namen des Domänencontrollers, der ursprünglich die aktuelle Version des Attributwerts servicePrincipalName geschrieben hat: repadmin iz Chef

Aktivieren Sie die AD DS-Objektänderungsüberwachung:

Wenn noch keine globale Überwachungsrichtlinie definiert ist, können Sie diese Änderung an der im vorherigen Schritt angegebenen lokalen Sicherheitsrichtlinie auf dem Domänencontroller vornehmen

Öffnen Sie die Group Policy Management Console ( gpmc.msc), suchen Sie die Default Domain Controllers Policyund bearbeiten Sie sie.

  1. Gehe zu Computer Configuration -> Windows Settings -> Security Settings
  2. Auswählen und erweitern Local Policies -> Security Options
  3. Stellen Sie sicher, dass Audit: Einstellungen für die Überwachungskategorie erzwingen ... auf Aktiviert gesetzt ist Erzwingen Sie Audit-Unterkategorien, in denen klassische Kategorien bereits angewendet werden
  4. Auswählen und erweitern Advanced Audit Policy -> Audit Policies -> DS Access
  5. Stellen Sie sicher, dass Audit Directory Service Changes mindestens auf Success eingestellt ist Änderungen am Audit Directory Service

Legen Sie einen Überwachungs-ACE für das Objekt fest:

Öffnen Sie Active Directory-Benutzer und -Computer ( dsa.msc) und überprüfen Sie die Einstellung "Erweiterte Funktionen" im Menü "Ansicht".
Navigieren Sie zum Computerkontoobjekt, klicken Sie mit der rechten Maustaste darauf und wählen Sie Eigenschaften. Wählen Sie die Registerkarte Sicherheit und klicken Sie auf die Schaltfläche "Erweitert".

In der Eingabeaufforderung wählen Sie die Revision Registerkarte und stellen Sie sicher , dass „Schreiben alle Eigenschaften“ für geprüfte wird jeder . Wenn nicht oder wenn Sie Zweifel haben, fügen Sie einen neuen Eintrag hinzu:

  1. Drücken Sie Hinzufügen .
  2. Geben Sie "Jeder" als Zielprinzipal ein
  3. Wählen Sie als Typ "Erfolg"
  4. Scrollen Sie unter Eigenschaften nach unten und aktivieren Sie "Write servicePrincipalName".
  5. Drücken Sie OK, um den Eintrag hinzuzufügen und ADUC zu beenden

( Wenn Sie faul sind, können Sie einfach "Alle Eigenschaften schreiben" auswählen. )

Reproduzieren Sie den Fehler

Aus Ihrer Frage geht hervor, dass der SPN jede Minute oder so gelöscht wird. Dies ist wahrscheinlich der einfachste Schritt. Nehmen Sie in der Zwischenzeit eine 1-minütige Musikstunde .

Überprüfen Sie das Sicherheitsprotokoll auf dem fehlerhaften DC

Nachdem eine Minute vergangen ist, überprüfen wir das Sicherheitsprotokoll auf dem Domänencontroller, der in Schritt 1 als Urheber identifiziert wurde. Dies kann in großen Domänen schmerzhaft sein, aber das Filtern kann dabei helfen:

  1. Öffnen Sie die Ereignisanzeige und navigieren Sie zu Windows Logs -> Security
  2. Wählen Sie im rechten Bereich die Option Aktuelles Protokoll filtern
  3. Geben Sie in das Eingabefeld "" <All Event IDs>" 5136 ein (dies ist die Ereignis-ID für die Änderung des Verzeichnisobjekts).

Sie sollten nun in der Lage sein, einen Ereigniseintrag für jede Änderung des servicePrincipalNameAttributs auf dem Computerkonto zu finden.

Identifizieren Sie den "Betreff", der für die Änderung verantwortlich ist, und sehen Sie, woher sie stammt. Töte diesen Prozess / diese Maschine / dieses Konto mit Feuer!

Wenn das Subjekt identifiziert als SYSTEM, ANONYMOUS LOGONoder eine ähnlich allgemeine Beschreibung, sind wir mit der internen Verarbeitung auf dem Domänencontroller selbst zu tun, und wir werden einige NTDS - Diagnoseprotokollierung ausbrechen müssen , um herauszufinden , was los ist . Bitte aktualisieren Sie die Frage, wenn dies der Fall ist

Mathias R. Jessen
quelle
Bei meinem Versuch, dasselbe LDAP-SPN-Problem zu beheben, wurde genau dasselbe Problem festgestellt. Ich bin Ihren Vorschlägen gefolgt, sehe aber nur meine (erfolgreichen) Änderungen des SPN und keine Aufzeichnungen über deren spätere Entfernung.
Grisha Levit