Como permitir que um grupo altere senhas de usuários?

3

Eu tenho a seguinte configuração do servidor openldap:

access to attrs=userPassword
    by self write
    by anonymous auth
    by set="[cn=users,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
    by * none

# Allow everybody adding and changing Contacts
access to dn.subtree="ou=Contacts,dc=my-company,dc=de"
    by set="[cn=users,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write 
    by * read

access to *
    by self write
    by dn.base="cn=admin,dc=my-company,dc=de" write
    by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
    by * read

O que deve fazer é isto:

  1. permite que todos alterem sua própria senha
  2. permite que todos os usuários adicionem e alterem contatos
  3. permite que todos no grupo "sysadm" alterem tudo

O problema é que os sysadms não podem alterar nenhuma senha de usuário. Alguma dica?

    
por Tim Büthe 12.10.2009 / 09:48

3 respostas

1

Citando o guia de administração do OpenLDAP :

The order of evaluation of access directives makes their placement in the configuration file important. If one access directive is more specific than another in terms of the entries it selects, it should appear first in the config file. Similarly, if one selector is more specific than another it should come first in the access directive.

Para encurtar a história, tente o seguinte:

access to attrs=userPassword
    by dn.base="cn=admin,dc=my-company,dc=de" write
    by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
    by self write
    by anonymous auth
    by * none

# Allow everybody adding and changing Contacts
access to dn.subtree="ou=Contacts,dc=my-company,dc=de"
    by dn.base="cn=admin,dc=my-company,dc=de" write
    by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
    by set="[cn=users,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write 
    by * read

access to *
    by dn.base="cn=admin,dc=my-company,dc=de" write
    by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
    by self write
    by * read

BTW, você realmente deseja conceder a todos os usuários acesso a todos os atributos de seu próprio objeto (' acesso a * ... por auto-gravação ')? Como você está limitando o acesso de gravação ao atributo userPassword somente na primeira ACL, eu diria que não é o que você queria.

    
por 27.11.2009 / 12:06
0

O que acontece se você fizer isso?

access to dn.subtree"[cn=users,ou=Group,dc=my-company,dc=de]"
by self write
by dn.base="cn=admin,dc=my-company,dc=de" write
by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write
by * read
    
por 12.10.2009 / 15:56
0

O IIRC slapd usa a primeira regra de correspondência. Como o primeiro bloco corresponde ao userPassword, mas não permite que os administradores de sistema modifiquem, eles não podem modificar.

    
por 27.11.2009 / 08:45