Ceci est une ancienne révision du document !
Table des matières
Version : 2021.01
Dernière mise-à-jour : 2021/02/03 14:31
SER703 - Les Commandes ldap* et slap*
Contenu du Module
- SER703 - Les Commandes ldap* et slap *
- Contenu du Module
- Présentation
- LAB #1 - La Commande ldapadd
- 1.1 - Installation et Utilisation du client graphique luma
- Le Directory Information Tree
- Les alias
- 1.2 - Installation et Utilisation du Client HTML phpLDAPadmin
- Les attributs
- Les classes
- Les schémas
- Les referrals
- LAB #2 - La Commande ldapsearch
- LAB #3 - La Commande ldapmodify
- LAB #4 - La Commande ldapdelete
- LAB #5 - La Commande slapadd
- LAB #6 - Maintenance d’une base de données LDAP
- 6.1 - La commande slapcat
- 6.2 - La commande slapindex
- 6.3 - La commande slapdn
- 6.4 - La commande slaptest
- 6.5 - La commande slapauth
Présentation
Les commandes ldap* sont utilisées quand le serveur OpenLDAP fonctionne tandis que les commandes slap* sont utilisées pour apporter des modifications quand le serveur est arrêté.
LAB #1 - La Commande ldapadd
Afin de pouvoir utiliser notre fichier LDIF, il est nécessaire de faire appel au client ldapadd. Cet utilitaire prend un ou plusieurs options :
[root@centos7 ~]# ldapadd --help ldapadd: invalid option -- '-' ldapadd: unrecognized option -- Add or modify entries from an LDAP server usage: ldapadd [options] The list of desired operations are read from stdin or from the file specified by "-f file". Add or modify options: -a add values (default) -c continuous operation mode (do not stop on errors) -E [!]ext=extparam modify extensions (! indicate s criticality) -f file read operations from `file' -M enable Manage DSA IT control (-MM to make critical) -P version protocol version (default: 3) -S file write skipped modifications to `file' Common options: -d level set LDAP debugging level to `level' -D binddn bind DN -e [!]<ext>[=<extparam>] general extensions (! indicates criticality) [!]assert=<filter> (RFC 4528; a RFC 4515 Filter string) [!]authzid=<authzid> (RFC 4370; "dn:<dn>" or "u:<user>") [!]chaining[=<resolveBehavior>[/<continuationBehavior>]] one of "chainingPreferred", "chainingRequired", "referralsPreferred", "referralsRequired" [!]manageDSAit (RFC 3296) [!]noop ppolicy [!]postread[=<attrs>] (RFC 4527; comma-separated attr list) [!]preread[=<attrs>] (RFC 4527; comma-separated attr list) [!]relax [!]sessiontracking abandon, cancel, ignore (SIGINT sends abandon/cancel, or ignores response; if critical, doesn't wait for SIGINT. not really controls) -h host LDAP server -H URI LDAP Uniform Resource Identifier(s) -I use SASL Interactive mode -n show what would be done but don't actually do it -N do not use reverse DNS to canonicalize SASL host name -O props SASL security properties -o <opt>[=<optparam>] general options nettimeout=<timeout> (in seconds, or "none" or "max") ldif-wrap=<width> (in columns, or "no" for no wrapping) -p port port on LDAP server -Q use SASL Quiet mode -R realm SASL realm -U authcid SASL authentication identity -v run in verbose mode (diagnostics to standard output) -V print version info (-VV only) -w passwd bind password (for simple authentication) -W prompt for bind password -x Simple authentication -X authzid SASL authorization identity ("dn:<dn>" or "u:<user>") -y file Read password from file -Y mech SASL mechanism -Z Start TLS request (-ZZ to require successful response)
Editez ensuite setup.ldif de la façon suivante :
[root@centos7 ~]# vi setup.ldif [root@centos7 ~]# cat setup.ldif # Organisation i2tch dn: dc=i2tch,dc=com objectClass: dcObject objectClass: organization dc: i2tch o: i2tch.com description: Exemple # Gestionnaire de l'arbre dn: cn=Manager,dc=i2tch,dc=com objectClass: organizationalRole cn: Manager description: Gestionnaire
Il convient maintenant d'utiliser la commande ldapadd afin d'injecter le contenu du fichier setup.ldif dans notre base :
[root@centos7 ~]# ldapadd -f setup.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -w fenestros adding new entry "dc=i2tch,dc=com" adding new entry "cn=Manager,dc=i2tch,dc=com"
Nous procédons maintenant de la même façon pour les autres données. Créez le fichier import.ldif :
[root@centos7 ~]# vi import.ldif [root@centos7 ~]# cat import.ldif version: 1 dn: ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: France dn: ou=Commercial,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Commercial dn: ou=Recherche,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Recherche dn: ou=Production,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Production dn: ou=Suisse,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Suisse dn: ou=Commercial,ou=Suisse,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Commercial dn: ou=USA,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: USA dn: ou=Commercial,ou=USA,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Commercial dn: ou=Recherche,ou=USA,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Recherche
Il convient maintenant d'utiliser de nouveau la commande ldapadd afin d'injecter le contenu du fichier import.ldif dans notre base :
[root@centos7 ~]# ldapadd -f import.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -w fenestros adding new entry "ou=France,dc=i2tch,dc=com" adding new entry "ou=Commercial,ou=France,dc=i2tch,dc=com" adding new entry "ou=Recherche,ou=France,dc=i2tch,dc=com" adding new entry "ou=Production,ou=France,dc=i2tch,dc=com" adding new entry "ou=Suisse,dc=i2tch,dc=com" adding new entry "ou=Commercial,ou=Suisse,dc=i2tch,dc=com" adding new entry "ou=USA,dc=i2tch,dc=com" adding new entry "ou=Commercial,ou=USA,dc=i2tch,dc=com" adding new entry "ou=Recherche,ou=USA,dc=i2tch,dc=com"
1.1 - Installation et Utilisation du client graphique luma
Configurez votre machine virtuelle pour démarrer en mode graphique :
[root@centos7 ~]# ls -l /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 37 Apr 30 2016 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target [root@centos7 ~]# rm -rf /etc/systemd/system/default.target [root@centos7 ~]# ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target [root@centos7 ~]# ls -l /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 36 Jan 9 18:09 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
Arrêtez votre machine virtuelle :
[root@centos7 ~]# exit [trainee@centos7 ~]$ exit desktop@serverXX:~$ VBoxManage controlvm CentOS_7 poweroff
Augmentez sa mémoire à 2Go :
desktop@serverXX:~$ VBoxManage modifyvm CentOS_7 --memory 2048
Démarrez ensuite la VM :
desktop@serverXX:~$ VBoxManage startvm CentOS_7 --type headless Waiting for VM "CentOS_7" to power on... VM "CentOS_7" has been successfully started
Connectez-vous à votre VM :
desktop@serverXX:~$ ssh -l trainee localhost -p 3022
Téléchargez ensuite luma-master.zip :
[trainee@centos7 ~]$ su - Mot de passe : fenestros [root@centos7 ~]# wget https://www.dropbox.com/s/wffzwfkad23ypwg/luma-master.zip
Installez le paquet PyQt4 :
[root@centos7 ~]# yum install PyQt4
Décompressez l'archive luma-master.zip :
[root@centos7 ~]# unzip luma-master.zip
Installez luma :
[root@centos7 ~]# cd luma-master/ [root@centos7 luma-master]# ls AUTHORS bumpversion.sh contrib data HACKING luma luma.qrc MANIFEST.in resources setup.py tools bin ChangeLog COPYING doc INSTALL luma.pro Makefile README setup TODO [root@centos7 luma-master]# python setup.py install
Connectez-vous à votre serveur cloud en mode graphique en utilisant l'utilitaire X2Go.
Naviguez au site https://wiki.x2go.org/doku.php/download:start et téléchargez le client X2Go pour votre architecture (Linux, Windows™ ou macOS™):
Installez le client, ouvrez l'application et créez une nouvelle session en remplaçant la valeur XX par le numéro du serveur qui vous a été communiqué par votre formateur :
Vous verrez apparaître une boîte represantant votre nouvelle connexion à droite de l'écran :
Cliquez sur cette boîte puis renseignez le mot de passe de votre serveur dans le cloud et cliquez sur le bouton ok :
A l'issu de quelques minutes vou aurez accès à votre serveur dans le cloud en mode graphique :
Important - Quand vous quittez votre serveur cloud, NE l'éteignez PAS. Cliquez simplement sur la croix en haut à droite de la fenêtre pour la fermer.
Dans l'interface de votre connexion graphique à votre serveur, ouvrez VirtualBox puis double-cliquez sur la VM CentOS_7. Dans la fenêtre qui s'ouvre, connectez-vous à votre VM CentOS_7 en tant que trainee en utilisant le mot de passe trainee.
Lancez luma via les menus Applications > System Tools > Luma LDAP Browser.
Connectez-vous à votre serveur LDAP en utilisant luma. Cliquez sur le menu Edit > Server List. Cliquez sur Add puis renseignez le nom localhost. Sélectionnez Authentification, décochez Anonymous bind et remplissez les champs pour une connexion simple :
Cliquez sur le bouton Apply puis sur le bouton Ok.
Cliquez sur l'onglet Plugins et cochez tout. Cliquez ensuite sur le bouton Ok :
Double-cliquez sur Browser :
Cliquez sur localhost. Vous obtiendrez un résultat similaire à celui-ci :
Le Directory Information Tree
Ce que vous pouvez constater avec ces deux outils est la présence du DIT (Directory Information Tree). Ce DIT contient des entrées ayant des attributs dont les principaux types sont :
Noeud | Nom | Description |
---|---|---|
dc | domain component | domaine internet |
c | country | pays |
o | organization | organisation |
ou | organizational unit | unité d'organisation |
cn | common name | nom |
Il est possible de faire référence à un entrée en utilisant un de deux noms :
Nom | Abréviation | Exemple |
---|---|---|
Distinguished Name | DN | ou=Commercial,ou=Suisse,dc=fenestros,dc=com |
Relative Distinguished Name | RDN | ou=Commercial |
Vous noterez qu'il existe trois entrées ayant le même RDN :
RDN | DN |
---|---|
ou=Commercial | ou=Commercial,ou=France,dc=fenestros,dc=com |
ou=Commercial | ou=Commercial,ou=Suisse,dc=fenestros,dc=com |
ou=Commercial | ou=Commercial,ou=USA,dc=fenestros,dc=com |
Comme démontre cet exemple, il n'y a pas de contraintes au niveau des noms à l'excéption de l'unicité du DN.
Les noms des entités sont codés en UTF-8. Ceci implique que les noms peuvent contenir n'importe quelle combinaison de caractères y compris des éspaces.
Les alias
Le DIT peut également comporter des alias - des noeuds qui pointent vers une autre entrée du DIT.
Pour illustrer ce point, créez le fichier LDIF alias.ldif et éditez-le ainsi :
[root@centos7 luma-master]# cd ~ [root@centos7 ~]# vi alias.ldif [root@centos7 ~]# cat alias.ldif version: 1 dn: cn=Responsable Personnel,ou=France,dc=i2tch,dc=com cn: Responsable Personnel aliasedObjectName: cn=Directeur,ou=France,dc=i2tch,dc=com objectClass: top objectClass: alias objectClass: extensibleObject
Importez maintenant le fichier LDIF dans le DIT :
[root@centos7 ~]# ldapadd -f alias.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -w fenestros adding new entry "cn=Responsable Personnel,ou=France,dc=i2tch,dc=com"
Constatez maintenant le résultat :
Notez que le noeud vers lequel pointe l'alias n'existe pas.
Créez le fichier LDIF directeur.ldif et éditez-le ainsi :
[root@centos7 ~]# vi directeur.ldif [root@centos7 ~]# cat directeur.ldif version: 1 dn: cn=directeur,ou=France,dc=i2tch,dc=com objectClass: person objectClass: top cn: directeur sn: Guillaud telephoneNumber: 12345678 telephoneNumber: 87654321
Créez donc l'entrée directeur en utilisant le fichier directeur.ldif :
[root@centos7 ~]# ldapadd -f directeur.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -w fenestros adding new entry "cn=directeur,ou=France,dc=i2tch,dc=com" ldap_add: Server is unwilling to perform (53) additional info: no global superior knowledge
Important - Cette erreur indique que OpenLDAP ne sait pas où mettre les données. Ceci est causé par le fait que le schéma adéquat n'a pas été chargé.
Modifiez donc votre fichier slapd.ldif en ajoutant les lignes suivantes :
[root@centos7 ~]# vi slapd.ldif [root@centos7 ~]# cat slapd.ldif ... include: file:///etc/openldap/schema/core.ldif include: file:///etc/openldap/schema/corba.ldif include: file:///etc/openldap/schema/cosine.ldif include: file:///etc/openldap/schema/duaconf.ldif include: file:///etc/openldap/schema/dyngroup.ldif include: file:///etc/openldap/schema/inetorgperson.ldif include: file:///etc/openldap/schema/java.ldif include: file:///etc/openldap/schema/misc.ldif include: file:///etc/openldap/schema/nis.ldif include: file:///etc/openldap/schema/openldap.ldif include: file:///etc/openldap/schema/ppolicy.ldif include: file:///etc/openldap/schema/collective.ldif ...
Arrêtez le serveur slapd :
[root@centos7 ~]# systemctl stop slapd
Re-créez la base de données de la configuration :
[root@centos7 ~]# rm -rf /etc/openldap/slapd.d/* [root@centos7 ~]# ls /etc/openldap/slapd.d [root@centos7 ~]# slapadd -F /etc/openldap/slapd.d -n 0 -l slapd.ldif _#################### 100.00% eta none elapsed none fast! Closing DB... [root@centos7 ~]# chown -R ldap:ldap /etc/openldap/slapd.d [root@centos7 ~]# ls -lR /etc/openldap/slapd.d /etc/openldap/slapd.d: total 8 drwxr-x---. 3 ldap ldap 4096 Jan 10 10:46 cn=config -rw-------. 1 ldap ldap 627 Jan 10 10:46 cn=config.ldif /etc/openldap/slapd.d/cn=config: total 24 drwxr-x---. 2 ldap ldap 4096 Jan 10 10:46 cn=schema -rw-------. 1 ldap ldap 378 Jan 10 10:46 cn=schema.ldif -rw-------. 1 ldap ldap 513 Jan 10 10:46 olcDatabase={0}config.ldif -rw-------. 1 ldap ldap 443 Jan 10 10:46 olcDatabase={-1}frontend.ldif -rw-------. 1 ldap ldap 558 Jan 10 10:46 olcDatabase={1}monitor.ldif -rw-------. 1 ldap ldap 666 Jan 10 10:46 olcDatabase={2}hdb.ldif /etc/openldap/slapd.d/cn=config/cn=schema: total 76 -rw-------. 1 ldap ldap 15578 Jan 10 10:46 cn={0}core.ldif -rw-------. 1 ldap ldap 3845 Jan 10 10:46 cn={10}ppolicy.ldif -rw-------. 1 ldap ldap 1523 Jan 10 10:46 cn={11}collective.ldif -rw-------. 1 ldap ldap 1283 Jan 10 10:46 cn={1}corba.ldif -rw-------. 1 ldap ldap 11363 Jan 10 10:46 cn={2}cosine.ldif -rw-------. 1 ldap ldap 4489 Jan 10 10:46 cn={3}duaconf.ldif -rw-------. 1 ldap ldap 1693 Jan 10 10:46 cn={4}dyngroup.ldif -rw-------. 1 ldap ldap 2857 Jan 10 10:46 cn={5}inetorgperson.ldif -rw-------. 1 ldap ldap 2589 Jan 10 10:46 cn={6}java.ldif -rw-------. 1 ldap ldap 1519 Jan 10 10:46 cn={7}misc.ldif -rw-------. 1 ldap ldap 6495 Jan 10 10:46 cn={8}nis.ldif -rw-------. 1 ldap ldap 1290 Jan 10 10:46 cn={9}openldap.ldif [root@centos7 ~]# slaptest -u config file testing succeeded [root@centos7 ~]# systemctl start slapd
Créez donc l'entrée directeur en utilisant le fichier directeur.ldif :
[root@centos7 ~]# ldapadd -f directeur.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -w fenestros adding new entry "cn=directeur,ou=France,dc=i2tch,dc=com"
Revenez à Luma. Vous obtiendrez une fenêtre similaire à celle-ci :
Créez le maintenant fichier LDIF plus.ldif et éditez-le ainsi :
[root@centos7 ~]# vi plus.ldif [root@centos7 ~]# cat plus.ldif version: 1 dn: ou=Angleterre,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Angleterre dn: ou=Sales,ou=Angleterre,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Sales dn: cn=Sales Director,ou=Sales,ou=Angleterre,dc=i2tch,dc=com objectClass: person objectClass: top cn: Sales Director sn: Smith dn: cn=Sales Manager,cn=Sales Director,ou=Sales,ou=Angleterre,dc=i2tch,dc=com objectClass: person objectClass: top cn: Sales Manager sn: Brown dn: cn=dupont,ou=Recherche,ou=France,dc=i2tch,dc=com objectClass: person objectClass: top cn: dupont sn: dupont
Créez donc les entrées en utilisant le fichier plus.ldif :
[root@centos7 ~]# ldapadd -f plus.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -w fenestros adding new entry "ou=Angleterre,dc=i2tch,dc=com" adding new entry "ou=Sales,ou=Angleterre,dc=i2tch,dc=com" adding new entry "cn=Sales Director,ou=Sales,ou=Angleterre,dc=i2tch,dc=com" adding new entry "cn=Sales Manager,cn=Sales Director,ou=Sales,ou=Angleterre,dc=i2tch,dc=com" adding new entry "cn=dupont,ou=Recherche,ou=France,dc=i2tch,dc=com"
Revenez à Luma.Vous obtiendrez une fenêtre similaire à celle-ci :
1.2 - Installation et Utilisation du Client HTML phpLDAPadmin
Commencez par installer phpLDAPadmin :
[root@centos7 ~]# yum -y install httpd [root@centos7 ~]# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:httpd(8) man:apachectl(8) [root@centos7 ~]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [root@centos7 ~]# systemctl start httpd [root@centos7 ~]# yum -y install php php-mbstring php-pear php-ldap [root@centos7 ~]# yum -y install epel-release [root@centos7 ~]# systemctl restart httpd
Modifiez les lignes 332, 388, 397 et 398 du fichier /etc/phpldapadmin/config.php :
[root@centos7 ~]# vi /etc/phpldapadmin/config.php [root@centos7 ~]# cat /etc/phpldapadmin/config.php ... 332 $servers->setValue('login','bind_id','cn=Manager,dc=i2tch,dc=com'); ... 388 $servers->setValue('appearance','password_hash','ssha'); 397 $servers->setValue('login','attr','dn'); 398 // $servers->setValue('login','attr','uid'); ...
Les attributs
Dans le navigateur web de la machine virtuelle rendez-vous à l'URL http://localhost/ldapadmin et connectez-vous :
Regardons maintenant l'entrée du directeur en France et plus spécifiquement les attributs :
On peut constater la présence de trois attributs, certains apparaissent en plusieurs exemples.
Cliquez sur l'icone schema :
Dans le panneau de droite, cliquez sur le lien Attribute Types :
Dans la liste déroulante, choisissez l'attribut telephoneNumber :
Chaque attribut est défini par plusieurs types. Dans le cas du telephoneNumber, nous trouvons :
Type | Nom français | Description |
---|---|---|
EQUALITY | Egalité | Règles d'égalités |
OID | Identifiant de l'objet | Object Identifier |
SYNTAX | Syntaxe | OID de ce que peut contenir l'attribut |
Les OID sont standardisés. Vous pouvez chercher un OID sur le site Internet http://www.oid-info.com/.
Un attribut peut dériver d'un autre attribut. Cet héritage implique le respect des caractéristiques de l'attribut parent. Dans ce cas l'héritage est défini par l'attribut SUP dont la valeur est le nom de l'attribut parent.
Le serveur gère certains attributs automatiquement. Ces attributs sont appelés attributs opérationnels, par exemple :
Attributs Opérationnel | Exemple |
---|---|
createTimestamp | 20080606075042Z |
modifyTimestamp | 20080606075042Z |
creatorsName | cn=Manager,dc=i2tch,dc=com |
modifiersName | cn=Manager,dc=i2tch,dc=com |
Les classes
Chaque entrée dans le DIT doit comporter au moins un attribut objectClass. La classe d'objet du directeur est person. Dans le panneau de droite, cliquez sur le lien ObjectClasses et trouvez la classe Person dans la liste déroulante :
Dans cette fenêtre vous pouvez constater des Attributs nécessaires et des Attributs autorisés. En anglais ces deux termes correspondent à :
Elément | Description |
---|---|
MAY | Attributs autorisés |
MUST | Attributs nécessaires |
Notez aussi que cette classe est dite STRUCTURAL. Une entrée dans le DIT ne peut pas avoir plus d'une classe STRUCTURAL.
Le serveur OpenLDAP s'appuie sur trois types de classes d'objets :
- STRUCTURAL (STRUCTUREL)
- AUXILIARY (AUXILIAIRE)
- ABSTRACT (ABSTRAIT)
Prenons la cas de notre fichier LDIF alias.ldif. Notons que dans ce fichier, nous avions utilisé un objectClass alias :
version: 1 dn: cn=Responsable Personnel,ou=France,dc=i2tch,dc=com cn: Responsable Personnel aliasedObjectName: cn=Directeur,ou=France,dc=i2tch,dc=com objectClass: top objectClass: alias objectClass: extensibleObject
Si nous cherchons la définition de la classe alias, nous constatons que cette classe ne comprends pas d'attribut cn :
L'utilisation de la classe auxiliaire extensibleObject a permis de créer l'attribut cn non défini dans la classe alias :
Le dernier type de classe est ABSTRACT. La classe top est une classe ABSTRACT et chaque entrée de l'annuaire doit comporté une classe top :
Les schémas
L'ensemble des attributs et des classes d'un annuaire porte le nom de schéma. Les schémas sont normalisés. Les fichiers de schémas sont stockés dans le répertoire /etc/openldap/schema/ :
[root@centos7 ~]# ls /etc/openldap/schema/ collective.ldif corba.schema cosine.ldif duaconf.schema inetorgperson.ldif java.schema nis.ldif openldap.schema ppolicy.ldif collective.schema core.ldif cosine.schema dyngroup.ldif inetorgperson.schema misc.ldif nis.schema pmi.ldif ppolicy.schema corba.ldif core.schema duaconf.ldif dyngroup.schema java.ldif misc.schema openldap.ldif pmi.schema
Le schema de base est core.schema. D'autres schémas utiles sont notamment :
- inetorgperson.schema
- cosine.schema
Le chargement de ces deux fichiers de schémas nous permet de créer un objet pour une adresse email.
Créez le fichier LDIF mail.ldif et éditez-le ainsi :
[root@centos7 ~]# vi mail.ldif [root@centos7 ~]# cat mail.ldif version: 1 dn: cn=mail,ou=Commercial,ou=France,dc=i2tch,dc=com objectClass: inetOrgPerson objectClass: person objectClass: top cn: mail mail: info@i2tch.com sn: info
Créez donc l'entrée mail en utilisant le fichier mail.ldif :
[root@centos7 ~]# ldapadd -f mail.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -w fenestros adding new entry "cn=mail,ou=Commercial,ou=France,dc=i2tch,dc=com"
Constatez maintenant le résultat avec phpLDAPadmin en cliquant sur l'icone refresh dans le panneau de gauche :
Les referrals
Il existe une autre entrée spéciale qui s'appelle un referral. Un referral est un pointeur vers une entrée vers un autre serveur LDAP. Pour illustrer ce point, créez le fichier LDIF referral.ldif et éditez-le ainsi :
[root@centos7 ~]# vi referal.ldif [root@centos7 ~]# cat referal.ldif version: 1 dn: ou=Informatique,dc=i2tch,dc=com objectClass: referral objectClass: extensibleObject objectClass: top ref: ldap://ldap.i2tch.net/ou=i2tch.com,dc=i2tch,dc=net ou: Informatique
Utilisez la commande ldapadd pour ajouter l'entrée au DIT :
[root@centos7 ~]# ldapadd -f referal.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -w fenestros adding new entry "ou=Informatique,dc=i2tch,dc=com"
Constatez maintenant le résultat avec phpLDAPadmin en cliquant sur l'icone refresh dans le panneau de gauche :
LAB #2 - La Commande ldapsearch
Chaque annuaire contient une entrée RootDSE. Cette entrée est particulière puisque son DN est vide. Son rôle est de contenir les attributs opérationnels du serveur qui comportent des extensions de contrôle et opérations disponibles sur le serveur. Cette information est utilisée par le client LDAP lors de sa connexion afin de connaître ce que peut et ce que ne peut pas faire le serveur.
Afin de connaître le contenu du RootDSE, il convient d'utiliser la commande ldapsearch. Cette commande prend les options suivantes :
[root@centos7 ~]# ldapsearch --help ldapsearch: invalid option -- '-' ldapsearch: unrecognized option -- usage: ldapsearch [options] [filter [attributes...]] where: filter RFC 4515 compliant LDAP search filter attributes whitespace-separated list of attribute descriptions which may include: 1.1 no attributes * all user attributes + all operational attributes Search options: -a deref one of never (default), always, search, or find -A retrieve attribute names only (no values) -b basedn base dn for search -c continuous operation mode (do not stop on errors) -E [!]<ext>[=<extparam>] search extensions (! indicates criticality) [!]domainScope (domain scope) !dontUseCopy (Don't Use Copy) [!]mv=<filter> (RFC 3876 matched values filter) [!]pr=<size>[/prompt|noprompt] (RFC 2696 paged results/prompt) [!]sss=[-]<attr[:OID]>[/[-]<attr[:OID]>...] (RFC 2891 server side sorting) [!]subentries[=true|false] (RFC 3672 subentries) [!]sync=ro[/<cookie>] (RFC 4533 LDAP Sync refreshOnly) rp[/<cookie>][/<slimit>] (refreshAndPersist) [!]vlv=<before>/<after>(/<offset>/<count>|:<value>) (ldapv3-vlv-09 virtual list views) [!]deref=derefAttr:attr[,...][;derefAttr:attr[,...][;...]] [!]<oid>[=:<b64value>] (generic control; no response handling) -f file read operations from `file' -F prefix URL prefix for files (default: file:///tmp/) -l limit time limit (in seconds, or "none" or "max") for search -L print responses in LDIFv1 format -LL print responses in LDIF format without comments -LLL print responses in LDIF format without comments and version -M enable Manage DSA IT control (-MM to make critical) -P version protocol version (default: 3) -s scope one of base, one, sub or children (search scope) -S attr sort the results by attribute `attr' -t write binary values to files in temporary directory -tt write all values to files in temporary directory -T path write files to directory specified by path (default: /tmp) -u include User Friendly entry names in the output -z limit size limit (in entries, or "none" or "max") for search Common options: -d level set LDAP debugging level to `level' -D binddn bind DN -e [!]<ext>[=<extparam>] general extensions (! indicates criticality) [!]assert=<filter> (RFC 4528; a RFC 4515 Filter string) [!]authzid=<authzid> (RFC 4370; "dn:<dn>" or "u:<user>") [!]chaining[=<resolveBehavior>[/<continuationBehavior>]] one of "chainingPreferred", "chainingRequired", "referralsPreferred", "referralsRequired" [!]manageDSAit (RFC 3296) [!]noop ppolicy [!]postread[=<attrs>] (RFC 4527; comma-separated attr list) [!]preread[=<attrs>] (RFC 4527; comma-separated attr list) [!]relax [!]sessiontracking abandon, cancel, ignore (SIGINT sends abandon/cancel, or ignores response; if critical, doesn't wait for SIGINT. not really controls) -h host LDAP server -H URI LDAP Uniform Resource Identifier(s) -I use SASL Interactive mode -n show what would be done but don't actually do it -N do not use reverse DNS to canonicalize SASL host name -O props SASL security properties -o <opt>[=<optparam>] general options nettimeout=<timeout> (in seconds, or "none" or "max") ldif-wrap=<width> (in columns, or "no" for no wrapping) -p port port on LDAP server -Q use SASL Quiet mode -R realm SASL realm -U authcid SASL authentication identity -v run in verbose mode (diagnostics to standard output) -V print version info (-VV only) -w passwd bind password (for simple authentication) -W prompt for bind password -x Simple authentication -X authzid SASL authorization identity ("dn:<dn>" or "u:<user>") -y file Read password from file -Y mech SASL mechanism -Z Start TLS request (-ZZ to require successful response)
La syntaxe de la recherche du RootDSE est :
ldapsearch -x -s base -b "" "(objectclass=*)" +
Dans cette commande on peut constater des options :
Option | Description |
---|---|
-s base | Définit la portée de la recherche |
-b “” | Définit un dn vide pour la recherche |
“(objectclass=*)” | Définit ce que l'on recherche |
+ | Définit tous les attributs opérationnels |
Le résultat obtenu est :
[root@centos7 ~]# ldapsearch -x -s base -b "" "(objectclass=*)" + # extended LDIF # # LDAPv3 # base <> with scope baseObject # filter: (objectclass=*) # requesting: + # # dn: structuralObjectClass: OpenLDAProotDSE configContext: cn=config monitorContext: cn=Monitor namingContexts: dc=i2tch,dc=com supportedControl: 2.16.840.1.113730.3.4.18 supportedControl: 2.16.840.1.113730.3.4.2 supportedControl: 1.3.6.1.4.1.4203.1.10.1 supportedControl: 1.3.6.1.1.22 supportedControl: 1.2.840.113556.1.4.319 supportedControl: 1.2.826.0.1.3344810.2.3 supportedControl: 1.3.6.1.1.13.2 supportedControl: 1.3.6.1.1.13.1 supportedControl: 1.3.6.1.1.12 supportedExtension: 1.3.6.1.4.1.1466.20037 supportedExtension: 1.3.6.1.4.1.4203.1.11.1 supportedExtension: 1.3.6.1.4.1.4203.1.11.3 supportedExtension: 1.3.6.1.1.8 supportedFeatures: 1.3.6.1.1.14 supportedFeatures: 1.3.6.1.4.1.4203.1.5.1 supportedFeatures: 1.3.6.1.4.1.4203.1.5.2 supportedFeatures: 1.3.6.1.4.1.4203.1.5.3 supportedFeatures: 1.3.6.1.4.1.4203.1.5.4 supportedFeatures: 1.3.6.1.4.1.4203.1.5.5 supportedLDAPVersion: 3 supportedSASLMechanisms: SCRAM-SHA-1 supportedSASLMechanisms: GSS-SPNEGO supportedSASLMechanisms: GSSAPI supportedSASLMechanisms: DIGEST-MD5 supportedSASLMechanisms: CRAM-MD5 ref: ldap://root.openldap.org entryDN: subschemaSubentry: cn=Subschema # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
A Faire - Utilisez le site web http://www.oid-info.com pour rechercher les supportedFeatures.
La commande ldapsearch utilisée ci-dessus a précisé une portée de base grâce à l'option -s base.
L'intérrogation de l'annuaire se fait avec une reqûete composée de 4 éléments :
Elément | Description |
---|---|
Base | Le point de départ de la reqûete |
Attributs | La liste des attributs à retourner. Si vide ou *, tous les attributs sont retournés |
Portée | Indique la portée de la reqûete. Elle peut être Base, One ou Sub |
Filtre | Spécifie des critères a appliquer au attributs |
La notion de la portée est la suivante :
- Base
- Seul l'objet de base est fourni,
- One
- Seuls les objets au premier niveau en dessous de l'objet de base sont fournis,
- Sub
- Tous les objets en dessous de l'objet de base sont fournis.
La forme d'un filtre est :
- attribut, opérateur, valeur
L'opérateur est un des éléments suivants :
Opérateur | Description |
---|---|
= | égalité stricte |
~= | égalité approximative |
<= | inférieur ou égal |
>= | supérieur ou égal |
& | et logique |
| | ou logique |
! | non logique |
La valeur peut être :
- une valeur exacte,
- une expression contenant le joker *.
Quand on veut trouver un caractère spécial, il convient de le remplacer avec une séquence spécifique :
Caractère | Séquence |
---|---|
* | \2A |
( | \28 |
) | \29 |
\ | \5C |
Nul | \00 |
L'utilisation de ldapsearch peut être illustrée avec quelques exemples.
Dans l'exemple suivant, nous cherchons les entrées du type ou à partir de ou=France,dc=i2tch,dc=com :
[root@centos7 ~]# ldapsearch -x -b "ou=France,dc=i2tch,dc=com" "(objectClass=organizationalUnit)" # extended LDIF # # LDAPv3 # base <ou=France,dc=i2tch,dc=com> with scope subtree # filter: (objectClass=organizationalUnit) # requesting: ALL # # France, i2tch.com dn: ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: France # Commercial, France, i2tch.com dn: ou=Commercial,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Commercial # Recherche, France, i2tch.com dn: ou=Recherche,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Recherche # Production, France, i2tch.com dn: ou=Production,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Production # search result search: 2 result: 0 Success # numResponses: 5 # numEntries: 4
Dans l'exemple suivant, nous cherchons les entrées enfants du type ou à partir de ou=France,dc=i2tch,dc=com sans commentaires :
[root@centos7 ~]# ldapsearch -x -LLL -s children -b "ou=France,dc=i2tch,dc=com" "(objectClass=organizationalUnit)" dn: ou=Commercial,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Commercial dn: ou=Recherche,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Recherche dn: ou=Production,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Production
Dans l'exemple suivant, nous cherchons les entrées enfants du type ou à partir de ou=France,dc=i2tch,dc=com sans commentaires et avec un tri sur la valeur de l'ou :
[root@centos7 ~]# ldapsearch -x -LLL -S ou -s children -b "ou=France,dc=i2tch,dc=com" dn: cn=Responsable Personnel,ou=France,dc=i2tch,dc=com cn: Responsable Personnel aliasedObjectName: cn=Directeur,ou=France,dc=i2tch,dc=com objectClass: top objectClass: alias objectClass: extensibleObject dn: cn=directeur,ou=France,dc=i2tch,dc=com objectClass: person objectClass: top cn: directeur sn: Guillaud telephoneNumber: 12345678 telephoneNumber: 87654321 dn: cn=dupont,ou=Recherche,ou=France,dc=i2tch,dc=com objectClass: person objectClass: top cn: dupont sn: dupont dn: cn=mail,ou=Commercial,ou=France,dc=i2tch,dc=com objectClass: inetOrgPerson objectClass: person objectClass: top cn: mail mail: info@i2tch.com sn: info dn: ou=Commercial,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Commercial dn: ou=Production,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Production dn: ou=Recherche,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Recherche
Dans l'exemple suivant, nous cherchons les entrées enfants du type ou à partir de ou=France,dc=i2tch,dc=com sans commentaires, avec un tri sur la valeur de l'ou et en demandant une affichage plus lisible :
[root@centos7 ~]# ldapsearch -x -LLL -S ou -s children -u -b "ou=France,dc=i2tch,dc=com" dn: cn=Responsable Personnel,ou=France,dc=i2tch,dc=com ufn: Responsable Personnel, France, i2tch.com cn: Responsable Personnel aliasedObjectName: cn=Directeur,ou=France,dc=i2tch,dc=com objectClass: top objectClass: alias objectClass: extensibleObject dn: cn=directeur,ou=France,dc=i2tch,dc=com ufn: directeur, France, i2tch.com objectClass: person objectClass: top cn: directeur sn: Guillaud telephoneNumber: 12345678 telephoneNumber: 87654321 dn: cn=dupont,ou=Recherche,ou=France,dc=i2tch,dc=com ufn: dupont, Recherche, France, i2tch.com objectClass: person objectClass: top cn: dupont sn: dupont dn: cn=mail,ou=Commercial,ou=France,dc=i2tch,dc=com ufn: mail, Commercial, France, i2tch.com objectClass: inetOrgPerson objectClass: person objectClass: top cn: mail mail: info@i2tch.com sn: info dn: ou=Commercial,ou=France,dc=i2tch,dc=com ufn: Commercial, France, i2tch.com objectClass: organizationalUnit objectClass: top ou: Commercial dn: ou=Production,ou=France,dc=i2tch,dc=com ufn: Production, France, i2tch.com objectClass: organizationalUnit objectClass: top ou: Production dn: ou=Recherche,ou=France,dc=i2tch,dc=com ufn: Recherche, France, i2tch.com objectClass: organizationalUnit objectClass: top ou: Recherche
Dans l'exemple suivant, nous cherchons les entrées du type ou et cn à partir de ou=France,dc=i2tch,dc=com en utilisant un fichier de filtre. Le fichier de filtre est filtre et contient trois lignes :
[root@centos7 ~]# vi filtre [root@centos7 ~]# cat filtre organizationalUnit inetOrgPerson
Important - Ce fichier filtre DOIT comporter une ligne vide à la fin.
La commande est :
[root@centos7 ~]# ldapsearch -x -b "ou=France,dc=i2tch,dc=com" -f filtre "(objectClass=%s)" ou cn # extended LDIF # # LDAPv3 # base <ou=France,dc=i2tch,dc=com> with scope subtree # filter pattern: (objectClass=%s) # requesting: ou cn # # # filter: (objectClass=organizationalUnit) # # France, i2tch.com dn: ou=France,dc=i2tch,dc=com ou: France # Commercial, France, i2tch.com dn: ou=Commercial,ou=France,dc=i2tch,dc=com ou: Commercial # Recherche, France, i2tch.com dn: ou=Recherche,ou=France,dc=i2tch,dc=com ou: Recherche # Production, France, i2tch.com dn: ou=Production,ou=France,dc=i2tch,dc=com ou: Production # search result search: 2 result: 0 Success # numResponses: 5 # numEntries: 4 # # filter: (objectClass=inetOrgPerson) # # mail, Commercial, France, i2tch.com dn: cn=mail,ou=Commercial,ou=France,dc=i2tch,dc=com cn: mail # search result search: 3 result: 0 Success # numResponses: 2 # numEntries: 1 # # filter: (objectClass=) # # search result search: 4 result: 0 Success # numResponses: 1
LAB #3 - La Commande ldapmodify
La commande ldapmodify prend les options suivantes :
[root@centos7 ~]# ldapmodify --help ldapmodify: invalid option -- '-' ldapmodify: unrecognized option -- Add or modify entries from an LDAP server usage: ldapmodify [options] The list of desired operations are read from stdin or from the file specified by "-f file". Add or modify options: -a add values (default is to replace) -c continuous operation mode (do not stop on errors) -E [!]ext=extparam modify extensions (! indicate s criticality) -f file read operations from `file' -M enable Manage DSA IT control (-MM to make critical) -P version protocol version (default: 3) -S file write skipped modifications to `file' Common options: -d level set LDAP debugging level to `level' -D binddn bind DN -e [!]<ext>[=<extparam>] general extensions (! indicates criticality) [!]assert=<filter> (RFC 4528; a RFC 4515 Filter string) [!]authzid=<authzid> (RFC 4370; "dn:<dn>" or "u:<user>") [!]chaining[=<resolveBehavior>[/<continuationBehavior>]] one of "chainingPreferred", "chainingRequired", "referralsPreferred", "referralsRequired" [!]manageDSAit (RFC 3296) [!]noop ppolicy [!]postread[=<attrs>] (RFC 4527; comma-separated attr list) [!]preread[=<attrs>] (RFC 4527; comma-separated attr list) [!]relax [!]sessiontracking abandon, cancel, ignore (SIGINT sends abandon/cancel, or ignores response; if critical, doesn't wait for SIGINT. not really controls) -h host LDAP server -H URI LDAP Uniform Resource Identifier(s) -I use SASL Interactive mode -n show what would be done but don't actually do it -N do not use reverse DNS to canonicalize SASL host name -O props SASL security properties -o <opt>[=<optparam>] general options nettimeout=<timeout> (in seconds, or "none" or "max") ldif-wrap=<width> (in columns, or "no" for no wrapping) -p port port on LDAP server -Q use SASL Quiet mode -R realm SASL realm -U authcid SASL authentication identity -v run in verbose mode (diagnostics to standard output) -V print version info (-VV only) -w passwd bind password (for simple authentication) -W prompt for bind password -x Simple authentication -X authzid SASL authorization identity ("dn:<dn>" or "u:<user>") -y file Read password from file -Y mech SASL mechanism -Z Start TLS request (-ZZ to require successful response)
Afin d'illustrer l'utilisation de la commande ldapmodify, créez une fichier prepa_modify.ldif et éditez-le ainsi :
[root@centos7 ~]# vi prepa_modify.ldif [root@centos7 ~]# cat prepa_modify.ldif dn: cn=dupond,ou=Recherche,ou=France,dc=i2tch,dc=com objectClass: inetOrgPerson objectClass: top cn: dupond sn: dupond
Saisissez ensuite la commande suivante :
[root@centos7 ~]# ldapadd -f prepa_modify.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -W Enter LDAP Password: fenestros adding new entry "cn=dupond,ou=Recherche,ou=France,dc=i2tch,dc=com"
Important - Notez l'utilisation de l'option -W qui permet de demander au serveur un prompt pour le mot de passe au lieu de l'écrire en clair dans la commande elle-même. Notez donc que le mot de passe saisi ne sera pas en clair.
Visualisez votre DIT avec phpLDAPadmin. Vous constaterez un résultat similaire à celui-ci :
Nous allons maintenant utiliser la commande ldapmodify pour ajouter une adresse email à l'entrée dupond. Créez donc le fichier modify.ldif et éditez-le ainsi :
[root@centos7 ~]# vi modify.ldif [root@centos7 ~]# cat modify.ldif dn: cn=dupond,ou=Recherche,ou=France,dc=i2tch,dc=com changetype: modify add: mail mail: dupond@i2tch.com
Saisissez maintenant la commande suivante :
[root@centos7 ~]# ldapmodify -f modify.ldif -x -D "cn=Manager,dc=i2tch,dc=com" -W Enter LDAP Password: fenestros modifying entry "cn=dupond,ou=Recherche,ou=France,dc=i2tch,dc=com"
Visualisez votre DIT avec phpLDAPadmin. Vous constaterez un résultat similaire à celui-ci :
LAB #4 - La Commande ldapdelete
Comme vous pouvez constater, vous avez deux entrées dans ou=Recherche,ou=France,dc=i2tch,dc=com :
- dupond
- dupont
Nous souhaitons maintenant supprimer l'entrée dupont en utilisant la commande ldapdelete. Les options de ldapdelete sont :
[root@centos7 ~]# ldapdelete --help ldapdelete: invalid option -- '-' ldapdelete: unrecognized option -- Delete entries from an LDAP server usage: ldapdelete [options] [dn]... dn: list of DNs to delete. If not given, it will be readed from stdin or from the file specified with "-f file". Delete Options: -c continuous operation mode (do not stop on errors) -f file read operations from `file' -M enable Manage DSA IT control (-MM to make critical) -P version protocol version (default: 3) -r delete recursively Common options: -d level set LDAP debugging level to `level' -D binddn bind DN -e [!]<ext>[=<extparam>] general extensions (! indicates criticality) [!]assert=<filter> (RFC 4528; a RFC 4515 Filter string) [!]authzid=<authzid> (RFC 4370; "dn:<dn>" or "u:<user>") [!]chaining[=<resolveBehavior>[/<continuationBehavior>]] one of "chainingPreferred", "chainingRequired", "referralsPreferred", "referralsRequired" [!]manageDSAit (RFC 3296) [!]noop ppolicy [!]postread[=<attrs>] (RFC 4527; comma-separated attr list) [!]preread[=<attrs>] (RFC 4527; comma-separated attr list) [!]relax [!]sessiontracking abandon, cancel, ignore (SIGINT sends abandon/cancel, or ignores response; if critical, doesn't wait for SIGINT. not really controls) -h host LDAP server -H URI LDAP Uniform Resource Identifier(s) -I use SASL Interactive mode -n show what would be done but don't actually do it -N do not use reverse DNS to canonicalize SASL host name -O props SASL security properties -o <opt>[=<optparam>] general options nettimeout=<timeout> (in seconds, or "none" or "max") ldif-wrap=<width> (in columns, or "no" for no wrapping) -p port port on LDAP server -Q use SASL Quiet mode -R realm SASL realm -U authcid SASL authentication identity -v run in verbose mode (diagnostics to standard output) -V print version info (-VV only) -w passwd bind password (for simple authentication) -W prompt for bind password -x Simple authentication -X authzid SASL authorization identity ("dn:<dn>" or "u:<user>") -y file Read password from file -Y mech SASL mechanism -Z Start TLS request (-ZZ to require successful response)
Saisissez donc la commande suivante :
[root@centos7 ~]# ldapdelete -x -D "cn=Manager,dc=i2tch,dc=com" -W "cn=dupont,ou=Recherche,ou=France,dc=i2tch,dc=com" Enter LDAP Password: fenestros
Important - Notez l'absence d'une confirmation de la suppression.
Rafraichissez phpLDAPadmin. Vous constaterez un résultat similaire à celui-ci :
Supprimer maintenant le referral mis en place tout à l'heure :
[root@centos7 ~]# ldapdelete -x -M -D "cn=Manager,dc=i2tch,dc=com" -W "ou=Informatique,dc=i2tch,dc=com" Enter LDAP Password: fenestros
LAB #5 - La Commande slapadd
Jusqu'à maintenant nous avons apporter des modifications à la base LDAP en ligne, autrement dit pendant que le serveur était en cours de fonctionnement. Il est aussi possible d'apporter des modifications quand le serveur est arrêté.
Pour faire ceci, on dispose de la commande slapadd. Les options de la commande slapadd sont :
[root@centos7 ~]# slapadd --help slapadd: invalid option -- '-' usage: slapadd [-v] [-d debuglevel] [-f configfile] [-F configdir] [-o <name>[=<value>]] [-c] [-g] [-n databasenumber | -b suffix] [-l ldiffile] [-j linenumber] [-q] [-u] [-s] [-w]
Créez d'abord le fichier LDIF slapadd.ldif et éditez-le ainsi :
[root@centos7 ~]# vi slapadd.ldif [root@centos7 ~]# cat slapadd.ldif dn: cn=dupois,ou=Production,ou=France,dc=i2tch,dc=com objectClass: inetOrgPerson objectClass: top cn: dupois sn: dupois
Arrêtez maintenant le service slapd :
[root@centos7 ~]# systemctl stop slapd [root@centos7 ~]# systemctl status slapd ● slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled) Active: inactive (dead) since Sun 2020-01-12 15:31:13 CET; 5s ago Docs: man:slapd man:slapd-config man:slapd-hdb man:slapd-mdb file:///usr/share/doc/openldap-servers/guide.html Process: 1061 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS) Process: 923 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS) Main PID: 1077 (code=exited, status=0/SUCCESS) Jan 12 15:27:38 centos7.fenestros.loc slapd[1077]: conn=1008 op=0 BIND dn="cn... Jan 12 15:27:38 centos7.fenestros.loc slapd[1077]: conn=1008 op=0 RESULT tag=... Jan 12 15:27:38 centos7.fenestros.loc slapd[1077]: conn=1008 op=1 DEL dn="ou=... Jan 12 15:27:38 centos7.fenestros.loc slapd[1077]: conn=1008 op=1 RESULT tag=... Jan 12 15:27:38 centos7.fenestros.loc slapd[1077]: conn=1008 op=2 UNBIND Jan 12 15:27:38 centos7.fenestros.loc slapd[1077]: conn=1008 fd=11 closed Jan 12 15:31:13 centos7.fenestros.loc slapd[1077]: daemon: shutdown requested... Jan 12 15:31:13 centos7.fenestros.loc systemd[1]: Stopping OpenLDAP Server Da... Jan 12 15:31:13 centos7.fenestros.loc slapd[1077]: slapd shutdown: waiting fo... Jan 12 15:31:13 centos7.fenestros.loc systemd[1]: Stopped OpenLDAP Server Dae... Hint: Some lines were ellipsized, use -l to show in full.
Saisissez maintenant la commande suivante :
[root@centos7 ~]# slapadd -b "dc=i2tch,dc=com" -l slapadd.ldif _#################### 100.00% eta none elapsed none fast! Closing DB...
Démarrez le service slapd :
[root@centos7 ~]# systemctl start slapd [root@centos7 ~]# systemctl status slapd ● slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-01-12 15:33:21 CET; 3s ago Docs: man:slapd man:slapd-config man:slapd-hdb man:slapd-mdb file:///usr/share/doc/openldap-servers/guide.html Process: 6693 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS) Process: 6651 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS) Main PID: 6695 (slapd) CGroup: /system.slice/slapd.service └─6695 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:/// Jan 12 15:33:21 centos7.fenestros.loc runuser[6679]: pam_unix(runuser:session... Jan 12 15:33:21 centos7.fenestros.loc runuser[6681]: pam_unix(runuser:session... Jan 12 15:33:21 centos7.fenestros.loc runuser[6683]: pam_unix(runuser:session... Jan 12 15:33:21 centos7.fenestros.loc runuser[6685]: pam_unix(runuser:session... Jan 12 15:33:21 centos7.fenestros.loc runuser[6687]: pam_unix(runuser:session... Jan 12 15:33:21 centos7.fenestros.loc runuser[6689]: pam_unix(runuser:session... Jan 12 15:33:21 centos7.fenestros.loc runuser[6691]: pam_unix(runuser:session... Jan 12 15:33:21 centos7.fenestros.loc slapd[6693]: @(#) $OpenLDAP: slapd 2.4.... mockbuild@x86-01.b... Jan 12 15:33:21 centos7.fenestros.loc slapd[6695]: slapd starting Jan 12 15:33:21 centos7.fenestros.loc systemd[1]: Started OpenLDAP Server Dae... Hint: Some lines were ellipsized, use -l to show in full.
Rafraichissez phpLDAPadmin. Vous constaterez un résultat similaire à celui-ci :
LAB #6 - Maintenance d’une base de données LDAP
6.1 - La commande slapcat
La commande slapcat produit un fichier LDIF à partir d'une base de données slapd.
L'exportation ne produit pas un fichier hiérarchique. Pour cette raison, le fichier peut être utilisé par la commande slapadd mais ne peut pas être utilisé par la commande ldapadd.
Les options de cette commande sont :
[root@centos7 ~]# slapcat --help slapcat: invalid option -- '-' usage: slapcat [-v] [-d debuglevel] [-f configfile] [-F configdir] [-o <name>[=<value>]] [-c] [-g] [-n databasenumber | -b suffix] [-l ldiffile] [-a filter] [-s subtree] [-H url]
Saisissez donc les commandes suivantes :
[root@centos7 ~]# systemctl stop slapd [root@centos7 ~]# slapcat -b "dc=i2tch,dc=com" -l backup.ldif
Consultez maintenant le contenu du fichier backup.ldif :
[root@centos7 ~]# cat backup.ldif dn: dc=i2tch,dc=com objectClass: dcObject objectClass: organization dc: i2tch o: i2tch.com description: Exemple structuralObjectClass: organization entryUUID: 7f60340c-c739-1039-9642-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143851Z entryCSN: 20200109143851.158182Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143851Z dn: cn=Manager,dc=i2tch,dc=com objectClass: organizationalRole cn: Manager description: Gestionnaire structuralObjectClass: organizationalRole entryUUID: 7f611b60-c739-1039-9643-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143851Z entryCSN: 20200109143851.164106Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143851Z dn: ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: France structuralObjectClass: organizationalUnit entryUUID: a622df86-c739-1039-9644-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143956Z entryCSN: 20200109143956.187387Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143956Z dn: ou=Commercial,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Commercial structuralObjectClass: organizationalUnit entryUUID: a624e218-c739-1039-9645-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143956Z entryCSN: 20200109143956.200565Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143956Z dn: ou=Recherche,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Recherche structuralObjectClass: organizationalUnit entryUUID: a6253092-c739-1039-9646-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143956Z entryCSN: 20200109143956.202576Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143956Z dn: ou=Production,ou=France,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Production structuralObjectClass: organizationalUnit entryUUID: a625d74a-c739-1039-9647-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143956Z entryCSN: 20200109143956.206843Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143956Z dn: ou=Suisse,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Suisse structuralObjectClass: organizationalUnit entryUUID: a6261b24-c739-1039-9648-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143956Z entryCSN: 20200109143956.208581Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143956Z dn: ou=Commercial,ou=Suisse,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Commercial structuralObjectClass: organizationalUnit entryUUID: a62660e8-c739-1039-9649-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143956Z entryCSN: 20200109143956.210367Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143956Z dn: ou=USA,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: USA structuralObjectClass: organizationalUnit entryUUID: a626bca0-c739-1039-964a-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143956Z entryCSN: 20200109143956.212715Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143956Z dn: ou=Commercial,ou=USA,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Commercial structuralObjectClass: organizationalUnit entryUUID: a626fc4c-c739-1039-964b-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143956Z entryCSN: 20200109143956.214345Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143956Z dn: ou=Recherche,ou=USA,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Recherche structuralObjectClass: organizationalUnit entryUUID: a6274a12-c739-1039-964c-efd3014890db creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200109143956Z entryCSN: 20200109143956.216336Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200109143956Z dn: cn=Responsable Personnel,ou=France,dc=i2tch,dc=com cn: Responsable Personnel aliasedObjectName: cn=Directeur,ou=France,dc=i2tch,dc=com objectClass: top objectClass: alias objectClass: extensibleObject structuralObjectClass: alias entryUUID: bbb6f964-c7d3-1039-905e-0bb7ee6decc3 creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200110090254Z entryCSN: 20200110090254.886500Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200110090254Z dn: cn=directeur,ou=France,dc=i2tch,dc=com objectClass: person objectClass: top cn: directeur sn: Guillaud telephoneNumber: 12345678 telephoneNumber: 87654321 structuralObjectClass: person entryUUID: c0bba43a-c7da-1039-9f6f-31eb8911c0ef creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200110095309Z entryCSN: 20200110095309.782800Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200110095309Z dn: ou=Angleterre,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Angleterre structuralObjectClass: organizationalUnit entryUUID: 95e2dba6-c7e0-1039-9f70-31eb8911c0ef creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200110103454Z entryCSN: 20200110103454.878156Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200110103454Z dn: ou=Sales,ou=Angleterre,dc=i2tch,dc=com objectClass: organizationalUnit objectClass: top ou: Sales structuralObjectClass: organizationalUnit entryUUID: 95e965d4-c7e0-1039-9f71-31eb8911c0ef creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200110103454Z entryCSN: 20200110103454.921008Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200110103454Z dn: cn=Sales Director,ou=Sales,ou=Angleterre,dc=i2tch,dc=com objectClass: person objectClass: top cn: Sales Director sn: Smith structuralObjectClass: person entryUUID: 95f02de2-c7e0-1039-9f72-31eb8911c0ef creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200110103454Z entryCSN: 20200110103454.965453Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200110103454Z dn: cn=Sales Manager,cn=Sales Director,ou=Sales,ou=Angleterre,dc=i2tch,dc=co m objectClass: person objectClass: top cn: Sales Manager sn: Brown structuralObjectClass: person entryUUID: 95f62710-c7e0-1039-9f73-31eb8911c0ef creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200110103455Z entryCSN: 20200110103455.004608Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200110103455Z dn: cn=mail,ou=Commercial,ou=France,dc=i2tch,dc=com objectClass: inetOrgPerson objectClass: person objectClass: top cn: mail mail: info@i2tch.com sn: info structuralObjectClass: inetOrgPerson entryUUID: aa1bfcb0-c808-1039-900b-092b75c3c5a4 creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200110152148Z entryCSN: 20200110152148.676173Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200110152148Z dn: cn=dupond,ou=Recherche,ou=France,dc=i2tch,dc=com objectClass: inetOrgPerson objectClass: top cn: dupond sn: dupond structuralObjectClass: inetOrgPerson entryUUID: 96de82d0-c97f-1039-92ab-977e121b768c creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200112120537Z mail: dupond@i2tch.com entryCSN: 20200112121812.106114Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200112121812Z dn: cn=dupois,ou=Production,ou=France,dc=i2tch,dc=com objectClass: inetOrgPerson objectClass: top cn: dupois sn: dupois structuralObjectClass: inetOrgPerson entryUUID: 066ceaf6-c994-1039-8f6f-ab1664534830 creatorsName: cn=Manager,dc=i2tch,dc=com createTimestamp: 20200112143154Z entryCSN: 20200112143154.765140Z#000000#000#000000 modifiersName: cn=Manager,dc=i2tch,dc=com modifyTimestamp: 20200112143154Z
6.2 - La commande slapindex
La commande slapindex crée ou met à jour les index définis pour une base de données slapd.
Les options de cette commande sont :
[root@centos7 ~]# slapindex --help slapindex: invalid option -- '-' usage: slapindex [-v] [-d debuglevel] [-f configfile] [-F configdir] [-o <name>[=<value>]] [-c] [-g] [-n databasenumber | -b suffix] [attr ...] [-q] [-t]
Saisissez donc la commande suivante :
[root@centos7 ~]# slapindex -b "dc=i2tch,dc=com" -v indexing id=00000001 indexing id=00000002 indexing id=00000003 indexing id=00000004 indexing id=00000005 indexing id=00000006 indexing id=00000007 indexing id=00000008 indexing id=00000009 indexing id=0000000a indexing id=0000000b indexing id=0000000c indexing id=0000000d indexing id=0000000e indexing id=0000000f indexing id=00000010 indexing id=00000011 indexing id=00000013 indexing id=00000015 indexing id=00000016
6.3 - La commande slapdn
La commande slapdn vérifie la cohérence d'une entrée spécifiée par rapport au(x) schéma(s) défini(s) pour slapd.
Les options de cette commande sont :
[root@centos7 ~]# slapdn --help slapdn: invalid option -- '-' usage: slapdn [-v] [-d debuglevel] [-f configfile] [-F configdir] [-o <name>[=<value>]] [-N | -P] DN [...]
Saisissez donc la commande suivante :
[root@centos7 ~]# slapdn cn=smith,dc=i2tch,dc=com DN: <cn=smith,dc=i2tch,dc=com> check succeeded normalized: <cn=smith,dc=i2tch,dc=com> pretty: <cn=smith,dc=i2tch,dc=com>
6.4 - La commande slaptest
La commande slaptest vérifie la syntaxe des fichiers de configuration de slapd.
Les options de cette commande sont :
[root@centos7 ~]# slaptest --help slaptest: invalid option -- '-' usage: slaptest [-v] [-d debuglevel] [-f configfile] [-F configdir] [-o <name>[=<value>]] [-n databasenumber] [-u] [-Q]
Saisissez donc la commande suivante :
[root@centos7 ~]# slaptest -u config file testing succeeded
6.5 - La commande slapauth
La commande slapauth vérifie la correspondance entre les ID et les DN.
Les options de cette commande sont :
root@centos7 ~]# slapauth --help slapauth: invalid option -- '-' usage: slapauth [-v] [-d debuglevel] [-f configfile] [-F configdir] [-o <name>[=<value>]] [-U authcID] [-X authzID] [-R realm] [-M mech] ID [...]
Saisissez donc la commande suivante :
[root@centos7 ~]# slapauth -v U smith X u :smith ID: <U> check succeeded authcID: <uid=u,cn=auth> ID: <smith> check succeeded authcID: <uid=smith,cn=auth> ID: <X> check succeeded authcID: <uid=x,cn=auth> ID: <u> check succeeded authcID: <uid=u,cn=auth> ID: <:smith> check succeeded authcID: <uid=:smith,cn=auth>
Démarrez slapd :
[root@centos7 ~]# systemctl start slapd [root@centos7 ~]# systemctl status slapd ● slapd.service - OpenLDAP Server Daemon Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-01-12 15:50:26 CET; 5s ago Docs: man:slapd man:slapd-config man:slapd-hdb man:slapd-mdb file:///usr/share/doc/openldap-servers/guide.html Process: 11958 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS) Process: 11915 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS) Main PID: 11966 (slapd) CGroup: /system.slice/slapd.service └─11966 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:/// Jan 12 15:50:26 centos7.fenestros.loc runuser[11943]: pam_unix(runuser:sessio... Jan 12 15:50:26 centos7.fenestros.loc runuser[11945]: pam_unix(runuser:sessio... Jan 12 15:50:26 centos7.fenestros.loc runuser[11947]: pam_unix(runuser:sessio... Jan 12 15:50:26 centos7.fenestros.loc runuser[11949]: pam_unix(runuser:sessio... Jan 12 15:50:26 centos7.fenestros.loc runuser[11951]: pam_unix(runuser:sessio... Jan 12 15:50:26 centos7.fenestros.loc runuser[11953]: pam_unix(runuser:sessio... Jan 12 15:50:26 centos7.fenestros.loc runuser[11955]: pam_unix(runuser:sessio... Jan 12 15:50:26 centos7.fenestros.loc slapd[11958]: @(#) $OpenLDAP: slapd 2.4... mockbuild@x86-01.... Jan 12 15:50:26 centos7.fenestros.loc slapd[11966]: slapd starting Jan 12 15:50:26 centos7.fenestros.loc systemd[1]: Started OpenLDAP Server Dae... Hint: Some lines were ellipsized, use -l to show in full.
<html>
Copyright © 2020 Hugh Norris.<br><br>
</html>