44 votes

Déterminer le processus qui modifie un fichier

J'essaie de trouver un moyen fiable de savoir quel processus sur ma machine est en train de modifier un fichier de configuration ( /etc/hosts pour être précis).

Je sais que je peux utiliser lsof /etc/hosts pour savoir quels processus ont actuellement le fichier ouvert, mais cela ne sert à rien car le processus est manifestement en train d'ouvrir le fichier, d'y écrire, puis de le refermer.

J'ai également consulté lsof (-r), mais elle ne semble aller qu'une fois par seconde, ce qui ne permet probablement pas de capturer l'écriture en cours.

Je connais quelques outils pour surveiller les modifications du système de fichiers, mais dans ce cas, je veux savoir quel processus est responsable, ce qui signifie qu'il faut le prendre sur le fait.

67voto

user9517 Points 113163

Vous pouvez utiliser l'audit pour le vérifier. Si ce n'est pas déjà le cas, installez et activez l'audit pour votre système d'exploitation.

mettre en place 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 et utilisez ausearch pour voir ce qui est enregistré.

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

Vous obtiendrez de nombreux résultats, par exemple


> time->Wed Oct 12 09:34:07 2011 type=PATH
> msg=audit(1318408447.180:870): item=0 name="/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="/home/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 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=123 
> comm="touch" **exe="/bin/touch"** subj=user_u:system_r:unconfined_t:s0
> key="hosts-file"

Dans ce cas, j'ai utilisé la commande touch pour modifier l'horodatage du fichier dont le pid était 7294 et le ppid 7259 (mon Shell).

1voto

Alex nash Points 1

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

0voto

Dragos Points 351

Vous pouvez également utiliser inotify-tools :

  inotifywait -mq -e open -e modify /etc/hosts

-1voto

krad Points 160

Il est probablement préférable d'utiliser quelque chose comme incron

http://inotify.aiken.cz/?section=incron&page=about&lang=en

vous pouvez alors faire en sorte qu'il déclenche un script pour effectuer une sorte de diags

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X