Estou tentando há horas configurar corretamente o ssh MFA com a chave pública ou a senha sendo solicitada antes do código OTP no Debian 12.
Atualmente, consigo configurar publickey+MFA e password+MFA, mas não consigo configurar publickey|password+MFA
chave pública+MFA
Editar
/etc/pam.d/sshd
- Comentário
@include common-auth
- Adicione
auth required pam_google_authenticator.so
na linha depois
- Comentário
Crie um arquivo
/etc/ssh/sshd_config.d/mfa.conf
com o seguinte conteúdo
UsePAM yes
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
Com esta configuração consigo logar com publickey+MFA, porém ao usar a senha recebo umaPermission denied (publickey)
senha+MFA
Editar
/etc/pam.d/sshd
- Manter
@include common-auth
- Adicione
auth required pam_google_authenticator.so
na linha depois
- Manter
Crie um arquivo
/etc/ssh/sshd_config.d/mfa.conf
com o seguinte conteúdo
UsePAM yes
ChallengeResponseAuthentication yes
Com esta configuração consigo logar com password+MFA, porém ao utilizar a publickey auth o código OTP não é pedido
Tentei muitas configurações diferentes e fiz muitas pesquisas, mas não consigo encontrar uma maneira de configurar a autenticação como eu quero.
Por exemplo com
AuthenticationMethods publickey,keyboard-interactive password,keyboard-interactive
Consigo efetuar login corretamente com publickey+MFA, mas quando uso a senha recebo a mensagem "Permissão negada", mesmo usando a senha correta.
Eu até tentei usar um arquivo de configuração pam personalizado como segue
auth substack pam_unix.so
auth required pam_google_authenticator.so
auth requisite pam_deny.so
auth required pam_permit.so
Mas nada que tentei funciona corretamente
Não entendo por que é tão difícil configurá-lo, já que o sshd lida com isso nativamente, mas ao adicionar OTP MFA, ele não pode ser conectado diretamente após a autenticação básica do sshd
Se alguém encontrar uma maneira de obter essa configuração, ficarei feliz em saber.
desde já, obrigado
Esse é o problema; não funciona. O
password
mecanismo é, na verdade, terceirizado para o PAM – a mesma pilha /etc/pam.d/sshd é executada para verificar apassword
autenticação e lidar comkeyboard-interactive
a autenticação.Então, se você usar
AuthenticationMethods password,keyboard-interactive
, o que você acabará fazendo é chamar o mesmo pam_google_authenticator duas vezes.Não acho que haja uma boa maneira de implementar seu requisito puramente no lado do sshd, já que a pilha PAM é opaca para o sshd – ela não pode executar metade de uma pilha, é tudo ou nada – e infelizmente o sshd não tem uma maneira de especificar um nome de serviço PAM personalizado para cada método de autenticação, então você não pode fazê-lo usar duas pilhas diferentes dependendo da situação.
(E eu pessoalmente preferiria evitar a situação imediatamente – "chave pública ou senha+MFA" faz um pouco mais de sentido para mim do que "chave pública+MFA", já que o fator adicional pode ser melhor implementado no armazenamento de chaves privadas, como usando tokens de hardware ou certificados de curta duração ou o módulo TPM2 do seu laptop.)
Como nota lateral,
auth substack pam_unix.so
não faz sentido. A palavra-chave 'substack' funciona como 'include' e só aceita outro nome de serviço PAM, comoauth substack common-auth
no Debian; não deve ser usada com um nome de módulo .so.