A autenticação SSH Kerberos falha com "Principal errado na solicitação / Não tenho credenciais de cliente" no squeeze do debian

8

Eu tenho um host debian squeeze no qual não consigo fazer login com o kerberos sem um prompt de senha. Um host ubuntu 12.04 configurado de forma idêntica funciona bem e pode efetuar login sem obter uma solicitação de senha.

Após um kinit, o klist fornece:

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

Agora, quando tento efetuar login através do ssh no debian-squeeze, recebo o prompt de senha. Se eu verificar meus tickets neste momento sem fazer uma autenticação, recebo:

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

Então, obviamente, eu recebo um ingresso concedido. No entanto, o log de depuração ssh fornece:

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

Isso é bastante semelhante ao descrito aqui , aqui e neste relatório de erros .

Meu DNS está bom. Já tentei recriar os principais / chaves. Portanto, nenhuma das soluções ajudou que foram postadas lá.

Alguma dica?

b0ti
fonte
Apenas para cobrir o básico, você verificou se os relógios de todas as máquinas estão sincronizados?
19413 chutz
Esses são todos os contêineres lxc em execução no mesmo host físico. Os relógios não podiam ser mais sincronizados que isso.
b0ti

Respostas:

7

Na saída de amostra, vejo que você tem uma chave para um debian-squeeze- um nome de host sem pontos. Isso meio que prova que você configurou sua resolução reversa para apontar para o nome abreviado. Esse é realmente um nome que não é do FQDN que você vê ou foi editado para a pergunta?

O Kerberos deve funcionar com qualquer um dos dois, mas você pode verificar se o host pensa que é chamado debian-squeeze. Verifique se a pesquisa forward -> reverse dentro debian-squeezerealmente resolve debian-squeeze:

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

Eu realmente não ouvi falar do Kerberos sendo implantado com nomes abreviados; portanto, se você tiver uma escolha, pode ser uma boa ideia manter os FQDNs.

Atualizar:

No momento, o cliente está obtendo uma chave para o nome abreviado, mas o servidor acha que é nomeado corretamente com um nome longo. Provavelmente o problema está aí. Só para ter certeza, tente o seguinte:

  1. Verifique a consulta de nome de avanço / reverso do cliente. Ou seja,

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

    O nome retornado é aquele para o qual o cliente tentará obter um ticket. A julgar pela sua saída, este é provavelmente o nome abreviado.

  2. Verifique quais chaves estão presentes no servidor.

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

    Na lista, você deve ver um principal que corresponde ao nome do host do comando anterior. Se não estiver lá, esse é o seu problema. Se estiver lá ...

  3. Verifique se a versão da chave no servidor kerberos é a mesma que a versão debian-squeeze. No cliente, obtenha uma chave explicitamente e verifique a versão "KVNO" no final da linha:

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

De qualquer forma, o nome do host e a versão "kvno" em todos esses comandos devem corresponder.

chutz
fonte
O host é chamado 'debian-squeeze' conforme retornado por hostname. O IP é mapeado de volta para o FQDN, então o comando que você deu retorna 'debian-squeeze.realm'. Como uma observação lateral: tenho duas chaves configuradas para esse host, uma para o fqdn e outra para o nome abreviado. Isso poderia estar atrapalhando?
b0ti
Muito bem, atualizei minha resposta com outras coisas que você deve verificar. Provavelmente é uma confusão de nome curto / FQDN.
28513 chutz
Muito obrigado! Meu problema foi realmente causado pela chave extra com o nome abreviado do host. Eu só gostaria que fosse mais fácil depurar esses problemas para que os logs indiquem qual é o principal problemático.
b0ti
0

Vi esse erro quando o / etc / hosts no servidor inclui uma entrada para seu endereço IP que não corresponde ao que está no DNS ou no keytab. Você verificou (ou removeu) todas as entradas não localhost de / etc / hosts?

slushpupie
fonte
DNS está bom. Somente entradas de host local em / etc / hosts.
b0ti