Sous Linux, je voudrais suivre les exécutables qui sont exécutés en mon nom, y compris toute la ligne de commande (en pratique, chaque exec * () fait comme mon propre utilisateur). Un programme que je ne contrôle pas est censé, pour gérer une tâche, exécuter le programme que je transmets, mais je veux m'assurer qu'il le fait et quelles options il utilise. Le programme que je ne contrôle pas est sournois et semble changer de comportement en fonction du nom du programme qu'il est censé exécuter pour la tâche, donc je ne peux pas passer un script shell qui consignerait les informations et invoquerait le réel programme.
Est-il possible pour moi d'être informé de tous les exec * () effectués en tant qu'utilisateur sur le système sous Linux, y compris la ligne de commande complète? À moins de courir ps
en boucle, c'est. Je préfère le faire directement sur le système sur lequel je travaille et ne pas avoir besoin d'un accès root, mais si nécessaire, je peux générer un système sur lequel j'ai un accès root, installer les programmes et y enquêter.
Utilisation d'Ubuntu 12.4 LTS.
la source
audit
donne la réponse , mais une `` ligne de commande entière '' dans le shell pourrait également affecter le processus enfant en utilisant les paramètres de redirection / canalisation et envvar ainsi que contenant des substitutions / extensions, des citations non significatives et l'espacement, et les structures de contrôle commedoa && dob
, et vous ne les obtiendrez pas.Réponses:
Vous devez configurer
auditd
pour enregistrer lesexecve
événements. Exemple sur RHEL5:J'ignore l'avertissement de voûte et il ne semble pas avoir d'importance, mais vous pouvez l'utiliser
-F arch=b64
ou-F arch=b32
le régler si vous le souhaitez.Le résultat de ce qui précède est:
C'est évidemment rapide et sale, mais c'est la base de la façon dont vous le faites. Ce que vous devez faire exactement dépend probablement beaucoup de ce que vous essayez de faire exactement. Vous pouvez réduire le flux d'audit à l'aide de divers filtres dans la
auditctl
commande, mais je ne connais aucune de ces informations, donc je ne sais pas quoi inclure. Si vous avez besoin de quelque chose de plus spécifique, je vous suggère de consulter la page de manuel ou de poster un commentaire sur cette réponse et je la mettrai à jour davantage.J'espère que cela vous poussera dans la bonne direction.
ÉDITER:
Puisque votre question implique de regarder un utilisateur particulier, je peux vous montrer que:
Identique à ce qui précède, mais uniquement
execve
par une personne exécutant avec l'ID utilisateur effectif de16777216
sera enregistré. Si vous devez spécifier laloginuid
valeur de l'utilisateur (sous lequel il s'est initialement connecté au système), vous devez filtrer à laauid
place:Les filtres AUID / loginuid seraient utiles par exemple si l'utilisateur fera un
su
ousudo
pour rooter. Dans cette situation, il y aura beaucoup de choses en cours d'exécution en tant que root, mais vous ne vous souciez que des choses qui ont été lancées par l'utilisateur en question.auditctl
vous permet également d'empiler des filtres afin que vous puissiez filtrer par les deuxeuid
etauid
:la source
Vous avez demandé quelque chose de simple. J'ai fait un exemple avec
mplayer
mais je suppose qu'il peut être adapté à d'autres situations:Comme vous pouvez le voir, c'est très simple: il analyse le premier argument, car c'est un fichier, un journal est créé dans le fichier central
$LOG
et concaténé dans un fichier (qui ont toujours le même nommplayer.log
dans le même répertoire).Ainsi, l'utilisateur peut obtenir le dernier film qu'il a lu sur chaque répertoire.
la source