Quando faço isso no prompt do bash em um CentOS 6.4
ldapsearch -LLL -H ldap://adserver.example.com -x -D [email protected] -w somepass -b 'OU=Users,DC=example,DC=com' '(&(objectClass=person)(sAMAccountName=testuser))'
Eu obtenho
dn: CN=TestUser Surname,OU=Area,OU=Users,DC=example,DC=com
...
objectClass: person
...
cn: TestUser Surname
sn: Surname
...
distinguishedName: CN=TestUser Surname,OU=Area,OU=Users,DC=example,DC=com
...
memberOf: CN=Group1,OU=Area,OU=Users,DC=example,DC=com
memberOf: CN=Gropu2,OU=Users,DC=example,DC=com
...
sAMAccountName: testuser
Eu quero obter uma resposta apenas se testuser pertencer a um grupo chamado X, independentemente de onde o grupo X está localizado na hierarquia do AD. Por exemplo: Eu quero os dados de um usuário chamado testuser que é um membro de um grupo chamado Group1.
Eu tentei alterar os filtros para:
- (& (objectClass = person) (sAMAccountName = testuser) (memberOf = CN = Grupo1 *))
- (& (objectClass = person) (sAMAccountName = testuser) (memberOf = * Group1 *))
sem sucesso.
Você pode ver na saída acima, testuser pertence aos grupos
- CN = Grupo1, OU = Área, OU = Usuários, DC = exemplo, DC = com
- CN = Gropu2, OU = Usuários, DC = exemplo, DC = com.
Quando eu uso o filtro '(& (objectClass = person) (sAMAccountName = testuser) (memberOf = CN = Grupo1, OU = Área, OU = Usuários, DC = exemplo, DC = com))' funciona, mas preciso de uma consulta apenas com o nome do grupo (não usando o "caminho" completo).
Existe alguma maneira de fazer isso?
Estou tentando fazer isso porque preciso usar grupos definidos pelo Active Directory como ACLs do squid (o proxy do Linux). Para fazer isso, preciso definir um tipo de ACL externo, como
external_acl_type ADGroup %LOGIN /usr/lib64/squid/squid_ldap_group -R -b "OU=Users,DC=example,DC=com" -D [email protected] -w somepass -f "(&(objectclass=person)(sAMAccountName=%u)(memberof=CN=%g,OU=Users,DC=example,DC=com))" -h adserver.example.com
e, em seguida, use o tipo para definir ACLs como este
acl ADGroup_Group1 external ADGroup Group1
acl ADGroup_Group2 external ADGroup Group2
...
http_access allow ADGroup_Group1;
http_access deny ADGroup_Group2;
Quando o squid estiver marcando este "allow", ele substituirá% u pelo nome de login do usuário e% g pelo nome do grupo definido na ACL (Group1, Group2) e depois fará a consulta LDAP acima.
Como você pode ver acima, "http_access allow ADGroup_Group1;" funcionará como pretendido, mas "http_access deny ADGroup_Group2;" não funcionará, porque a OU pai do Grupo1 e do Grupo2 é diferente.
Então eu tenho 3 alternativas:
- Encontre um filtro que funcione para qualquer nome de grupo, independentemente do caminho (esta questão)
- Mova (potencialmente) TODOS Grupos do AD para a mesma UO (ugh ... para mover um objeto para uma OU diferente Irá me trazer mais trabalho do que eu tenho para reajustar os GPOs - ou pelo menos para verificar os GPOs já definidos para qualquer alteração que essa mudança possa trazer)
- Defina (potencialmente) um external_acl_type para cada unidade organizacional com grupos. (Neste caso, terei N processos externos apenas para verificar uma mudança de caminho no filtro LDAP)