Hangi program veya komut dosyasının belirli bir dosyayı oluşturduğunu bulmak mümkün mü?


35

Giriş dizinimde aniden "client_state.xml", "lockfile" ve "time_stats_log" adlı üç dosya belirdi. Son ikisi boş. Oraya nasıl gittiklerini merak ediyorum. İlk defa olmuyor, ama geçen hafta haftalardı; Dosyaları sildim ve hiçbir şey kırılmadı veya şikayet etmedi. Rapor edilen zamanda ne yaptığımı düşünemedim stat $filename. Nereden geldiklerini bulabilmemin bir yolu var mı?

Alternatif olarak, dosyaların oluşturulması için ana dizini (alt dizinleri değil) izlemenin bir yolu var mı?


Birisinin bundan bahsedeceğinden emin olduğum için, inotify yok.
Kurt

Yanıtlar:


18

Hangi programın bir dosya oluşturduğunu belirlemenin bir yolu olduğuna inanmıyorum .

Kullanılacak alternatif soru için: edebilir dosya yeniden oluşturulması için olsa da, kullanarak seyretmek inotify. alt sistem inotifywaitiçin bir komut satırı arayüzüdür inotify; createAna dizininizdeki etkinlikleri aramasını söyleyebilirsiniz :

$ (sleep 5; touch ~/making-a-test-file) &
[1] 22526

$ inotifywait -e create ~/
Setting up watches.
Watches established.
/home/mmrozek/ CREATE making-a-test-file

Muhtemelen -milk olayı gördükten sonra çıkmamasını söyleyen (monitor) ile çalıştırmak istersiniz.


Nasıl alabilirim inotify? Takılı değil (çekirdek 2.6.34) ve yok /dev/inotify.
Kurt

1
@ Kurt Ne dağıtımı? Kendi çekirdeğini inşa edersen, CONFIG_INOTIFY_USER( Filesystems-> Inotify support for userspace). inotifywaitMuhtemelen adlı bir şeye benziyorinotify-tools
Michael Mrozek

@Michael, bu açık 11 SUSE. Asla bir çekirdek yapmadım; sadece 5 aydır Linux kullanıyor ve biraz göz korkutucu bir kavram. Ama ben bir öğretici veya başka bir şey için etrafa bakacağım.
Kurt

@ Kurt, dogbane'in cevabı seninle birlikte gelen çekirdek gelmezse daha kolay olabilir
Michael Mrozek

2
@Michael Aslında, biraz daha avlanıp araştırma yaptıktan sonra, inotify-toolspaketi içeren bir topluluk deposu ekledim , bu yüzden şimdi elimde inotifywait(ve inotifywatch) var. Test ettim ve işe yarıyor.
Kurt

22

Bir dosya sisteminde gerçekleşen her şeyi, LoggedFS üzerinden erişerek izleyebilirsiniz . Bu, bir dizin ağacındaki her erişimi kaydeden yığılmış bir dosya sistemidir .

loggedfs -l /var/tmp/$USER-home-fs.log ~

Bütün ana dizininizi kaydetmek, sisteminizi yavaşlatabilir. En azından katı filtreler içeren bir konfigürasyon dosyası yazmak isteyeceksiniz .

Kök erişiminiz varsa, Linux'ta, denetim alt sistemini, dosya sistemi erişimi de dahil olmak üzere çok sayıda şeyi kaydetmek için kullanabilirsiniz . auditdArka plan programının başlatıldığından emin olun , ardından ne yapmak istediğinizi yapılandırın auditctl. Kaydedilen her işlem /var/log/audit/audit.log(tipik dağıtımlarda) olarak kaydedilir . Belirli bir dosyayı izlemeye başlamak için:

auditctl -w /path/to/file

veya uzun biçimde

auditctl -a exit,always -F path=/path/to/file

Bir dizine ( -wveya ile -F dir=) bir saat koyarsanız , içindeki dosyalar ve alt dizinleri tekrarlı olarak izlenir.


BSD ayrıca Güvenlik Olay Denetimi ile bunu da destekliyor. freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit.html
Shawn J. Goff

4

Bir göz atmak isteyebilirsiniz auditd, bu paket güvenlik denetimi yapmanıza ve dosya sisteminde neyi değiştirdiğine dair birçok bilgi edinmenize izin verir.


