Kerberos-Dienstanmeldung nur 30 Minuten nach Ausführung von ktpass.exe möglich

6

Ich versuche, einen Apache-Server zu kerberisieren und dem erstellten Serverprinzipal zu erlauben, sich bei Active Directory anzumelden. Ich habe eines der zahlreichen online verfügbaren Tutorials befolgt, und es scheint gut zu funktionieren. Ich bin auf der Linux-Seite des Projekts und die Unternehmens-IT auf der Windows-Seite.

Die IT hat mir ein Servicekonto und einen Service-Principal dafür zur Verfügung gestellt. In diesem Beispiel bezeichne ich es als HTTP/[email protected]. Sie haben mir eine Keytab-Datei für diesen Principal zur Verfügung gestellt, in der ein Tool namens ktpass.exe auf dem AD-Server ausgeführt wird.

Ich habe überprüft, ob die KVNOs des AD / KDC und der Keytab-Datei übereinstimmen. Alles ist gut.

Es gibt einen richtigen DNS-A-Eintrag für den Hostnamen und einen richtigen PTR-Eintrag für die IP. Beide Server sind zeitsynchron.

Ich kann beim AD / KDC ein Ticket für den oben genannten Dienstprinzipal mit der ausgegebenen Keytab-Datei wie folgt anfordern:

kinit -k -t http.keytab HTTP/[email protected]

Das funktioniert. Ich erhalte ein Ticket und kann dieses Ticket beispielsweise zum Abfragen des AD / LDAP-Verzeichnisses verwenden. Das Keytab eignet sich auch hervorragend zum Ausführen einer Single Signon Apache-Site, was teilweise das Ziel dieser Übung ist.

Eine halbe Stunde vergeht.

Versuche, sich mit dem obigen Befehl kinit anzumelden, schlagen jetzt mit der folgenden Meldung fehl:

Client not found in Kerberos database

Ich kann mich nicht als Dienstprinzipal authentifizieren, so als ob der Prinzipal auf dem AD-Server gelöscht worden wäre.

Jetzt wird es komisch, zumindest für mich:

Auf Anfrage führt der AD-Administrator das Tool ktpass.exe erneut aus und erstellt eine neue Keytab-Datei für meinen Dienst. Die KVNO (Key Version Number) wird auf dem Server erhöht, wodurch unser Apache-Testserver die Validierung der Kerberos-Einzelanmeldung beendet. Dies wird bei meiner derzeitigen Konfiguration erwartet. Was uns alle überraschte, war, dass das Kinit-Kommando jetzt wieder funktionierte. Wir kauften uns noch eine halbe Stunde und dann funktionierte es wieder nicht mehr.

Unsere IT-Abteilung ist hier ratlos und spekuliert, dass dies ein Problem mit dem AD-Server selbst ist. Ich denke, es ist Konfiguration, aber laut ihnen gibt es nirgendwo in ihrem Setup eine halbe Stunde Limits.

Ich habe http://www.grolmsnet.de/kerbtut/ befolgt (siehe Abschnitt 7), aber die Methode scheint in der gesamten Dokumentation, die ich gefunden habe, dieselbe zu sein. Ich habe keinen Hinweis auf Fristen für Service-Principals gefunden.

BEARBEITEN: Dies scheint ein Replikationsproblem zu sein. Obwohl beim Replikationsprozess keine Fehler gemeldet werden, wird der SPN-Wert des Dienstkontos von "HTTP/[email protected]" in "[email protected]" geändert (zurückgesetzt?) " nach 30 Minuten.

Saustrup
quelle
Zur Klarstellung: nachdem Sie die regenerierten keytab greifen, wird kinit Arbeit wieder mit diesem oder mit dem alten? Funktionieren sowohl SSO als auch Kinit nicht mehr gleichzeitig? Was ist die Ausgabe des klistBefehls? Ich erinnere mich, dass ich vor 2 Jahren auf ein ähnliches Problem mit Ubuntu 13.04 und Windows Server 2008R2 gestoßen bin (in meinem Fall betrug die Arbeitszeit mehr als ~ 30 Minuten. IIRC), aber das Aktualisieren der Keytabs hat den Job erledigt.
sam_pan_mariusz
Haben Sie das Ereignisprotokoll der Sicherheit auf dem DC gefiltert / überprüft, um es dort zu validieren? Wie ich gesehen habe, haben Sie alle Protokolldateien vom Webserver, aber weniger vom DC, mit Ausnahme des Kinit-Fehlers.
yagmoth555
Vergiss dein Kopfgeld nicht. Vielen Dank im Voraus
Yves Martin

