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 requerUsePAM yes
eChallengeResponseAuthentication 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 viakeyboard-interactive
logins. (que temos que deixar ativado para OTP) - Autenticação baseada em chave. Precisamos exigir
publickey
authentication e talvezgssapi-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 comauth
esteja presente. Não deve haver se esta for uma instalação limpa, mas é melhor estar seguro. - Adicione uma entrada
auth
parapam_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.