2 votes

Comment ajouter correctement des ACI à OpenLDAP ?

J'essaie donc d'ajouter quelques ACI à mon système OpenLDAP (hébergé sous CentOS 6). J'ai lu comment d'autres mettent leurs ACI dans bdb comme ceci...

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

Cependant, je veux éviter cela et permettre aux changements de mot de passe de se faire à partir d'un conteneur (et au moins éviter d'utiliser le gestionnaire de répertoire). J'ai lu que quelqu'un faisait cela et que cela fonctionnait de son point de vue :

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");)

Le problème est que, en essayant de l'ajouter, j'obtiens ceci.

\# 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

Je dois faire quelque chose de mal ou mentionner une mauvaise classe d'objets, etc. La question est la suivante : dois-je vraiment tout faire dans bdb.ldif ou est-il possible d'ajouter des ACI de cette façon et quelle que soit la méthode "recommandée" dans ce cas, quelle est la meilleure façon de fournir les ACI dont j'ai besoin pour permettre à un utilisateur de changer son propre mot de passe (sans avoir besoin du gestionnaire de répertoire) ?

Edit : J'ai aussi remarqué qu'avec les lignes olcAccess, ldapsearch ne montre pas la ligne userPassword d'une recherche anonyme.

1voto

Je me suis rendu compte que c'est probablement mieux de le faire à la manière de bdb.ldif. Ce que j'ai fait était comme ci-dessus, mais j'ai fait quelques changements.

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

Ce que j'ai fait à la place, c'est que j'ai étiqueté chaque ligne avec des accolades et un numéro. J'ai également ajouté la possibilité pour un utilisateur de changer son login Shell (parce que j'autorise Bash, ksh et zsh, nous utilisons bash par défaut). J'ai ensuite créé un conteneur groupOfNames à l'intérieur de l'OU Groupe. Comme ceci.

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

Bien sûr, cela nécessite la superposition de memberOf.

La superposition memberOf que j'ai utilisée est ci-dessous :

% 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X