Birden fazla kullanıcıya kabuk erişimi sağlayan bir sunucunuz varsa ve bireysel eylemler için bir miktar hesap verebilirlik sağlamanız gerekiyorsa, komut geçmişi günlüğüyle belirli kabuklar (bash ve tcsh gibi) oluşturabilirsiniz. < Timkennedy.net/2010/12/07/… > adresindeki kabuklara giriş hakkında bir blog yazısı yazdım . Kabuk günlüğü, gerçek olmayan bir denetim sisteminin yerine geçmez , çünkü etkileşimli olmayan mermiler tarafından çalıştırılan komutları (komut dosyaları veya programlar gibi) kaydetmez. Böyle bir ayrıntıyı elde etmek için gerçekten iyi bir denetim çözümüne ihtiyacınız var.
Tim Kennedy

1
@TimKennedy - Blog postanız artık gelmiyor.
slm

1
Üzgünüm. site saldırıya uğradı ve bir süre önce kaldı. yeni sayfa timkennedy.net/2010/12/logging-shell-commands-to-syslog-on.html
Tim Kennedy

3

Bunun eski bir soru olduğunu biliyorum, ancak birisinin yararlı bulması durumunda başka bir yaklaşım önereceğim. Aslında bunu, buna cevap verilmiş bir soruya cevap olarak göndermiştim.

Bir seçenek kullanmaktır sysdig: açık kaynaklı bir sistem izleme uygulaması. Kullanarak, bir dosyadaki etkinliği isme göre izleyebilirsiniz. Hangi işlemin bir dosya oluşturduğunu görmek istediğinizi varsayalım /tmp/example.txt:

# sysdig fd.name=/tmp/example.txt
567335 16:18:39.654437223 0 touch (5470) < openat fd=3(<f>/tmp/example.txt) dirfd=-100(AT_FDCWD) name=/tmp/example.txt flags=70(O_NONBLOCK|O_CREAT|O_WRONLY) mode=0666
567336 16:18:39.654438248 0 touch (5470) > dup fd=3(<f>/tmp/example.txt)
567337 16:18:39.654438592 0 touch (5470) < dup res=0(<f>/tmp/example.txt)
567338 16:18:39.654439629 0 touch (5470) > close fd=3(<f>/tmp/example.txt)
567339 16:18:39.654439764 0 touch (5470) < close res=0
567342 16:18:39.654441958 0 touch (5470) > close fd=0(<f>/tmp/example.txt)
567343 16:18:39.654442111 0 touch (5470) < close res=0

Bu çıktıdan, touchpid 5470 adlı bir işlemin dosyayı açtığını görebilirsiniz.

Daha fazla bilgi istiyorsanız, sistem çağrısı izlemesinin toplandığı "yakalama modunda" çalışabilirsiniz:

# sysdig -w /tmp/dumpfile.scap

Sonra dosyanın oluşturulmasını bekleyin, ardından durdurun sysdigve çalıştırın:

# csysdig -r /tmp/dumpfile.scap

Bu olanları keşfetmene izin verir. Düğmesine basıp <F2>seçebilir Files, <F4>dosya <F6>adını aramak için basabilir, sonra "kazmak" için basabilirsiniz (bu, yukarıdaki komuta benzer çıktılar gösterecektir). Bununla, dosyayı gerçekten oluşturan süreçle ilgili bilgileri bulmak için aynı yaklaşımı kullanabilirsiniz.

Daha çok çay içiyorsanız, GUI csysdigadı verilen bir sürümü sysdig-inspectvar.


veya belki de bir işlem bu dosyaya yazıp yazmadığını
rogerdpack

2

Buna sahip değilsiniz, inotifyböylece bir döngüdeki dosyayı kontrol eden bir komut dosyası yazabilirsiniz:

#!/bin/sh

while [ true ]; do                     # Run for as long as nessesary
  if [ -f /path/to/file ]; then        # If fileexists
    echo "Found file"                  # Notify and stop monitoring
    exit 0
  fi
  sleep 5                             # Else wait 5 secs
done

2
Bu, hangi programın yarattığını göstermez
OverCoder
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.