Die SSH-Kerberos-Authentifizierung schlägt beim Debian Squeeze mit "Falscher Principal in Anfrage / Keine Client-Anmeldeinformationen erhalten" fehl

8

Ich habe einen Debian-Squeeze-Host, auf dem ich mich ohne Passwortabfrage nicht mit Kerberos anmelden kann. Ein identisch konfigurierter Ubuntu 12.04-Host funktioniert einwandfrei und kann sich anmelden, ohne eine Kennwortabfrage zu erhalten.

Nach einer Kinit gibt klist:

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: boti@REALM

Valid starting    Expires           Service principal
14/02/2013 16:37  15/02/2013 16:37  krbtgt/REALM@REALM

Wenn ich jetzt versuche, mich über ssh bei debian-squeeze anzumelden, wird die Passwortabfrage angezeigt. Wenn ich meine Tickets zu diesem Zeitpunkt ohne Authentifizierung überprüfe, erhalte ich:

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: boti@REALM

Valid starting    Expires           Service principal
14/02/2013 16:37  15/02/2013 16:37  krbtgt/REALM@REALM
14/02/2013 16:38  15/02/2013 16:37  host/debian-squeeze@
14/02/2013 16:38  15/02/2013 16:37  host/debian-squeeze@REALM

Also bekomme ich natürlich ein Ticket gewährt. Das SSH-Debug-Protokoll enthält jedoch:

Postponed gssapi-with-mic for boti from 192.168.255.98 port 59557 ssh2
debug3: mm_request_send entering: type 40
debug3: mm_request_receive_expect entering: type 41
debug3: mm_request_receive entering
debug3: monitor_read: checking request 40
debug1: Unspecified GSS failure.  Minor code may provide more information
Wrong principal in request

Dies ist ziemlich ähnlich, was hier , hier und in diesem Bugreport beschrieben wird .

Mein DNS ist in Ordnung. Ich habe bereits versucht, die Principals / Keys neu zu erstellen. Also half keine der Lösungen, die dort veröffentlicht wurden.

Irgendwelche Hinweise?

b0ti
quelle

Antworten:

6

In der Beispielausgabe sehe ich, dass Sie einen Schlüssel für a debian-squeeze- einen Hostnamen ohne Punkte erhalten haben. Dies beweist, dass Sie Ihre umgekehrte Auflösung so eingerichtet haben, dass sie auf den Kurznamen verweist. Ist das wirklich ein Nicht-FQDN-Name, den Sie sehen, oder wurde er für die Frage bearbeitet?

Kerberos sollte mit beiden funktionieren, aber Sie können überprüfen, ob der Host selbst denkt, dass er aufgerufen wird debian-squeeze. Überprüfen Sie, ob die Suche debian-squeezenach Vorwärts -> Rückwärts wirklich in Folgendes aufgelöst wird debian-squeeze:

$ getent hosts $(hostname) | awk '{print $1; exit}' | xargs getent hosts | awk '{print $2}'

Ich habe noch nicht wirklich davon gehört, dass Kerberos mit Kurznamen bereitgestellt wird. Wenn Sie also die Wahl haben, ist es möglicherweise eine gute Idee, sich an FQDNs zu halten.

Aktualisieren:

Der Client erhält derzeit einen Schlüssel für den Kurznamen, der Server ist jedoch der Ansicht, dass er ordnungsgemäß mit einem Langnamen benannt ist. Höchstwahrscheinlich ist das Problem da. Versuchen Sie zur Sicherheit Folgendes:

  1. Überprüfen Sie die Vorwärts- / Rückwärtsnamensuche vom Client. Dh

    $ getent hosts debian-squeeze | awk '{print $1; exit}' | xargs getent hosts | awk '{print $2}'
    

    Der zurückgegebene Name ist der Name, für den der Kunde versucht, ein Ticket zu erhalten. Nach Ihrer Ausgabe zu urteilen, ist dies wahrscheinlich der Kurzname.

  2. Überprüfen Sie, welche Schlüssel auf dem Server vorhanden sind.

    $ sudo klist -k /etc/krb5.keytab
    Keytab name: WRFILE:/etc/krb5.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
       1 host/debian-squeeze.realm@REALM
       1 host/debian-squeeze.realm@REALM
       1 host/debian-squeeze.realm@REALM
       1 host/debian-squeeze.realm@REALM
    ...
    

    In der Liste sollte ein Prinzipal angezeigt werden, das mit dem Hostnamen des vorherigen Befehls übereinstimmt. Wenn es nicht da ist, dann ist das dein Problem. Wenn es da ist ...

  3. Stellen Sie sicher, dass die Schlüsselversion auf dem Kerberos-Server mit der auf übereinstimmt debian-squeeze. Holen Sie sich auf dem Client explizit einen Schlüssel und überprüfen Sie die "KVNO" -Version am Ende der Zeile:

    $ kvno host/debian-squeeze.realm
    host/debian-squeeze.realm@REALM: kvno = 1
    

In jedem Fall sollten der Hostname und die "kvno" -Version in all diesen Befehlen übereinstimmen.

Chutz
quelle
Der Host heißt "Debian-Squeeze", wie von zurückgegeben hostname. Die IP-Adresse wird wieder dem vollqualifizierten Domänennamen zugeordnet, sodass der von Ihnen angegebene Befehl "debian-squeeze.realm" zurückgibt. Als Randnotiz: Ich habe zwei Schlüssel für diesen Host eingerichtet, einen für den fqdn und einen für den Kurznamen. Könnte das durcheinander bringen?
b0ti
Sehr gut, ich habe meine Antwort mit weiteren Dingen aktualisiert, die Sie überprüfen sollten. Es handelt sich höchstwahrscheinlich um eine Kurznamen- / FQDN-Verwirrung.
Chutz
Vielen Dank! Mein Problem wurde in der Tat durch den zusätzlichen Schlüssel mit dem kurzen Hostnamen verursacht. Ich wünschte nur, es wäre einfacher, solche Probleme zu debuggen, damit die Protokolle angeben, was das problematische Prinzip ist.
B0ti
0

Haben Sie, um die Grundlagen zu behandeln, überprüft, ob die Uhren auf allen Maschinen synchronisiert sind?

Chutz
quelle
Dies sind alle lxc-Container, die auf demselben physischen Host ausgeführt werden. Uhren könnten nicht synchroner sein.
b0ti
0

Ich habe diesen Fehler gesehen, wenn / etc / hosts auf dem Server einen Eintrag für seine IP-Adresse enthält, der nicht mit dem in DNS oder der Keytab übereinstimmt. Haben Sie alle nicht-lokalen Host-Einträge aus / etc / hosts doppelt überprüft (oder entfernt)?

Slushpupie
quelle
DNS ist in Ordnung. Nur localhost-Einträge in / etc / hosts.
b0ti