GNU/Linux >> Tutoriels Linux >  >> Linux

Comment enregistrer chaque commande tapée dans bash et chaque opération de fichier ?

Je voudrais enregistrer chaque commande tapée dans bash (par root ou utilisateur) ainsi que chaque opération de fichier.

L'idée est que je pourrais écrire des outils qui pourraient interroger ce fichier journal et fournir des informations très utiles.

Par exemple, il serait bon de lister toutes les commandes jamais tapées, une par ligne, avec "- - -" pour un intervalle de temps de 8 à 24h et "===par ex. 24 juin 2014 ===” pour>24h d'intervalle. S'il éliminait également les doublons dans une session "===…", c'était encore mieux !

Cela signifierait que chaque fois que j'accomplis une tâche telle que "mettre à niveau flask/mod_wsgi/apache vers Python 3.x", un enregistrement est laissé, une piste que je peux retrouver si je dois faire la même chose six mois plus tard.

Dans le même ordre d'idées, il serait très agréable de voir quelles modifications du système de fichiers se sont produites après l'installation d'un package particulier. Cela me permettrait de savoir où les fichiers de configuration ont été placés.

PS je suis sur Ubuntu 14.04

Réponse acceptée :

Ce n'est pas aussi complet que la comptabilité réelle, et cela peut être annulé facilement par un utilisateur, mais en supposant qu'il ne doit pas nécessairement s'agir d'un véritable système de comptabilité et que BASH et rsyslog sont utilisés, modifiez le fichier BASH RC à l'échelle du système. :

sudo -e /etc/bash.bashrc

Ajouter à la fin de ce fichier :

export PROMPT_COMMAND='RET_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]+[ ]*//" ) [$RET_VAL]"'

Ci-dessus, logger enregistre l'heure, l'utilisateur, la commande et la valeur de retour de la commande. Configurez la journalisation pour "local6" avec un nouveau fichier :

sudo -e /etc/rsyslog.d/bash.conf

Et le contenu…

local6.*    /var/log/bash_commands.log

Redémarrez rsyslog :

sudo service rsyslog restart

Se déconnecter. Connectez-vous. Rotation des journaux :

sudo -e /etc/logrotate.d/rsyslog

Il existe une liste de fichiers journaux à faire pivoter de la même manière…

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

Ajoutez le nouveau fichier journal bash-commands dans cette liste :

/var/log/bash_commands.log

Enregistrez et redémarrez/rechargez rsyslog. (La rotation finira par écraser les fichiers journaux, donc plus de réflexion ou de configuration peuvent être nécessaires.)

Pour voir tous les fichiers installés par un package :

dpkg-query -L [package_name]

Vous pouvez donc exécuter quelque chose comme ça lorsque vous installez un logiciel.

dpkg-query -L abc-package > /var/log/files_abc-package.log

Linux
  1. Importer des fonctions et des variables dans Bash avec la commande source

  2. Comment modifier les autorisations et les propriétaires via la ligne de commande

  3. Comment faire fonctionner la commande alias dans un script bash ou un fichier bashrc

  4. Comment trier les fichiers dans des dossiers par type de fichier sur bash (avec la commande 'file') ?

  5. Comment imprimer la sortie de la commande Linux dans un fichier ?

Comment utiliser Sudo et le fichier Sudoers

Comment lire un fichier ligne par ligne dans Bash

Comment déplacer des fichiers et des répertoires sous Linux (commande mv)

Commande de source bash

Commande de sortie Bash et codes de sortie

Comment faire écho dans le fichier