openldap

Configurer LDAP (openldap) sur CentOS 8

LDAP ( Lightweight Directory Access Protocol ) est un protocole qui permet d’accéder à des bases d’informations sur les utilisateurs d’un réseau par l’intermédiaire de protocoles TCP/IP.

Dans ce guide nous allons voir comment configurer OpenLDAP sur CentOS 8, Je suppose que vous avez OpenLDAP installé et opérationnel, si ce n’est pas déja le cas référez vous cet article.

Autoriser openldap au niveau du firewall :

[root@server]# firewall-cmd --add-service={ldap,ldaps} --permanent
success
[root@server]# firewall-cmd --reload
success

Configuration de la base de donnés de OpenLDAP :

Avant d’ajouter les entrés LDAP il faut créer la base MDB. Créez votre base de données avec le fichier LDIF ci-dessous et remplacez ce qui est en gras avec ce qui correspond avec vore site.

pour le HASH, vous générer le votre avec la commande slappasswd en mettant un mot de passe de votre choix :

[root@server]# vim database.ldif
dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcDbMaxSize: 42949672960
olcDbDirectory: /var/lib/openldap
olcSuffix: dc=monsite,dc=com
olcRootDN: cn=admin,dc=monsite,dc=com
olcRootPW: {SSHA}Y5MqOlBBkMHlDEBbr/CYecNZH2zXFG6f
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn pres,eq,approx,sub
olcDbIndex: mail pres,eq,sub
olcDbIndex: objectClass pres,eq
olcDbIndex: loginShell pres,eq
olcDbIndex: sudoUser,sudoHost pres,eq
olcAccess: to attrs=userPassword,shadowLastChange,shadowExpire
by self write
by anonymous auth
by dn.subtree="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by dn.subtree="ou=system,dc=monsite,dc=com" read
by * none
olcAccess: to dn.subtree="ou=system,dc=monsite,dc=com" by dn.subtree="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by * none
olcAccess: to dn.subtree="dc=monsite,dc=com" by dn.subtree="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by users read
by * none

Mettez à jour la base avec la commande ci-dessous, n’oubliez pas de préciser le nom de votre fichier :

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

Définire la structure d’organisation :

Créez un fichier ldif ( basedn.ldif dans mon cas ) pour définire la structure d’organisation, n’oubliez pas de mettre vos propre infos :

dn: dc=monsite,dc=com 
objectClass: dcObject 
objectClass: organization 
objectClass: top 
o: monsite 
dc: monsite 

dn: ou=groups,dc=monsite,dc=com 
objectClass: organizationalUnit 
objectClass: top 
ou: groups
 
dn: ou=people,dc=monsite,dc=com 
objectClass: organizationalUnit 
objectClass: top 
ou: people

dn: ou=system,dc=monsite,dc=com
objectClass: organizationalUnit
objectClass: top
ou: system

Mettez à jour ensuite la base avec la commande suivante :

[root@server]# ldapadd -Y EXTERNAL -H ldapi:/// -f basedn.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "dc=monsite,dc=com"
adding new entry "ou=groups,dc=monsite,dc=com"
adding new entry "ou=people,dc=monsite,dc=com"
adding new entry "ou=system,dc=monsite,dc=com"

Céez ensuite un utilisateur système qui va qui sera utilisé pour effectuer des opérations telles que la résolution des ID utilisateur et groupe.

Créer le fichier ldif suivant (n’oubliez pas de mettre le HASH de votre mot de passe généré avec la commande slappasswd:

[root@server]# cat sysuser.ldif
dn: cn=sysuser,ou=system,dc=monsite,dc=com
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: sysuser
userPassword: {SSHA}VVa86w3PU9J2lFLsyRoHkO1FoC7aEmnf
description: resolve UIDs/GIDs

Mettre à jour la base LDAP :

[root@server openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f sysuser.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=sysuser,ou=system,dc=monsite,dc=com"

Création d’utilisateur et groupe :

Nous allons maintenant crée un utilisateur et un groupe ( dev1/Groupuser dans mon cas) appartenant aux unités d’organisation créés précedement :

dn: cn=dev,ou=groups,dc=monsite,dc=com
objectClass: posixGroup 
cn: Groupuser 
gidNumber: 4500 
memberUid: user1
 
dn: uid=user1,ou=people,dc=monsite,dc=com
objectClass: posixAccount 
objectClass: shadowAccount 
objectClass: inetOrgPerson 
cn: Prénom 
sn: Nom 
uid: user1
uidNumber: 4500
gidNumber: 4500 
homeDirectory: /home/user1
loginShell: /bin/bash
gecos: Nom complet
[root@server]# ldapadd -Y EXTERNAL -H ldapi:/// -f user1.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=dev,ou=groups,dc=monsite,dc=com"
adding new entry "uid=user1,ou=people,dc=monsite,dc=com"

Accorder un mot passe à votre utilisateur :

[root@server]# ldappasswd -Y EXTERNAL -H ldapi:/// -S "uid=user1,ou=people,dc=monsite,dc=com"
New password:
Re-enter new password:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

Enfin pour s’assurer que tout fonctionnelent correctement, taper la commande suivante pour voir les infos de votre utilisateur s’affiche :

[root@server]# ldapsearch -x -W -H ldapi:/// -D "uid=user1,ou=people,dc=monsite,dc=com" -b "ou=people,dc=monsite,dc=com"
Enter LDAP Password:
extended LDIF
#
LDAPv3
base with scope subtree
filter: (objectclass=*)
requesting: ALL
#
people, monsite.com
dn: ou=people,dc=monsite,dc=com
objectClass: organizationalUnit
objectClass: top
ou: people
user1, people, monsite.com
dn: uid=user1,ou=people,dc=monsite,dc=com
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
cn:: UHLDqW5vbQ==
sn: Nom
uid: user1
uidNumber: 4500
gidNumber: 4500
homeDirectory: /home/user1
loginShell: /bin/bash
gecos: Nom complet
userPassword:: e1NTSEF9VEhmZHpqdkNWSG5kcjU4ZWF6aUpUV0RWNCtTblNSL0s=
search result
search: 2
result: 0 Success
numResponses: 3
numEntries: 2