3. Configuration du serveur LDAP

Avant d'aborder la configuration du service LDAP, il faut passer par les étapes rituelles de sélection et d'installation des paquets contenant les outils logiciels du service. Ensuite, il faut identifier les processus, les numéros de ports ouverts et les fichiers de configuration à éditer.

3.1. Installation du serveur LDAP

Q1.

Quels sont les paquets Debian relatifs au service LDAP ?

Interroger la base de données des paquets pour obtenir les informations demandées.

Dans la requête ci-dessous, on privilégie la recherche dans les champs de description des paquets.

apt search ^OpenLDAP
En train de trier... Fait
Recherche en texte intégral... Fait
ldap-utils/testing 2.5.13+dfsg-5 amd64
  OpenLDAP utilities

libldap-2.5-0/testing,now 2.5.13+dfsg-5 amd64  [installé, automatique]
  Bibliothèques OpenLDAP

libldap-common/testing,now 2.5.13+dfsg-5 all  [installé, automatique]
  fichiers communs OpenLDAP pour les bibliothèques

libldap-dev/testing 2.5.13+dfsg-5 amd64
  bibliothèques de développement pour OpenLDAP

ruby-ldap/testing 0.9.20-2+b5 amd64
  OpenLDAP library binding for Ruby

slapd/testing 2.5.13+dfsg-5 amd64
  OpenLDAP server (slapd)

Q2.

Quels sont les paquets Debian à installer pour mettre en œuvre un serveur LDAP ?

Dans liste obtenue en réponse à la question précédente, rechercher les paquets relatifs aux utilitaires et au serveur.

Dans la liste ci-dessus, on retient deux paquets : ldap-utils et slapd.

sudo apt -y install slapd ldap-utils
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  libltdl7 libodbc2
Paquets suggérés :
  libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal odbc-postgresql tdsodbc
Les NOUVEAUX paquets suivants seront installés :
  ldap-utils libltdl7 libodbc2 slapd
0 mis à jour, 4 nouvellement installés, 0 à enlever et 0 non mis à jour.

Lors de l'installation, deux écrans debconf demandent la saisie du mot de passe administrateur du service LDAP.

Q3.

Comment identifier le ou les processus correspondant au service installé ?

Utiliser une commande d'affichage de la liste des processus actifs sur le système pour identifier le démon correspondant au serveur LDAP.

ps aux | grep  l[d]ap
openldap    1699  0.0  1.0 1159776 10540 ?       Ssl  18:22   0:00
  /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d

À partir de ces informations, on identifie le démon serveur slapd, le compte utilisateur et le groupe système propriétaires du processus (openldap) et enfin le répertoire contenant les fichiers de configuration /etc/ldap/slapd.d.

Q4.

Comment identifier le ou les numéros de ports ouverts par le service installé ?

Utiliser une commande d'affichage de la liste des ports ouverts sur le système.

Voici deux exemples usuels.

sudo lsof -i | grep l[d]ap
slapd   1699 openldap    8u  IPv4  19101      0t0  TCP *:ldap (LISTEN)
slapd   1699 openldap    9u  IPv6  19102      0t0  TCP *:ldap (LISTEN)
ss -tau | grep l[d]ap
tcp   LISTEN 0      2048        0.0.0.0:ldap             0.0.0.0:*
tcp   LISTEN 0      2048           [::]:ldap                [::]:*

Les numéros de port enregistrés pour le service LDAP sont disponibles dans le fichier /etc/services.

grep ldap /etc/services
ldap            389/tcp        # Lightweight Directory Access Protocol
ldap            389/udp
ldaps           636/tcp        # LDAP over SSL
ldaps           636/udp

Relativement au indications données par les commandes lsof et ss, c'est le numéro de port 389 qui est ouvert en écoute lors de l'installation du paquet slapd.

Par défaut l'accès TLS au service n'est pas activé.

3.2. Analyse de la configuration du service LDAP

