web-dev-qa-db-fra.com

Comment enregistrer toutes les commandes Bash de tous les utilisateurs sur un serveur?

Notre petite entreprise utilise Ubuntu Server 11.10, auquel deux personnes ont un accès SSH. Les terminaux réels sont parfois utilisés aussi. Comment pouvons-nous localiser localement toutes les commandes Bash exécutées, ainsi que l’utilisateur et l’heure?

Nous pouvons supposer que personne n'est néfaste et n'essaye activement d'éviter la journalisation, mais nous préférons tout de même que les utilisateurs ne disposent pas d'un accès en écriture direct à leurs fichiers journaux. Les sessions simultanées doivent être traitées correctement.

21
Tin

Pour les shells BASH, éditez le fichier de configuration d’exécution du système BASH:

Sudo -e /etc/bash.bashrc

Ajouter à la fin de ce fichier:

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

Configurez la journalisation pour "local6" avec un nouveau fichier:

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

Et le contenu ...

local6.*    /var/log/commands.log

Redémarrez rsyslog:

Sudo service rsyslog restart

Connectez - Out. Connectez-vous. Voilà!

Mais j'ai oublié la rotation du journal:

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 donc le nouveau fichier journal bash-controls à cette liste:

/var/log/commands.log

Sauvegarder.

32
user8290

Un système de comptabilisation des processus peut être utile à cet égard, en particulier le package acct qui fournit les commandes lastcomm et ac.

Les commandes ac impriment des statistiques sur le temps de connexion des utilisateurs, en heures. Il s'agit de la durée pendant laquelle l'utilisateur a été connecté au système, à distance via SSH ou un terminal série, ou lorsqu'il est sur la console.

La commande lastcomm affiche des informations sur les commandes précédemment exécutées. Les entrées les plus récentes sont données en haut de la liste. La quantité totale de temps CPU utilisée par chaque processus est également affichée.

Un vieux tutoriel qui peut être utile est ici:

http://www.linuxjournal.com/article/6144?page=0,1

D'autres commandes de comptabilité telles que last et ainsi de suite peuvent être trouvées dans ce tutoriel:

http://www.techrepublic.com/article/system-accounting-in-linux/1053377

4
Sabacon

Vous pouvez utiliser snoopy .

L'enregistreur Snoopy peut bien vous convenir. Il ne s'agit pas d'une solution de journalisation inévitable, mais plutôt d'un outil utile pour les administrateurs diligents qui préfèrent suivre leurs propres actions.

Divulgation: Je suis mainteneur snoopy.

3
Bostjan Skufca

Vous pouvez trouver ici un script pour consigner toutes les commandes/commandes intégrées bash dans un fichier texte ou un fichier syslog serveur sans utiliser de correctif ni d’outil exécutable spécial.

Très facile à déployer, car il s’agit d’un simple script Shell qui doit être appelé une fois lors de l’initialisation de la bash .

C'est gratuit et j'espère que cela répond à vos besoins.

3
Francois Scheurer

essayez ceci (les solutions ci-dessus ne fonctionneront pas à 100% avec bash 4.3):

export HISTTIMEFORMAT="%Y-%m-%d %T "
export Prompt_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'

cela effectue la journalisation ET empêche la journalisation des horodatages utilisés pour le fichier historique bash. le piège est nécessaire, car bash enverra les signaux au "sous-job" après avoir appuyé plusieurs fois sur strg + c (testé avec bash 4.3). cela forcera la déconnexion de l'utilisateur actuel (par exemple, connecté avec Sudo)

0

Pour gérer plusieurs sessions sans écraser le fichier d'historique, vous devez insérer "shopt -s histappend" dans un fichier de démarrage Bash. Voir aussi cette question sur le même problème.

0
pdp

Vous pouvez également essayer d'installer acct. Acct conserve une trace d'audit détaillée de ce qui est fait sur vos systèmes Linux.

Sudo apt-get install acct
0
user571354