Ceci est une ancienne révision du document !
Table des matières
< 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)
Les consumers se connectent au provider avec un compte qui à l'accès complet à l'arbre en lecture seule (syncuser.ldif)
Consumer (slave)
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
Pour permettre à un utilisateur d'accéder aux serveurs en SSH, une fois son compte créé avec le webldap :
Dans le LDAP (on pourra utiliser shelldap
sur hexagon, en notant que root
a un .shelldap.rc
qui contient déjà tout ce qu'il faut), il faut ajouter des choses.
Dans uid=prenom.nom,ou=users,dc=federez,dc=net
, ajouter les champs :
objectClass: inetOrgPerson objectClass: netFederezUser objectClass: posixAccount objectClass: shadowAccount displayName: Prenom Nom gidNumber: 10001 givenName: Prenom homeDirectory: /home/username loginShell: /bin/bash netFederezUID: username shadowMax: 99999 shadowMin: 0 shadowWarning: 7 uidNumber: 10001
gidNumber
etuidNumber
doivent être supérieurs à 10000 et non encore utilisés (utilisezgetent passwd
etgetent group
pour visualiser les existants).- Il a normalement déjà les champs
mail
,cn
,sn
,uid
,userPassword
displayName
est déjà rempli ??givenName
est indispensable ??
Créer cn=username,ou=posix,ou=groups,dc=federez,dc=net
:
dn: cn=username,ou=posix,ou=groups,dc=federez,dc=net objectClass: posixGroup cn: username gidNumber: 10001 memberUid: username
- Soyez cohérents sur les champs
cn
etgidNumber
avec les valeurs deuid=prenom.nom,ou=users,dc=federez,dc=net
Enfin, dans cn=ssh,ou=accesses,ou=groups,dc=federez,dc=net
, ajouter le membre :
uniqueMember: uid=prenom.nom,ou=users,dc=federez,dc=net