¿Cómo denegar el acceso a cuentas AD deshabilitadas a través de kerberos en pam_krb5?

10

Tengo un directorio AD / Linux / LDAP / KRB5 y configuración de autenticación en funcionamiento, con un pequeño problema. Cuando una cuenta está deshabilitada, la autenticación de clave pública SSH todavía permite el inicio de sesión del usuario.

Está claro que los clientes kerberos pueden identificar una cuenta deshabilitada, ya que kinit y kpasswd devuelven "Las credenciales de los clientes han sido revocadas" sin más contraseña / interacción.

¿Se puede configurar PAM (con "UsePAM yes" en sshd_config) para no permitir inicios de sesión para cuentas deshabilitadas, donde la autenticación se realiza mediante publickey? Esto no parece funcionar:

account     [default=bad success=ok user_unknown=ignore] pam_krb5.so

No introduzca winbind en su respuesta, no la usamos.

Phil
fuente

Respuestas:

4

He leído en otras partes que otras personas piden que se "repare" SSH para que las cuentas bloqueadas no se puedan iniciar sesión a través de SSH. (vea el error de Debian 219377) Esta solicitud fue rechazada como un parche "porque rompe algunas expectativas de los usuarios [que estaban] acostumbrados a passwd -l solo bloqueando el passwd". (vea el error de Debian 389183), por ejemplo, algunas personas QUERÍAN poder bloquear las cuentas de los inicios de sesión de contraseña, pero aún así permitir el acceso a la clave SSH.

PAM no negará la autenticación de la clave SSH a las cuentas que se acaban de bloquear (por ejemplo, debido a intentos de contraseña no válidos, porque la autenticación de la clave SSH está diseñada para no prestar atención al campo de la contraseña, que es donde generalmente se bloquean las cuentas).

Entiendo que la entrada de hash de contraseña se verifica implícitamente en el momento pam_authenicate (), no en el momento pam_acct_mgmt (). pam_unix.so pam_sm_acct_mgmt () no comprueba el hash de la contraseña en absoluto, y pam_authenticate () no se llama durante la autenticación de clave pública.

Si su intención es poder inhabilitar de forma centralizada las cuentas para que no inicien sesión, existen otras soluciones posibles, que incluyen:

Cambiar el shell de inicio de sesión.

(re) mover su archivo autorizado_claves.

Otra opción para denegar el acceso podría ser el uso de DenyGroups o AllowGroups en sshd_config. (luego agregar al usuario a un grupo "sshdeny" o eliminarlo de un grupo "sshlogin" para deshabilitar el inicio de sesión) (lea aquí: https://help.ubuntu.com/8.04/serverguide/user-management .html )

De http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuL leí: "El problema es que pam_unix comprueba solo las fechas de vencimiento de la entrada oculta, no el contenido del campo de hash de contraseña". Si esto es cierto, ¿ expirar la cuenta en lugar de bloquearla hará lo que necesita?

La respuesta a su pregunta es posiblemente "sí, si los deshabilita en otro lugar que no sea el campo de contraseña"

JohnGH
fuente
4

Hice un poco más de tarea y estoy respondiendo mi propia pregunta.

En pam_krb5 ( pam_krb5-2.3.14-1/src/acct.c) de RedHat , a menos que el módulo participe en la etapa de autenticación, la función pam_sm_acct_mgmt () devuelve PAM_IGNORE o PAM_USER_UNKNOWN dependiendo de la configuración del módulo. Por lo tanto, requeriría cambios en el código pam_krb5 para hacer lo que quiero.

La respuesta de JohnGH es una buena solución; usando atributos "proxy" para transmitir el mismo significado, como romper el shell o agregar a un grupo de "usuarios deshabilitados".

Otra solución (parcialmente probada) es establecer una fecha de vencimiento de la cuenta en el pasado y usar un módulo como pam_unix para fallar las verificaciones de la cuenta. Esto usa LDAP, en lugar de KRB5, pero consulta contra el mismo directorio de usuarios administrado centralmente.

Phil
fuente
2

La autenticación basada en claves SSH es independiente de PAM. Tienes las siguientes soluciones:

  • deshabilitar la autenticación basada en claves en sshd_config
  • cambie y vuelva a compilar sshd y agregue un enlace para que la autenticación basada en teclas verifique también si la cuenta es válida a través de pam.

Si desea utilizar el inicio de sesión sin contraseña a través de kerberos, debe asegurarse de que:

  • no estás usando pam para sshd
  • Tiene Kerberos configurado correctamente. Por ejemplo, puedes hacerkinit -k host/server1.example.com@DOMAIN
  • sshd está configurado para usar gssapi:

    Kerberos Autenticación sí GSSAPIA Autenticación sí GSSAPICleanupCredentials sí UsePAM no

  • utiliza un cliente ssh kerberizado como PuTTY v0.61 o más reciente.

Mircea Vutcovici
fuente
1
No estoy de acuerdo con que la autenticación de clave pública SSH sea independiente de PAM. Agregar account optional pam_echo.so file=/etc/redhat-releasea /etc/pam.d/sshd hace que el contenido del archivo se imprima mientras se utilizan inicios de sesión de autenticación basados ​​en claves (pruébelo).
Phil
Creo que pam se usa solo para la cuenta (por ejemplo, para crear la carpeta de inicio) y no para la autenticación. Estoy revisando este caso ahora.
Mircea Vutcovici