Je veux exécuter un script lorsqu'un nouveau processus racine apparaît. (sous Linux) Comment puis-je simplement faire cela?
Merci
linux
unix
monitoring
process
cerisier
la source
la source
Réponses:
Cela semble être un travail parfait pour auditd. Une fois que auditd est en cours d'exécution, un service par défaut sur les systèmes modernes basés sur RedHat, vous pouvez créer une règle qui fera exactement ce que vous voulez en exécutant
auditctl -a task,always -F uid=0
En décomposant cette règle de commande, en faisant un usage excessif de la page de manuel, nous constatons que:
Donc, écrivez toujours un enregistrement pour cette action chaque fois qu'un appel système fork ou clone se termine.
L'option finale peut être considérée comme une chaîne de filtre, dans notre utilisation,
-F uid=0
nous limite simplement aux cas où l'uid du propriétaire du processus est 0.Notez que cette règle peut être exécutée au moment de l'exécution en vous assurant que auditd est correctement configuré et en ajoutant la règle
-a task,always -F uid=0
dans le fichier approprié pour votre distribution, très probablement
/etc/audit/audit.rules
Gardez juste à l'esprit que ce sera assez bruyant, et quiconque fera vos revues de journaux devra être préparé pour cela.
la source
Je ne pense pas qu'il existe un moyen propre de le faire sans recompiler votre noyau avec CONFIG_PROC_EVENTS et / ou CONFIG_KPROBES (bien que j'aimerais savoir s'il existe un moyen de le faire, j'ai donc voté pour votre question).
J'avais une idée d'utiliser iwatch / inotify pour la création de répertoires dans / proc mais cela ne semblait pas fonctionner, ni auditctl. Il semble que votre meilleur choix, bien que sale, soit d'analyser continuellement ps pour un changement à partir d'un script. Le code Perl suivant le ferait, mais serait enclin à en manquer et à ignorer
ps
(car il se déclencherait autrement):la source
La meilleure façon de penser serait de construire à partir de la bibliothèque snoopy . snoopy est une très petite bibliothèque partagée qui est connectée
/etc/ld.so.preload
et entoure lesexecve()
appels système. Il est configurable pour enregistrer tousexec()
ceux ou simplement ceux de la racine. Dans son incarnation actuelle, snoopy se connecte à syslog chaque fois qu'un événement correspondant (un appel systèmeexecve()
) se produit. Ce n'est pas un gros programme (quelques centaines de lignes de code, au plus), et pourrait être modifié sans trop de difficulté pour exécuter un script au lieu (ou en plus) de consigner l'activité. Snoopy est écrit en C.Quelques points à noter:
la source