19 mars 2024

Tuto Openldap, partie IV : Modification des données

Quatrième partie de la série de tuto sur OpenLDAP consacrée à la modification des données.

Après avoir vu l’installation, les overlays et inséré nos premières données, voyons maintenant comment les modifier.

Avant tout, rappelons que nous pouvons en gros séparer les objets que nous manipulons en quatre familles (il y en a plus, mais je fais simple)

Les schémas (nous verrons cela en détail dans un autre article)

Les OU, qui sont des conteneurs.

Les entrées : groupes, utilisateur, etc…

Les attributs, rattachés aux entrées.

 

I – Préparatif rapide

Nous allons utiliser énormément les commande ldapsearch et ldapmodify.

Du coup, afin d’aller plus vite nous allons créer des alias.

Éditez le fichier /root/.bashrc pour y ajouter :

alias lmodif='ldapmodify -cxWD cn=admin,dc=debugo,dc=fr -y /root/pwdldap'
alias lsearch='ldapsearch -xLLL -H ldap://localhost -D cn=admin,dc=debugo,dc=fr -y /root/pwdldap'
alias ladd='ldapadd -cxWD cn=admin,dc=debugo,dc=fr -y /root/pwdldap'
alias ldel='ldapdelete -cxWD cn=admin,dc=debugo,dc=fr -y /root/pwdldap'

Puis pour recharger le fichier :

# source ~/.bashrc

Dorénavant, il n’y aura plus tout à saisir…

II – OU

Tout d’abord, listons ce qui est présent

# lsearch -b "dc=debugo,dc=fr" "objectClass=organizationalUnit"

A – Ajout d’une OU

Je vais profiter de cette partie sur les OU pour expliquer les trois commandes à notre disposition pour modifier les données de l’annuaire : ldapadd, ldapmodify et ldapdelete.

ldapadd est un alias de ldapmodify -a, le commutateur -a indiquant un ajout. Ce commutateur peut être remplacé par la ligne changetype: add dans le fichier ldif.

Ainsi, pour ajouter une OU par ex avec le fichier addou.ldif :

dn: ou=test,ou=people,dc=debugo,dc=fr
ou: test
objectClass: organizationalUnit

Injection :

# ldapadd -cxWD cn=admin,dc=debugo,dc=fr -y /root/pwdldap -f addou.ldif

ou

# ldapmodify -cxWD cn=admin,dc=debugo,dc=fr -y /root/pwdldap -a -f addou.ldif

Autre méthode avec le ficher addou.ldif :

dn: ou=test,ou=people,dc=debugo,dc=fr
changetype: add
ou: test
objectClass: organizationalUnit

Injection

# ldapmodify -cxWD cn=admin,dc=debugo,dc=fr -y /root/pwdldap -f addou.ldif

Ces trois façons de faire donnent le même résultat.

L’avantage de tout faire par ex avec ldapmodify est que l’on peut effectuer plusieurs opérations en un fichier, le tout étant de laisser une ligne avec – entre chaque opération.

Exemple avec le fichier test.ldif :

dn: ou=test,ou=people,dc=debugo,dc=fr
changetype: add
ou: test
objectClass: organizationalUnit
-
dn: uid=toto,ou=debugo,ou=people,dc=debugo,dc=fr
changetype: delete

Dans ce fichier, nous ajoutons une OU puis nous supprimons un utilisateur. Il n’y a pas de limite d’opérations que l’on peut effectuer en une fois.

B – Modification d’une OU

Nous renommons l’OU test en newtest avec le fichier chgou.ldif :

dn: ou=test,ou=people,dc=debugo,dc=fr
changetype: modrdn
newrdn: ou=newtest
deleteoldrdn: 1

Injection :

# lmodif -f chgou.ldif

C – Déplacement d’une OU

Nous déplaçons l’OU newtest de la branche ou=people,dc=debugo,dc=fr vers la branche ou=workgroup,ou=group,dc=debugo,dc=fr avec le fichier mvou.ldif :

dn: ou=newtest,ou=people,dc=debugo,dc=fr
changetype: modrdn
newrdn: ou=newtest
deleteoldrdn: 1
newsuperior: ou=workgroup,ou=group,dc=debugo,dc=fr

Injection :

# lmodif -f mvou.ldif

D – Suppression d’une OU

Il est nécessaire qu’elle soit vide.

Supprimons l’OU newtest avec le fichier deleteou.ldif :

dn: ou=newtest,ou=workgroup,ou=group,dc=debugo,dc=fr
changetype: delete

Injection :

# lmodif -f deleteou.ldif

Ou bien un fichier deleteou.ldif :

ou=newtest,ou=workgroup,ou=group,dc=debugo,dc=fr

Injection :

# ldel -f deleteou.ldif

 

III – Modification d’entrées

Dans notre cas, les entrées sont de deux types, les users et les groupes.

Listons les groupes :

# lsearch -b "dc=debugo,dc=fr" "objectClass=groupOfNames"

Listons les users :

