Cette documentation est obsolète, le LDAP est désormais géré via Re2o.
< retour à la page de l'administration technique
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
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.
Les consumers se connectent au provider avec un compte qui à l'accès complet à l'arbre en lecture seule (syncuser.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.
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.
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
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.
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
<uid>
et <gid>
doivent être supérieurs à 10000 et pas déjà utilisés (vérifier avec getent passwd
et getent group
). De préférence, utiliser le même numéro pour les deux.<user>
est le nom d'utilisateur
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
<group>
doit être de préférence identique à <user>
Dans cn=ssh,ou=accesses,ou=groups,dc=federez,dc=net
, ajouter le membre :
uniqueMember: uid=prenom.nom,ou=users,dc=federez,dc=net