Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/07/2016, à 17:21

pifouney

[ openLDAP 2.4 ] openLDAP &Replication RefreshAndPersist(in build)

Bonjour à Tous,

Comme son nom l'indique, je viens aujourd'hui vous proposer la mise en service d'un serveur openLDAP, ainsi qu'une replication de type RefreshAndPersist.
Je tiens avant tout à préciser que je fais ce tutoriel à partir de deux tutoriels qui, combinés, m'ont amené à réussir cette mise en service.

ATTENTION: tutoriel pour utilisateur avancé, pas de description de termes techniques.
sources:
HelpUbuntu EN: https://help.ubuntu.com/lts/serverguide … erver.html
openldap.org EN : http://www.openldap.org/doc/
blog Damien CUEFF FR: https://damien-cueff.fr/blog/?p=62

Histoire:

Arrivé depuis bientôt un an dans mon nouvel environnement de travail, il vient à l'idée de reprendre la configuration ldap en place de zéro, en optimisant la disponibilité ainsi que la sécurité.

La décision de posséder une réplication de notre futur openLDAP paraissait alors la solution clef. L'idée du load-balancing s'est aussi présentée, mais nous verrons cela dans un autre tutoriel.
Après avoir glané de la documentation de façon aussi large que possible, j'ai retenu les trois sites indiqués plus haut en source pour m'aider dans mon projet.
Ainsi, avec les dernières technologies proposées dans la dernière version d'openLDAP(2.4), nous avons décidé d'abandonner slapd.conf

Prérequis ( Constatés, pas forcement identiques dans les sources)

- client NTP
- hostname en FQDN
- serveur DNS en place, ou renseignement du fichier /etc/hosts

Pré-configuration

