Ecrit par Alain ARDITI
Ecrit le 08 avril 2020
Filetraq est un petit outil, un script en fait, qui existe depuis le début des années 2000 (http://filetraq.xidus.net/) et qui a très peu évolué au fil des années. Il est maintenu sur Debian et permet de faire le suivi des changements des fichiers de configuration.
A chaque modification d'un fichier déclaré dans la configuration de filetraq, l'outil va copier la nouvelle version et archiver l'ancienne dans /var/lib/filetraq.
On peut ainsi retrouver l'ensemble des modifications d'un fichier depuis l'installation de l'outil filetraq !
filtraq est essentiellement utilisé pour tracer les modifications des fichiers du répertoire /etc sur les sytèmes Linux.
Filetraq est composé d'un script, d'un cron et d'un fichier de configuration.
Filetraq se lance à intervalles réguliers et compare les fichiers qui sont déclarés dans sa configuration avec la copie qu'il conserve dans le répertoire /var/lib/filetraq
Attention, filetraq est bien adapté aux fichiers textes, car il utilise la commande "diff" et permet de voir les changements. Sur un fichier binaire, filetraq fait une copie dès que le binaire est modifié. Comme il peut faire beaucoup de copies, filetraq est adapté aux fichiers légers, typiquement les fichiers qui se trouvent dans /etc en priorité. Mais on peut aussi ajouter des scripts de ~/bin ou de /usr/local/bin
La force de filetraq réside dans sa simplicité. En effet, à chaque modification d'un fichier listé dans la configuration, filetraq archive une copie dans /var/lib/filetraq avec un timestamp, de la forme : MM.DD.YY__HH.MM
Les fichiers sont tous archivés dans /var/lib/filetraq avec leur arborescence d'origine.
Par exemple, les différentes versions du fichier /etc/filetraq.conf se trouvent dans le répertoire /var/lib/filetraq/etc/filetraq.conf
vm-debian:~# ls -l /var/lib/filetraq/etc/filetraq.conf
total 8
-rw-r--r-- 1 root root 449 Apr 7 18:23 orig
-rw-r--r-- 1 root root 435 Apr 7 18:17 orig.04.07.20__18.23
vm-debian:~#
A l'installation du paquet filetraq, la tâche cron se lance toute les 5 minutes mais n'exécute rien tant que le fichier de configuration /etc/filetraq.conf n'est pas créé.
Voici un exemple simple de fichier de configuration :
vm-debian:~# cat /etc/filetraq.conf
/boot/grub/menu.lst
/boot/grub/grub.cfg
/etc/aliases
/etc/apt/*
/etc/crontab
/etc/cron*/*
/etc/default/*
/etc/email-addresses
/etc/exim4/*
/etc/filetraq.conf
/etc/fstab
/etc/group
/etc/grub.d/*
/etc/hosts*
/etc/init.d/*
/etc/logrotate.conf
/etc/logrotate.d/*
/etc/mailname
/etc/modules
/etc/network/*
/etc/pam*
/etc/passwd
/etc/rc*/*
/etc/resolv.conf
# attention à la sécurité....
/etc/shadow
/etc/ssh/sshd_config
/etc/ssh/ssh_config
/root/.ssh/authorized_keys
/usr/local/bin/*
/var/spool/cron/crontabs/*
vm-debian:~#
Attention à la sécurité ! Vous aurez remarqué qu'avec le fichier de configuration précédent filetraq va sauvegarder le fichier /etc/shadow et en plus, lors des modifications, il va envoyer les diff par email ! Le hash du mot de passe modifié passera en clair sur Internet, c'est un trou de sécurité énorme !
D'autre part, le fichier /etc/shadow va se retrouver copié dans /var/lib/filetraq/etc/shadow/ (avec les mêmes permissions que l'original), ce qui pourrait laisser imaginer que le fichiers puisse se retrouver dehors sans que des outils de surveillance ne le détecte !
Sur mes VM, les utilisateurs n'ont pas de mot de passe. Les accès ne sont possibles qu'avec des clés SSH. Donc, si je reçois un email de modification du fichier /etc/shadow, c'est qu'un pirate s'est introduit sur ma VM !
La déclaration du cron se trouve dans :
vm-debian:~# cat /etc/cron.d/filetraq
# Execute filetraq each 5 minutes.
# m h dom mon dow user command
*/5 * * * * root [ -x /usr/sbin/filetraq ] && /usr/sbin/filetraq
vm-debian:~#
On voit que la tâche s'exécute toutes les 5 minutes. Une telle fréquence n'apporte rien dans la majorité des cas. Moi je laisse la minute fixe une fois par heure, avec une minute que je choisis différente pour tous mes serveurs :
vm-debian:~# cat /etc/cron.d/filetraq
# Execute filetraq once per hour at minute 27.
# m h dom mon dow user command
27 * * * * root [ -x /usr/sbin/filetraq ] && /usr/sbin/filetraq
vm-debian:~#
Comme l'exécution de filetraq se fait dans un cron, il est possible de récupérer un email à chaque modification de configuration. Tout dépend si votre stratégie de surveillance est basée sur des alertes email ou sur d'autres outils de surveillance.
Une fois tout configuré, il faut lancer filetraq en ligne de commande, sous l'utilisateur root, pour voir si tout se passe bien.
A la première exécution, filetraq va annoncer qu'il crée le premier backup de chaque fichier présent dans sa configuration.
debian-vm:~# filetraq
Creating first backup of /etc/aliases.
Creating first backup of /etc/apache2/apache2.conf.
Creating first backup of /etc/apache2/conf-available/charset.conf.
Creating first backup of /etc/apache2/conf-available/localized-error-pages.conf.
Creating first backup of /etc/apache2/conf-available/other-vhosts-access-log.conf.
Creating first backup of /etc/apache2/conf-available/security.conf.
Creating first backup of /etc/apache2/conf-available/serve-cgi-bin.conf.
Creating first backup of /etc/apache2/conf-enabled/charset.conf.
Creating first backup of /etc/apache2/conf-enabled/localized-error-pages.conf.
Creating first backup of /etc/apache2/conf-enabled/other-vhosts-access-log.conf.
Creating first backup of /etc/apache2/conf-enabled/security.conf.
Creating first backup of /etc/apache2/conf-enabled/serve-cgi-bin.conf.
Creating first backup of /etc/apache2/envvars.
Creating first backup of /etc/apache2/htpasswd.
Creating first backup of /etc/apache2/magic.
....
....
....
debian-vm:~#
A partir de là, plus aucun message n'apparaît sauf, si on rajoute des fichiers dans /etc/filetraq.conf.
debian-vm:~# filetraq
debian-vm:~#
Aucun message n'apparait, c'est bon signe...
A chaque modification d'un des fichiers déclarés dans filetraq.conf, on reçoit un email avec les différences entre la nouvelle et la version précédente.
Exemple d'email envoyé par filetraq. On voit les 2 lignes qui diffèrent dans une configuration LXC :
*** /var/lib/lxc/cs-vm/config 2019-10-16 10:59:23.878137891 +0200
--- /var/lib/filetraq//var/lib/lxc/cs-vm/config/orig 2019-10-02 19:59:27.788208719 +0200
***************
*** 1,4 ****
! # Template used to create this container: /usr/share/lxc/templates/lxc-debian
# Parameters passed to the template:
! # Template script checksum (SHA-1): 5a35ad98c578f5487dc5712a1c7d38af399be813
# For additional config options, please look at lxc.container.conf(5)
--- 1,4 ----
! # Template used to create this container: /usr/share/lxc/templates/lxc-download
# Parameters passed to the template:
! # Template script checksum (SHA-1): 273c51343604eb85f7e294c8da0a5eb769d648f3
# For additional config options, please look at lxc.container.conf(5)
***************