Antworten:

1

Vielen Dank für all Ihre Beiträge, Jungs. Wir haben Microsoft an Bord und sie haben uns geholfen, den Authentifizierungsprozess auf der AD-Seite zu debuggen. Alles funktionierte wie es sollte, scheiterte aber nach 30 Minuten.

Während einer Remote-Debugging-Sitzung bemerkte einer der Teilnehmer, dass der UPN / SPN des Dienstkontos plötzlich von HTTP/[email protected] auf [email protected] zurückgesetzt wurde . Nach vielem Herumgraben, einschließlich des Debuggens der AD-Replikation, fanden wir den Schuldigen:

Jemand hatte ein Skript erstellt, das regelmäßig (oder wahrscheinlich nach Ereignissen, da es genau 30 Minuten nach dem Ausführen von ktpass.exe war) ausgeführt wurde und das UPN / PSN aktualisierte, um "die Cloud-Konnektivität sicherzustellen" . Ich habe keine ergänzenden Informationen zu den Gründen dafür.

Das Skript wurde geändert, um vorhandene UPN / SPN-Werte zuzulassen , die auf @ mycorp.com enden , wodurch das Problem effektiv gelöst wird.

Tipps zum Debuggen solcher Probleme:

  • Stellen Sie sicher, dass alle Teilnehmer an der Authentifizierung dieselben Verschlüsselungstypen unterstützen. Vermeiden Sie DES - es ist veraltet und unsicher.
  • Stellen Sie sicher, dass die AES-128- und AES-256-Verschlüsselung für das Dienstkonto aktiviert ist
  • Beachten Sie, dass das Aktivieren von DES für das Dienstkonto "NUR DES für dieses Konto verwenden" bedeutet , selbst wenn Sie eine der AES-Verschlüsselungen aktiviert haben. Suchen Sie nach Details zu UF_USE_DES_KEY_ONLY .
  • Stellen Sie sicher, dass der UPN / SPN-Wert korrekt ist und mit dem Wert in der ausgegebenen Keytab-Datei übereinstimmt (dh über eine LDAP-Suche).
  • Stellen Sie sicher, dass die KVNO (Key Version Number) in der Keytab-Datei mit der auf dem Server übereinstimmt
  • Überprüfen Sie den Datenverkehr zwischen Server und Client (dh mit tcpdump und / oder WireShark).
  • Aktivieren Sie das Debuggen der Authentifizierung auf der AD-Seite - überprüfen Sie die Protokolle
  • Aktivieren Sie das Debuggen der Replikation auf der AD-Seite - überprüfen Sie die Protokolle

Nochmals vielen Dank für Ihre Eingabe.

Saustrup
quelle
0

Ich habe auch Kerberos gelernt, beginnend mit Achim Grolms ' mod_auth_kerbTutorial, wirklich eine gute Dokumentation.

Die keytabDatei ersetzt nur die Kennwortauthentifizierung. Das Kennwort ist in der Datei codiert und diese Bytes werden bei der Authentifizierungsaufforderung mit KDC verwendet. Jede Kennwortänderung im Dienstkonto macht die Keytab-Authentifizierung ungültig und erhöht auch die kvno-Nummer.

Um zu bestätigen, dass ein Dienstkonto-SPN verfügbar ist, authentifiziere ich mich häufig mit dem Kennwort des Dienstkontos:

kinit HTTP/[email protected]

Wenn dies fehlschlägt, versuchen Sie die grundlegende Authentifizierung, um zu bestätigen, dass das Dienstkonto nicht deaktiviert ist:

kinit account

Wenn Sie sich nicht authentifizieren können, löschen Sie einfach das Konto und erstellen Sie ein neues Konto mit einem anderen Anmeldenamen, um Probleme zu vermeiden.

Es besteht eine hohe Wahrscheinlichkeit, dass eine andere Software - beispielsweise ein anderes System mit einem alten generierten Keytab für denselben SPN - versucht, sich bei diesem Dienstkonto zu authentifizieren, und das Konto aufgrund eines ungültigen Kennworts deaktiviert hat.

