13 votes

Comment enregistrer chaque commande linux sur un serveur de logs ?

Je veux que chaque commande tapée soit envoyée à un serveur de logs. Le syslog-ng est déjà configuré pour envoyer tous les journaux au logserver.

Je suis intéressé par toutes les méthodes pour y parvenir. Je m'attends à une discussion sur les utilisateurs malhonnêtes et la sécurité, mais l'objectif premier est simplement de faire en sorte que les sessions soient enregistrées. Toutes les sessions se font par ssh mais les commandes de connexion à la console doivent également être enregistrées. Je voudrais que cela se produise pour n'importe quel Shell mais le principal est bash. (Encore une fois, je sais qu'un utilisateur véreux pourrait créer son propre Shell.... )

29voto

Dot Net Pro UK Points 761

Ce n'est pas comme ça qu'on aborde le problème. Une fois que vous donnez Shell l'accès à un utilisateur, vous confiez à cet utilisateur de faire tout ce qu'il/elle a les permissions appropriées. Oubliez la journalisation des commandes, il y a beaucoup trop de façons d'exécuter une commande dans n'importe quel système Unix.

Par exemple, l'utilisateur peut lancer un client de messagerie (la seule commande enregistrée est pine par exemple), il y sélectionne "Compose", ce qui lance VI, et à partir de VI, il lance n'importe quelle commande qu'il souhaite à travers :!cmd . Cette commande n'est enregistrée nulle part, et du point de vue du système, elle est comme toute application d'aide appelée par VI, comme grep ou sort. La seule commande enregistrée par le Shell était pine .

Il semble que ce que vous voulez réellement s'appelle audit . Activez le sous-système d'audit et utilisez la fonction auditctl et la commande auditd du démon audit pour contrôler ce qui est enregistré. Vous trouverez plus d'informations dans le auditctl(8) page du manuel.

Notez que l'enregistrement de chaque instanciation de processus peut également ne pas être optimal. Par exemple, la simple ./configure pour un progiciel (créé à l'aide d'autotools) est remarquable par la création de milliers d'instanciations de processus. Cela inonde le journal d'audit de tant de bruit qu'il devient très difficile de l'analyser par la suite.

13voto

gfrizzle Points 4518

Installer le acct (le nom du paquet varie selon la distribution, il est également connu sous le nom de comptabilité des processus) et utilisez lastcomm <username> :

[mithrandir]-[/home/sernin]-[1951] % lastcomm sernin
tr                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
tr                     sernin   pts/2      0.02 secs Fri Nov 12 12:02
zsh               F    sernin   pts/2      0.00 secs Fri Nov 12 12:02
fortune                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xmodmap                sernin   pts/2      0.00 secs Fri Nov 12 12:02
xrdb                   sernin   pts/2      0.00 secs Fri Nov 12 12:02
sh                     sernin   pts/2      0.00 secs Fri Nov 12 12:02
cpp                    sernin   pts/2      0.00 secs Fri Nov 12 12:02

Vous pouvez également effectuer une recherche par tty ou par nom de commande. Comme d'habitude, man lastcomm pour plus d'informations.

11voto

caolan Points 1

Si vous êtes prêt à faire un peu de programmation C, vous pouvez le faire en écrivant une bibliothèque qui enveloppe execve, enregistre dans syslog, puis ouvre la bibliothèque contenant le véritable appel système execve. Puis dans /etc/environnement, mettez LD_PRELOAD sur le chemin de la bibliothèque que vous avez créée.

Vous devrez faire attention à ne pas entrer dans une boucle ici, donc vous pouvez vouloir soit enregistrer seulement les exécutions de certains binaires, ou exclure d'autres (comme syslog) d'être enregistrés.

0 votes

En fait, c'est très utile. La première recherche sur execve wrapper fait apparaître snoopy ( sourceforge.net/projets/snoopylogger ). Il semble proche de ce que je recherchais, bien qu'un peu verbeux. Après avoir testé, je constate que je vais avoir besoin de l'approbation de la direction pour mettre cela dans un environnement de production. (Un avertissement à tous les types malveillants)

0 votes

@Leo Depuis la version 2.0.0, Snoopy supporte la spécification d'un format de log personnalisé lors de l'exécution de ./configure, donc l'excès de verbosité ne devrait plus être un problème. Divulgation : Mainteneur de Snoopy ici.

7voto

Andrew M. Points 10852

Il me semble que vous cherchez quelque chose comme rootsh ( page de manuel ). Pour citer la page de manuel :

Rootsh est une enveloppe pour les shells qui enregistre toutes les frappes de touches échangées et sortie du terminal dans un fichier et/ou dans syslog.

Malgré son nom, cette fonction peut être utilisée pour n'importe quel utilisateur.

2voto

dannysauer Points 752

Il est probablement préférable de demander aux utilisateurs d'utiliser sudo (ou similaire) pour exécuter les commandes qui vous intéressent, et de faire confiance aux utilisateurs à un certain niveau. Plus vous vous rapprochez du "contrôle total" des choses, plus il est difficile de suivre ce qu'elles font. Je me suis récemment penché sur des outils comme celui-ci, par exemple. La plupart du temps, ils ne font que créer des journaux qui sont difficiles à gérer si vous avez suffisamment d'utilisateurs et de machines pour qu'une telle chose en vaille la peine :)

Pensez à toutes les informations que vous allez générer. Quelle proportion de ces informations vous intéresse ? Probablement très peu - vous générez donc des journaux qui sont pour la plupart sans valeur. Auditer les choses qui vous intéressent vraiment, comme d'autres le suggèrent, vous permettra probablement d'obtenir un meilleur résultat final.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X