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:

 

outils

 

 

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!