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/*