Journalisation des accès

Tentatives de connexion infructueuses

Les tentatives échouées d’identifications pour l’accès à MedShakeEHR donnent lieu à enregistrements dans le syslog (v > 5.12.0).

Pour le login général une ligne du type suivant est générée :
Sep 24 11:25:58 user MedShakeEHR[1787]: MedShakeEHR - echec de connexion depuis 192.168.0.0

Pour le login phonecapture :
Sep 24 11:25:58 user MedShakeEHR[1787]: MedShakeEHR - echec de connexion phonecapture depuis 192.168.0.0

Ces logs permettent la mise en œuvre secondaire aisée de mécanismes de type fail2ban.

Accès en écriture et modifications des données

La journalisation des écritures dans MedShakeEHR est largement assurée par son système de gestion interne des données et par l’impossibilité pour un utilisateur de venir écraser des données entrées par un tiers (et dans une moindre mesure, ses propres entrées) sans laisser de traces (Voir Rien ne se perd, tout se transforme).

Une page de la configuration permet ainsi de suivre l’évolution des données entrées dans le logiciel puis d’affiner par dossier patient et même par champ de donnée.

Accès en lecture

MedShakeEHR ne logue pas dans sa base de données les accès aux dossiers patients ni même aux autres pages.
Il propose cependant (v4.3) les outils nécessaires pour exploiter avec la plus d’efficience possible les fonctionnalités natives du serveur Apache à ce sujet.

Prérequis

Le module apache mod_usertrack soit être installé et activé.

Mise en œuvre

Le code suivant est à adapter à l’installation (voir la documentation apache pour la signification des paramètres) et à ajouter à la configuration du virtualhost

CookieTracking On
CookieName apacheLogUserID
CookieDomain .domain.local
Define MEDSHAKEEHRLOGFILE /var/log/access_ehr.log
SetEnv MEDSHAKEEHRLOGFILE ${MEDSHAKEEHRLOGFILE}
LogFormat "%{%Y-%m-%d %H:%M:%S}t %{c}a %r %{Cookie}n" usertrack
SetEnvIf Request_URI "\.png$|\.gif$|\.jpg$|\.svg$|\.js$|\.css$|\.map$|\.ico$|\.woff2" do_not_log
CustomLog ${MEDSHAKEEHRLOGFILE} usertrack env=!do_not_log

Ce code indique à mod_usertrack d’utiliser le cookie apacheLogUserID posé par MedShakeEHR à l’identification réussie d’un utilisateur (v4.3). Ce cookie contient l’ID numérique de cet utilisateur.
Il conviendra d’ajuster correctement la ligne Define MEDSHAKEEHRLOGFILE avec le chemin correct du fichier de log qui devra être accessible en lecture.
Pensez à redémarrer Apache pour que ces paramètres soient pris en considération.

Le fichier de log indiqué dans CustomLog sera alors peuplé avec ce type de lignes :

2018-10-18 12:51:26 127.0.0.1 GET /patients/ HTTP/1.1 3
2018-10-18 12:51:26 127.0.0.1 POST /patients/ajax/patientsListByCrit/ HTTP/1.1 3
2018-10-18 12:51:28 127.0.0.1 GET /patient/4/ HTTP/1.1 3

Notez l’ID utilisateur en fin de ligne, ici le 3.
Sur une page accessible à un utilisateur non logué, une valeur aléatoire sera générée en remplacement. Son caractère alphanumérique rend la chose facilement différenciable dans le fichier de log final.

Exploitation

Il existe (v4.3) un outil sommaire à l’intérieur même du logiciel (zone de configuration, onglet journaux) pour exploiter le log généré. Nous l’améliorerons par la suite si nécessaire.

Il est cependant simple et puissant d’exploiter le fichier en ligne de commande dans le terminal.
Voici par exemple comment obtenir la liste des dossiers patients ouverts un jour donné par l’utilisateur n°3 en utilisant grep :

grep -E '^2018-10-18.* /patient/[0-9]+/.* 13$' access_ehr.log

Notez enfin que nous revoyons pour les prochaines versions les appels ajax fait par le logiciel pour afficher dynamiquement des informations dans la page afin que l’url figurant dans le fichier de log soit plus parlante (appel en GET plutôt qu’en POST).

 

Article précédent

 

Article suivant

Mise en production initiale

Création de boites de dépôts