Forçar autenticação de chave pública SSH para usuários específicos

10

É possível forçar usuários específicos a fazer login com chave pública, enquanto permite que outros usuários façam login com senha? Como a autenticação de chave pública (com senha) é mais forte que a autenticação somente por senha, gostaríamos de exigir que os usuários do sistema fizessem login com a chave pública. No entanto, é menos conveniente forçar usuários normais a fazer isso. Em sshd_config, não vejo nenhuma configuração relacionada à política.

Crend King
fonte

Respostas:

11

Você tem poucas opções. Nesta resposta, vou assumir que você tem um sudoersgrupo definido.

Dê uma olhada na sshd_configpágina de manual e procure a Matchdiretiva. Isso permite especificar blocos de configuração que se aplicam apenas a um subconjunto de suas conexões ssh. Você poderia fazer algo assim:

Match Group sudoers
PasswordAuthentication no
ChallengeResponseAuthentication no

Em teoria, você poderia realizar algo semelhante com uma configuração do PAM que simplesmente falharia nas tentativas de autenticação por pessoas do sudoersgrupo. Isso provavelmente envolveria o módulo pam_succeed_if ... você pode adicionar algo como isso à sua authconfiguração do sshd:

auth        requisite     pam_succeed_if.so user notingroup sudoers quiet

Isso significa que apenas pessoas que não fazem parte do sudoersgrupo podem se autenticar via PAM. Observe que isso não foi testado. Você também pode usar o módulo pam_listfile para fazer algo semelhante.

larsks
fonte
1
Obrigado! Devo também observar que a diretiva Match é introduzida no OpenSSH 5.0. Para distribuições conservadoras como o CentOS, pode não estar disponível nativamente.
Crend King
Isso quebra o OpenSSH 7.7p1 - tive que remover a diretiva ChallengeResponseAuthentication para que ela fosse reiniciada.
rbsec 12/09
2

Outra resposta possível, como @larsks, não funcionou para minha versão, ssh_dpois minha versão parece estar usando a documentação encontrada aqui, que afirma:

Somente um subconjunto de palavras-chave pode ser usado nas linhas após uma palavra-chave de correspondência. As palavras-chave disponíveis são. . .

Essa lista de palavras-chave não inclui: ChallengeResponseAuthentication.

Uma maneira realmente divertida que encontrei foi usar o AuthenticationMethodsque, no seu caso, funcionaria assim:

Match Group sudoers
AuthenticationMethods 'publickey'

AuthenticationMethods leva uma lista de valores separados por vírgula que representam uma série de métodos que um usuário deve passar antes de acessar o servidor.

AuthenticationMethods 'publickey,password' forçaria o usuário a passar com uma chave pública e depois uma senha.

Para ler mais man sshd_config.

Breedly
fonte