Comment enregistrer toutes les commandes shell UNIX soumises par tous les utilisateurs?

8

Existe-t-il un moyen élégant de consigner chaque commande soumise dans tous les shells sur une machine? Ceci dans le contexte d'un serveur Ubuntu peu utilisé, dont je suis le seul utilisateur humain. (Il existe plusieurs comptes d'utilisateurs utilisés par les systèmes automatisés.)

Je voudrais que ce soit discret et peu coûteux, donc j'adorerais qu'il y ait une méthode simple impliquant quelque chose comme script.

jl6
la source

Réponses:

9

Depuis la nuit des temps (remontant en fait à l'époque où les gens devaient réellement payer de l'argent réel par cycle informatique utilisé), Unix et ses clones ont intégré un système appelé Process Accounting ( acct). Cela a permis aux administrateurs système de savoir exactement ce que faisaient leurs utilisateurs et pouvaient donc les facturer en conséquence.

Les acctinstallations existent toujours dans la plupart des systèmes Unix et Linux à ce jour.

Ce site: http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html vous explique comment l'activer.

Majenko
la source
Cela peut-il également être utilisé pour enregistrer quel utilisateur exécute sudo et su, et laquelle des commandes de root par la suite?
Daniel Beck
Je crois qu'il enregistre chaque commande exécutée, saisie par utilisateur, tty, etc. Vous pouvez faire correspondre les commandes sur un tty avec l'utilisateur qui a été connecté à ce tty pour suivre les utilisateurs qu'ils ont demandés ou contactés.
Majenko
Merci, je n'étais pas du tout au courant de cette fonctionnalité. Une lecture rapide des pages de manuel suggère que la journalisation continue jusqu'à ce qu'une condition d'espace disque faible soit atteinte - d'où peut-être le besoin d'un script logrotate.
jl6
je pensais que la comptabilité des processus venait de se connecter quel programme a fonctionné, pas la commande avec tous ses arguments?
Sirex
2

Voici un moyen très agréable et rapide de consigner toutes les commandes shell :

Étape 1:

Utilisez votre éditeur de texte préféré pour ouvrir / etc / bashrc et ajoutez la ligne suivante à la fin:

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

Étape 2:

Définissez le syslogger pour intercepter local6 dans un fichier journal en ajoutant cette ligne dans le fichier /etc/syslog.conf:

local6.*                /var/log/cmdlog.log

[Voir le blog complet ici]

cry_wolf
la source
J'alerte l'utilisateur pourrait désactiver cette réinitialisation de la variable et parce qu'elle est exécutée "avant d'émettre chaque invite principale", ce fait ne serait pas enregistré.
dmckee --- chaton ex-modérateur
2

Vous pouvez utiliser snoopy .

Il est très simple à installer et à supprimer (aucun module de noyau ou correctif requis). Notez que ce n'est pas une solution d'audit appropriée et qu'elle peut facilement être contournée.

Divulgation: Je suis le responsable snoopy actuel.

Bostjan Skufca
la source
Bostjan Skufca a également fourni des instructions supplémentaires pour l'installation de snoopy dans Ubuntu ici et également dans un commentaire supplémentaire dans le même fil ici .
karel
+1 pour snoopy; il fournit un bon journal de commande et d'arguments dans /var/log/auth.log
David Goodwin