Série RHCSA : Configuration de l’Authentification basée sur LDAP dans RHEL 7 – Partie 14

Nous commencerons cet article en exposant quelques bases de l’LDAP (ce que c’est, où il est utilisé et pourquoi), et montrerons comment configurer un serveur LDAP et configurer un client pour s’authentifier contre celui-ci en utilisant des systèmes Red Hat Enterprise Linux 7.

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

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’ampleur du sujet, nous ne couvrirons ici que ses bases, mais vous pouvez vous référer à la documentation indiquée dans le résumé pour plus de détails approfondis.

Pour la même raison, vous noterez que j’ai décidé de laisser de côté plusieurs références aux pages de manuel des outils LDAP pour des raisons de concision, 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 machines 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 RHEL 7 en utilisant Kickstart en tant que client.

Qu’est-ce que LDAP?

LDAP signifie Lightweight Directory Access Protocol et consiste en un ensemble de protocoles qui permet à un client d’accéder, via un réseau, à des informations stockées de manière centralisée (telles qu’un répertoire des shells de connexion, des chemins absolus vers les répertoires personnels et d’autres informations utilisateur système typiques, par exemple) qui devraient être accessibles depuis différents endroits ou disponibles à un grand nombre d’utilisateurs finaux (un autre exemple serait un répertoire des adresses personnelles et numéros de téléphone de tous les employés d’une entreprise).

Le fait de conserver de telles informations (et d’autres) de manière centralisée signifie qu’elles peuvent être plus facilement entretenues et accessibles par tous ceux qui ont reçu les autorisations pour les utiliser.

Le diagramme suivant offre un diagramme simplifié de LDAP et est décrit plus en détail ci-dessous :

LDAP Diagram

Explication détaillée du diagramme ci-dessus.

  1. Une entrée dans un annuaire LDAP représente une unité d’information unique et est identifiée de manière unique par ce qu’on appelle un nom distinctif.
  2. Un attribut est une information associée à une entrée (par exemple, des adresses, des numéros de téléphone de contact disponibles et des adresses e-mail).
  3. Chaque attribut se voit assigner une ou plusieurs valeurs constituées d’une liste séparée par des espaces. Une valeur unique par entrée est appelée un nom distinctif relatif.

Cela étant dit, passons à l’installation 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 respectivement les commandes suivantes :

# 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 quelques points à vérifier. Les étapes suivantes doivent être effectuées uniquement sur le serveur, sauf indication contraire :

1. Assurez-vous que SELinux ne gêne pas en activant de manière persistante les booléens suivants, à la fois sur le serveur et le client :

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

allow_ypbind est requis pour l’authentification basée sur LDAP, et 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 également :

# systemctl disable slapd.service
# systemctl restart slapd.service
# systemctl stop slapd.service

3. Comme 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 devrait être propriétaire du répertoire /var/lib/ldap afin que le serveur puisse modifier les entrées créées par des outils d’administration qui ne peuvent être exécutés qu’en tant que root (plus d’informations à ce sujet dans un instant).

Avant de changer la propriété de ce répertoire de manière récursive, copiez le fichier de configuration de base de données d’exemple pour slapd à l’intérieur :

# 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 un mot de passe :

# slappasswd

comme indiqué dans l’image suivante :

Set LDAP Admin Password

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ù :

  1. MOTDEPASSE est la chaîne hachée obtenue précédemment.
  2. cn=config indique les options de configuration globale.
  3. olcDatabase indique le nom d’une instance de base de données spécifique et peut généralement être trouvé à l’intérieur de /etc/openldap/slapd.d/cn=config.

En vous référant au fond 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 un couple attribut : valeur (où dn, changetype, add et olcRootPW sont les attributs et les chaînes situées à droite de chaque deux-points sont leurs valeurs correspondantes).

Vous voudrez peut-être garder cela à l’esprit alors que nous avançons davantage, et veuillez noter que nous utilisons les mêmes Noms Communs (cn=) tout au long 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 protocole/hôte/port sont autorisés.

# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif 

La sortie devrait être similaire à :

LDAP Configuration

et importer 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
LDAP Definitions

6. Faites en sorte que LDAP utilise 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 Domain Component dc=) et le mot de passe comme il convient :

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

# ldapmodify -H ldapi:/// -f ldapdomain.ldif
LDAP Domain Configuration

7. Il est maintenant temps d’ajouter des entrées à notre annuaire LDAP. Les attributs et les valeurs sont séparés par un 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
Add LDAP Domain Attributes and Values

8. Créez un utilisateur LDAP appelé ldapuser (adduser ldapuser), puis créez les définitions pour 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

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
LDAP User Configuration

De même, vous pouvez supprimer l’entrée 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 à travers le pare-feu:

# firewall-cmd --add-service=ldap

11. Enfin, mais non des moindres, autorisez le client à s’authentifier en utilisant LDAP.

Pour nous aider dans cette dernière étape, nous utiliserons l’utilitaire authconfig (une interface pour configurer les ressources d’authentification système).

En utilisant la commande suivante, le répertoire personnel de l’utilisateur demandé est créé s’il n’existe pas après que l’authentification contre le serveur LDAP a réussi:

# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update
LDAP Client Configuration

Résumé

Dans cet article, nous avons expliqué comment configurer une authentification de base contre un serveur LDAP. Pour configurer davantage le setup décrit dans le guide actuel, veuillez vous référer au Chapitre 13 – Configuration LDAP dans le guide de l’administrateur système RHEL 7, en portant une attention particulière aux paramètres de sécurité utilisant le TLS.

N’hésitez pas à poser vos questions en utilisant le formulaire de commentaire ci-dessous.

Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/