Si cela n'a pas été fait lors de l'installation du serveur, indiquer au format FQDN(même si le domaine n'existe pas encore wink ) le nom de votre serveur par le fichier /etc/hostname:

vim /etc/hostname

Au cas où, comme ceci:

ubuntuldap.pourlelibre.fr

Éditons de suite notre fichier /etc/hosts tel que suit:

127.0.0.1       localhost
127.0.1.1       ubuntuldap.pourlelibre.fr ubuntuldap
192.168.20.229  ubuntuldap2.pourlelibre.fr ubuntuldap2 # adresse de mon serveur de replicat

Installation des prérequis

Mise en place du client NTP:

apt update && apt upgrade
apt install ntp

Modifier les lignes des serveurs NTP pré-configurés pour n'appeler que les serveurs situés en France (donc plus réactifs )

vim /etc/ntp.conf

Editer les lignes du type server 0.ubuntu.pool.ntp.org afin de les faire ressembler à celles-ci:

server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 3.fr.pool.ntp.org

Cela fait, appliquons les changements effectués:

/etc/init.d/ntp restart

Nos Prérequis sont enfin remplis. Passons aux choses sérieuses.

Installation

Installons maintenant les outils nécessaires à notre openLDAP:

apt install slapd ldap-utils

Lors de l'installation, il nous est demandé d'instruire un mot de passe administrateur. Bien évidemment, vous insérerez ce que vous souhaiterez. Pour le tutoriel, le mot de passe sera "azerty".
Puis, la main nous est rendue.

Nous effectuons immédiatement (ON EST CHAUD LA ON EST CHAUD) la reconfiguration de slapd:

dpkg-reconfigure slapd

Plusieurs questions vont vous être posées. Je vous cite la dernière phrase de chaque écran ainsi que la réponse à indiquer (qui est en gras):

Voulez-vous omettre la configuration d'openLDAP? non

Nom de domaine: pourlelibre.fr # normalement, le FQDN est déjà annoncé, car récupéré depuis le hostname dynamiquement

Nom d'entité: pourlelibre

Mot de passe de l'administrateur: ce que vous avez défini lors de l'installation du paquet slapd 2 fois de suite

Module de base de données à utiliser: JE RECOMMANDE HDB, beaucoup d'ennuis rencontrés avec les autres bases proposées !

Faut-il supprimer la base de données lors de la purge du paquet ? non

Faut-il déplacer l'ancienne base de données ? oui

Faut-il autoriser le protocole LDAPv2? non # bien que cela me concerne personnellement, la réponse "oui" n'est pas prise en charge dans ce tutoriel. Je ne promets pas le bon fonctionnement de la suite de ce tutoriel si vous choisissez "oui".

Bien, à ce stade, bien que ne nous n'ayons pas encore tenté de configurer notre openLDAP, celui-ci contient donc déjà notre nom de domaine, qui est déjà référencé en tête d'arborescence ldap smile Nous allons maintenant nous intéresser à l’intégration de leur contenu dans notre openLDAP.

Un peu de blabla pas inintéressant:

Depuis cette version d'openLDAP, la configuration ne se fait plus du tout par le fichier slapd.conf! Tout se fait maintenant via la création et l'insertion de fichiers LDIFs.

La configuration de notre openLDAP se trouve donc maintenant dans le répertoire /etc/ldap/slapd.d/cn=config. NE RIEN MODIFIER DANS LES FICHIERS LDIFS EN PLACE DANS CE RÉPERTOIRE AU RISQUE D' AVOIR LA DÉSAGRÉABLE EXPÉRIENCE DE CASSER LE HASHAGE DE VOS FICHIERS! Effectivement, par sécurité, openLDAP contrôle maintenant l'intégrité de ses fichiers de configurations, s'assurant qu'ils n'ont pas été MAL modifiés = fichiers modifiés de façon non légitime! Ceci est une nouvelle couche de sécurité.
Toute modification se fait donc par création de fichiers LDIF prévus pour effectuer une création / modification /suppression.

Peuplement de notre openLDAP

Je vous propose le petit outil graphique suivant (Windows) afin de voir evoluer au fur et à mesure nos modification: ldapadmin. Son utilisation est intuitive. Si vraiment besoin, j'expliquerai comment se connecter sur notre openLDAP.
Je mettrai en place plus bas la mise en place d'une configuration par interface web via phpldapadmin.
Créons notre premier fichier LDIF.
Nous allons mettre en place un fichier LDIF qui nous permettra de créer notre arbre. Je vous renseigne, pour information, les trois premières lignes créant la base de notre arbre, cependant, nous l'avons déjà incorporée avec notre reconfiguration de slapd. Nous allons donc créer une Unité Organisationnelle (= OU) pour regrouper nos groupes, ainsi qu'une OU regroupants les utilisateurs.

#dn: dc=pourlelibre,dc=fr
#objectClass: top
#objectClass: dcObject
#objectClass: organization
#o: test.hymedia
#dc: pourlelibre

dn: ou=Groupes,dc=pourlelibre,dc=fr
objectClass: organizationalUnit
ou: Groupes

dn: ou=Utilisateur,dc=pourlelibre,dc=fr
objectClass: organizationalUnit
ou: Utilisateur

Avant d'aller plus loin.

Je vous propose que l'on s' intéresse à la première ligne définissant l'OU "groupes". Cette dernière est constituée du préfixe dn qui indique une nouvelle entrée (ou une existante). On indique donc le nom de l'OU derrière, que l'on fait suivre de son OU PARENT! Notre OU Groupes est donc incluse dans l'OU commentée juste au-dessus d'elle.Ainsi, pour vous retrouver dans la création de vos LDIF, je vous invite à toujours consulter cette ligne par la fin, cela vous permettra de vous orienter beaucoup plus facilement dans votre arbre. De plus, soyez VRAIMENT avare des espaces. Bien qu'openLDAP n'est pas censé être impacté, il apparait de temps en temps des bugs liés à l'utilisation d'espace. Enfin, entre chaque nouvelle définition d'entrée, UNE SEULE LIGNE D ESPACEMENT, sous peine de simplement voir votre LDIF rejeté.

Nous avons un superbe (et simple) fichier ldif prêt à l'emploi ! smile

Intégration d'un fichier LDIF à notre openLDAP.


Nous utilisons l'outil ldapadd:

sudo ldapadd -x -D cn=admin,dc=pourlelibre,dc=fr -W -f nom_du_fichier_ldif.ldif

Il vous demande le mot de passe défini plus tôt.

Votre shell doit vous répondre, pour ce ldif, ceci:

adding new entry "ou=groupes,dc=pourlelibre,dc=fr"

adding new entry "ou=Utilisateur,dc=pourlelibre,dc=fr"

Nous venons de peupler de 2 OU notre openLDAP. Je vous laisse récupérer les informations vous permettant d'ajouter d'autres types d'entrées smile

La Réplication RefreshAndPersist

Bien. Notre openLDAP est prêt, configuré, et fonctionnel. Cependant, nous devons sécuriser ce serveur pour la production. Nous allons donc monter un autre serveur openLDAP qui se synchronisera contunuellement et en temps reel sur l'openLDAP en production, nous assurant toujours une roue de secours(que nous monterons plus bas). Pour l'instant, préparons notre serveur à devenir un fournisseur smile
Pour ce faire, nous allons modifier les propriétés de la base de données.
Et pour ce faire..... Nous allons créer un LDIF ! big_smile
(Petit conseil perso, créez vous ldif dans un répertoire dans votre home directory, n'allez pas polluer le répertoire cn=config big_smile )

Ldif de modification de la base de données permettant la synchronisation avec la database repliquée, que nous nommons uid_Index.ldif:

dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: uid eq,pres,sub

On l'ajoute avec l'outil ldapmodify:

sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f uid_index.ldif

Le shell DOIT vous repondre:

modification de l'entrée « olcDatabase={1}hdb,cn=config »

Mise en place des logs(cela porte bien son nom)

Créez le ldif logging.ldif :

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats

que l'on ajoute avec:

sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f logging.ldif

INFORMATION IMPORTANTE: ces deux derniers fichiers ldifs sont à mettre en place AUSSI sur le serveur de duplication.

Configuration du serveur Fournisseur (= provider)
On crée le fichier ldif provider_sync.ldif:

# Add indexes to the frontend db.
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq

#Load the syncprov and accesslog modules.
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
-
add: olcModuleLoad
olcModuleLoad: accesslog

# Accesslog database definitions
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap/accesslog
olcSuffix: cn=accesslog
olcRootDN: cn=admin,dc=pourlelibre,dc=fr
olcDbIndex: default eq
olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart

# Accesslog db syncprov.
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE
olcSpReloadHint: TRUE

# syncrepl Provider for primary db
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE

# accesslog overlay definitions for primary db
dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcAccessLogConfig
olcOverlay: accesslog
olcAccessLogDB: cn=accesslog
olcAccessLogOps: writes
olcAccessLogSuccess: TRUE
# scan the accesslog DB every day, and purge entries older than 7 days
olcAccessLogPurge: 07+00:00 01+00:00

Vous aurez noté qu'une ligne est en gras. Merci d'y indiquer vos informations smile
On ne l'ajoute pas immédiatement! On va d'abord modifier le comportement d'apparmor.d:

vim /etc/apparmor.d/local/usr.sbin.slapd

et on y insère les 2 lignes suivantes sans oublier les virgules à chaque fin de ligne:

/var/lib/ldap/ r,
/var/lib/ldap/** rwk,

On crée les repertoires des logs et on redemarre apparmor:

sudo -u openldap mkdir /var/lib/ldap/accesslog
sudo -u openldap cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/accesslog
sudo systemctl reload apparmor.service

Puis on ajoute le ldif créé et on redemarre slapd avec :

sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f provider_sync.ldif
sudo systemctl restart slapd.service

Pour le serveur Replicat, je rappelle que vous faite toute la configuration(fichiers hosts et hostname compris!) faite précédemment sur le serveur fournisseur EXCEPTE le ldif nommé provider_sync.ldif que vous remplacez par celui-ci, que vous nommerez consumer_sync.ldif:

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcSyncRepl
olcSyncRepl: rid=0 provider=ldap://ubuntuldap.pourlelibre.fr bindmethod=simple binddn="cn=admin,dc=pourlelibre,dc=pourlelibre"
credentials=secret searchbase="dc=pourlelibre,dc=fr" logbase="cn=accesslog"
logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on
type=refreshAndPersist retry="60 +" syncdata=accesslog
-
add: olcUpdateRef
olcUpdateRef: ldap://ldap01.exemple.com

Encore une fois, vous noterez des champs ajoutés en gras, que vous devez adapter à vos configuration. La zone "credentials" nécéssite le mot de passe admin de la base du serveur Fournisseur.

On ajoute les informations:

sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f consumer_sync.ldif

Votre serveur replicat est en train de se synchroniser.

SECURITE ( EN COURS)

Toute la premiere partie est operationnelle, merci de vos retours si nécéssaire smile

Pifouney

Dernière modification par pifouney (Le 19/07/2016, à 16:27)

Hors ligne