L'autenticazione Kerberos SSH ha esito negativo con "Principale errato nella richiesta / Nessuna credenziale client" nella compressione debian


8

Ho un host debian squeeze in cui non riesco ad accedere con Kerberos senza una richiesta di password. Un host ubuntu 12.04 configurato in modo identico funziona correttamente e può accedere senza ottenere una richiesta di password.

Dopo un parente, la lista dà:

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

Ora quando provo ad accedere su ssh in debian-squeeze mi viene presentato il prompt della password. Se controllo i miei biglietti a questo punto senza fare un'autorizzazione, ottengo:

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

Quindi ovviamente ottengo un biglietto concesso. Eppure il registro di debug di ssh fornisce:

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

Questo è abbastanza simile a ciò che è descritto qui , qui e in questo report bug .

Il mio DNS va bene. Ho già provato a ricreare i principali / i tasti. Quindi nessuna delle soluzioni ha aiutato che sono state pubblicate lì.

Qualche suggerimento?


Solo per coprire le basi, hai verificato se gli orologi su tutte le macchine sono sincronizzati?
Chutz,

Questi sono tutti contenitori lxc in esecuzione sullo stesso host fisico. Gli orologi non potrebbero essere più sincronizzati di così.
dal

Risposte:


7

Nell'output di esempio vedo che hai una chiave per un debian-squeeze- un nome host senza punti. Questo in qualche modo dimostra che hai impostato la risoluzione inversa in modo che punti al nome breve. È davvero un nome non FQDN che vedi o è stato modificato per la domanda?

Kerberos dovrebbe funzionare con entrambi, ma è possibile verificare due volte che l'host stesso pensi che sia chiamato debian-squeeze. Verifica che l'avanzamento -> ricerca inversa all'interno debian-squeezerisolva davvero a debian-squeeze:

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

Non ho davvero sentito parlare di Kerberos distribuito con nomi brevi, quindi se hai una scelta, potrebbe essere una buona idea attenersi ai nomi di dominio completi.

Aggiornare:

Il client sta attualmente ricevendo una chiave per il nome breve, ma il server pensa che sia correttamente chiamato con un nome lungo. Molto probabilmente il problema è lì. Per sicurezza, prova quanto segue:

  1. Controllare la ricerca del nome avanti / indietro dal client. ie

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

    Il nome restituito è quello per cui il client tenterà di ottenere un ticket. A giudicare dall'output, questo è probabilmente il nome breve.

  2. Controlla quali chiavi sono presenti sul server.

    $ 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
    ...
    

    Nell'elenco dovresti vedere un'entità che corrisponde al nome host del comando precedente. Se non è lì, allora questo è il tuo problema. Se è lì ...

  3. Verificare che la versione della chiave sul server Kerberos sia la stessa di quella attivata debian-squeeze. Sul client, ottenere una chiave in modo esplicito e verificare la versione "KVNO" alla fine della riga:

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

Ad ogni modo, il nome host e la versione "kvno" in tutti questi comandi dovrebbero corrispondere.


L'host viene chiamato "debian-squeeze" come restituito da hostname. L'IP viene mappato su FQDN, quindi il comando che hai dato restituisce 'debian-squeeze.realm'. Come nota a margine: ho due chiavi impostate per questo host, una per il fqdn e una per il nome breve. Potrebbe essere un casino?
dal

Molto bene, ho aggiornato la mia risposta con ulteriori cose che dovresti controllare. È molto probabilmente una confusione di nome breve / nome di dominio completo.
Chutz,

Molte grazie! Il mio problema era in effetti causato dalla chiave aggiuntiva con il nome host breve. Vorrei solo che sarebbe più facile eseguire il debug di tali problemi in modo che i registri indichino qual è il principale problematico.
dal

0

Ho visto questo errore quando / etc / hosts sul server include una voce per il suo indirizzo IP che non corrisponde a ciò che è nel DNS o nel keytab. Hai ricontrollato (o rimosso) tutte le voci non localhost da / etc / hosts?


DNS va bene. Solo voci localhost in / etc / hosts.
dal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.