Linux:Configuration d'OpenLDAP

De WIKI.minetti.org
Aller à : navigation, rechercher

But

Installer et configurer un serveur LDAP.

Installation

  • Taper la commande suivante pour installer le serveur LDAP sur une CentOS/RedHat/Fedora:
yum install openldap-servers openldap-clients

Étape préliminaire

Avant de commencer, il est impératif d'avoir procédé à l'installation d'OpenSSL.

Configuration du serveur

  • Commencez par chiffrer le mot de passe du Manager (administrateur LDAP):
slappasswd
  • Editer le fichier /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif:
    • changer tous les dc=my-domain,dc=com par dc=minetti,dc=org,
    • ajouter la ligne olcRootPW: {SSHA}votre_mot_de_passe_chiffré,
    • ajouter la ligne suivante pour configurer les connexions TLS:
olcSecurity: tls=128
  • Editer le fichier /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif:
    • changer tous les dc=my-domain,dc=com par dc=minetti,dc=org.
  • Créer le certificat serveur avec openSSL:
    • Fichier clé privée/clé publique: /etc/pki/tls/private/openldap.key
    • Certificat: /etc/pki/tls/certs/openldap.pem
  • Ajouter le fichier DB_CONFIG dans le répertoire des données du LDAP:
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap.ldap /var/lib/ldap/DB_CONFIG
  • Démarrer le serveur LDAP:
service slapd start
  • Créer le fichier tls.ldif suivant:
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/pki/CA/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/pki/tls/certs/openldap.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/pki/tls/private/openldap.key
  • Exécuter la commande suivante:
ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif
  • Redémarrer le serveur LDAP:
service slapd restart
  • Editer le fichier /etc/openldap/slapd.d/cn\=config.ldif et modifier la propriété suivante:
olcTLSVerifyClient: demand
  • Créer le fichier schema_convert.conf dans /etc/openldap qui sera utilisé pour ajouter des nouveaux schémas:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/collective.schema
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
  • Créer le fichier index.ldif suivant pour ajouter les indexes qui seront utilisés pour la recherche:
dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uniqueMember pres,eq
-
add: olcDbIndex
olcDbIndex: displayName eq
-
add: olcDbIndex
olcDbIndex: ipHostNumber pres,eq
  • exécuter la commande suivante:
ldapmodify -Y EXTERNAL -H ldapi:/// -f index.ldif
  • et vérifier les indexes en exécutant la commande suivante:
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" | grep ^olcDbIndex
  • Dans le répertoire /etc/rsyslog.d/, ajouter le fichier ldap.conf ressemblant à ceci:
local4.error                                                    -/var/log/ldap.log
  • Redémarrer le démon rsyslog pour prendre en compte la nouvelle configuration des logs du LDAP:
service rsyslog restart
  • Ouvrir le port TCP 389 dans iptables.
  • Ne pas oublier de rendre le lancement du démon slapd automatique à chaque démarrage du serveur:
ntsysv		# sous CentOS/RedHat/Fedora

Le serveur est maintenant prêt pour des connexions sécurisées par échange de certificats (client et serveur).

Peuplement

  • Commencer par créer le fichier struct.ldif pour monter la structure du LDAP:
dn: dc=minetti,dc=org
dc: minetti
objectClass: top
objectClass: domain

# Donnees sur le reseau local
dn: ou=localnet,dc=minetti,dc=org
ou: localnet
objectClass: top
objectClass: organizationalUnit

# sysaccount
dn: ou=sysaccount,ou=localnet,dc=minetti,dc=org
ou: sysaccount
objectClass: top
objectClass: organizationalUnit
description: Comptes des utilisateurs systèmes

# people
dn: ou=people,ou=localnet,dc=minetti,dc=org
ou: people
objectClass: top
objectClass: organizationalUnit
description: Comptes des utilisateurs du réseau

# group
dn: ou=group,ou=localnet,dc=minetti,dc=org
ou: group
objectClass: top
objectClass: organizationalUnit
description: Groupes des utilisateurs du réseau

# hosts
dn: ou=hosts,ou=localnet,dc=minetti,dc=org
ou: hosts
objectClass: top
objectClass: organizationalUnit
description: Association adresse IP et nom des postes du réseau (NSS) et machines membres du domaine NetBIOS

# idmap
dn: ou=idmap,ou=localnet,dc=minetti,dc=org
ou: idmap
objectClass: top
objectClass: organizationalUnit

# services
dn: ou=services,ou=localnet,dc=minetti,dc=org
ou: services
objectClass: top
objectClass: organizationalUnit
description: Noms et numéros de ports des services réseaux (NSS)

# protocols
dn: ou=protocols,ou=localnet,dc=minetti,dc=org
ou: protocols
objectClass: top
objectClass: organizationalUnit
description: Numéros des protocoles IP (NSS - voir /etc/protocols)

# netgroup
dn: ou=netgroup,ou=localnet,dc=minetti,dc=org
ou: netgroup
objectClass: top
objectClass: organizationalUnit
description: Postes et groupes d'utilisateurs pour contrôler les accès (NSS)

# autofs
dn: ou=autofs,ou=localnet,dc=minetti,dc=org
ou: autofs
objectClass: top
objectClass: organizationalUnit

# networks
dn: ou=networks,ou=localnet,dc=minetti,dc=org
ou: networks
objectClass: top
objectClass: organizationalUnit
description: Adresses des réseaux (NSS)

# rpc
dn: ou=rpc,ou=localnet,dc=minetti,dc=org
ou: rpc
objectClass: top
objectClass: organizationalUnit
description: Noms et numéros d'appel des procédures distantes (NSS)

# ethers
dn: ou=ethers,ou=localnet,dc=minetti,dc=org
ou: ethers
objectClass: top
objectClass: organizationalUnit
description: Adresses MAC des postes du réseau (NSS)

# aliases
dn: ou=aliases,ou=localnet,dc=minetti,dc=org
ou: aliases
objectClass: top
objectClass: organizationalUnit
description: Alias d'adresses mails (NSS - voir /etc/aliases)
  • Lancer la commande suivante:
ldapmodify -Y EXTERNAL -H ldapi:/// -f struct.ldif

Paramétrage des droits d'accès

  • Commencer par créer le fichier acl.ldif suivant:
dn: olcDatabase={2}bdb,cn=config
add: olcAccess
olcAccess: {0}to dn.base="ou=sysaccount,ou=localnet,dc=minetti,dc=org" by dn="cn=Manager,dc=minetti,dc=org" manage by dn.regex="^cn=([^,]+),ou=sysaccount,ou=localnet,dc=minetti,dc=org$" read by * none
olcAccess: {1}to dn.children="ou=sysaccount,ou=localnet,dc=minetti,dc=org" attrs="userPassword" by dn="cn=Manager,dc=minetti,dc=org" manage by self read by anonymous auth by * none
olcAccess: {2}to dn.children="ou=sysaccount,ou=localnet,dc=minetti,dc=org" by dn="cn=Manager,dc=minetti,dc=org" manage by self read by * none
olcAccess: {3}to dn.base="ou=addressbook,ou=people,ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=Manager,dc=minetti,dc=org" manage by * read
olcAccess: {4}to dn.base="ou=addressbook,ou=people,ou=localnet,dc=minetti,dc=org" by dn="cn=Manager,dc=minetti,dc=org" manage by users write by * read
olcAccess: {5}to dn.children="ou=addressbook,ou=people,ou=localnet,dc=minetti,dc=org" by dn="cn=Manager,dc=minetti,dc=org" manage by users write by * read
olcAccess: {6}to dn.base="ou=people,ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=Manager,dc=minetti,dc=org" manage by * read
olcAccess: {10}to dn.base="ou=group,ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=Manager,dc=minetti,dc=org" manage by * read
olcAccess: {13}to dn.base="ou=hosts,ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=Manager,dc=minetti,dc=org" manage by * read
olcAccess: {16}to dn.base="ou=idmap,ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,organizationalUnit by dn="cn=Manager,dc=minetti,dc=org" manage by * read
olcAccess: {19}to dn.base="ou=localnet,dc=minetti,dc=org" attrs=objectClass,top,domain by dn="cn=Manager,dc=minetti,dc=org" manage by * read
olcAccess: {22}to dn.subtree="ou=localnet,dc=minetti,dc=org" by dn="cn=Manager,dc=minetti,dc=org" manage by * read
olcAccess: {23}to dn.base="dc=minetti,dc=org" attrs=objectClass,top,domain by dn="cn=Manager,dc=minetti,dc=org" manage by * read
olcAccess: {25}to dn.subtree="dc=minetti,dc=org" by dn="cn=Manager,dc=minetti,dc=org" manage by * read
  • Puis exécuter la commande suivante:
ldapmodify -Y EXTERNAL -H ldapi:/// -f acl.ldif
  • Vérifier les droits d'accès en exécutant la commande suivante:
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" | grep ^olcAccess