Série RHCSA : Configuration de l’authentification LDAP dans RHEL 7 - Partie 14
Nous commencerons cet article en décrivant quelques principes de base de LDAP (de quoi il s’agit, où il est utilisé et pourquoi) et montrerons comment configurer un serveur LDAP et configurer un client pour s’authentifier auprès de celui-ci à l’aide des systèmes Red Hat Enterprise Linux 7.
Comme nous le verrons, il existe plusieurs autres scénarios d’application possibles, mais dans ce guide, nous nous concentrerons entièrement sur l’authentification basée sur LDAP. De plus, veuillez garder à l’esprit qu’en raison de l’immensité du sujet, nous n’aborderons ici que ses bases, mais vous pouvez vous référer à la documentation décrite dans le résumé pour plus de détails.
Pour la même raison, vous remarquerez que j’ai décidé de laisser de côté plusieurs références aux pages de manuel des outils LDAP par souci de brièveté, mais les explications correspondantes sont à portée de main (man ldapadd, par exemple).
Cela dit, commençons.
Notre environnement de test
Notre environnement de test se compose de deux boîtiers RHEL 7 :
Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com
Si vous le souhaitez, vous pouvez utiliser la machine installée dans la Partie 12 : Automatiser les installations de RHEL 7 à l’aide de Kickstart en tant que client.
Qu’est-ce que LDAP ?
LDAP est l’abréviation de Lightweight Directory Access Protocol et consiste en un ensemble de protocoles qui permettent à un client d’accéder, sur un réseau, à des informations stockées de manière centralisée (telles qu’un répertoire de shells de connexion, des chemins absolus vers des répertoires personnels et d’autres informations typiques des utilisateurs du système, par exemple) qui doivent être accessibles à partir de différents endroits ou disponibles pour un grand nombre d’utilisateurs finaux (un autre exemple serait un répertoire d’adresses personnelles et de numéros de téléphone de tous les employés d’une entreprise).
La centralisation de ces informations (et d’autres encore) signifie qu’elles peuvent être plus facilement gérées et accessibles par tous ceux qui ont reçu l’autorisation de les utiliser.
Le diagramme suivant offre un schéma simplifié de LDAP et est décrit plus en détail ci-dessous :
Explication détaillée du schéma ci-dessus.
- Une entrée dans un annuaire LDAP représente une unité ou une information unique et est identifiée de manière unique par ce que l’on appelle un nom distinctif.
- Un attribut est un élément d’information associé à une entrée (par exemple, des adresses, des numéros de téléphone de contact disponibles et des adresses e-mail).
- Chaque attribut se voit attribuer une ou plusieurs valeurs constituées d’une liste séparée par des espaces. Une valeur unique par entrée est appelée nom distinctif relatif.
Cela étant dit, passons aux installations du serveur et du client.
Installation et configuration d’un serveur et d’un client LDAP
Dans RHEL 7, LDAP est implémenté par OpenLDAP. Pour installer le serveur et le client, utilisez les commandes suivantes, respectivement :
yum update && yum install openldap openldap-clients openldap-servers
yum update && yum install openldap openldap-clients nss-pam-ldapd
Une fois l’installation terminée, il y a certaines choses que nous examinons. Les étapes suivantes doivent être effectuées sur le serveur seul, sauf indication contraire explicite :
1. Assurez-vous que SELinux ne vous gêne pas en activant les booléens suivants de manière persistante, à la fois sur le serveur et le client :
setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0
Lorsque allow_ypbind est requis pour l’authentification LDAP et que authlogin_nsswitch_use_ldap peut être nécessaire pour certaines applications.
2. Activez et démarrez le service :
systemctl enable slapd.service
systemctl start slapd.service
Gardez à l’esprit que vous pouvez également désactiver, redémarrer ou arrêter le service avec systemctl :
systemctl disable slapd.service
systemctl restart slapd.service
systemctl stop slapd.service
3. Étant donné que le service slapd s’exécute en tant qu’utilisateur ldap (ce que vous pouvez vérifier avec ps -e -o pid,uname,comm | grep slapd), cet utilisateur doit posséder le répertoire /var/lib/ldap afin que le serveur puisse modifier les entrées créées par les outils d’administration qui ne peuvent être exécutées qu’en tant que root (nous y reviendrons dans une minute).
Avant de modifier la propriété de ce répertoire de manière récursive, copiez-y l’exemple de fichier de configuration de base de données pour slapd :
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap
4. Configurez un utilisateur administratif OpenLDAP et attribuez-lui un mot de passe :
slappasswd
Comme le montre l’image suivante :
et créez un fichier LDIF (ldaprootpasswd.ldif) avec le contenu suivant :
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD
où:
- PASSWORD est la chaîne hachée obtenue précédemment.
- cn=config indique les options de configuration globales.
- olcDatabase indique un nom d’instance de base de données spécifique et se trouve généralement dans /etc/openldap/slapd.d/cn=config.
En se référant au contexte théorique fourni précédemment, le fichier ldaprootpasswd.ldif ajoutera une entrée au répertoire LDAP. Dans cette entrée, chaque ligne représente une paire attribut : valeur (où dn, changetype, add et olcRootPW sont les attributs et les chaînes à droite de chaque deux-points sont leurs valeurs correspondantes).
Vous voudrez peut-être garder cela à l’esprit au fur et à mesure que nous avançons, et veuillez noter que nous utilisons les mêmes noms communs (cn=) tout au long du reste de cet article, où chaque étape dépend de la précédente.
5. Maintenant, ajoutez l’entrée LDAP correspondante en spécifiant l’URI faisant référence au serveur ldap, où seuls les champs protocol/host/port sont autorisés.
ldapadd -H ldapi:/// -f ldaprootpasswd.ldif
Le résultat doit être similaire à :
et importez quelques définitions LDAP de base à partir du répertoire /etc/openldap/schema :
for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done
6. Demandez à LDAP d’utiliser votre domaine dans sa base de données.
Créez un autre fichier LDIF, que nous appellerons ldapdomain.ldif, avec le contenu suivant, en remplaçant votre domaine (dans le composant de domaine dc=) et votre mot de passe le cas échéant :
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read
Chargez-le ensuite comme suit :
ldapmodify -H ldapi:/// -f ldapdomain.ldif
7. Il est maintenant temps d’ajouter quelques entrées à notre répertoire LDAP. Les attributs et les valeurs sont séparés par deux points (:) dans le fichier suivant, que nous nommerons baseldapdomain.ldif :
dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain
dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group
Ajoutez les entrées à l’annuaire LDAP :
ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif
8. Créez un utilisateur LDAP appelé ldapuser (adduser ldapuser), puis créez les définitions d’un groupe LDAP dans ldapgroup.ldif.
adduser ldapuser
vi ldapgroup.ldif
Ajoutez le contenu suivant.
dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004
où gidNumber est le GID dans /etc/group pour ldapuser) et chargez-le :
ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif
9. Ajoutez un fichier LDIF avec les définitions pour l’utilisateur ldapuser (ldapuser.ldif) :
dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
et chargez-le :
ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif
De même, vous pouvez supprimer l’entrée d’utilisateur que vous venez de créer :
ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"
10. Autorisez la communication via le pare-feu :
firewall-cmd --add-service=ldap
11. Enfin, et ce n’est pas le moins important, permettez au client de s’authentifier à l’aide de LDAP.
Pour nous aider dans cette dernière étape, nous allons utiliser l’utilitaire authconfig (une interface de configuration des ressources d’authentification système).
À l’aide de la commande suivante, le répertoire de base de l’utilisateur demandé est créé s’il n’existe pas après la réussite de l’authentification auprès du serveur LDAP :
authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update
Résumé
Dans cet article, nous avons expliqué comment configurer l’authentification de base sur un serveur LDAP. Pour configurer plus en détail la configuration décrite dans le présent guide, reportez-vous au Chapitre 13 – Configuration LDAP du Guide de l’administrateur système RHEL 7, en accordant une attention particulière aux paramètres de sécurité à l’aide de TLS.
N’hésitez pas à laisser vos questions en utilisant le formulaire de commentaire ci-dessous.








