Déléguer l’authentification d’openLDAP à un AD

Logo openLDAP

Il m’a récemment été demandé de configurer openLDAP pour déléguer l’authentification à un AD. Concrétement cela signifie que l’authentification ne sera pas faites par le LDAP mais par un AD. L’entrée utilisateur sera donc présente sur l’openLDAP ainsi que sur l’AD mais le mot de passe ne sera lui que sur l’AD.

Configuration du système

Désactiver selinux (A ne pas faire sur une plateforme de production, mieux vaut le configurer) :

# vi /etc/selinux/config

Remplacer :

SELINUX=enforcing

par

SELINUX=disabled

Désactiver firewalld (A ne pas faire sur une plateforme de production, mieux vaut le configurer) :

# systemctl disable firewalld
# systemctl stop firewalld

2) Installation des paquets nécessaires

Paquets openLDAP :

yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel

Paquets SASL :

# yum -y install cyrus-sasl-2

Paquet Telnet :

# yum -y install telnet

3) Configuration d’openLDAP

Mise au démarrage du service :

# systemctl start slapd.service
# systemctl enable slapd.service

Modification du service pour qu’il écoute sur les bons couples IPs/ports :

# vi /etc/sysconfig/slapd
SLAPD_URLS= »ldapi:/// ldap://192.168.1.30:389/ ldaps://192.168.1.30:636/ »

Suppression de la configuration par défaut

# rm -rf /etc/openldap/slapd.d/*

Chiffrement du mot de passe master :

# slappasswd

Création de la configuration de base d’openLDAP (à mettre dans un fichier openldap.ldif):

dn: cn=config \a
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: « OpenLDAP Server »
olcTLSCertificateKeyFile: /etc/openldap/certs/password
structuralObjectClass: olcGlobal

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib64/openldap
olcModuleload: back_mdb

dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema

include: file:///etc/openldap/schema/core.ldif
include: file:///etc/openldap/schema/cosine.ldif
include: file:///etc/openldap/schema/nis.ldif
include: file:///etc/openldap/schema/inetorgperson.ldif
include: file:///etc/openldap/schema/openldap.ldif

dn: olcDatabase=frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: frontend
olcAccess: to * by * read
olcSizelimit: size.soft=10000 size.hard=1000000
olcTimelimit: time.soft=300 time.hard=3600

dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
olcRootDN: cn=Manager,cn=config
olcRootPW: {SSHA}mdpssha
olcMonitoring: FALSE
olcAccess: to * by * none

dn: olcDatabase=monitor,cn=config
objectClass: olcDatabaseConfig
olcDatabase: monitor
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcSyncUseSubentry: FALSE
olcMonitoring: FALSE
olcAccess: to dn.subtree= »cn=monitor »
by dn.exact= »cn=Manager,cn=config » read
by dn.exact= »cn=Manager,dc=perso,dc=com » read
by * none

dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcMonitoring: TRUE
olcDbMaxSize: 42949672960
olcSuffix: dc=perso,dc=com
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=Manager,dc=perso,dc=com
olcRootPW: {SSHA}mdpssha
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn pres,eq,approx,sub
olcDbIndex: mail pres,eq,sub
olcDbIndex: objectClass pres,eq
olcDbIndex: loginShell pres,eq
olcAccess: to attrs=userPassword
by self write
by anonymous auth
by dn.base= »cn=Manager,dc=perso,dc=com » write
by * none
olcAccess: to attrs=shadowLastChange
by self write
by * read
olcAccess: to *
by dn.exact= »cn=Manager,dc=perso,dc=com » write
by * read

Chargement de la configuration dans l’annuaire:

# slapadd -v -F /etc/openldap/slapd.d -n 0 -f openldap.ldif

Modification des droits :

# chown -R ldap: slapd.d
# systemctl restart slapd

Redémarrage nécessaire :

# systemctl restart slapd

Vérrification du support LDAP par sasl:

# saslauthd -v
saslauthd 2.1.26
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap httpform

Configurer le service au démarage :

# vi /etc/sysconfig/saslauthd
Directory in which to place saslauthd’s listening socket, pid file, and so
on. This directory must already exist.
SOCKETDIR=/run/saslauthd
Mechanism to use when checking passwords. Run « saslauthd -v » to get a list
of which mechanism your installation was compiled with the ablity to use.
MECH=ldap
Additional flags to pass to saslauthd on the command line. See saslauthd(8)
for the list of accepted flags.
FLAGS= »-r -O /etc/saslauthd.conf »

Mise au démarrage du service :

# systemctl enable saslauthd
# systemctl start saslauthd

Configurer l’authentification entre saslauthd et l’AD :

# vi /etc/saslauthd.conf
ldap_servers: ldaps://perso.com:636/ ldaps://test.perso.com:636/
ldap_search_base: OU=perso,OU=People,DC=perso,DC=com
ldap_filter: (samaccountname=%u)
ldap_bind_dn: dn
ldap_password: mdp
ldap_tls_cacert_file: /etc/openldap/certs/ROOT-CA.pem

Redémarrer :

systemctl restart saslauthd

Tester l’authentification entre le LDAP et l’AD :

# testsaslauthd -u perso -p mdp

Réplication entre openldap et saslauthd :

# vi /usr/lib64/sasl2/slapd.conf
mech_list: PLAIN
pwcheck_method: saslauthd
saslauthd_path: /run/saslauthd/mux

Dans cn=config entrer les paramètres suivants :

olcSaslHost: localhost
olcSaslSecprops: none

Sur l’entrée utilisateur à la place du mot de passe mettre :

{sasl} samaccountname de l’utilisateur

Redémarrage des services :

# systemctl restart slapd
# systemctl restart slapd

4) Tests

Tester :

ldapsearch -d 1 -x -H ldaps://test.com:636 -b dc=test,dc=com -D uid=perso,ou=people,dc=test,dc=com -w mdp< /codeBlogCmd>

C’est terminé pour ce tutoriel, si celui-ci vous a plu n’hésitez pas à aller voir ma catégorie dédiée aux annuaires vous y trouverez d’autres articles du même genre ou la documentation d’openldap pour creuser un peu plus le sujet.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *