Découvrez quel processus modifie un fichier

35

J'essaie de trouver un moyen fiable de déterminer quel processus de ma machine modifie un fichier de configuration ( /etc/hostspour être spécifique).

Je sais que je peux utiliser lsof /etc/hostspour savoir quels processus ont actuellement le fichier ouvert, mais cela n’aide en rien, car le processus est en train de l’ouvrir, de l’écrire, puis de le refermer.

J'ai aussi regardé l' lsofoption de répétition (-r), mais elle semble aller aussi vite qu'une fois par seconde, ce qui ne capturera probablement jamais l'écriture en cours.

Je connais quelques outils pour surveiller les modifications apportées au système de fichiers, mais dans ce cas, je veux savoir quel processus est responsable, ce qui signifie que cela doit être pris en compte dans la loi.

robbles
la source

Réponses:

53

Vous pouvez utiliser l'audit pour trouver ceci. S'il n'est pas déjà disponible, installez et activez l'audit pour votre distribution.

définir une surveillance d'audit sur / etc / hosts

/sbin/auditctl -w /etc/hosts -p war -k hosts-file

-w watch /etc/hosts
-p warx watch for write, attribute change, execute or read events
-k hosts-file is a search key.

Attendez que le fichier hosts change, puis utilisez ausearch pour voir ce qui est enregistré.

/sbin/ausearch -f /etc/hosts | more

Vous aurez des masses de sortie par exemple


heure-> mer. 12 oct. 09:34:07 2011 type = CHEMIN msg = audit (1318408447.180: 870): item = 0 nom = "/ etc / hosts" inode = 2211062 dev = fd: 00 mode = 0100644 ouid = 0 ogid = 0 rdev = 00: 00 obj = system_u: object_r: etc_t: s0 type = CWD msg = audit (1318408447.180: 870): cwd = "/ accueil / iain" type = SYSCALL msg = audit (1318408447.180: 870): arch = c000003e syscall = 2 success = yes exit = 0 a0 = 7fff73641c4f a1 = 941 a2 = 1b6 a3 = 3e7075310c items = 1 ppid = 7259 pid = 7294 au id = 1001 uid = 0 gid = 0 euid = 0 euid = 0 suid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts0 ses = 123 comm = "touch" exe = "/ bin / touch" subj = utilisateur_u: système_r: unconfined_t: s0 clé = "fichier-hôte"


Dans ce cas, j'ai utilisé la commande tactile pour changer le timstamp des fichiers. Son pid était de 7294 et son ppid de 7259 (mon shell).

user9517 prend en charge GoFundMonica
la source
2
L'option "Activer l'audit pour votre distribution" devrait probablement être un peu plus développée. Ennuis, les commandes ci-dessus ne me donnaient ni erreurs ni résultats. "/ sbin / auditctl -e 1" n'a pas non plus aidé. Exécuter un programme d’audit pour effectuer la journalisation a été utile - "/etc/init.d/auditd start" (bien que mes règles aient été supprimées, je devais donc les saisir à nouveau).
tobixen
N'a pas travaillé pour moi, ausearchrevient toujours<no matches>
m0skit0
1
Parfois, vous devrez peut-être définir plusieurs audits pour obtenir le processus qui a initié la modification si ce processus appelle par exemple une commande externe pour effectuer le travail correspondant. C'est-à-dire que j'essayais de savoir pourquoi une entrée crontab utilisateur était constamment réinitialisée. La commande crontab était responsable, mais au moment où j'ai vérifié le ppid, elle était sortie. J'ai donc dû vérifier / usr / bin / crontab, puis faire correspondre l'horodatage de l'accès à la crontab à l'exécution vérifiée de crontab, puis vérifier c'est ppid ... qui a révélé qu'un démon d'orchestration appliquait une configuration spécifique à l'utilisateur cron.
Wil
3

Vous pouvez également utiliser inotify-tools:

  inotifywait -mq -e open -e modify /etc/hosts
Dragos
la source
14
Auditd est en mesure de vous donner les informations que vous souhaitez. Même s'il est facile de supposer qu'inotify vous permettra de le faire, ce ne sera pas le cas, car cela ne vous donnera pas l'identificateur de processus qui a effectué la modification.
objectivé
2

Après de nombreuses recherches, j'ai trouvé la solution, utilisez cette commande: sudo fs_usage | grep [path_to_file]

treblam
la source
2
ceci est pour MacOS seulement ...
majick