The Daily Shaarli
Slapd est le nom de l'implémentation d'un serveur LDAP au sein du projet libre de référence OpenLDAP.
Sur un slapd en version 2.4.44 installé sur un Debian Stretch (9), la fonctionnalité d'indexation, qui, comme sur un système de gestion de bases de données permet d'accélérer les recherches dans la base, a un comportement surprenant. Je vais énoncer ce que je trouve bizarre, je n'ai pas de réponse.
J'ai effectué mes essais sur deux serveurs fraîchement installés et dotés de la même configuration slapd (cela se vérifie avec un ldapsearch -Y external -H ldapi:/// -b cn=config + diff) et dans lesquels j'importe la même base de données (obtenue avec un slapcat) avec un slapadd.
La doc' OpenLDAP énonce que si l'on ajoute / supprime des index dans la configuration, l'indexation se fait en tâche de fond : « If this setting is changed while slapd is running, an internal task will be run to generate the changed index data. All server operations can continue as normal while the indexer does its work. If slapd is stopped before the index task completes, indexing will have to be manually completed using the slapindex tool. ». Je nuance :
/var/lib/ldap/data.mdb) reste inchangée ;ldapsearch, même en attendant plus de 20 secondes (la plupart des applications auront abandonnées avant…).De même, je constate une grande variation dans la consommation de RAM par la fonctionnalité d'exploitation… Entre 29 % de la RAM de la machine consommée par slapd et 65 %, il y a quand même un écart non négligeable.
Si la taille de la base de données dépasse la taille maximale prédéfinie (1 Go), alors l'indexation s'arrête nette (car plus rien ne peut être écrit dans la base de données). Si l'on change la taille de la base de données en direct avec un ldapmodify, l'indexation ne reprend pas son cours (conso CPU nulle, taille de la base de données inchangée). Si l'on la force avec la commande sudo -u openldap slapindex, la taille de la base de données reste inchangée.
La taille de la base de données peut varier du tout au tout entre deux suppressions de la base de données puis re-création avec un slapadd :
slapindex…Soit une architecture LDAP reposant sur la version 2.4.44 de slapd (l'implémentation d'un serveur LDAP du projet de référence OpenLDAP). Nous avons un serveur pour l'écriture, et un autre pour la lecture.
Nous activons la réplication entre les deux. Source : le serveur d'écriture. Destination : le serveur de lecture. Point terminologie : désormais un master se nomme un producer et un slave se nomme un consumer. On passe donc d'une terminologie esclavagiste à une terminologie consumériste.
Pour superviser cette réplication, nous souhaitons utiliser le script check_syncrepl_extended qui compare les attributs « contextCSN » (une sorte de numéro de version d'une base de données LDAP) et les « entryCSN » (une sorte de numéro de version d'un objet au sein d'une BDD LDAP).
Nous importons une copie de la base de données depuis un serveur Debian 3.1 + OpenLDAP 2.2. Cette copie a été réalisée avec la commande slapcat -l copie_base_ldap.ldif. L'importation est réalisée en exécutant la commande slapadd -l copie_base_ldap.ldif sur notre producer.
On vérifie ensuite que la réplication a bien copié nos objets LDAP sur le consumer à l'aide du script présenté ci-dessus. Il nous informe que tous nos objets sont en erreur…
Si l'on active le mode debug avec le paramètre -d, on constate qu'un message d'erreur est affiché pour chacun de nos objets LDAP :
2019-01-07 17:01:55,947 - DEBUG : Found on ldap://producer.exemple:389 : uid=lala,ou=people,dc=monorganisation,dc=fr / 20181009070723Z#000029#00#000000
2019-01-07 17:02:00,547 - DEBUG : Found on ldap://consumer.exemple:389 : uid=lala,ou=people,dc=monorganisation,dc=fr / 20181009070723.000000Z#000029#000#000000
2019-01-07 17:02:05,441 - DEBUG : Check obj uid=lala,ou=people,dc=monorganisation,dc=fr
2019-01-07 17:02:05,441 - DEBUG : Obj uid=lala,ou=people,dc=monorganisation,dc=fr not synchronized : 20181009070723Z#000029#00#000000 <-> 20181009070723.000000Z#000029#000#000000
On constate que l'estampille temporelle stockée dans l'attribut « entryCSN » de chaque objet est codée différemment : sur le producer, on a une date+heure en seconde alors que l'on a une date+heure en microseconde sur le consumer. De même, le troisième champ de l'attribut a un nombre de zéro différent. On constate que le slapadd a repris tel quel le format présent dans la copie alors que la réplication a changé ce format.
Solution : j'ai désactivé la réplication du côté du consumer, j'ai supprimé la base de donnée (rm /var/lib/ldap/*), j'ai effectué un slapadd sur les deux serveurs puis j'ai réactivé la réplication.
J'ai testé la réplication : la modification, avec un ldapvi ou un ldapmodify, de tout objet sur le producer entraîne un changement de son entryCSN. Le tout est répliqué sur le consumer. Les deux entryCSN concordent donc nous pouvons utiliser un script de supervision qui s'appuie dessus.
Je retiens donc une différence de comportement entre un slapadd et une réplication.
Un documentaire diffusé en octobre 2018 sur Arte qui traite de la police prédictive.
Il permet de faire le point sur les techniques et méthodes qui existent à ce sujet (et ça fait froid dans le dos, notamment les petites dérives / interprétations personnelles des flics).
En revanche, aucun argument allant à l'encontre de ces technos est nouveau : qui défini les critères de dangerosité (pourquoi la criminalité en col blanc n'est-elle pas analysée ?) ? Pourquoi ces critères ne sont-ils pas publics ? Cela ne favorise-t-il pas un contrôle au faciès (le documentaire nous montre une intervention de police qui fait partie de cette catégorie) / préjugé (« Tu vis dans tel quartier ? C'est le quartier des receleurs, donc t'es suspect. C'est aussi le seul quartier où je peux vivre compte-tenu du montant des loyers…) ? Une probabilité, c'est juste une approximation d'un fait réel par des modèles mathématiques perfectibles, comme la météorologie. Si la désobéissance n'est plus permise, alors il n'y a plus d'espace politique, car il n'y a plus possibilité de faire évoluer la société vers de nouvelles pratiques. Si un crime n'a pas lieu car l'humain a été positivement influencé, faut-il le punir (c'est toute la trame narrative du film Minority Report) ?
Sur le contrôle au faciès, un doute me prend : si un flic décide de t'arrêter parce que t'es un « black à capuche » (exemple souvent cité dans le docu), quelle différence cela fait-il que le traitement qui a conduit à cette décision provienne d'un humain ou d'un logiciel programmé par un humain ?
Je note que, dès son commencement, ce film a un ton négatif : ce flicage permanent fait partie de nous, nous ne l'avons pas vu venir, tout est perdu d'avance, toute résistance est futile…
Mes notes :