Les versions actuelles du logiciel OpenLDAP utilisent un mode de configuration basé sur un Directory Information Tree ou DIT propre. Cette arborescence de configuration est pointée par le nom cn=config. Elle est utilisée pour configurer dynamiquement le démon slapd, modifier les définitions de schéma, les index, les listes de contrôle d'accès ACLs, etc. Ce mode de configuration présente un avantage déterminant lorsque l'on exploite des annuaires volumineux : toutes les opérations se font sans interruption de service.

Les documents fournis avec le paquet slapd contiennent des informations indispensables à l'analyse du fonctionnement du service.

Q5.

Quel est le mode de gestion de la configuration du service du paquet de la distribution Debian GNU/Linux ?

Consulter les fichiers de documentation fournis avec le paquet slapd.

Les documents relatifs au paquet slapd sont situés dans le répertoire /usr/share/doc/slapd/. Le fichier README.Debian.gz contient un exemple d'instruction de consultation de la configuration du service.

sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config"

Q6.

Quel est le gestionnaire de base de données (backend) proposé dans l'annuaire de configuration ?

Reprendre la commande préconisée en réponse à la question précédente en utilisant le type de base de donnée comme filtre.

sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" \
  olcDatabase={1}mdb
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: olcDatabase={1}mdb
# requesting: ALL
#

# {1}mdb, config
dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=nodomain
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=nodomain
olcRootPW: {SSHA}y3201Tkxe0HgfQOhLxiVJ3wwI8+dnQwK
olcDbCheckpoint: 512 30
olcDbIndex: objectClass eq
olcDbIndex: cn,uid eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
olcDbMaxSize: 1073741824

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Par définition, un annuaire LDAP est une base de données optimisée en lecture. Du point de vue implémentation, les entrées sont stockées sous forme «binaire» et indexées à l'aide d'un gestionnaire de base de données. Le gestionnaire d'arrière plan proposé par défaut est mdb. Il s'agit d'une variante actualisée du gestionnaire Berkeley DB transactional backend.

Q7.

Comment identifier le nom de l'annuaire fourni par défaut avec le paquet slapd ?

Rechercher la clé olcSuffix dans la configuration de l'annuaire.

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" \
  olcSuffix | grep ^olcSuffix
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
olcSuffix: dc=nodomain

Q8.

Quels sont les schemas actifs avec la configuration courante du paquet slapd ?

Rechercher la clé olcSchemaConfig dans la configuration de l'annuaire.

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" \
  olcSchemaConfig | grep ^cn
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
cn: config
cn: module{0}
cn: schema
cn: {0}core
cn: {1}cosine
cn: {2}nis
cn: {3}inetorgperson

Q9.

Où sont stockées les bases définies par défaut lors de l'installation du paquet slapd ?

Rechercher la clé olcDbDirectory dans la configuration de l'annuaire.

sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" \
  olcDbDirectory | grep ^olcDbDirectory
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
olcDbDirectory: /var/lib/ldap

C'est dans le répertoire /var/lib/ldap que sont stockées les fichiers des bases Berkeley DB.

ls -lAh /var/lib/ldap/
total 40K
-rw------- 1 openldap openldap  36K  2 sept. 18:22 data.mdb
-rw------- 1 openldap openldap 8,0K  2 sept. 18:22 lock.mdb

3.3. Réinitialisation de la base de l'annuaire LDAP

L'installation du paquet slapd implique l'installation d'un annuaire minimal avec une base associée. Ce mode opératoire est nécessaire, ne serait-ce que pour accéder à la configuration du service et tester la validité de l'installation. Après avoir traité les questions ci-dessus, on sait que l'installation est fonctionnelle. On peut donc passer à l'initialisation de notre propre annuaire.

[Note] Note

Les manipulations proposées dans cette section permettent de reprendre à zéro la configuration d'un annuaire LDAP. Il peut être utile de revenir à cette étape en cas de «doute» sur l'intégrité de l'annuaire lors du traitement des questions des sections suivantes.

