Logguer toutes les commandes exécutées dans une base Mysql
Article publié le 12 Mai 2013
Une problématique qui se pose souvent, lorsqu’un serveur Linux tombe (souvent à cause d’un humain) comment savoir les dernières commandes qui ont été tapées et surtout par qui??
Si vous mettez ça en place dans votre entreprise on risque de vous prendre pour Big Brother mais en même temps je pense que ce petit système peu vous épargner bien des ennuis.
La procédure ci dessous ne fonctionne que sur la distribution Debian et sur les versions antérieur à Red HAT 5.3. Les versions supérieurs à RED HAT 5.3 pose problème lorsque vos partitions sont en LVM, je n’ai jamais pu trouver une solution à ce problème, si l’un de vous trouve je suis preneur :). Je vous suggère de déployer cette solution d’abord sur un serveur de test avant la mise en prod. Merci à la personne qui à conçu cette solution!
1) Création du serveur Bashlog
Installons une petite base de donnée MySQL:
#apt-get install mysql-server-5.0
Ensuite connectez vous à votre base:
#mysql -u root -p <votre mot de passe> -h <votre serveur>
On crée la database:
#create database shell_bash;
#use shell_bash
On crée les tables:
CREATE TABLE `logs`
(`rowid` mediumint(8) NOT NULL auto_increment,
`host` varchar(100) character set utf8 collate utf8_unicode_ci NOT NULL default »,
`user` varchar(100) character set utf8 collate utf8_unicode_ci NOT NULL default »,
`as_user` varchar(100) character set utf8 collate utf8_unicode_ci NOT NULL default »,
`ip` varchar(100) character set utf8 collate utf8_unicode_ci NOT NULL default »,
`ut_line` varchar(100) character set utf8 collate utf8_unicode_ci NOT NULL default »,
`command` text character set utf8 collate utf8_unicode_ci NOT NULL,
`ts` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`rowid`))
ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Voila votre serveur bashlog est prêt, rien ne vous empêche de vous coder une petite interface en PHP afin que cela soit plus sexy.
Nous allons maintenant passer à la partie cliente.
2) Client
Nous allons recompiler le bash avec des librairies mysql pour que celui ci soit en mesure de se connecter une base MySQL. La compilation fonctionne jusqu’à la version 4.2 (c’est à dire la dernière version du bash à l’époque de l’écriture de ce tuto).
Tous d’abord télécharger ce fichier zip comportant 2 patchs qui seront appliqués sur votre bash et une librairie mysql à insérer dans le répertoire /usr/lib:
Installez ensuite les outils de compilations et un package de librairie mysql:
apt-get install libmysqlclient-dev autoconf patch make
Maintenant on compile!
wget http://ftp.gnu.org/gnu/bash/bash-3.1.tar.gz
patch -p0 < bash-paranoia.patch (fichier présent dans l’archive zip joint à cette article)
patch -p1 < bash-mysql.patch (fichier présent dans l’archive zip joint à cette article)
autoconf
./configure –enable-paranoia –prefix=/usr
make
Voila vous avez votre bash recompilez pret à envoyer toutes les commandes qui seront tapées sur une base MySQL!!
N’oubliez pas de créer un fichier de configuration ou vous aller rentrer les paramètres de connexions à la Base de donnée!
#touch /etc/bash.conf
Ensuite insérez les lignes suivantes:
SERVER=<votre serveur de base de donnée>
USER=shell_bash
PASS=<le mot de passe du user>
DB=shell_bash
Enfin il ne reste plus qu’à écraser l’ancien bash par votre bash modifié! (sans oubliez de faire un petit backup)
# cp /bin/bash /bin/bash.old
#cp /<votre repertoire de compilation>/bash /bin/bash
Ensuite déloguer vous et reloguez vous.
Enjoy!