Comment enregistrer chaque commande linux sur un serveur de journaux


13

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

Je m'intéresse à toutes les méthodes pour le faire. Je m'attendrais à une discussion sur les utilisateurs voyous et la sécurité, mais le premier objectif principal est simplement de faire enregistrer les sessions. Toutes les sessions sont sur ssh mais les commandes de connexion à la console doivent également être enregistrées. J'aimerais que cela se produise pour n'importe quel shell, mais le principal est bash. (Encore une fois, je sais qu'un utilisateur voyou pourrait créer son propre shell ...)

Réponses:


29

Ce n'est pas ainsi que vous abordez le problème. Une fois que vous donnez un accès shell à un utilisateur, vous lui confiez de faire tout ce pour quoi il / elle a les autorisations appropriées. Oubliez la journalisation des commandes, il existe bien trop de façons d'exécuter une commande dans n'importe quel système Unix.

Par exemple, l'utilisateur peut démarrer un client de messagerie (la seule commande enregistrée est pine, par exemple), là-bas, il sélectionne "Composer" qui démarre le VI, et à partir du VI, il lance toute commande qu'il souhaite :!cmd. Cette commande n'est enregistrée nulle part, et du point de vue du système, elle ressemble à n'importe quelle application d'assistance 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 un audit . Activez le sous-système d'audit et utilisez la auditctlcommande et le auditddémon du package d' audit pour contrôler ce qui est consigné. Plus d'informations sont dans la page de manuel auditctl (8) .

Notez que la journalisation de chaque instanciation de processus peut également ne pas être optimale. Par exemple, le simple ./configurepour un progiciel (créé à l'aide des outils automatiques) est remarquable pour créer des milliers d'instanciations de processus. Cela va inonder le journal d'audit avec tellement de bruit qu'il devient très difficile de l'analyser plus tard.


13

Installez le acctpackage (le nom du package varie selon la distribution, également appelé 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 lastcommpour plus d'informations.


11

Si vous êtes prêt à faire un peu de programmation C, vous pouvez le faire en écrivant une bibliothèque qui encapsule execve, se connecte à syslog, puis dlopen est la bibliothèque contenant le véritable syscall execve. Ensuite, dans / etc / environment, définissez LD_PRELOAD sur le chemin de la bibliothèque que vous avez créée.

Vous voudrez être prudent lorsque vous entrez une boucle ici, vous pouvez donc vouloir uniquement enregistrer les exécutables de certains binaires, ou exclure d'autres (comme syslog) de la journalisation.


En fait, cela est très utile. La première recherche sur wrapper execve fait apparaître snoopy ( sourceforge.net/projects/snoopylogger ). Cela semble proche de ce que je cherchais, bien qu'un peu bavard. Après les tests, 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 infâmes)
Leo

@Leo Depuis la version 2.0.0, Snoopy prend en charge la spécification de format de journal personnalisé lors de l'exécution de ./configure, la sur-verbosité ne devrait donc plus être un problème. Divulgation: Snoopy mainteneur ici.
Bostjan Skufca

7

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

Rootsh est un wrapper pour les shells qui enregistre toutes les frappes en écho et la sortie du terminal dans un fichier et / ou dans syslog.

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


2

Il vaut probablement mieux que les utilisateurs utilisent sudo (ou similaire) pour exécuter les commandes qui vous intéressent et que vous fassiez confiance aux utilisateurs à un certain niveau. À mesure que vous vous rapprochez du "contrôle total" des choses, plus il est difficile de retracer ce qu'elles font. J'ai récemment examiné des outils comme celui-ci, par exemple. Généralement, ils créent simplement des journaux qui sont difficiles à gérer si vous avez suffisamment d'utilisateurs et de machines pour que cela en vaille la peine. :)

Considérez toutes les informations que vous allez générer. De quoi vous souciez-vous? Probablement très peu - vous générez donc des journaux qui sont pour la plupart sans valeur. L'audit des choses qui vous intéressent réellement, comme d'autres le suggèrent, vous amène probablement à un meilleur état final.


1

Bash peut être compilé avec le support syslog depuis 4.1.

Ce n'est pas infaillible (la comptabilité des processus pourrait être meilleure pour cela), mais c'est surtout une interaction avec l'utilisateur; le volume devrait être plus facile à gérer et vous pourrez passer à quelque chose de plus détaillé si vous soupçonnez quelque chose d'anormal.

Cela dit, c'est très intrusif et en tant qu'utilisateur, je m'attendrais à un avertissement de confidentialité très spécifique avant de commencer.


0

Il y a aussi sudosh ( http://sudosh.sourceforge.net ) qui fera la journalisation des sessions. Vous avez la possibilité de l'exécuter en tant que shell défini pour un utilisateur ou via sudo. Il suit également les horaires de chaque session afin que vous puissiez rejouer la session et la regarder (y compris les sessions d'édition et ainsi de suite).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.