La journalisation - Principes et implementations Java
Les exemples
Les systèmes de fichiers journalisés
Les systèmes d'exploitation GNU/Linux utilisent un mécanisme de cache disque (le Buffer Cache) qui bufférise tous les accès au disque dur (en fait les opérations d'écriture et d'effacement). Sans ce cache, le système serait considérablement ralenti. Ces systèmes sont réputés pour leur fiabilité, pourtant il est impossible de protéger une machine d'un crash ou d'une coupure de courant. Les conséquences de ces problèmes aboutissent à un redémarrage de la machine dont la durée est proportionnelle à l'exécution de l'utilitaire de récupération (fsck) sur le ou les disques de la machine. Cet utilitaire permet de vérifier l'intégrité du disque suite à un problème de ce genre. Malheureusement, plus le disque est gros, plus l'utilitaire fsck dure longtemps.
C'est essentiellement pour corriger le problème du fsck qui dure parfois plusieurs heures qu'il a fallu inventer un nouveau type de système de fichiers: les systèmes de fichiers journalisés. du type ReiserFS, XFS, JFS, Ext3 ou GFS. Journaliser le système de fichiers résout le problème fsck en ajoutant une nouvelle structure de données appelée journal. Ce journal est une structure située sur le disque. Avant que le driver du système de fichier ne modifie la donnée, il écrit une entrée dans ce journal. Cette entrée décrit ce qu'il s'apprête a faire. Il effectue ensuite la modification de la donnée. En faisant cela, un système de fichiers journalisé maintient un log des dernières modifications de ses données. Ceci s'avère très pratique sur un système de fichiers mal démonté lorsque le check de cohérence va prendre du temps. Le principe utilisé provient du monde des gestionnaire de base de données (SGBD) qui utilisent en effet, un système permettant de différer l'écriture des données à l'aide d'instructions comme BEGIN et COMMIT. Ainsi, il est possible de réduire les opérations d'entrée/sortie sous la forme de transaction. Une transaction ne sera donc effective que lorsque l'ordre COMMIT sera exprimé. Et cela permet en même temps de conserver un log complet de toutes les transactions conservé sous forme de journal.
Le principe utilisé provient du monde des gestionnaire de base de données (SGBD) qui utilisent en effet, un système permettant de différer l'écriture des données à l'aide d'instructions comme BEGIN et COMMIT. Ainsi, il est possible de réduire les opérations d'entrée/sortie sous la forme de transaction. Une transaction ne sera donc effective que lorsque l'ordre COMMIT sera exprimé. Et cela permet en même temps de conserver un log complet de toutes les transactions conservé sous forme de journal.
Syslog
Syslog est à la fois un démon, une API et un protocole, disponible sur une grande partie des équipements informatiques professionnels. Historiquement, le service Syslog a été développé pour la branche Unix des systèmes BSD. Depuis, ce service a été très largement adopté. On le retrouve sur tous les systèmes Unix, GNU/Linux et surtout sur les équipements réseau de nombreux constructeurs. Le protocole Syslog est décrit dans le document RFC3164.
Le principe repose sur la collecte de messages propres au matériel ou au programme, concentré sur un serveur de journalisation. Les messages Syslog émis par les équipements réseau doivent être collectés par une machine. Ce type de machine constitue un dépôt de référence avec horodatage des évènements survenus sur le système d'information. Du point de vue sécurité c'est un maillon essentiel du contrôle d'intégrité. Dans le cas où des équipements ont été compromis, il subsistera toujours des messages permettant de remonter à l'instant d'origine de l'attaque. Syslog est système ancien et présente aujourd'hui des faiblesses (perte silencieuse et absence d'authentification mutuelle). Syslog n'est pas un modèle en matière de sécurité. mais reste encore un outil de surveillance très utilisé.
Ci-dessous est présenté un extrait d'un journal Syslog. On peut y voir des alertes de plusieurs types: applicative avec une alerte de type FTP ou matériel avec la detection d'un système de stockage USB connecté.
Ces exemples permettent de comprendre l'enjeu de la journalisation dans tous les types de systèmes.