Hangi sürecin bir dosyayı değiştirdiğini öğrenin


35

Makinemde hangi işlemin bir yapılandırma dosyasını değiştirdiğini ( /etc/hostsbelirli olması gerektiğini) bulmanın güvenilir bir yolunu bulmaya çalışıyorum .

lsof /etc/hostsDosyada şu anda hangi işlemlerin açık olduğunu bulmak için kullanabileceğimi biliyorum , ancak bu işlem işlemin açıkça dosyayı açması, yazması ve sonra tekrar kapatması nedeniyle yardımcı olmuyor.

Ayrıca lsof'yineleme' seçeneğine de baktım (-r), fakat sadece saniyede bir kez olduğu kadar hızlı gözüküyor, bu muhtemelen devam eden yazıyı asla yakalayamayacak.

Dosya sistemindeki değişiklikleri izlemek için birkaç araç biliyorum, ancak bu durumda hangi işlemin sorumlu olduğunu bilmek istiyorum, bu da eylemde yakalamak anlamına gelir.

Yanıtlar:


52

Bunu bulmak için denetim kullanabilirsiniz. Henüz mevcut değilse, dağıtımınız için denetimi kurun ve etkinleştirin.

/ etc / hosts dosyasına bir denetim izleme ayarlayın

/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.

Hosts dosyası değişinceye kadar bekleyin ve sonra ne kaydedildiğini görmek için ausearch kullanın

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

Çıktı yığınları elde edersiniz, örneğin


saat-> Çar 12 Ekim 09:34:07 2011 type = PATH msg = denetim (1318408447.180: 870): item = 0 name = "/ etc / hosts" inode = 2211062 dev = fd: 00 modu = 0100644 ouid = 0 ogid = 0 rdev = 00: 00 obj = system_u: object_r: etc_t: s0 türü = CWD msg = denetim (1318408447.180: 870): cwd = "/ ev / iain" türü = SYSCALL msg = denetim (1318408447.180: 870): arch = c000003e syscall = 2 başarı = evet exit = 0 a0 = 7fff73641c4f a1 = 941 a2 = 1b6 a3 = 3e7075310c öğe = 1 ppid = 7259 pid = 7294 au id = 1001 uid = 0 gid = 0 abid = 0 suid = 0 fid = 0 suid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts0 ses = 123 comm = "dokunma" exe = "/ bin / dokunma" subj = user_u: system_r: unconfined_t: s0 key = "hosts-file"


Bu durumda timstamp dosyalarını değiştirmek için touch komutunu kullandım, bunun ücreti 7294'dü ve ppid'i 7259'du (kabuğum).


2
"Dağıtımınız için denetimi etkinleştirin" muhtemelen biraz genişletilmelidir. Sinir bozucu bir şekilde, yukarıdaki komutlar bana ne hata ne de sonuç verdi. "/ sbin / auditctl -e 1" de yardımcı olmadı. Kayıt yapmak için bir denetim deamon'u çalıştırmak yardımcı oldu - "/etc/init.d/auditd start" (kurallarımı silmiş olmasına rağmen tekrar girmem gerekti).
tobixen

Benim için işe yaramadı, ausearchher zaman döner<no matches>
m0skit0

1
Bazen bu işlemi yapmak için örneğin harici bir komut çağırıyorsa, değişikliği başlatan işlemi gerçekleştirmek için birden fazla denetim yapmanız gerekebilir. yani bir kullanıcı crontab girişinin neden sürekli sıfırlandığını bulmaya çalışıyordum. crontab komutu sorumluydu, ancak ppid'i kontrol ettiğimde kontrol ettiğimde, / usr / bin / crontab'ı da denetlemek zorunda kaldım, sonra crontab'a erişimin zaman damgasını crontab'ın denetlenen yürütmesine eşleştirip kontrol ettim. Bir orkestrasyon arka plan programının belirli bir kullanıcı cron yapılandırmasını zorladığını ortaya çıkardı.
Wil

3

Ayrıca inotify araçlarını da kullanabilirsiniz:

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

14
Auditd size istediğiniz bilgileri verebilir. Inotify'ın bunu yapmanıza izin vereceği varsayımını yapmak kolay olsa da - yapmaz, çünkü size değişiklik yapan işlem kimliğini vermez.
nesnelleştirildi

2

Çok fazla arama yaptıktan sonra çözümü buldum, sadece bu komutu kullanın: sudo fs_usage | grep [path_to_file]


2
bu sadece MacOS içindir ...
majick

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.