O ssh pode gerar um ticket do kerberos? (FreeBSD)

2

TL; DR

Eu quero ser capaz de fazer ssh de um host do FreeBSD para um host do FreeBSD, usando meu tíquete do kerberos gerado quando eu entrei pela primeira vez.

Pergunta

Ambiente

FreeBSD 10.3 com o trabalho openldap-sasl-client, kerberos 5 (não heimdal), sssd, ssh e associado ao Active Directory (2008 R2). Eu tive que compilar o sssd do local de origem / usr / ports porque, por padrão, o sssd-ad não está incluído, o que eu preciso. Eu não estou usando winbind, então a referência 1 não é útil. (Nem o FreeBSD tem um comando authconfig, aparentemente). Posso executar um kinit bem:

[bgstack15@localhost /]$ kinit
[email protected]'s Password:
[bgstack15@localhost /]$ klist
Credentials cache: FILE:/tmp/krb5cc_5532829429
        Principal: [email protected]

  Issued                Expires               Principal
Aug 18 16:01:16 2016  Aug 19 02:01:16 2016  krbtgt/[email protected]

Depois disso, posso ssh -K secondhost e isso me leva até lá.

O problema é que eu quero ser capaz de gerar um ticket do Kerberos ao fazer o login, ou pelo menos para que eu não tenha que digitar minha senha. Eu usei a autenticação GSSAPI para chegar ao localhost, então eu entrei com um ticket do kerberos. Posso passar por isso, talvez?

O que eu já tentei

Aqui está o meu /etc/pam.d/sshd

auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
auth            sufficient      pam_unix.so             no_warn
auth            sufficient      pam_krb5.so             no_warn use_first_pass forwardable ccache=krb5cc_%u
auth            required        pam_unix.so             no_warn try_first_pass

account         required        pam_nologin.so
account         required        pam_login_access.so
account         sufficient      /usr/local/lib/pam_sss.so       ignore_unknown_user
account         required        pam_unix.so

session         optional /usr/local/lib/pam_sss.so
session         required        /usr/local/lib/pam_mkhomedir.so mode=0700
session         required        pam_permit.so

password        sufficient      /usr/local/lib/pam_sss.so       use_authtok
password        sufficient      pam_krb5.so             use_authtok forwardable
password        required        pam_unix.so             no_warn try_first_pass

Eu também tentei usar auth sufficient pam_krb5.so no_warn try_first_pass forwardable ccache=krb5cc_%u

Existe uma opção para executar apenas kinit no .profile, mas estou tentando evitar inserir a senha.

Está usando pam_exec.so como opção? Eu posso fazer echo PASSWORD | kinit --password-file=STDIN que funciona, então posso chamar isso de alguma forma?

Referências

  1. Semelhante a esse cara, mas no FreeBSD 10.3 Initialize Kerberos ticket on ssh login usando o PAM
  2. man pam_krb5.so link
  3. Semelhante, mas não contorna o problema sem senha Obter tíquete Kerberos com SSH
  4. link
por bgStack15 18.08.2016 / 22:26

2 respostas

0

Parece que o seu cliente ssh (PuTTY) não está delegando credenciais. Nenhuma quantidade de truques pam vai contornar isso sem fazer com que você redigite sua senha, o que preferiria frustrar o ponto.

Eu não consigo fazer putty 0.67 delegado, mesmo com a provável opção marcada. A linha de aceitação a que você está se referindo parece ser o log de sshd da autenticação, não a delegação. Por padrão, o sshd não registra a delegação. Olhando para o log de pacotes SSH, o putty 0.67 nem parece fazer a tentativa.

    
por 19.08.2016 / 18:10
3

Editar:

Como o login com uma senha não ajudou você (nos comentários), talvez seja necessário ajustar também as configurações de /etc/krb5.conf . Você precisa fazer com que isso funcione com logins interativos antes de passar para a solução de problemas de logins GSSAPI.

[libdefaults]
        default_realm = EXAMPLE.COM

# The following krb5.conf variables are only for MIT Kerberos.
        krb4_config = /etc/krb.conf
        krb4_realms = /etc/krb.realms
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true

A resposta original segue.

The issue is I want to be able to generate a Kerberos ticket upon logging in, or at least so I don't have to enter my password in, at all. I used GSSAPI auth to get to localhost, so I got in with a kerberos ticket. Can I pass that one along, perhaps?

Eu suspeito que este é o seu problema, na verdade. Quando você autentica em sshd com GSSAPI (ou qualquer outra forma de autenticação baseada em chave), você está ignorando completamente a pilha auth . Isso evita que os módulos PAM solicitem qualquer forma de credencial interativa, mas também evita que os "recursos de conveniência" que o seu módulo implementou na pilha sejam disparados. Um teste rápido seria fazer o login com sua senha e executar klist , o que eu suspeito strongmente que mostrará o resultado que você esperava.

A implementação pam_krb5 com a qual tenho mais experiência é aquela hospedada por eyrie.org ( Russ Allbery) , então vou usá-lo como um ponto de comparação com a documentação que você vinculou. Você pode encontrar a manpage que estou citando aqui .

Ambos os módulos implementam pam_setcred() na pilha auth :

  • FreeBSD:

    The Kerberos 5 authentication component provides functions to verify the identity of a user (pam_sm_authenticate()) and to set user specific credentials (pam_sm_setcred()).

  • eyrie.org:

    Provides implementations of pam_authenticate() and pam_setcred(). The former takes the username from the PAM session, prompts for the user's password (unless configured to use an already-entered password), and then performs a Kerberos initial authentication, storing the obtained credentials (if successful) in a temporary ticket cache. The latter, depending on the flags it is called with, either takes the contents of the temporary ticket cache and writes it out to a persistent ticket cache owned by the user or uses the temporary ticket cache to refresh an existing user ticket cache.

Nenhum módulo implementa pam_setcred() na pilha account :

  • FreeBSD:

    The Kerberos 5 account management component provides a function to perform account management, pam_sm_acct_mgmt(). The function verifies that the authenticated principal is allowed to login to the local user account by calling krb5_kuserok() (which checks the user's .k5login file).

  • eyrie.org:

    Provides an implementation of pam_acct_mgmt(). All it does is do the same authorization check as performed by the pam_authenticate() implementation described above.

O módulo Russ Allbery implementa pam_setcred() na pilha session . O módulo FreeBSD faz nada quando chamado pela pilha session .

  • FreeBSD:

    The Kerberos 5 session management component provides functions to initiate (pam_sm_open_session()) and terminate (pam_sm_close_session()) sessions. Since session management is not defined under Kerberos 5, both of these functions simply return success. They are provided only because of the naming conventions for PAM modules.

  • eyrie.org:

    Provides implementations of pam_open_session(), which is equivalent to calling pam_setcred() with the PAM_ESTABLISH_CRED flag, and pam_close_session(), which destroys the ticket cache created by pam_setcred().

Em suma, você precisa de um módulo PAM que forneça a funcionalidade desejada nas pilhas account ou session . Parece que o seu atual não atenderá a essa necessidade quando você se autenticar via GSSAPI.

    
por 19.08.2016 / 06:21