Q10.

Comment arrêter le service LDAP ?

Utiliser les scripts fournis avec le gestionnaire de lancement des processus système.

Chaque processus système dispose d'un script de gestion de son lancement, arrêt (et|ou) redémarrage. Avec le gestionnaire systemd, il faut faire une recherche dans la liste des services. Une fois le service identifié, on l'arrête avec la commande systemctl.

systemctl status slapd
● slapd.service - LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol)
     Loaded: loaded (/etc/init.d/slapd; generated)
    Drop-In: /usr/lib/systemd/system/slapd.service.d
             └─slapd-remain-after-exit.conf
     Active: active (running) since Sat 2023-09-02 18:22:14 CEST; 21min ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1693 ExecStart=/etc/init.d/slapd start (code=exited, status=0/SUCCESS)
      Tasks: 4 (limit: 1084)
     Memory: 7.4M
        CPU: 59ms
     CGroup: /system.slice/slapd.service
             └─1699 /usr/sbin/slapd -h "ldap:/// ldapi:///" -g openldap -u openldap -F /etc/ldap/slapd.d

sept. 02 18:22:14 ldap-server systemd[1]: Starting slapd.service - LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol)...
sept. 02 18:22:14 ldap-server slapd[1698]: @(#) $OpenLDAP: slapd 2.5.13+dfsg-5 (Feb  8 2023 01:56:12) $
                                                   Debian OpenLDAP Maintainers <pkg-openldap-devel@lists.alioth.debian.org>
sept. 02 18:22:14 ldap-server slapd[1699]: slapd starting
sept. 02 18:22:14 ldap-server slapd[1693]: Starting OpenLDAP: slapd.
sept. 02 18:22:14 ldap-server systemd[1]: Started slapd.service - LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol).

Instruction d'arrêt du service :

sudo systemctl stop slapd

On peut exécuter à nouveau la commande systemctl status slapd pour confirmer que le service est bien stoppé et inactif.

Q11.

Quels sont les éléments à supprimer pour pouvoir installer une nouvelle configuration et une nouvelle base LDAP ?

Utiliser le résultat de la question sur la localisation des bases et la documentation fournie avec le paquet slapd.

À partir des réponses aux questions ci-dessus, on sait que c'est le répertoire /var/lib/ldap/ qui contient les bases. La lecture du fichier de documentation du paquet avec la commande zless /usr/share/doc/slapd/README.Debian.gz indique que les fichiers de configuration sont situés dans le répertoire /etc/ldap/slapd.d/.

On supprime donc tous ces fichiers et répertoires.

