Outils pour utilisateurs

Outils du site


linux:openldap

OPENLDAP : Tips & tricks for config


Je passe les étapes d'installation à la portée de tous pour noter les éléments de configuration avancées.
Il y a 2 techniques pour arriver à paramétrer votre LDAP: soit par le fichier slapd.conf soit par les instructions olc par injection LDIF. Le paramétrage dans le fichier nécessite de redémarrer alors que les modifs dans “cn=config” sont prises au chaud.

L'appel du fichier slapd.conf se fait dans /etc/default/slapd sous Debian 7.

Documentation :

Gestion des Logs OpenLdap

Dans les 2 cas de figure, il faut rediriger les logs via rsyslog :

# LOGGING FOR SLAPD
local4.*                        /var/log/openldap/slapd.log

mkdir /var/log/openldap && service rsyslog restart

Via "cn=config"

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

ldapmodify -Y EXTERNAL -H ldapi:/// -f olcLogLevel.ldif

Via slapd.conf

# LOG LEVEL
loglevel        256

Mise en place de LDAPS

  • Il est nécessaire de faire écouter le daemon sur ldaps dans le fichier /etc/default/slapd :

SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"

Via "cn=config"

  • Créer le LDIF et importer :

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/ssl/root.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap.key
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/ldap.crt

ldapmodify -Y EXTERNAL -H ldapi:/// -f olcSSL.ldif

Via slapd.conf

# LDAPS
TLSCertificateKeyFile /etc/ldap/ssl/ldaps_key.pem
TLSCertificateFile /etc/ldap/ssl/ldaps_cer.pem
TLSCACertificateFile /etc/ldap/ssl/ldaps_cer.pem

Ajouter des index

Via "Cn=config"

  • Créer le LDIF et importer:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: cn pres,sub,eq
-
add: olcDbIndex
olcDbIndex: sn pres,sub,eq
-
add: olcDbIndex
olcDbIndex: uid pres,sub,eq
-
add: olcDbIndex
olcDbIndex: displayName pres,sub,eq
-
add: olcDbIndex
olcDbIndex: default sub
-
add: olcDbIndex
olcDbIndex: uidNumber eq
-
add: olcDbIndex
olcDbIndex: gidNumber eq
-
add: olcDbIndex
olcDbIndex: mail,givenName eq,subinitial
-
add: olcDbIndex
olcDbIndex: dc eq
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcDbIndex.ldif

Pour vérifier, exécuter la commande:

ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "Objectclass=olcHdbConfig"

Via slapd.conf

  • Editer le fichier slapd.conf et relancer le service :

# Indexing options for database #1
# Unique id so equality match only
index   uid     eq
# allows general searching on commonname, givenname and email
index   cn,gn,mail eq,sub
# allows multiple variants on surname searching
index sn eq,sub
# sub above includes subintial,subany,subfinal
# optimise department searches
index ou eq

service slapd restart

Gestion des ACL

Via "cn=config"

  • Créer le LDIF et importer :

dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=test,dc=local" write by * none
-
add: olcAccess
olcAccess: {1}to dn.subtree="ou=people,dc=test,dc=local" by dn="cn=admin,dc=test,dc=local" write by dn="cn=ldap_rw,ou=system,dc=test,dc=local" write by anonymous auth by * read
-
add: olcAccess
olcAccess: {2}to dn.subtree="ou=groups,dc=test,dc=local" by dn="cn=admin,dc=test,dc=local" write by dn="cn=ldap_rw,ou=system,dc=test,dc=local" write by anonymous auth by * read
-
add: olcAccess
olcAccess: {3}to * by dn="cn=admin,dc=test,dc=local" write by * read
-
add: olcAccess
olcAccess: {4}to dn.base="" by * read
-
add: olcAccess
olcAccess: {5}to * by self write by dn="cn=admin,dc=test,dc=local" write by dn="cn=master,ou=system,dc=test,dc=local" write by dn="cn=master2,ou=system,dc=test,dc=local" write by * read

ldapmodify -Y EXTERNAL -H ldapi:/// -f olcAccess.ldif

Via slapd.conf

access to dn.base="" by * read

access to attrs=userPassword,shadowLastChange
        by dn="cn=admin,dc=test,dc=local" write
        by anonymous auth
        by self write
        by * none

access to dn.subtree="ou=people,dc=test,dc=local"
        by dn="cn=admin,dc=test,dc=local" write
        by dn="cn=ldap_rw,ou=system,dc=test,dc=local" write
        by anonymous auth
        by * read

access to *
        by dn="cn=admin,dc=test,dc=local" write
        by dn="cn=master,ou=system,dc=test,dc=local" write
        by * read

Ajouter l'attribut memberOf

Via "cn=config"

  • Créer les LDIF puis importer:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof

ldapmodify -Y EXTERNAL -H ldapi:/// -f memberOf_module.ldif

dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

ldapmodify -Y EXTERNAL -H ldapi:/// -f memberOf_overlay.ldif

Vérifier la configuration avec:

ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "Objectclass=olcModuleList"

Via slapd.conf

  • Modifier le fichier de configuration et redémarrer:

# LOAD OVERLAYS
moduleload      memberof.la

# MEMBEROF
overlay memberof
memberof-refint true
memberof-dangling error
memberof-group-oc groupOfNames
memberof-member-ad member
memberof-memberof-ad memberOf

