Auto-vérification automatique périodique

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 »

Laisser un commentaire