sudo rm -rf /var/lib/ldap/* /etc/ldap/slapd.d

Q12.

Comment reprendre à zéro la configuration du paquet slapd ?

Utiliser l'outil du gestionnaire de paquets Debian GNU/Linux qui permet la modification des paramètres de configuration d'un service à l'aide de menus debconf.

C'est la commande dpkg-reconfigure qui sert à réviser les paramètres de configuration d'un paquet. Voici une copie des écrans proposés avec le paquet slapd.

sudo dpkg-reconfigure slapd
  Creating initial configuration... done.
  Creating LDAP directory... done.

Q13.

Comment valider la nouvelle configuration du paquet slapd ?

Reprendre la question sur le nom distinctif de l'annuaire.

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" \
  olcSuffix | grep ^olcSuffix
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
olcSuffix: dc=lab,dc=stri

3.4. Composition d'un nouvel annuaire LDAP

Une fois que les fichiers de configuration et de base de données du nouvel annuaire sont en place, on peut passer à l'ajout de nouvelles entrées dans cet annuaire. Comme le fil conducteur de cette série de travaux pratiques est la gestion d'une base de comptes utilisateurs, on doit ajouter les objets suivants.

  • Deux unités organisationnelles : people et groups.

  • Quatre compte utilisateurs : papa et maman Skywalker ainsi que leurs deux enfants

Toutes les manipulations sur les objets de l'annuaire utilisent un format de fichier texte particulier baptisé LDIF pour LDAP Data Interchange Format. C'est un format de représentation des données contenues dans un annuaire particulièrement utile pour les opérations de sauvegarde et de restauration en volume.

Du point de vue formatage, chaque enregistrement doit être séparé du suivant par une ligne vide et chaque attribut d'un enregistrement apparaît sur une ligne sous la forme «nomAttribut: valeur».

Q14.

Comment visualiser la liste des entrées contenues dans l'annuaire LDAP ?

Utiliser les pages de manuels de la commande ldapsearch et rechercher les informations sur les méthodes d'authentification, la désignation de la base dans laquelle on effectue la recherche et le nom distinctif utilisé pour se connecter à l'annuaire.

La commande ldapsearch propose plusieurs modes d'authentification qui influent sur la liste des attributs affichés pour une même entrée. Dans notre exemple, ce sont les mots de passes qui peuvent ne pas apparaître ou apparaître sous différentes formes.

  • L'option -x évite le recours à la méthode SASL pour l'authentification.

    sudo ldapsearch -LLL -x -H ldap:/// -b "dc=lab,dc=stri" \
      -D cn=admin,dc=lab,dc=stri -W
    Enter LDAP Password:
    dn: dc=lab,dc=stri
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    o: lab.stri
    dc: lab
  • L'option -Y EXTERNAL utilise la méthode SASL du même nom.

    sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "dc=lab,dc=stri" \
      -D cn=admin,dc=lab,dc=stri -W
    Enter LDAP Password:
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    dn: dc=lab,dc=stri
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    o: lab.stri
    dc: lab
  • L'option -LLL désactive l'affichage des commentaires et de la version LDIF utilisée dans la réponse.

  • L'option -b désigne le point de départ de la recherche.

  • L'option -D désigne le nom distinctif de connexion à l'annuaire.

  • L'option -W provoque l'affichage de l'invite de demande du mot passe correspondant au nom distinctif utilisé.

Q15.

Comment activer la journalisation des manipulations sur les entrées de l'annuaire LDAP ?

Rechercher l'entrée relative au niveau de journalisation dans le DIT et modifier sa valeur de façon à obtenir un état dans les journaux système à chaque opération sur l'annuaire.

La modification de l'entrée du DIT doit se faire à l'aide d'un fichier LDIF approprié.

L'entrée à rechercher dans le DIT est baptisée olcLogLevel.

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" \
  olcLogLevel | grep ^olcLogLevel
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
olcLogLevel: none

on se propose de remplacer la valeur none par stats de façon à journaliser les connexions, les opérations et les résultats. Voici une copie du fichier LDIF permettant de réaliser cette modification.

On commence par créer un dossier dédié aux fichiers LDIF.

mkdir -p $HOME/ldif && cd $HOME/ldif

Ensuite on peut créer le fichier LDIF de modification de la journalisation du service LDAP.

cat > setolcLogLevel2stats.ldif << EOF
# Set olcLogLevel to "stats"
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF

On applique ce changement de valeur avec la commande ldapmodify puis on vérifie que l'attribut a bien reçu le paramètre.

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f setolcLogLevel2stats.ldif
CSASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" \
  olcLogLevel | grep ^olcLogLevel
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
olcLogLevel: stats

Enfin, on relève les traces de la dernière opération dans les journaux système.

journalctl -o cat -n 20 -u slapd --grep="conn"
conn=1009 fd=12 closed
conn=1009 op=2 UNBIND
conn=1009 op=1 SEARCH RESULT tag=101 err=0 qtime=0.000017 etime=0.000193 nentries=10 text=
conn=1009 op=1 SRCH attr=olcLogLevel
conn=1009 op=1 SRCH base="cn=config" scope=2 deref=0 filter="(objectClass=*)"
conn=1009 op=0 RESULT tag=97 err=0 qtime=0.000018 etime=0.000107 text=
conn=1009 op=0 BIND dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" mech=EXTERNAL bind_ssf=0 ssf=71
conn=1009 op=0 BIND authcid="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" authzid="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
conn=1009 op=0 BIND dn="" method=163
conn=1009 fd=12 ACCEPT from PATH=/var/run/slapd/ldapi (PATH=/var/run/slapd/ldapi)
conn=1008 fd=12 closed
conn=1008 op=2 UNBIND
conn=1008 op=1 RESULT tag=103 err=0 qtime=0.000021 etime=0.000558 text=
[Note] Note

Dans le contexte des travaux pratiques, le nombre d'entrées de l'annuaire reste très limité et la journalisation n'a pas d'impact mesurable sur les performances du système. Dans un contexte d'exploitation réelle avec un annuaire comprenant au moins une dizaine de milliers d'entrées, la situation est très différente et il faut limiter au maximum le recours à la journalisation des transactions sur l'annuaire.

Pour ramener la valeur de l'attribut olcLogLevel à none, il suffit de créer un fichier LDIF avec la directive correspondante.

cat > setolcLogLevel2none.ldif << EOF
# Set olcLogLevel to "none"
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: none
EOF

Q16.

Quelle est la syntaxe du fichier LDIF qui permet d'ajouter les deux unités organisationnelles (organisational unit) ?

Rechercher un tutoriel LDIF en ligne donnant un exemple de fichier LDIF avec une ou plusieurs entrées ou:.

Voici un exemple de fichier LDIF contenant les déclarations des deux unités organisationnelles à ajouter.

cat > ou.ldif << EOF
dn: ou=people,dc=lab,dc=stri
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=lab,dc=stri
objectClass: organizationalUnit
ou: groups
EOF

Q17.

Quelle est la commande à utiliser pour ajouter une ou plusieurs entrées dans l'annuaire ?

Rechercher dans la liste des programmes fournis avec le paquet des outils LDAP.

C'est la commande ldapadd qui est utile dans notre contexte. On l'utilise en mode d'authentification simple avec le fichier LDIF ci-dessus pour compléter l'annuaire.

sudo ldapadd -cxWD cn=admin,dc=lab,dc=stri -f ou.ldif
Enter LDAP Password:
adding new entry "ou=people,dc=lab,dc=stri"

adding new entry "ou=groups,dc=lab,dc=stri"

On vérifie ensuite que les deux nouvelles entrées sont bien présentes dans l'annuaire.

sudo ldapsearch -LLL -x -H ldap:/// -b "dc=lab,dc=stri" \
  -D cn=admin,dc=lab,dc=stri -W
Enter LDAP Password:
dn: dc=lab,dc=stri
objectClass: top
objectClass: dcObject
objectClass: organization
o: lab.stri
dc: lab

dn: ou=people,dc=lab,dc=stri
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=lab,dc=stri
objectClass: organizationalUnit
ou: groups

Q18.

Quelle est la commande à utiliser pour saisir manuellement un mot de passe et obtenir la chaîne chiffrée correspondante ?

Rechercher dans la liste des programmes fournis avec les paquets de la distribution puis consulter les pages de manuels correspondantes.

En effectuant une recherche par mot clé dans les pages de manuels du système, on peut identifier l'outil recherché.

man -k passwd | grep -i ldap
ldappasswd (1)       - change the password of an LDAP entry
slappasswd (8)       - OpenLDAP password utility

On utilise la commande slappasswd pour générer une chaîne chiffrée que l'on insère dans le fichier LDIF des comptes utilisateurs.

Prenons l'exemple du mot de passe V3ry53cr3t, on obtient le résultat suivant :

sudo slappasswd
New password:
Re-enter new password:
{SSHA}rpB4tgcVlh51sPCtpBi+acrS6Ifc1lu0

Dans le contexte de ces travaux pratiques, on attribue le même mot de passe aux quatre comptes utilisateurs.

Il existe une technique simple pour la génération de mots de passe utilisateurs aléatoires. Une fois le mot de passe généré, il peut être transmis à l'utilisateur final par un «canal de confiance» et implanté dans les attributs de l'annuaire relatifs au compte utilisateur.

  1. On génère un mot de passe aléatoire que l'on stocke dans un fichier.

    openssl rand -base64 16 | tr -d '=' > user.passwd

    On obtient par exemple :

    cat user.passwd
    vyJtXX6r73KPzyDYymWjsA
  2. Utilise ce mot de passe pour générer la chaîne à introduire dans le fichier LDIF de création d'utilisateur dans l'annuaire.

    sudo slappasswd -v -h "{SSHA}" -s $(cat user.passwd)
    {SSHA}hFGouu+ytfnH0qPy7y9G0L0Rb6R6slZ4

Q19.

Quelle est la syntaxe du fichier LDIF qui permet d'ajouter les quatre utilisateurs avec leurs attributs système : identifiants uid/gid, authentifiants login/passwd, etc ?

Rechercher un tutoriel LDIF en ligne donnant un exemple de fichier LDIF avec un exemple de description des attributs d'un compte utilisateur.

Voici un exemple de fichier LDIF contenant les déclarations des quatre comptes utilisateurs à ajouter.

[Avertissement] Avertissement

Pensez à éditer les entrées userPassword à votre contexte !

cat > users.ldif << EOF
# Padmé Amidala
dn: uid=padme,ou=people,dc=lab,dc=stri
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
cn: Padme
sn: Padmé Amidala Skywalker
uid: padme
uidNumber: 10000
gidNumber: 10000
loginShell: /bin/bash
homeDirectory: /ahome/padme
userPassword: {SSHA}hFGouu+ytfnH0qPy7y9G0L0Rb6R6slZ4
gecos: Padme Amidala Skywalker

# Anakin Skywalker
dn: uid=anakin,ou=people,dc=lab,dc=stri
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
cn: Anakin
sn: Anakin Skywalker
uid: anakin
uidNumber: 10001
gidNumber: 10001
loginShell: /bin/bash
homeDirectory: /ahome/anakin
userPassword: {SSHA}hFGouu+ytfnH0qPy7y9G0L0Rb6R6slZ4
gecos: Anakin Skywalker

# Leia Organa Skywalker
dn: uid=leia,ou=people,dc=lab,dc=stri
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
cn: Leia
sn: Leia Organa
uid: leia
uidNumber: 10002
gidNumber: 10002
loginShell: /bin/bash
homeDirectory: /ahome/leia
userPassword: {SSHA}hFGouu+ytfnH0qPy7y9G0L0Rb6R6slZ4
gecos: Leia Organa Skywalker

# Luke Skywalker
dn: uid=luke,ou=people,dc=lab,dc=stri
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
cn: Luke
sn: Luke Skywalker
uid: luke
uidNumber: 10003
gidNumber: 10003
loginShell: /bin/bash
homeDirectory: /ahome/luke
userPassword: {SSHA}hFGouu+ytfnH0qPy7y9G0L0Rb6R6slZ4
gecos: Luke Skywalker
EOF

Comme dans le cas précédent, on utilise la commande ldapadd en mode d'authentification simple pour insérer les utilisateurs dans l'annuaire.

sudo ldapadd -cxWD cn=admin,dc=lab,dc=stri -f users.ldif
Enter LDAP Password:
adding new entry "uid=padme,ou=people,dc=lab,dc=stri"

adding new entry "uid=anakin,ou=people,dc=lab,dc=stri"

adding new entry "uid=leia,ou=people,dc=lab,dc=stri"

adding new entry "uid=luke,ou=people,dc=lab,dc=stri"

On peut lister à nouveau les entrées contenues dans l'annuaire pour vérifier la présence des utilisateurs.

sudo ldapsearch -LLL -x -H ldap:/// -b "dc=lab,dc=stri" \
  -D cn=admin,dc=lab,dc=stri -W