service slpad restart

  • Il est possible de tester en créant un nouveau groupe, puis interroger spécifiquement l'attribut 'memberOf' l'utilisateur membre :

ldapsearch -H ldapi:/// -b 'DC=test,DC=dev' -D 'CN=admin,DC=test,DC=dev' -W '(cn=user1)' memberOf

Ajouter une politique de mots de passe

Via slapd.conf

  • Charger le module, l'extension du schéma nécessaire et le PATH de la stratégie par défaut:

# slapo-ppolicy has extra schema requirements
include         /etc/ldap/schema/ppolicy.schema

# LOAD OVERLAYS
moduleload      ppolicy.la

# PASSWORD POLICY
overlay ppolicy
ppolicy_default "cn=default,ou=policies,ou=system,dc=exemple,dc=com"

  • Créer le LDIF de la police et importer :

dn: cn=default,ou=policies,ou=system,dc=exemple,dc=com
cn: default
objectClass: pwdPolicy
objectClass: person
objectClass: top
pwdAllowUserChange: TRUE
pwdAttribute: userPassword
pwdCheckQuality: 2
pwdExpireWarning: 600
pwdFailureCountInterval: 60
pwdGraceAuthNLimit: 5
pwdInHistory: 1
pwdLockout: TRUE
pwdLockoutDuration: 300
pwdMaxAge: 0
pwdMaxFailure: 5
pwdMinAge: 0
pwdMinLength: 5
pwdMustChange: FALSE
pwdSafeModify: FALSE
sn: dummy value

ldapadd -H "ldap://127.0.0.1" -D "CN=admin,DC=test,DC=local" -W -f ./password_policy.ldif

Ajouter l'intégrité référentielle

Très important de mon point de vue! désolé je ne fournis que la conf classique par manque de temps… :!:
Ce module permet de faire des suppressions en cascade à la manière d'une BDD.
Il permet également d'insérer l'admin par exemple lorsque aucun membre n'est présent dans un groupOfNames après modif.

Via slapd.conf

# LOAD OVERLAYS
moduleload      refint.la

# REFERENTIAL INTEGRITY
overlay refint
refint_attributes member
refint_nothing "cn=admin,dc=test,dc=local"

Ajouter une politique d'unicité

Via slapd.conf

# LOAD OVERLAYS
moduleload      ppolicy.la

# UNIQUELESS
#overlay unique
#unique_uri ldap:///?mail?sub?

Dans cet exemple, il sera impossible de créer 2 utilisateurs ayant le même email.

service slapd restart

Ajouter le module monitor et grapher avec Munin

Via slapd.conf

  • Ajouter à votre fichier de configuration :

# LOAD BACKEND
moduleload      back_monitor.la

# monitor backend for statistical reporting
access to dn.subtree="cn=Monitor"
        by dn.exact="cn=admin,dc=test,dc=local" write
        by dn.exact="cn=monitor,ou=system,dc=test,dc=local" read
        by * none

database    monitor

  • Relancer slapd et créer l'utilisateur monitor :

dn: cn=monitor,ou=system,dc=test,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: monitor
description: LDAP monitor
userPassword:{SSHA}k/N7idpYZtthh/HjBBcosQY3Fup68zsA

Astuce pour le HASH du password:

slappasswd -s MOTDEPASSE

Import du LDIF pour la création de l'utilisateur de monitoring :

ldapadd -H "ldap://127.0.0.1" -D "CN=admin,DC=test,DC=local" -W -f ./monitor_user.ldif

  • Tester l'authentification et le fonctionnement :

ldapsearch -H ldap://127.0.0.1 -D "cn=monitor,ou=system,dc=test,dc=local" -W -b "cn=Monitor" -s base '(objectClass=*)' '*' '+'

  • Voir tous les containers du monitoring :

ldapsearch -H ldap://127.0.0.1 -D "cn=monitor,ou=system,dc=test,dc=local" -w "loshViHac5" -b "cn=Monitor"

  • Exemple d'informations sur les connections :

ldapsearch -H ldap://127.0.0.1 -D "cn=monitor,ou=system,dc=test,dc=local" -w "loshViHac5" -b "cn=Connections,cn=Monitor"

Grapher avec Munin

  • Installer le client:

apttiude install munin-node

  • Activer le plugin slapd et renseigner l'utilisateur pour relever les stats :

cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/slapd_ slapd_connections
ln -s /usr/share/munin/plugins/slapd_ slapd_operations
...

# Change these to reflect your LDAP ACL. The given DN must have
# read access to the Monitor branch.
my $basedn = "cn=Monitor";
my $server = ($ENV{'server'} || 'localhost');
my $userdn = ($ENV{'binddn'} || '');
my $userpw = ($ENV{'bindpw'} || '');

  • Installer la librairie nécessaire au plugin :

aptitude install libnet-ldap-perl

  • Tester le plugin avant de renseigner le munin-master :

munin-run -d slapd_operations

Reconstruire les index OpenLDAP

  • Arrêter le daemon slapd:

service slapd stop && ps -ef | grep slap

  • Lancer l'indexation:

su openldap -c '/usr/sbin/slapindex -f /etc/ldap/slapd.conf -d 3' -s /bin/bash

  • Vérifier la date de modification des fichiers .bdb :

find /var/lib/ldap/ -type f -name "*.bdb" -exec ls -ail {} \;

linux/openldap.txt · Dernière modification: 15/04/2016 à 21:15 (modification externe)

Outils de la page