Beim Festlegen von Kerberos SSO können zu schnelle Vorgänge zu Inkonsistenzen in Active Directory führen. Meine allgemeine Richtlinie, wenn Sie im Konfigurationsprozess stecken bleiben, lautet, die folgenden Schritte auszuführen:

  • Löschen Sie "alte" oder "fehlerhafte" Dienstkonten für Test- und Produktionssysteme
  • Überprüfen Sie mit kvnodem SPN, den Sie konfigurieren möchten, dass er nicht mehr im Realm vorhanden ist
  • Überprüfen Sie, ob setspn -Xauf mehreren Konten kein widersprüchlicher SPN vorhanden ist
  • Erstellen Sie ein Dienstkonto pro System, das einem einzigen vollqualifizierten SPN mit einem brandneuen Anmeldenamen zugeordnet ist
  • Kennwortänderung und Kennwortablauf auf dem Dienstkonto verhindern
  • Warten wir eine Weile auf die DC-Synchronisation
  • ktpassLegen Sie beim Generieren der Keytab das Kennwort als Option fest
  • Überprüfen Sie FQDN SPN und Aliase mit setspn -l account

Hier ist eine Reihe von Befehlen zum Konfigurieren des Dienstkontos auf DC:

ktpass -princ HTTP/[email protected] -mapuser [email protected]
  -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL
  -pass long!$longp2ass3word -out c:\temp\http-mysite-mycorp-com.keytab
setspn -a HTTP/mysite mysiteAccount
setspn -l mysiteAccount

Wenn Operationen auf verschiedenen Domänencontrollern zwischen MMC und der Ausführung von ktpass für die Keytab-Generierung in einer Verwaltungsbefehlszeile zu schnell ausgeführt werden, kann die Synchronisierung von Domänencontrollern zu unerwarteten Ergebnissen führen, wie Sie sie beschrieben haben. Warten wir also eine Weile zwischen der Kontoerstellung und den ktpasszusätzlichen setspnBefehlen.

Und Befehle, die unter Linux ausgeführt werden müssen, um zu überprüfen, ob alles ordnungsgemäß funktioniert:

kinit [email protected]
kinit HTTP/[email protected]
kinit -k -t http-mysite-mycorp-com.keytab HTTP/[email protected]
kvno HTTP/mysite.mycorp.com
kvno HTTP/mysite
Yves Martin
quelle
Das ist ein guter Rat, aber das Konto scheint deaktiviert zu sein (obwohl der AD dies nicht anzeigt). Das Ausführen von kinit ohne Keytab-Parameter führt zu folgendem Ergebnis: kinit HTTP / mysite.mycorp.com kinit (v5): Der Client wurde beim Abrufen der ersten Anmeldeinformationen nicht in der Kerberos-Datenbank gefunden
Saustrup,
Sie müssen also überprüfen, ob für das Dienstkonto noch dieser FQDN-SPN in seinen Attributen eingetragen ist setspn -l account(oder einen LDAP-Browser verwenden, wenn Sie diesen Pfad bevorzugen ...)
Yves Martin,
Wenn SPN "verschwunden" ist, bedeutet dies, dass Sie möglicherweise eine Keytab auf einem Nicht-Master-DC generiert haben, der vom Master-DC ein Synchronisierungsereignis für dieses Konto erhalten hat, das zum Entfernen des SPN führte.
Yves Martin
Sie müssen bestätigen, dass Ihr Konto deaktiviert ist, indem Sie die Kennwortauthentifizierung mit versuchen kinit account. Wenn dies fehlschlägt, bedeutet dies, dass ein anderer Dienst versucht, Ihr Dienstkonto mit einem ungültigen Kennwort oder einem ungültigen Keytab zu authentifizieren. Das Beste, was Sie tun müssen, ist, Ihr Konto zu löschen und ein neues Dienstkonto mit einem anderen Anmeldenamen zu erstellen, um solche Probleme zu vermeiden
Yves Martin
1
@YvesMartin In Active Directory gibt es kein Konzept als "Master", außer im speziellen Fall der FSMO-Rollenoperationen - keine davon wirkt sich auf diesen Umstand aus. Für fast alle Vorgänge sind AD DS-Domänencontroller Multi-Master-Peers. Und für Kerberos ist jeder ein KDC.
MDMarra