O usuário autenticado LDAP (slapd) não pode modificar o próprio

2

Sou um novato LDAP total e provavelmente estou cometendo algum erro realmente estúpido, então espero que alguém possa me apontar na direção correta. Estou executando o slapd do openldap 2.4.23, no Linux. O problema que estou tendo é que, a partir da conta de gerenciamento que configurei no slapd.conf (cn = Manager, dc = exemplo, dc = com), posso definir a senha de um usuário final sem problemas:

# ldappasswd -D 'cn=Manager,dc=example,dc=com' -W -S 'uid=tsuraan,ou=People,dc=example,dc=com'

No entanto, do ponto de vista do usuário final, posso executar pesquisas e coisas semelhantes, mas não posso alterar a senha:

$ ldapsearch -x -D "uid=tsuraan,ou=People,dc=example,dc=com" -W  
Enter LDAP Password:
<results>
$ ldappasswd -D 'uid=tsuraan,ou=People,dc=example,dc=com' -W -S 'uid=tsuraan,ou=People,dc=example,dc=com'
New password: 
Re-enter new password: 
Enter LDAP Password: 
Result: Insufficient access (50)

Eu também tentei usar o ldapmodify para alterar diretamente o atributo userPassword, e ele fornece a mesma mensagem de acesso insuficiente (50). Minha seção slapd ACL é assim:

access to *
    by dn="uid=root,ou=People,dc=example,dc=com" write
    by users read
    by self write
    by anonymous auth

access to attrs=userPassword,gecos,description,loginShell
    by self write

access to attrs="userPassword"
    by dn="uid=root,ou=People,dc=example,dc=com" write
    by anonymous auth
    by self write
    by * none

E eu tenho um usuário não-root cujo LDIF se parece com isso:

dn: uid=tsuraan,ou=People,dc=example,dc=com
uid: tsuraan
cn: tsuraan
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {crypt}x
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/tsuraan

O Google não está me dando nenhum amor hoje, e não consigo entender por que meu usuário não pode escrever em seu próprio nó LDAP, pois tenho "por auto-gravação" em todo o lugar, espero que alguém possa me dar uma mão.

    
por tsuraan 25.03.2011 / 18:58

1 resposta

3
Lists  of  access  directives are evaluated in the order they appear in
slapd.conf.  When a <what> clause matches the  datum  whose  access  is
being evaluated, its <who> clause list is checked.  When a <who> clause
matches the accessor's properties, its <access> and  <control>  clauses
are evaluated.  Access control checking stops at the first match of the
<what> and <who> clause, unless otherwise  dictated  by  the  <control>
clause.

A primeira correspondência entre <what> e <who> para tentar alterar a senha é:

access to *
   by users read

Se você mover a cláusula 'access to *' no final da lista, isso deve funcionar bem. Ou apenas trocar a ordem de "por usuários lidos" e "por auto-gravação".

As ACLs são a parte mais complicada da configuração do OpenLDAP, portanto, leia slapd.access(5) com cuidado e tenha certeza de que entendeu completamente como as ACLs funcionam antes de escrever algumas não-triviais.

    
por 25.03.2011 / 20:39

Tags