J'essaie de trouver comment enregistrer une instanciation spécifique de rrdtool
pour voir si le chemin d'accès qu'il reçoit est incorrect.
Je sais que je pourrais envelopper l'exécutable dans un script shell qui enregistrerait les paramètres, mais je me demandais s'il y avait une façon plus spécifique au noyau de surveiller cela, peut-être un rappel de système de fichiers qui voit quand un / proc / pid / exe particulier correspond à un binaire donné?
auditd
enregistrer les arguments de la ligne de commande ainsi que l'exécution du programme? serverfault.com/questions/765179/…Réponses:
Oui, il existe une fonction noyau: le sous-système d'audit. Le
auditd
démon effectue la journalisation et la commandeauditctl
définit les règles de journalisation. Vous pouvez enregistrer tous les appels vers un système spécifique à tous, avec un certain filtrage. Si vous souhaitez enregistrer toutes les commandes exécutées et leurs arguments, connectez l'execve
appel système:Pour suivre spécifiquement l'invocation d'un programme spécifique, ajoutez un filtre sur l'exécutable du programme:
Les journaux s'affichent dans
/var/log/audit.log
, ou partout où votre distribution les place. Vous devez être root pour contrôler le sous-système d'audit.Une fois l'enquête terminée, utilisez la même ligne de commande avec
-d
au lieu de-a
pour supprimer une règle de journalisation, ou exécutezauditctl -D
pour supprimer toutes les règles d'audit.À des fins de débogage, le remplacement du programme par un script wrapper vous donne plus de flexibilité pour enregistrer des éléments tels que l'environnement, des informations sur le processus parent, etc.
la source
-F path=/ust/bin/rrdtool
? Je ne comprends pas commentrrdtool
sont même les logiciels associés.rrdtool
. Si vous souhaitez enregistrer les invocations de tous les programmes, supprimez la-F path=…
partie (vous obtiendrez beaucoup de journaux bien sûr).auditctl
commande n'est-elle efficace que jusqu'au redémarrage?auditctl
ne survit qu'au redémarrage, mais c'est quand même un bon point, j'ai ajouté des instructions pour les supprimer sans redémarrer à ma réponse.Vous pouvez utiliser snoopy .
Snoopy est une solution plus légère car elle n'a pas besoin de coopération avec le noyau. Tout ce qui est nécessaire est un chargeur dynamique (dl) qui précharge la bibliothèque snoopy, dont le chemin est spécifié dans
/etc/ld.so.preload
.Divulgation: Je suis le responsable actuel de Snoopy.
la source
Le sous-système «audit» du noyau Linux peut faire ce dont vous avez besoin.
par exemple, si vous exécutez ces commandes:
Ensuite, chaque événement d'exécution est enregistré et de nombreuses informations sont fournies à ce sujet.
par exemple, c'est la sortie de moi en cours d'exécution
tail /var/log/audit/audit.log
Il y a des valeurs intéressantes qui peuvent être vues; Par exemple, "auid" est 500, qui est mon ID de connexion, même si "uid" est zéro ('car je cours sous
su
). Ainsi, même si l'utilisateur a changé de comptesu
ou quesudo
nous pouvons toujours retrouver son "ID d'audit"Maintenant, ces
auditctl
commandes seront perdues lors d'un redémarrage. Vous pouvez les mettre dans un fichier de configuration (par exemple dans le/etc/audit/rules.d/
répertoire, sur CentOS 7). L'emplacement exact dépendra de la version de votre système d'exploitation. Laauditctl
page de manuel devrait aider ici.Attention, cependant ... cela entraînera la génération de nombreux messages de journal. Assurez-vous d'avoir suffisamment d'espace sur le disque!
Si nécessaire, les règles peuvent être limitées à un utilisateur spécifique ou à une commande spécifique.
Et méfiez-vous également; si un utilisateur met le mot de passe dans l'exécution de la commande (par exemple
mysql --user=username --password=passwd
), il sera enregistré.la source