Como negar o acesso a contas desativadas do AD via kerberos no pam_krb5?

10

Tenho uma configuração de diretório e autenticação AD / Linux / LDAP / KRB5 em funcionamento, com um pequeno problema. Quando uma conta é desativada, a autenticação de chave pública SSH ainda permite o login do usuário.

Está claro que os clientes do kerberos podem identificar uma conta desativada, pois o kinit e o kpasswd retornam "As credenciais dos clientes foram revogadas" sem nenhuma senha / interação adicional.

O PAM pode ser configurado (com "UsePAM yes" em sshd_config) para proibir logins de contas desabilitadas, onde a autenticação é feita por chave pública? Isso não parece funcionar:

account     [default=bad success=ok user_unknown=ignore] pam_krb5.so

Por favor, não introduza o winbind na sua resposta - nós não o usamos.

Phil
fonte

Respostas:

4

Eu li em outros lugares outras pessoas pedindo que o SSH fosse "corrigido" para que as contas bloqueadas não possam ser conectadas via SSH. (veja o bug da Debian 219377) Esta solicitação foi rejeitada como um patch "porque quebra algumas expectativas dos usuários que estavam acostumados a passar o passwd -l apenas bloqueando o passwd." (veja o bug da Debian 389183), por exemplo, algumas pessoas QUERAM poder bloquear contas de logins com senhas, mas ainda permitem o acesso à chave SSH.

O PAM não negará a autenticação de chave SSH para contas que acabaram de ser bloqueadas (por exemplo, devido a tentativas inválidas de senha, porque a autenticação de chave SSH foi projetada para não prestar atenção ao campo de senha, que é onde as contas geralmente são bloqueadas.)

Entendo que a entrada de hash da senha é implicitamente verificada no horário pam_authenicate (), não no horário pam_acct_mgmt (). pam_unix.so pam_sm_acct_mgmt () não verifica o hash da senha e pam_authenticate () não é chamado durante a autenticação de chave pública.

Se sua intenção é poder desativar centralmente as contas do logon, existem outras soluções possíveis, incluindo:

Alterando o shell de login.

(re) movendo seu arquivo allowed_keys.

Outra opção para negar o acesso pode ser o uso de DenyGroups ou AllowGroups no sshd_config. (adicionando o usuário a um grupo "sshdeny" ou removendo-o de um grupo "sshlogin" para desativá-lo.) (leia aqui: https://help.ubuntu.com/8.04/serverguide/user-management .html )

Em http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuL , li: "O problema é pam_unix verifica apenas as datas de vencimento da entrada de sombra, e não o conteúdo do campo de hash da senha". Se isso for verdade, expirar a conta em vez de bloqueá-la faria o que você precisa?

A resposta para sua pergunta é possivelmente "sim, se você as estiver desativando em outro lugar que não seja o campo da senha"

JohnGH
fonte
4

Fiz mais trabalhos de casa e estou respondendo à minha própria pergunta.

No pam_krb5 ( pam_krb5-2.3.14-1/src/acct.c) do RedHat , a menos que o módulo tenha participado do estágio de autenticação, a função pam_sm_acct_mgmt () retornará PAM_IGNORE ou PAM_USER_UNKNOWN, dependendo da configuração do módulo. Portanto, exigiria alterações no código pam_krb5 para fazer o que eu quero.

A resposta de JohnGH é uma boa solução alternativa; usando atributos "proxy" para transmitir o mesmo significado, como quebrar o shell ou adicionar a um grupo "usuários desabilitados".

Outra solução alternativa (testada parcialmente) é definir uma data de validade da conta no passado e usar um módulo como pam_unix para falhar nas verificações da conta. Isso usa LDAP, em vez de KRB5, mas consulta no mesmo diretório de usuários gerenciado centralmente.

Phil
fonte
2

A autenticação baseada em chave SSH é independente do PAM. Você tem as seguintes soluções:

  • desabilitar a autenticação baseada em chave no sshd_config
  • mude e recompile o sshd e adicione um gancho para que a autenticação baseada em chave verifique também se a conta é válida via pam.

Se você deseja usar o login sem senha via kerberos, verifique se:

  • você não está usando pam para sshd
  • você possui o kerberos configurado corretamente. Por exemplo, você pode fazerkinit -k host/server1.example.com@DOMAIN
  • seu sshd está configurado para usar o gssapi:

    KerberosAuthentication sim GSSAPIAutenticação sim GSSAPICleanupCredentials sim UsePAM não

  • você usa um cliente ssh kerberizado como o PuTTY v0.61 ou mais recente.

Mircea Vutcovici
fonte
1
Não concordo que a autenticação de chave pública SSH seja independente do PAM. Adicionar account optional pam_echo.so file=/etc/redhat-releaseao /etc/pam.d/sshd faz com que o conteúdo do arquivo seja impresso enquanto você usa logins de autenticação baseados em chave (tente).
Phil
Eu acho que o pam é usado apenas para a conta (por exemplo, para criar a pasta pessoal) e não para o auth. Estou verificando este caso agora.
Mircea Vutcovici 12/12/12