PAM, RADIUS, Google Authenticator e Two Factor Auth

3

Eu configurei o FreeRADIUS, o PAM e o Google Authtenicator. O FreeRADIUS chama o PAM, que por sua vez chama o Google pam_google_authenticator.so libary. Isso tudo funciona com sucesso.

No entanto, isso não é realmente 2 fator auth, como tudo o que se precisa é o OTP do Google App. Para obter dois 2FA, quero usar a senha local do Linux. Como isso ocorre por meio do RADIUS, não posso solicitar as duas senhas e preciso combiná-las em uma. De acordo com o README do Google Auth e vários blogs que encontrei, devo fazer isso no PAM:

   auth requisite pam_google_authenticator.so forward_pass
   auth required pam_unix.so use_first_pass  

E então eu posso colocar a senha e o OTP no mesmo prompt, por exemplo, MyPass123456

Mas isso nunca funciona. Com a depuração ativada, vejo que o pam_unix.so verifica e aceita a senha do usuário, mas falha de qualquer maneira. Se eu remover essa segunda linha, ou alterar 'auth' para 'account' (uma sugestão que encontrei), o auth funciona, mas a senha local é simplesmente ignorada.

Estou faltando alguma coisa na configuração do meu PAM?

    
por Jeff Leyser 29.12.2014 / 21:39

4 respostas

1

Lotes de pesquisa no Google levam-me ao link , que descreve um problema semelhante. Como documentado lá, isso funcionou:

 auth requisite pam_google_authenticator.so forward_pass
 auth required pam_unix.so use_first_pass  
 account required pam_unix.so audit
 account required pam_permit.so

Embora por que isso funcione ainda é um mistério para mim, já que o problema do MySQL é sobre o uso do PAM como não-root, e eu tenho a configuração do FreeRADIUS para rodar como root.

    
por 30.12.2014 / 23:59
0

Se você estiver alterando "auth" para "account", o pam_unix não será mais usado para autenticação.

O que você quer dizer com

pam_unix.so checks and accepts the password from the user, but then fails anyway

Como é a configuração do seu pam para este serviço? Como "obrigatório" significa que a pilha é processada até o final, talvez ela quebre após pam_unix.

Você também pode pensar em usar outro backend de autenticação de dois fatores, que lida com esses dois fatores por si só ... link

    
por 30.12.2014 / 09:53
0

Experimente esta configuração:

   auth requisite  pam_google_authenticator.so forward_pass
   auth sufficient pam_unix.so use_first_pass 

É muito difícil dizer, no entanto, sem ver todas as entradas auth no seu arquivo de configuração pam.

    
por 30.12.2014 / 15:36
0

Você pode fornecer todo o seu arquivo de configuração pam? Se você usa o pam_deny.so depois do pam_unix.so você precisa alterar sua configuração para:

auth [success=1 default=ignore]    pam_unix.so use_first_pass

Especifica que a próxima linha deve ser ignorada se o módulo retornar sucesso.

Toda a configuração para auth:

auth requisite       pam_google_authenticator.so forward_pass
auth [success=1 default=ignore]    pam_unix.so use_first_pass
auth requisite           pam_deny.so
auth required            pam_permit.so

Primeiro, o módulo pam_google_authenticator extrai o TOTP e o verifica.

Em segundo lugar, o módulo pam_unix verifica a senha e, se conseguir, pulará a terceira linha.

    
por 13.03.2015 / 11:33