Forzar la autenticación de clave pública SSH para usuarios específicos

10

¿Es posible forzar a usuarios específicos a iniciar sesión con clave pública, al tiempo que permite que otros usuarios inicien sesión con contraseña? Dado que la autenticación de clave pública (con frase de contraseña) es más fuerte que la autenticación solo con contraseña, nos gustaría exigir a los sudoers que inicien sesión con clave pública. Sin embargo, es menos conveniente obligar a los usuarios normales a hacerlo. En sshd_config, no veo ninguna configuración relacionada con la política.

Rey Crend
fuente

Respuestas:

11

Tienes pocas opciones. En esta respuesta, voy a asumir que tienes un sudoersgrupo definido.

Eche un vistazo a la sshd_configpágina de manual y busque la Matchdirectiva. Esto le permite especificar bloques de configuración que se aplican solo a un subconjunto de sus conexiones ssh. Podrías hacer algo como esto:

Match Group sudoers
PasswordAuthentication no
ChallengeResponseAuthentication no

En teoría, podría lograr algo similar con una configuración PAM que simplemente fallaría en los intentos de autenticación de las personas del sudoersgrupo. Esto probablemente implicaría el módulo pam_succeed_if ... podría agregar algo como esto a su authconfiguración para sshd:

auth        requisite     pam_succeed_if.so user notingroup sudoers quiet

Esto significa que solo las personas que no están en el sudoersgrupo pueden autenticarse a través de PAM. Tenga en cuenta que esto no se ha probado. También puede usar el módulo pam_listfile para hacer algo similar.

larsks
fuente
1
¡Gracias! También debo señalar que la directiva Match se introduce en OpenSSH 5.0. Para distribuciones conservadoras como CentOS, es posible que no esté disponible de forma nativa.
Rey Crend
Esto rompe OpenSSH 7.7p1: tuve que eliminar la directiva ChallengeResponseAuthentication para que se reiniciara.
rbsec
2

Otra posible respuesta, como @larsks, la respuesta no funcionó para mi versión, ssh_dya que mi versión parece estar usando la documentación que se encuentra aquí que dice:

Solo se puede usar un subconjunto de palabras clave en las líneas que siguen a una palabra clave Match. Las palabras clave disponibles son. . .

Esa lista de palabras clave no incluye: ChallengeResponseAuthentication.

Una forma realmente divertida que encontré fue usar lo AuthenticationMethodsque en su caso funcionaría así:

Match Group sudoers
AuthenticationMethods 'publickey'

AuthenticationMethods toma una lista de valores separados por comas que representan una serie de métodos que un usuario debe pasar antes de acceder al servidor.

AuthenticationMethods 'publickey,password' obligaría al usuario a pasar con una clave pública y luego una contraseña.

Para leer más man sshd_config.

Breedly
fuente