¿Cómo filtrar los inicios de sesión de usuarios de ldap en Linux?

¿Cómo filtrar los inicios de sesión de usuarios de ldap en Linux?

Tengo varios servidores Linux (ubuntu 12.04) configurados para autenticar los inicios de sesión de los usuarios a través de un LDAP externo (a mi sucursal) (específicamente Novell Edirectory). Esto funciona bien, sin embargo, estoy intentando filtrar los inicios de sesión de los usuarios por membresía en un grupo LDAP.

Una cuenta de usuario tiene este aspecto en Edir:

dn: cn=mmcloud,ou=eng,o=lsi
loginShell: /bin/bash
homeDirectory: /home/mmcloud
gidNumber: 2001
uidNumber: 9418
mail: xxxxxx@xxxxxxxxx
uid: mmcloud
initials: Q
givenName: Moran
sn: McCloud
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: ndsLoginProperties
objectClass: Person
objectClass: Top
objectClass: posixAccount
eMailAddress: 7#xxxxx@xxxxxxxxxxxx
cn: mmcloud

Una entrada de grupo tiene este aspecto en Edir:

dn: cn=shellacct,ou=groups,ou=eng,o=lsi
memberUid: jbarlin
memberUid: mmccloud
memberUid: ssemryn
memberUid: cdesmon
gidNumber: 2009
objectClass: groupOfNames
objectClass: Top
objectClass: posixGroup

Solo quiero que los usuarios del shellacctgrupo inicien sesión. Encontré muchos ejemplos usando pam_filterin /etc/ldap.confpero solo logré que el filtro funcione filtrando userDnatributos específicos como:

 pam_filter                  &(objectclass=user)
 pam_filter                  &(objectclass=Person)
 pam_filter                  &(loginShell=/bin/bash)

Lo que quiero es filtrar por membresía del grupo. el groupDnescn=shellacct,ou=groups,ou=eng,o=lsi (gid=2009). Lo he probado en /etc/ldap.conf:

 pam_filter                  &(objectclass=posixAccount)(|(gidNumber=2009))
 pam_filter                  |(member=cn=shellacct,ou=groups,ou=eng,o=lsi)
 pam_filter                  |(memberUid=cn=shellacct,ou=groups,ou=eng,o=lsi)

¿Funcionará pam_filterpara lo que quiero hacer o solo busca el userDnfiltrado?

Respuesta1

módulo PAMpam_succeed_if.soParece ser ideal para esto. De hecho, lo uso de esta manera en multitud de mis servidores. Una configuración de muestra de Ubuntu 14.04 que autoriza el dominio MS AD, desde /etc/pam.d/common-account:

account         sufficient              pam_unix.so
account         requisite               pam_ldap.so
account         sufficient              pam_succeed_if.so user ingroup unix-admins
account         sufficient              pam_succeed_if.so user ingroup auth-$hostname
account         requisite               pam_deny.so

Sustituya el nombre del servidor por$nombre de host. Ser miembro deadministradores-unixoautenticación-$nombredehostotorga acceso.

También considere usar nslcd(0.9+), ya que reconoce la pertenencia a grupos anidados (indirectos).

Respuesta2

Es posible que puedas utilizar la pam_groupdnopción /etc/ldap.confpara llegar a donde quieras. Lo he usado pam_check_host_attrpara un propósito similar en el pasado y funcionó exactamente como quería (es decir, la entrada LDAP tenía que tener un hostatributo con el nombre de host en el que estás intentando iniciar sesión como valor).

Respuesta3

Sólo quería dejar esto aquí para cualquiera que busque este tipo de cosas. Échale un vistazo /etc/security/access.conf. Reconoce usuarios/grupos/locales/LDAP. Esto es lo que terminé haciendo. Es una buena ventanilla única para las ACL.

Deberá habilitar pam_access.confvarios archivos en/etc/pam.d/

tenga en cuentade actualizaciones del sistema que restablecen estas ediciones. No estoy seguro de cómo solucionarlo. tal vez la mención pam_succeedanterior sería un mejor lugar para ello.

# grep access /etc/pam.d/*
...
/etc/pam.d/login:# Uncomment and edit /etc/security/access.conf if you need to
...
/etc/pam.d/login:account required pam_access.so
/etc/pam.d/sshd:# Uncomment and edit /etc/security/access.conf if you need to set complex
...
/etc/pam.d/sshd:account required pam_access.so

ejemplo access.conf:

# allow root from the backup system
+ : root : 10.10.16.2
# allow root from cron, serial port and tty consoles
+ : root : cron crond :0 ttyS0 tty1 tty2 tty3 tty4 tty5 tty6
# allow ldapusers on 10.0.0.0/8 subnet
+ : ldapuser4 ldapuser1 ldapuser7: 10.0.0.0/8
# allow users in ldap posixGroup on 10.10.16.0 subnet
+ : ldapssh : 10.10.16.0/24
# allow everyone in the localhost sftponly group from anywhere
+ : sftponly : ALL
# drop everyone else from anywhere
- : ALL : ALL

información relacionada