Como usar o servidor ssh com o PAM mas não permitir a senha auth?

7

Muitos tutoriais dizem para você configurar seu servidor ssh assim:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

mas com essa configuração você não pode usar o PAM, já que planejo usar o 2 Factor Auth com o Google Authenticator (senha OTP Onetime) eu preciso do PAM.

Então, como configurar um debian jessie ssh deamon, se eu quiser evitar o login com a senha normal, mas ainda permitir usar o PAM.

talvez a pergunta exata seja como configurar o pam para não permitir senhas?

Details on PAM Authentication

Disabling PAM-based password authentication is rather un-intuitive. It is needed on pretty much all GNU/Linux distributions (with the notable exception of Slackware), along with FreeBSD. If you're not careful, you can have PasswordAuthentication set to 'no' and still login with just a password through PAM authentication. It turns out that you need to set 'ChallengeResponseAuthentication' to 'no' in order to truly disable PAM authentication. The FreeBSD man pages have this to say, which may help to clarify the situation a bit:

Note that if ChallengeResponseAuthentication is 'yes', and the PAM authentication policy for sshd includes pam_unix(8), password authentication will be allowed through the challenge-response mechanism regardless of the value of PasswordAuthentication.

link

    
por c33s 09.06.2016 / 23:01

2 respostas

12

maybe the exact question is how to configure pam to disallow passwords?

Correto. Você já se deparou com o fato de que definir UsePAM no geralmente é um mau conselho. Ele não apenas impede qualquer forma de autenticação baseada em PAM, mas também desabilita os módulos account e session . Controle de acesso e configuração de sessão são coisas boas.

Primeiro, vamos criar uma lista de requisitos:

  • OTP via pam_google_authenticator.so . Isso requer UsePAM yes e ChallengeResponseAuthentication yes . Você está solicitando-lhes uma credencial, afinal!
  • Nenhuma outra forma de autenticação de senha via PAM. Isso significa desabilitar qualquer módulo auth que possa permitir que uma senha seja transmitida via keyboard-interactive logins. (que temos que deixar ativado para OTP)
  • Autenticação baseada em chave. Precisamos exigir publickey authentication e talvez gssapi-with-mic se você tiver o Kerberos configurado.

Normalmente, a autenticação com uma chave ignora totalmente a autenticação baseada em PAM. Isso teria nos parado em nossas trilhas com versões mais antigas do openssh, mas o Debian 8 (jessie) suporta a diretiva AuthenticationMethods . Isso nos permite exigir vários métodos de autenticação, mas só funciona com os clientes que implementam o SSHv2.

config sshd

Abaixo estão as linhas que eu sugiro para /etc/ssh/sshd_config . Certifique-se de ter uma maneira de acessar este sistema sem sshd caso você quebre alguma coisa!

# Require local root only
PermitRootLogin no

# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes

# Not needed for OTP logins
PasswordAuthentication no

# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive

# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive

Não se esqueça de recarregar sshd depois que essas alterações forem feitas.

Configuração do PAM

Ainda precisamos configurar o PAM. Assumindo uma instalação limpa do Debian 8 (por sua pergunta):

  • Comentário @include common-auth de /etc/pam.d/sshd .
  • Revise /etc/pam.d/sshd e confirme que nenhuma linha que comece com auth esteja presente. Não deve haver se esta for uma instalação limpa, mas é melhor estar seguro.
  • Adicione uma entrada auth para pam_google_authenticator.so .

Lembre-se de que as senhas locais ainda funcionam.

Não fizemos alterações que causassem impacto nos logins por meio de um console local ou impedissem que os usuários usassem senhas para atualizar seus privilégios por meio de sudo. . Isso estava fora do escopo da questão. Se você decidir levar as coisas adiante, lembre-se de que o root deve sempre ter permissão para fazer login localmente por meio de senha. Você corre o risco de se desligar do sistema acidentalmente de outra forma.

    
por 10.06.2016 / 00:12
0

para não permitir a solicitação de senha

comente esta linha

#auth       substack     password-auth

em /etc/pam.d/sshd

e certifique-se de não ter nullok no final desta linha, a menos que seja bom autenticar via ssh sem usar OTP

auth required pam_google_authenticator.so
    
por 17.11.2017 / 10:48

Tags