LDIF

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Format d'échange LDAP
Extension .ldif
Commandes ldapadd · ldapmodify · ldapdelete
RFC RFC 2849
Voir aussi LDAP · OPENLDAP · Ldapsearch

Le format LDIF (LDAP Data Interchange Format, RFC 2849) décrit en texte brut des opérations sur un annuaire LDAP : création, modification, suppression d'entrées. C'est le format d'entrée des commandes ldapadd, ldapmodify et ldapdelete, aussi bien sous OpenLDAP que sous 389 Directory Server.

Création d'utilisateurs

Utilisateur simple

dn: uid=jdupont,ou=users,dc=exemple,dc=com
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: jdupont
cn: Jean Dupont
sn: Dupont
givenName: Jean
mail: jean.dupont@exemple.com
userPassword: {SSHA}MotDePasseHashe

Utilisateur complet (attributs POSIX + shadow)

dn: uid=mmartin,ou=users,dc=exemple,dc=com
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: mmartin
cn: Marie Martin
sn: Martin
givenName: Marie
mail: marie.martin@exemple.com
title: Développeuse Senior
userPassword: {SSHA}MotDePasseHashe
loginShell: /bin/bash
homeDirectory: /home/mmartin
uidNumber: 10001
gidNumber: 10001
gecos: Marie Martin
description: Développeuse backend

Pour créer plusieurs utilisateurs en une fois, il suffit d'enchaîner plusieurs blocs dn:/changetype: add dans le même fichier, séparés par une ligne vide.

Modification d'utilisateurs

Remplacement, ajout, suppression d'un attribut

dn: uid=jdupont,ou=users,dc=exemple,dc=com
changetype: modify
replace: mail
mail: jean.dupont.nouveau@exemple.com
dn: uid=jdupont,ou=users,dc=exemple,dc=com
changetype: modify
add: telephoneNumber
telephoneNumber: +33 1 98 76 54 32

Modifications multiples (séparateur -)

dn: uid=mmartin,ou=users,dc=exemple,dc=com
changetype: modify
replace: title
title: Architecte Logiciel
-
add: description
description: Responsable de l'architecture microservices
-
delete: mobile

Renommage / déplacement (modrdn)

dn: uid=jdupont,ou=users,dc=exemple,dc=com
changetype: modrdn
newrdn: uid=jdupont
deleteoldrdn: 0
newsuperior: ou=anciens-users,dc=exemple,dc=com

Suppression

dn: uid=jdupont,ou=users,dc=exemple,dc=com
changetype: delete

Suppression récursive d'une OU entière — pas d'équivalent LDIF standard, utiliser directement l'option -r de la commande :

ldapdelete -r "ou=temp,dc=exemple,dc=com"

Gestion du statut d'un compte

# Verrouillage (389 Directory Server)
dn: uid=jdupont,ou=users,dc=exemple,dc=com
changetype: modify
replace: nsAccountLock
nsAccountLock: true
# Verrouillage (OpenLDAP + overlay ppolicy) ; déverrouillage : delete pwdAccountLockedTime
dn: uid=jdupont,ou=users,dc=exemple,dc=com
changetype: modify
add: pwdAccountLockedTime
pwdAccountLockedTime: 000001010000Z

Opérations sur les groupes

dn: cn=developers,ou=groups,dc=exemple,dc=com
changetype: add
objectClass: top
objectClass: groupOfNames
cn: developers
description: Groupe des développeurs
member: uid=mmartin,ou=users,dc=exemple,dc=com
# Ajout d'un membre à un groupe existant
dn: cn=developers,ou=groups,dc=exemple,dc=com
changetype: modify
add: member
member: uid=jdupont,ou=users,dc=exemple,dc=com

Application des fichiers LDIF

ldapadd -x -D "cn=admin,dc=exemple,dc=com" -W -f create-user.ldif
ldapmodify -x -D "cn=admin,dc=exemple,dc=com" -W -f modify-user.ldif
ldapdelete -x -D "cn=admin,dc=exemple,dc=com" -W "uid=jdupont,ou=users,dc=exemple,dc=com"

# via TLS/SSL
ldapmodify -x -H ldaps://ldap.exemple.com:636 -D "cn=admin,dc=exemple,dc=com" -W -f modify-user.ldif

# simulation sans appliquer (-n), utile pour valider avant application
ldapmodify -n -x -D "cn=admin,dc=exemple,dc=com" -W -f modify-user.ldif

Bonnes pratiques

  1. Sauvegarder avant toute modification massive : ldapsearch -x -LLL -b "dc=exemple,dc=com" > backup-$(date +%Y%m%d).ldif
  2. Tester d'abord sur un environnement de développement, et valider avec l'option -n (simulation) avant application réelle.
  3. Ne jamais stocker de mot de passe en clair dans un LDIF — toujours un hash ({SSHA} via slappasswd).
  4. Restreindre les droits sur les fichiers LDIF contenant des données sensibles (chmod 600 *.ldif) et les versionner dans Git.

Ressources

  • RFC 2849 — The LDAP Data Interchange Format (LDIF)
  • RFC 4510-4519 — LDAP Technical Specification Road Map
  • https://www.openldap.org/doc/ — documentation OpenLDAP

Voir aussi

  • LDAP — structure d'un annuaire (DN, DC, OU, CN)
  • OPENLDAP — installation et administration d'un serveur OpenLDAP
  • Ldapsearch — interroger l'annuaire avant de le modifier