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.
quelle
klist
Befehls? 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.Antworten:
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:
Nochmals vielen Dank für Ihre Eingabe.
quelle
Ich habe auch Kerberos gelernt, beginnend mit Achim Grolms '
mod_auth_kerb
Tutorial, wirklich eine gute Dokumentation.Die
keytab
Datei 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:
Wenn dies fehlschlägt, versuchen Sie die grundlegende Authentifizierung, um zu bestätigen, dass das Dienstkonto nicht deaktiviert ist:
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:
kvno
dem SPN, den Sie konfigurieren möchten, dass er nicht mehr im Realm vorhanden istsetspn -X
auf mehreren Konten kein widersprüchlicher SPN vorhanden istktpass
Legen Sie beim Generieren der Keytab das Kennwort als Option festsetspn -l account
Hier ist eine Reihe von Befehlen zum Konfigurieren des Dienstkontos auf DC:
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
ktpass
zusätzlichensetspn
Befehlen.Und Befehle, die unter Linux ausgeführt werden müssen, um zu überprüfen, ob alles ordnungsgemäß funktioniert:
quelle
setspn -l account
(oder einen LDAP-Browser verwenden, wenn Sie diesen Pfad bevorzugen ...)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