Restringir inicios de sesión de cuenta usando LDAP y PAM

14

Esperaba que algunos gurús de PAM / LDAP pudieran ayudarme aquí. Recientemente configuré un directorio LDAP en Ubuntu Server para mantener cuentas tanto para mis clientes (para usar con sistemas basados ​​en la web) como para el personal (que necesitará iniciar sesión a través de SSH).

La autenticación LDAP funciona perfectamente. Sin embargo no puedo conseguir las restricciones de la cuenta de trabajo: las cuentas del personal tendrán identificadores entre 2001y 2999y será un miembro del ssh-usersgrupo que les permita a los servidores de inicio de sesión.

Las restricciones en cuestión están en /etc/ldap.conf, y están pam_min_uid, pam_max_uidy pam_groupdn.

pam_groupdncontiene el DN completo de mi ssh-usersgrupo. pam_min_uid= 2000y pam_max_uid= 2999.

Ahora, he logrado que funcionen agregando:

account [success=1 default=ignore] pam_ldap.so

por encima de la pam_unix.solínea en /etc/pam.d/common-account. Sin embargo, las cuentas locales de Unix NO pueden iniciar sesión: el servidor SSH corta la conexión tan pronto como lo intentan.

He configurado el pam_ldap.somódulo sufficienten el archivo anterior, pero los usuarios no válidos reciben un mensaje que dice que no pueden iniciar sesión, pero de todos modos los registra.

Entonces, ¿cómo puedo establecer estas restricciones de cuenta para los usuarios de LDAP, al tiempo que sigo permitiendo que los usuarios de UNIX inicien sesión?

Como probablemente pueda adivinar, soy un novato en PAM, aunque he logrado que el módulo "crear directorios de inicio" funcione automáticamente :-)

Muchas gracias Andy

Andy Shellam
fuente

Respuestas:

11

PAM tiene la capacidad de restringir el acceso basado en una lista de control de acceso (al menos en Ubuntu) que, como la respuesta de kubanskamac (+1) considera a los grupos como grupos posix, ya sea que estén almacenados en LDAP /etc/groupo NIS.

/etc/security/access.confes el archivo de la lista de acceso. En mi archivo, pongo al final:

-:ALL EXCEPT root sysadmin (ssh-users):ALL

Esto niega a todos, excepto root, sysadmin y en el grupo ssh-users (que está en LDAP) donde sea que inicien sesión (el segundo ALL).

Luego, en mi archivo de cuenta PAM (este ES un módulo de cuenta), agrego al final:

account required pam_access.so

que le dice a PAM que use este archivo. Funciona de maravilla :-)

Andy Shellam
fuente
Vale la pena señalar que es posible que deba poner pam_access.so al comienzo del archivo de su cuenta PAM para que surta efecto.
crb
5

Simplemente usaría

auth required    pam_listfile.so   sense=accept item=group file=/etc/groups.allow onerr=fail

para permitir solo grupos específicos (tanto para grupos locales como LDAP). De esta manera no tiene que especificar nada ldap.conf.

Si desea mantener la autorización a su manera, no debe filtrar usuarios en el pase de "cuenta". Creo que deberías hacerlo con el pase "auth". En segundo lugar, como puede ver usted mismo, pam_unix procesa cuentas locales y LDAP (al menos en el pase de "cuenta"), por lo que parece que no hay necesidad de pam_ldap.

EDITAR: En tercer lugar, si insiste en tener cosas en el pase de "cuenta" (que creo que podría tener efectos secundarios extraños), su secuencia debería terminar con: ..., "suficiente pam_ldap", "requerido pam_localuser", "requerido pam_unix" . Es decir, si tiene otros módulos, muévalos antes de pam_ldap; de lo contrario, se ignorarían para las cuentas LDAP debido a una cláusula "suficiente".

kubanczyk
fuente
Creo que pam_unix está usando las llamadas getent para recuperar la información de la cuenta, que usa LDAP como en /etc/nsswitch.conf. El instalador del paquete libpam-ldap agregó esas líneas a los archivos de configuración de PAM. La acción predeterminada de pam_groupdn no estaba haciendo nada, y mientras buscaba respuestas, alguien dijo que no surtiría efecto a menos que el módulo pam_ldap.so se usara durante el pase de "cuenta". Si es posible, prefiero mantener la configuración en ldap.conf, ya que está relacionada específicamente con LDAP.
Andy Shellam
(1) Tienes razón sobre pam_unix. (2) Estoy actualizando mi respuesta con el consejo de pam_localuser.
kubanczyk
Todo lo que leo sobre PAM indica que la cuenta es la sección correcta para esto. auth: identifica al usuario y autentica la cuenta de la cuenta: comprueba las características de la cuenta del usuario, como la antigüedad de la contraseña, las restricciones de tiempo de inicio de sesión y las restricciones de inicio de sesión remoto Esto no es un problema de autenticación, porque el nombre de usuario / contraseña es correcto y el usuario puede ser identificado. Es una restricción de cuenta porque no quiero que algunas cuentas puedan iniciar sesión.
Andy Shellam
0

Solo para agregar a @ andy-shellam, aquí está mi common-accountarchivo:

account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore]            pam_ldap.so
account requisite                     pam_deny.so
account required                      pam_access.so
account required                      pam_permit.so
Madeja
fuente