Como adicionar ACIs ao OpenLDAP corretamente

2

Por isso, estou tentando adicionar algumas ACIs ao meu sistema OpenLDAP (hospedagem no CentOS 6). Eu li como os outros colocam suas ACIs em bdb assim ...

olcAccess: to attrs=userPassword,shadowLastChange by dn="cn=manager,dc=bromosapien,dc=net" write by anonymous auth by self write by * none
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=manager,dc=bromosapien,dc=net" write by * read

No entanto, quero evitar isso e permitir que as alterações de senha ocorram em um contêiner (e pelo menos evitar o uso do Gerenciador de diretórios). Eu leio alguém fazendo isso que funciona a partir da perspectiva deles:

dn: ou=People,dc=bromosapien,dc=net
changetype: modify
add: aci
aci: (targetattr = "userpassword || telephonenumber")(version 3.0; acl "Allow self entry modification"; allow (write)(userdn = "ldap:///self");)

O problema é, tentando adicionar, eu entendo isso.

# ldapadd -xWD "cn=manager,dc=bromosapien,dc=net" -f aci-password.ldif 
Enter LDAP Password: 
modifying entry "ou=People,dc=bromosapien,dc=net"
ldap_modify: Undefined attribute type (17)
        additional info: aci: attribute type undefined

Eu devo estar fazendo algo errado ou mencionar uma classe de objeto errada, etc. A questão é, realmente deveria estar fazendo tudo em bdb.ldif ou é possível adicionar ACIs dessa forma e qualquer método é "recomendado" neste caso , qual é a melhor maneira de fornecer as ACIs? Eu preciso permitir que um usuário altere sua própria senha (sem a necessidade do gerenciador de diretório)?

Edit: Eu também notei com as linhas olcAccess, o ldapsearch não mostra a linha userPassword de uma pesquisa anônima.

    
por Sokel 17.07.2013 / 00:16

1 resposta

1

Descobri que provavelmente é melhor fazer isso do jeito bdb.ldif. O que fiz foi como o acima, mas fiz algumas alterações.

olcAccess: {0}to attrs=userPassword,shadowLastChange,loginShell by dn="cn=manager,dc=bromosapien,dc=net" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=manager,dc=bromosapien,dc=net" write by group.exact="cn=LDAPADMIN,ou=Group,dc=bromosapien,dc=net" write by * read

O que eu fiz foi, eu rotulei cada linha com chaves e um número. Eu também adicionei a habilidade de um usuário mudar seu shell de login (porque eu permito o Bash, o ksh eo zsh, o padrão é o bash). Em seguida, criei um contêiner groupOfNames dentro da OU Group. Assim.

dn: cn=LDAPADMIN,ou=Group,dc=bromosapien,dc=net
objectClass: groupOfNames
objectClass: top
cn: LDAPADMIN
member: uid=zera,ou=People,dc=angelsofclockwork,dc=net
member: uid=sithlord,ou=People,dc=angelsofclockwork,dc=net

Claro, isso requer a sobreposição de memberOf.

A sobreposição de memberOf que usei está abaixo:

% vi modules.ldif

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: memberof

% vi memberof.ldif

dn: olcOverlay=memberof,olcDatabase={2}bdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
    
por 17.07.2013 / 17:09