Como filtrar logins de usuários do ldap no linux?

1

Eu tenho vários servidores Linux (Ubuntu 12.04) configurados para autenticar logins de usuário em um LDAP externo (para minha filial) (especificamente no Novell Edirectory). Isso está funcionando bem, mas estou tentando filtrar logins de usuário por associação em um grupo LDAP.

Uma conta de usuário é assim em 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

Uma entrada de grupo é assim em 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

Eu só quero que os usuários no grupo shellacct façam login. Encontrei muitos exemplos usando pam_filter em /etc/ldap.conf , mas só consegui que o filtro funcionasse filtrando atributos específicos de userDn , como:

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

O que eu quero é filtrar os membros do grupo. O groupDn é cn=shellacct,ou=groups,ou=eng,o=lsi (gid = 2009) . Eu tentei em /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)

O pam_filter funcionará para o que eu quero fazer ou apenas o userDn para filtragem?

    
por Server Fault 20.02.2015 / 15:58

3 respostas

0

Só queria deixar isso aqui para qualquer outra pessoa procurando por esse tipo de coisa. Dê uma olhada em /etc/security/access.conf . Ele reconhece usuários / grupos / local / LDAP. Isso é o que acabei fazendo. É um bom ponto de parada para as ACLs.

Você precisará ativar pam_access.conf em vários arquivos em /etc/pam.d/

Esteja ciente das atualizações do sistema redefinindo essas edições. Não tenho certeza de como contornar isso. talvez a menção de pam_succeed acima fosse um lugar melhor para isso.

# 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

exemplo 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
    
por 29.08.2017 / 22:29
1

O módulo PAM pam_succeed_if.so parece ser ideal para isso. Na verdade, eu uso dessa maneira em vários servidores. Uma configuração de amostra do Ubuntu 14.04 autorizando o domínio do MS AD, de /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

Substitua o nome do servidor por $ hostname . Ser um membro de unix-admins ou auth- $ hostname concede acesso.

Considere também o uso de nslcd (0.9+), pois ele reconhece membros do grupo aninhados (indiretos).

    
por 21.02.2015 / 12:15
0

Você pode usar a opção pam_groupdn em /etc/ldap.conf para chegar onde deseja ir. Eu usei pam_check_host_attr para um propósito semelhante no passado e ele funcionou exatamente como eu queria (ou seja, a entrada LDAP tinha que ter um atributo host com o nome do host que você está tentando efetuar como o valor).

    
por 20.02.2015 / 16:23