# lsearch -b "dc=debugo,dc=fr" "objectClass=InetOrgPerson"

A – Ajout

1 – Ajout d’un utilisateur

Ajoutons un utilisateur toto avec le fichier adduser.ldif :

dn: uid=toto,ou=debugo,ou=people,dc=debugo,dc=fr
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: toto
sn: toto
givenName: toto
cn: toto
displayName: toto
userPassword: password

Injection :

# ladd -f adduser.ldif
2 – Ajout d’un groupe

Ajoutons un groupe test avec le fichier addgrp.ldif :

dn: cn=test,ou=workgroup,ou=group,dc=debugo,dc=fr
cn: test
description: test
objectClass: groupOfNames
member: cn=admin,dc=debugo,dc=fr

Injection :

# ladd -f addgrp.ldif

B – Déplacement

1 – Déplacement d’un utilisateur

Déplaçons toto de ou=debugo,ou=people,dc=debugo,dc=fr vers ou=client,ou=people,dc=debugo,dc=fr avec le fichier mvuser.ldif :

dn: uid=toto,ou=debugo,ou=people,dc=debugo,dc=fr
changetype: modrdn
newrdn: uid=toto
deleteoldrdn: 1
newsuperior: ou=client,ou=people,dc=debugo,dc=fr

Injection :

# lmodif -f mvuser.ldif
2 – Déplacement d’un groupe

Déplaçons le groupe test de ou=workgroup,ou=group,dc=debugo,dc=fr vers ou=sysgroup,ou=group,dc=debugo,dc=fr avec le fichier mvgrp.ldif :

dn: cn=test,ou=workgroup,ou=group,dc=debugo,dc=fr
changetype: modrdn
newrdn: cn=test
deleteoldrdn: 1
newsuperior: ou=sysgroup,ou=group,dc=debugo,dc=fr

Injection :

# lmodif -f mvgrp.ldif

C – Renommage

1 – Renommage d’un utilisateur

Renommons toto en tata avec le fichier renameuser.ldif :

dn: uid=toto,ou=client,ou=people,dc=debugo,dc=fr
changetype: modrdn
newrdn: uid=tata
deleteoldrdn: 1

Injection

# lmodif -f renameuser.ldif

Ceci ne change que le nom de l’entrée dn: uid=tata,ou=client,ou=people,dc=debugo,dc=fr. Les autres attributs (cn, sn, etc..) s’ils doivent être renommés seront modifiés par une autre opération (voir plus bas).

2 – Renommage d’un groupe

Renommons le groupe test en newtest avec le fichier renamegrp.ldif :

dn: cn=test,ou=sysgroup,ou=group,dc=debugo,dc=fr
changetype: modrdn
newrdn: cn=newtest
deleteoldrdn: 1

Injection

# lmodif -f renamegrp.ldif

D – Suppression

1 – Suppression d’un utilisateur

Supprimons l’utilisateur tata à l’aide d’un fichier deluser.ldif :

dn: uid=tata,ou=client,ou=people,dc=debugo,dc=fr
changetype: delete

Injection

# lmodif -f deluser.ldif

On aurait pu aussi directement faire :

# ldel uid=tata,ou=client,ou=people,dc=debugo,dc=fr
2 – Suppression d’un groupe

Supprimons le groupe newtest à l’aide d’un fichier delgrp.ldif :

dn: cn=newtest,ou=sysgroup,ou=group,dc=debugo,dc=fr
changetype: delete

Injection

# lmodif -f delgrp.ldif

Ou bien :

# ldel cn=newtest,ou=sysgroup,ou=group,dc=debugo,dc=fr

IV – Modification d’attributs

Nous allons réinsérer un utilisateur test et un groupe test avant tout :

dn: uid=toto,ou=debugo,ou=people,dc=debugo,dc=fr
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: toto
sn: toto
givenName: toto
cn: toto
displayName: toto
userPassword: password

Injection :

# ladd -f adduser.ldif

Puis :

dn: cn=test,ou=workgroup,ou=group,dc=debugo,dc=fr
cn: test
description: test
objectClass: groupOfNames
member: cn=admin,dc=debugo,dc=fr

Injection :

# ladd -f addgrp.ldif

A – Ajout

1 – Utilisateur

Listons les attributs à notre disposition :

# lsearch -b "cn=schema,cn=config" olcAttributeTypes

Ou plus précises ment du schéma core :

# lsearch -b "cn={0}core,cn=schema,cn=config" olcAttributeTypes

Ajoutons un attribut description à notre utilisateur toto avec un fichier addattribute.ldif :

dn: uid=toto,ou=debugo,ou=people,dc=debugo,dc=fr
changetype: modify
add: description
description: Sa tete est egale a zero plus zero !

Injection :

# lmodif -f addattribute.ldif

Et on peut vérifier l’ajout :

# lsearch -b "dc=debugo,dc=fr" uid=toto

 

2 – Groupe

Regardons ce que propose la classe groupOfNames (dans le schéma core)

# lsearch -b "cn={0}core,cn=schema,cn=config" olcObjectClasses

On va trouver :

olcObjectClasses: {7}( 2.5.6.9 NAME 'groupOfNames' DESC 'RFC2256: a group of n
ames (DNs)' SUP top STRUCTURAL MUST ( member $ cn ) MAY ( businessCategory $
seeAlso $ owner $ ou $ o $ description ) )

Pour un groupe, ce qui est le plus fréquent d’ajouter comme attribut, c’est un utilisateur (ajout d’un membre dans un groupe…)

Bref, ajoutons donc notre utilisateur test dans le groupe test  avec un fichier addusertogroup.ldif :

dn: cn=test,ou=workgroup,ou=group,dc=debugo,dc=fr
changetype: modify
add: member
member: uid=toto,ou=client,ou=people,dc=debugo,dc=fr

Injection :

# lmodif -f addusertogroup.ldif

On peut vérifier :

# lsearch -b "dc=debugo,dc=fr" "(&(objectclass=inetOrgPerson)(memberof=cn=test,ou=workgroup,ou=group,dc=debugo,dc=fr))" dn

Si on regarde la fiche de toto :

# lsearch -b "dc=debugo,dc=fr" "uid=toto"

On constater qu’on ne voit pas l’attribut memberof (overlay que nous avons pourtant configuré. En effet, il faut le demander spécifiquement :

# lsearch -b "dc=debugo,dc=fr" "uid=toto" memberof

Ou alors, nous pouvons le voir avec cette commande :

# lsearch -b "dc=debugo,dc=fr" "uid=toto" +

B – Modification

1 – Utilisateur

Un attribut qui peut etre modifié fréquement sur un utilisateur, c’est le mot de passe. Modifions donc le mot de passe de toto avec un fichier chgpwd.ldif :

dn: uid=toto,ou=debugo,ou=people,dc=debugo,dc=fr
changetype: modify
replace: UserPassword
UserPassword: newpass

Injection :

# lmodif -f chgpwd.ldif

Ceci dit, pour modifier un mot de passe, nous avons la commande ldappassword consacré à cet usage :

# ldappasswd -H ldap://localhost -D "uid=niko,ou=debugo,ou=people,dc=debugo,dc=fr" -W -S

-W pour la demande de l’ancien mot de passe.

-S pour la demande d’un nouveau mot de passe (sinon, le nouveau mot de passe est généré aléatoirement)

Cette commande peut également servir à changer le mot de passe d’un autre utilisateur, par exemple, le compte admin demande à changer le mot de passe de l’utilisateur niko :

# ldappasswd -D "cn=admin,dc=debugo,dc=fr" -w passsadmin -x "uid=niko,ou=debugo,ou=people,dc=debugo,dc=fr" -S
2 – Groupe

Modifions la description de notre groupe test avec un fichier chgattr.ldif :

dn: cn=test,ou=workgroup,ou=group,dc=debugo,dc=fr
changetype: modify
replace: description
description: Nouvelle description

Injection :

# lmodif -f chgattr.ldif

C – Suppression

1 – Utilisateur

Supprimons l’attribut description de toto avec un fichier delattr.ldif :

dn: uid=toto,ou=debugo,ou=people,dc=debugo,dc=fr
changetype: modify
delete: description

Injection :

# lmodif -f delattr.ldif
2 – Groupe

Pour un groupe, vous vous en doutez, un attribut qui peut etre amené à etre supprimé, c’est un membre. Supprimons donc toto du groupe test avec un ficher

dn: cn=test,ou=workgroup,ou=group,dc=debugo,dc=fr
changetype: modify
delete: member
member: uid=toto,ou=debugo,ou=people,dc=debugo,dc=fr

Injection

# lmodif -f deluserfromgroup.ldif

Vérification :

# lsearch -b "dc=debugo,dc=fr" "(&(objectclass=groupOfNames)(cn=test))" member

V – Conclusion

Voila qui termine ce long article. J’aurais pu faire plus court, certaines manipulation étant au final tres similaire, mais j’ai ainsi voulu couvrir de nombreuses applications que vous pouvez être amenés à rencontrer.

Dans le chapitre suivant, nous allons parler sauvegarde et restauration.

 

 

 

 

4 réflexions sur « Tuto Openldap, partie IV : Modification des données »

  1. Bonjour, et merci pour vos tutos et explications.
    Lorsque vous créez les alias, est-ce que le mot de passe contenu dans /root/pwdldap soit être encodé?
    Merci

    1. Bonjour !
      Merci pour les compliments 😉

      Non, le mot de passe doit être en clair (d’où les permissions restrictives dessus)

  2. Bonjour,
    Merci pour ces tutos très clairs.
    Prévoyez-vous de développer la gestion des annuaires OpenLDAP avec GLPI ?
    Cela pourrait être très intéressant !
    Bonne soirée

    1. Bonjour.
      Et de rien 😉
      Oui, ça peut se faire, mais ce n’est pas dans les priorités du moment.
      Mais pas de panique, ça intègre ma todolist 😉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *