Linux:Configuration d'OpenLDAP
De WIKI.minetti.org
Sommaire
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