Table des matières

Cette documentation est obsolète, le LDAP est désormais géré via Re2o.

< retour à la page de l'administration technique

Indexation

Pour améliorer l'efficacité de la base HDB, il est important de lui dire quels attributs indexer. Ce sont ceux qui sont utilisés pour des recherches et à chaque fois qu'un attribut non indexé est utilisé, une ligne de log comme la suivante est produite :

Aug  5 20:21:56 hexagon slapd[17833]: <= bdb_equality_candidates: (uid) not indexed

Les attributs suivants sont indexés (extrait de olcDatabase={1}hdb,cn=config):

olcDbIndex: cn eq
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eq 
olcDbIndex: gidNumber eq
olcDbIndex: netFederezUID eq
olcDbIndex: objectClass eq
olcDbIndex: uid eq
olcDbIndex: uidNumber eq
olcDbIndex: memberOf eq
olcDbIndex: memberUid eq

Réplication

OpenLDAP permet d'être synchronisé entre un producer et un ou plusieurs consumers grâce à l'overlay syncrepl qui succède au désormais obsolète démon slurpd.

Voir la documentation officielle pour plus d'informations sur les options choisies : OpenLDAP/replication.

Provider (master)

provider.ldif

Les consumers se connectent au provider avec un compte qui à l'accès complet à l'arbre en lecture seule (syncuser.ldif)

Consumer (slave)

consumer.ldif

Avec le paramètre type=refreshAndPersist, les entrées sont récupérées du provider en temps réel. Cela est fait en TLS pour rendre le transfert confidentiel, d'où l'utilisation des noms de domaine dans la configuration.

Le mot de passe du RootDN est supprimé pour empêcher toute modification d'être faite à l'arbre et ne pas perturber la synchronisation.

ACL

Le break de la première ACL permet de passer aux suivantes pour les utilisateurs non concernés.

olcAccess: to *
  by dn="cn=sync,ou=service-users,dc=federez,dc=net" read
  by group/organizationalRole/roleOccupant="cn=admin,ou=roles,dc=federez,dc=net" write
  by * break
olcAccess: to attrs=userPassword,shadowLastChange
  by self write
  by anonymous auth
  by group="cn=usermgmt,ou=services,ou=groups,dc=federez,dc=net" write
olcAccess: to dn.base=""
  by * read
olcAccess: to dn.sub="ou=users,dc=federez,dc=net"
  by self write
  by group="cn=usermgmt,ou=services,ou=groups,dc=federez,dc=net" write
  by users read
olcAccess: to dn.sub="ou=associations,dc=federez,dc=net"
  by dnattr=owner write
  by group="cn=usermgmt,ou=services,ou=groups,dc=federez,dc=net" write
  by group/organizationalRole/roleOccupant="cn=member,ou=roles,dc=federez,dc=net" read
  by group="cn=readonly,ou=services,ou=groups,dc=federez,dc=net" read
olcAccess: to dn.sub="ou=service-users,dc=federez,dc=net"
  by self write
  by group="cn=auth,ou=services,ou=groups,dc=federez,dc=net" read
olcAccess: to dn.sub="ou=groups,dc=federez,dc=net"
  by group/organizationalRole/roleOccupant="cn=member,ou=roles,dc=federez,dc=net" read
  by group="cn=auth,ou=services,ou=groups,dc=federez,dc=net" read
olcAccess: to dn.sub="ou=roles,dc=federez,dc=net"
  by group="cn=usermgmt,ou=services,ou=groups,dc=federez,dc=net" write
  by group/organizationalRole/roleOccupant="cn=member,ou=roles,dc=federez,dc=net" read
  by group="cn=auth,ou=services,ou=groups,dc=federez,dc=net" read
olcAccess: to *
  by self write
  by group/organizationalRole/roleOccupant="cn=member,ou=roles,dc=federez,dc=net" read

Les références au RootDN cn=admin,dc=federez,dc=net ajoutées par Debian à l'installation sont retirées des ACLs car inutiles. La ligne de log suivante le confirme :

slapd[14401]: slapd: line 0: rootdn is always granted unlimited privileges.

TLS

Ajouter openldap au groupe ssl-cert.

Pour créer la chaîne :

cd /etc/ssl/federez
cat federez.crt sub.class2.server.ca.pem > chain.pem

Puis dans slapd (cn=config) :

olcTLSCACertificateFile: /etc/ssl/certs/StartCom_Certification_Authority.pem
olcTLSCertificateFile: /etc/ssl/federez/chain.pem
olcTLSCertificateKeyFile: /etc/ssl/private/federez.key

SSH

L'accès aux serveurs est géré par NSS qui utilise le serveur LDAP. Pour donner l'accès aux serveurs à un utilisateur déjà inscrit avec webldap, suivre les étapes suivantes.

Ajouter des attributs au compte

Dans uid=prenom.nom,ou=users,dc=federez,dc=net, ajouter les attributs :

objectClass: netFederezUser
objectClass: posixAccount
objectClass: shadowAccount
homeDirectory: /home/<user>
loginShell: /bin/bash
netFederezUID: <user>
uidNumber: <uid>
gidNumber: <gid>
shadowMax: 99999
shadowMin: 0
shadowWarning: 7

Créer un groupe POSIX

Créer cn=<user>,ou=posix,ou=groups,dc=federez,dc=net avec les attributs suivants :

dn: cn=<user>,ou=posix,ou=groups,dc=federez,dc=net
objectClass: posixGroup
cn: <group>
gidNumber: <gid>
memberUid: username

Autoriser l'accès SSH

Dans cn=ssh,ou=accesses,ou=groups,dc=federez,dc=net, ajouter le membre :

uniqueMember: uid=prenom.nom,ou=users,dc=federez,dc=net