
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 shellacct
grupo inicien sesión. Encontré muchos ejemplos usando pam_filter
in /etc/ldap.conf
pero solo logré que el filtro funcione filtrando userDn
atributos 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 groupDn
escn=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_filter
para lo que quiero hacer o solo busca el userDn
filtrado?
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_groupdn
opción /etc/ldap.conf
para llegar a donde quieras. Lo he usado pam_check_host_attr
para un propósito similar en el pasado y funcionó exactamente como quería (es decir, la entrada LDAP tenía que tener un host
atributo 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.conf
varios 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_succeed
anterior 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