Je voudrais obtenir un journal de tous les processus qui sont lancés avec le moment où ils ont été lancés et les arguments avec lesquels ils ont été lancés. Est-ce possible sous Linux?
55
Votre point de départ devrait être audité.
Essayez quelque chose comme ça:
apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve
The audit system is disabled
Où puis-je l'activer?chmod 0750 /sbin/audispd
mais il ne fonctionne toujours pas (Debian Wheezy)Unable to set audit pid, exiting
mais je suppose que le vrai problème sera que le système fonctionne dans un conteneur LXCJ'avais besoin de le faire, sauf que (1) je n'avais pas besoin de temps et (2) que je m'intéressais uniquement aux processus démarrés par un processus donné, ainsi qu'à ses enfants et à ses descendants. De plus, dans l'environnement que j'utilisais, il n'était pas possible d'obtenir
auditd
ouaccton
, mais il y en avaitvalgrind
.Préfixez ce qui suit au processus d’intérêt sur la ligne de commande:
Les informations dont vous avez besoin seront dans la sortie du journal affichée sur STDERR.
la source
memcheck
outil. Pour désactiver l'outil et son lien avec le journal, et seulement imprimer la création de nouvelles commandes (en plus de la sortie habituelle de votre programme), utilisez la commande suivante à la place:valgrind --tool=none --trace-children=yes [command and args here]
. Chaque fois qu'un sous-processus est généré, Valgrind enregistre ensuite la commande complète, y compris les arguments qui lui ont été transmis.Vous pouvez utiliser snoopy pour cela.
Il est très simple à installer et depuis la version 2.x, il peut enregistrer des données arbitraires (arguments, variables d’environnement, cwd, etc.).
Divulgation: mainteneur Snoopy ici.
la source
Vous pouvez exécuter startmon et suivre sa sortie standard, Ctrl-C lorsque vous avez terminé. Voici comment compiler et exécuter startmon sur des distributions récentes dérivées de Red Hat (RHEL, Fedora, CentOS):
Sur Debian (et Ubuntu, etc.), la première ligne de ce qui précède devient:
Sinon, vous pouvez essayer le
execsnoop
script dans perf-tools, voir cette réponse . Par défaut, seuls les 8 premiers arguments sont affichés (9 avec le nom du programme); vous pouvez augmenter cela viaSi vous n'avez pas d'accès root au système, le mieux que vous puissiez faire est de continuer à interroger
/proc
et d'espérer qu'il capture tout (ce qui ne sera pas le cas), mais pour être complet, voici un script permettant de le faire (j'ai mis la suppression des doublons). pour simplifier la sortie) - bien que ce ne soit pas aussi efficace que de les suivre correctement avec l’une des méthodes ci-dessus, cela présente le léger avantage d’afficher sans équivoque des séparateurs entre les arguments de ligne de commande, au cas où vous auriez besoin de dire la différence entre les espaces à l' intérieur d' un argument et l'espace entre les arguments. Ce script est inefficace car il utilise le processeur (un de ses cœurs) 100% du temps.Vous pouvez aussi patcher
execsnoop
pour vous dire plus explicitement quel argument est lequel:grep -v sub.*arg < execsnoop > n && chmod +x n && mv n execsnoop
la source
CONFIG_FTRACE
et àCONFIG_KPROBES
traversbrendangregg/perf-tools
Sur une autre coquille:
Le premier shell affiche les données de format:
CONFIG_PROC_EVENTS
Exemple de session:
CONFIG_PROC_EVENTS
expose les événements à l'utilisateur via un socket netlink .proc_events.c adapté de: https://bewareofgeek.livejournal.com/2945.html
Upsatream GitHub .
Je ne pense toutefois pas que vous puissiez obtenir des données de processus telles que l'UID et les arguments de processus, car elles
exec_proc_event
contiennent si peu de données: https://github.com/torvalds/linux/blob/v4.16/include/uapi/linux/cn_proc .h # L80 Nous pourrions essayer de le lire immédiatement/proc
, mais il y a un risque que le processus soit terminé et qu'un autre ait pris son PID, de sorte qu'il ne serait pas fiable.Testé sous Ubuntu 17.10.
la source
Vous pouvez également utiliser atop pour afficher l'utilisation des ressources par processus. Ce sont des outils utiles pour enregistrer et analyser l'utilisation des ressources à chaque instant
la source
Vous pouvez essayer
cat ~/.bash_history
Il y asystem log viewer
, cela peut vous aider.la source
~/.bash_history
ne contient apparemment que des commandes que j'ai exécutées dans un terminal. Je recherche un journal de tous les programmes exécutés, par exemple lorsque je clique sur une icône pour ouvrir mon client de messagerie, gedit ou mon navigateur, et que ce dernier exécute lui-même un autre processus. La réponse de new123456 a fait l'affaire.history
est le moyen habituel d'accéder à cette information.