Blog CLEMANET
Systèmes et réseaux

Installation d’un serveur OpenLDAP v 2

Installation du serveur et du client openldap

Pour une distribution Linux Centos:

[root@localhost ~]# yum install openldap openldap-servers openldap-clients

Activation d’OpenLDAP au démarrage

[root@localhost openldap]# chkconfig slapd on

Configuration de la version 2.4 d’openldap

A partir de la version 2.3, il n’y a plus de fichier de configuration slapd.conf. Il est néanmoins possible d’importer un fichier existant. La configuration du serveur est stockée dans une branche LDAP particulière. La configuration est modifiable à chaud, sans redémarrer le serveur. Ces modifications utilisent les opérations classiques: ldapadd, ldapdelete, ldapmodify.

Les fichiers de configuration par défaut se trouve dans le répertoire /etc/openldap/slapd.d/ Il y a tout d’abord le fichier de configuration principal: cn=config, puis les fichiers de configuration des bases (dans le répertoire cn=config).

Création d’une base ldap (demo.com dans l’exemple)

On code tout d’abord le mot de passe root de la base

[root@localhost ~]# slappasswd -s motdepasse
{SSHA}+oRJw71ltK/VfNTYD8nF9mWkhM+OAkg4
[root@localhost ~]#

On prépare le fichier de configuration pour l’import dans OpenLDAP

[root@localhost ~]# cat base-ldap.ldif
 dn: olcDatabase=bdb,cn=config
 objectClass: olcDatabaseConfig
 objectClass: olcBdbConfig
 olcDatabase: bdb
 olcSuffix: dc=demo,dc=com
 olcDbDirectory: /var/lib/ldap/
 olcRootDN: cn=admin,dc=demo,dc=com
 olcRootPW: {SSHA}IvmNejNnlqwhDtJAsUod9hBgln7pwsTE
 olcDbIndex: cn,sn,uid pres,eq,approx,sub
 olcDbIndex: objectClass eq
 olcAccess: to *  by * write
 olcAccess: to attrs=userPassword by dn="cn=admin,dc=demo,dc=com" write by anonymous auth by self write by * none
 olcAccess: to * by dn="cn=admin,dc=demo,dc=com" write by * read

On ajoute les schémas utilisés:

 [root@localhost ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/core.ldif
 [root@localhost ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
 [root@localhost ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
 [root@localhost ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

Ajout des paramètres de la base à partir du fichier préparé ci-dessus

[root@localhost ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f ./base-ldap.ldif
 SASL/EXTERNAL authentication started
 SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
 SASL SSF: 0
 adding new entry "olcDatabase=bdb,cn=config"
[root@localhost ~]#

Ajout de la racine demo.com et d’une branche utilisateur

[root@localhost ~]# cat import.ldif
 dn: dc=demo,dc=com
 objectClass: top
 objectClass: dcObject
 objectClass: Organization
 dc: demo
 o: demo
dn: ou=groupe,dc=demo,dc=com
 objectClass: organizationalUnit
 ou: groupe
dn: ou=utilisateur,dc=demo,dc=com
 objectClass: organizationalUnit
 ou: utilisateur
[root@localhost ~]# ldapadd -x -W -D cn=admin,dc=demo,dc=com -f import.ldif
 Enter LDAP Password:
adding new entry "dc=demo,dc=com"
adding new entry "ou=groupe,dc=demo,dc=com"
adding new entry "ou=utilisateur,dc=demo,dc=com"

Vérification: Afficher la configuration du serveur LDAP

[root@localhost schema]# ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config
 # extended LDIF
 #
 # LDAPv3
 # base <cn=config> with scope subtree
 # filter: (objectclass=*)
 # requesting: ALL
 #
# config
 dn: cn=config
objectClass: olcGlobal
cn: config
olcConfigFile: /etc/openldap/slapd.conf.bak
olcConfigDir: /etc/openldap/slapd.d
olcAllows: bind_v2
olcArgsFile: /var/run/openldap/slapd.args
olcAttributeOptions: lang-
olcAuthzPolicy: none
olcConcurrency: 0
...

Import d’un utilisateur avec des attributs radius

[root@localhost ~]# cat import.ldif
dn: uid=clem,ou=utilisateur,dc=demo,dc=com
 objectClass: inetOrgPerson
 objectClass: radiusprofile
 uid: clem
 userPassword: password
 cn: clem
 sn: snclem
 radiustunneltype: VLAN
 radiustunnelmediumtype: 6
 radiustunnelprivategroupid: 4
[root@localhost ~]# ldapadd -x -W -D cn=admin,dc=demo,dc=com -f import.ldif

Modifier l’attribut d’un utilisateur

[root@localhost ~]# cat import.ldif
 dn: uid=clem,ou=utilisateur,dc=demo,dc=com
 changetype: modify
 replace: sn
 sn: clem dot
[root@localhost ~]# ldapmodify  -W -D "cn=admin,dc=demo,dc=com" -f import-user.ldif

Ajouter un attribut à un utilisateur

dn: uid=clem,ou=utilisateur,dc=demo,dc=com
 changetype: modify
 add: description
 description: un fruit

[root@localhost ~]# ldapmodify  -W -D "cn=admin,dc=demo,dc=com" -f import-user.ldif

Supprimer l’attribut d’un utilisateur

dn: uid=clem,ou=utilisateur,dc=demo,dc=com
 changetype: modify
 delete: description
[root@localhost ~]# ldapmodify  -W -D "cn=admin,dc=demo,dc=com" -f import-user.ldif

Supprimer un utilisateur

[root@localhost ~]# ldapdelete -x -W -D cn=admin,dc=demo,dc=com "uid=clem, ou=utilisateur,dc=demo,dc=com"

Recherche d’un utilisateur

[root@localhost ~]# ldapsearch -x -b dc=demo,dc=com uid=clem
 # extended LDIF
 #
 # LDAPv3
 # base <dc=demo,dc=com> with scope subtree
 # filter: uid=bob
 # requesting: ALL
 #
# clem, utilisateur, demo.com
 dn: uid=clem,ou=utilisateur,dc=demo,dc=com
 objectClass: inetOrgPerson
 objectClass: radiusprofile
 uid: clem
 userPassword:: cGFzc3dvcmQ=
 cn: clem
 sn: snclem
 radiusTunnelType: VLAN
 radiusTunnelMediumType: 6
 radiusTunnelPrivateGroupId: 4
# search result
 search: 2
 result: 0 Success
# numResponses: 2
 # numEntries: 1
 [root@localhost ~]#

Suppression de la base LDAP

Supprimer les fichiers dans /var/lib/ldap ainsi que le fichier de configuration de la base (si besoin, faire une sauvegarde avant la suppression).

[root@localhost ~]# rm olcDatabase\=\{2\}bdb.ldif
[root@localhost ~]# rm -Rf /var/lib/ldap/*