Une des expériences en cours est la vérification automatisée et à intervalle régulier de tous les objets et de tous les liens des objets.
Les objets sont faciles à vérifier, on calcule leur empreinte et on vérifie qu’elle correspond à leur nom. Si elle diffère, on le supprime. Si l’objet n’a pas de liens, il est jugé comme une pièce rapportée, on le supprime aussi.
Les liens sont assez faciles à vérifier aussi. Il faut procéder objet par objet, prendre les liens un par un et vérifier que la signature est valide pour l’entité qui l’a générée. Si la signature diffère, on supprime le lien. Si l’entité est inconnue, la signature ne pourra être vérifiée, le lien est donc supprimé aussi.
Ce petit bout de script reste assez simple et doit être testé soigneusement pour éviter des dommages collatéraux. Il m’avait semblé l’avoir testé suffisamment… mais visiblement il y a eu des dégâts pour certaines entités.
Voici notamment le résultat sur les sauvegardes de la machine zulu (à comparer à ce graphe ci) :
On peut encore allez plus loin. Non dans les dégâts collatéraux mais dans une forme plus poussée d’immunisation. L’entité peut entretenir une liste d’objets jugés dangereux, et donc à supprimer. Elle peut et surtout doit aussi se référencer à une entité dédiée au marquage d’objets dangereux, c’est le rôle justement de cerberus…
Annexe
Scripts ajoutés à la librairie :
nebCheckAll() { nebule_loop=$(( $nebule_loop + 1 )) _logger "-nebCheckAll REQ" nebCheckObjs nebCheckLiens } nebCheckObjs() { nebule_loop=$(( $nebule_loop + 1 )) _logger "-nebCheckObjs REQ" # boucle sur chaque objet ls -1 "$nebule_baserep/o/" | while read _co_O do if [ -f "$nebule_baserep/l/$_co_O" ] then _o_vr $_co_O else rm "$nebule_baserep/o/$_co_O" fi done } nebCheckLiens() { nebule_loop=$(( $nebule_loop + 1 )) _logger "-nebCheckLiens REQ" # Genere un ID pour l'objet temporaire _cl_id=$(openssl rand -hex 3) # boucle sur chaque objet ls -1 "$nebule_baserep/l/" | while read _cl_O do echo "nebule/liens/$nebule_version" > "$nebule_temprep/_cl_$_cl_id" cat "$nebule_baserep/l/$_cl_O" | while read _cl_L do [ "$(echo $_cl_L | cut -b 1-13)" != "nebule/liens/" ] && [ "$(_l_vr $_cl_L)" != "" ] && echo "$_cl_L" >> "$nebule_temprep/_cl_$_cl_id" done [ $(_crcalcfile "$nebule_temprep/_cl_$_cl_id") != $(_crcalcfile "$nebule_baserep/l/$_cl_O") ] && _logger "-nebCheckLiens DIFF $_cl_O" && cat "$nebule_temprep/_cl_$_cl_id" > "$nebule_baserep/l/$_cl_O" done rm "$nebule_temprep/_cl_$_cl_id" }
Une réflexion sur « Auto-vérification automatique périodique »