
Eu tenho vários servidores Linux (ubuntu 12.04) configurados para autenticar logins de usuários em um LDAP externo (para minha filial) (especificamente Novell Edirectory). Isso está funcionando bem, mas estou tentando filtrar logins de usuários por associação a um grupo LDAP.
Uma conta de usuário fica assim no 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 fica assim no 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
Quero apenas que os usuários do shellacct
grupo façam login. Encontrei muitos exemplos usando pam_filter
in /etc/ldap.conf
, mas só consegui que o filtro funcionasse filtrando userDn
atributos específicos, como:
pam_filter &(objectclass=user)
pam_filter &(objectclass=Person)
pam_filter &(loginShell=/bin/bash)
O que eu quero é filtrar a associação 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)
Funcionará pam_filter
para o que eu quero fazer ou apenas olha userDn
para filtragem?
Responder1
Módulo PAMpam_succeed_if.soparece ser ideal para isso. Na verdade, eu uso dessa forma em vários dos meus servidores. Um exemplo de configuração do Ubuntu 14.04 autorizando o domínio 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$nome do host. Ser membro deadministradores unixouauth-$hostnameconcede acesso.
Considere também usar nslcd
(0.9+), pois ele reconhece a associação a grupos aninhados (indiretos).
Responder2
Você pode usar a pam_groupdn
opção /etc/ldap.conf
para chegar aonde deseja. Eu usei pam_check_host_attr
para uma finalidade semelhante no passado e funcionou exatamente como eu queria (ou seja, a entrada LDAP precisava ter um host
atributo com o nome do host no qual você está tentando fazer login como valor).
Responder3
Só queria deixar isso aqui para quem procura esse tipo de coisa. Dê uma olhada em /etc/security/access.conf
. Ele reconhece usuários/grupos/local/LDAP. Foi isso que acabei fazendo. É um ótimo balcão único para ACLs.
Você precisará ativar pam_access.conf
vários arquivos em/etc/pam.d/
Esteja cientede atualizações do sistema redefinindo essas edições. Não tenho certeza de como contornar isso. talvez a menção 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