Apakah mungkin untuk mengetahui program atau skrip apa yang membuat file yang diberikan?

35

Tiga file tiba-tiba muncul di direktori home saya, yang disebut "client_state.xml", "lockfile", dan "time_stats_log". Dua yang terakhir kosong. Saya ingin tahu bagaimana mereka sampai di sana. Ini bukan pertama kalinya hal itu terjadi, tetapi yang terakhir adalah beberapa minggu yang lalu; Saya menghapus file dan tidak ada yang rusak atau mengeluh. Saya belum bisa memikirkan apa yang saya lakukan pada saat itu dilaporkan oleh stat $filename. Apakah ada cara saya bisa mengetahui dari mana mereka berasal?

Atau, apakah ada cara untuk memantau direktori home (tetapi tidak sub-direktori) untuk pembuatan file?

Serigala
sumber
Karena saya yakin seseorang akan menyebutkannya, saya tidak punya izin.
Wolf

Jawaban:

18

Saya tidak percaya ada cara untuk menentukan program mana yang membuat file.

Untuk pertanyaan alternatif Anda: Anda dapat menonton file yang akan dibuat kembali, menggunakan inotify. inotifywaitadalah antarmuka baris perintah untukinotify subsistem; Anda dapat memerintahkannya untuk mencari createacara di direktori home Anda:

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

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

Anda mungkin ingin menjalankannya dengan -m(monitor), yang memberitahukannya untuk tidak keluar setelah melihat acara pertama

Michael Mrozek
sumber
Bagaimana saya mendapatkan inotify? Ini tidak diinstal (kernel 2.6.34) dan tidak ada /dev/inotify.
Wolf
1
@ Serigala Distro apa? Jika Anda membangun kernel Anda sendiri, ini CONFIG_INOTIFY_USER( Filesystems-> Inotify support for userspace). inotifywaitmungkin dalam paket bernama sesuatu sepertiinotify-tools
Michael Mrozek
@Michael, ini openSUSE 11.3. Saya tidak pernah membangun kernel; hanya menggunakan Linux sekitar 5 bulan dan ini sedikit konsep yang menakutkan. Tapi saya akan mencari-cari tutorial atau sesuatu.
Wolf
@ Wolf Yah, jawaban dogbane mungkin lebih mudah jika kernel yang Anda miliki tidak ikut
Michael Mrozek
2
@Michael Sebenarnya, setelah sedikit lebih banyak berburu dan penelitian, saya menambahkan repositori komunitas yang ternyata berisi inotify-toolspaket, jadi sekarang saya punya inotifywait(dan inotifywatch). Saya mengujinya dan tampaknya berhasil.
Wolf
22

Anda dapat menonton semua yang terjadi pada sistem file dengan mengaksesnya melalui LoggedFS . Ini adalah sistem file bertumpuk yang mencatat setiap akses di pohon direktori.

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

Log seluruh direktori rumah Anda mungkin memperlambat sistem Anda. Anda setidaknya ingin menulis file konfigurasi dengan filter yang ketat.

Jika Anda memiliki akses root, di Linux, Anda dapat menggunakan subsistem audit untuk mencatat banyak hal, termasuk akses filesystem. Pastikan auditddaemon dimulai, kemudian konfigurasikan dengan apa Anda ingin login auditctl. Setiap operasi yang dicatat dicatat dalam /var/log/audit/audit.log(pada distribusi tipikal). Untuk mulai menonton file tertentu:

auditctl -w /path/to/file

atau dalam bentuk panjang

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

Jika Anda menaruh arloji di direktori (dengan -watau -F dir=), file di dalamnya dan subdirektori secara berulang juga ditonton.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
BSD juga mendukung ini melalui Audit Acara Keamanan. freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit.html
Shawn J. Goff
4

Anda mungkin ingin melihatnya auditd, paket ini memungkinkan Anda untuk melakukan audit keamanan, dan mendapatkan banyak informasi tentang siapa yang mengubah apa yang ada di sistem file.

Lutzky
sumber
jika Anda memiliki server yang menyediakan akses shell untuk banyak pengguna, dan perlu memberikan beberapa tingkat pertanggungjawaban untuk tindakan individu, Anda dapat membangun shell tertentu (seperti bash dan tcsh) dengan pencatatan riwayat perintah. Saya menulis posting blog tentang masuk shell di < timkennedy.net/2010/12/07/… >. Shell logging bukan pengganti sistem audit nyata, karena tidak akan mencatat perintah yang dijalankan oleh shell non-interaktif (seperti skrip atau program). Untuk mendapatkan granularity semacam itu Anda benar-benar membutuhkan solusi audit yang baik.
Tim Kennedy
1
@TimKennedy - posting blog Anda tidak muncul lagi.
slm
1
Maaf. situs diretas, dan dimatikan untuk sementara waktu. halaman baru ada di timkennedy.net/2010/12/logging-shell-commands-to-syslog-on.html
Tim Kennedy
3

Saya tahu ini adalah pertanyaan lama, tetapi saya akan menyarankan pendekatan lain untuk berjaga-jaga seandainya seseorang menemukan itu berguna. Saya awalnya memposting ini sebagai jawaban untuk pertanyaan yang ditipu untuk yang satu ini.

Satu pilihan adalah menggunakan sysdig: aplikasi pemantauan sistem sumber terbuka. Dengan menggunakannya, Anda dapat memantau aktivitas pada file dengan nama. Misalkan Anda ingin melihat proses apa yang membuat file bernama /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

Dari output itu, Anda dapat melihat proses yang dinamai touch dengan pid 5470 membuka file.

Jika Anda menginginkan informasi lebih lanjut, Anda dapat menjalankan dalam "mode pengambilan" tempat jejak panggilan sistem dikumpulkan:

# sysdig -w /tmp/dumpfile.scap

Kemudian tunggu file dibuat, lalu berhenti sysdigdan jalankan:

# csysdig -r /tmp/dumpfile.scap

Itu akan membiarkan Anda menjelajahi semua yang terjadi. Anda dapat menekan <F2>dan memilih Files, tekan <F4>untuk mencari nama file, lalu tekan<F6> untuk "menggali" (yang akan menunjukkan kepada Anda keluaran yang mirip dengan perintah di atas). Dengan itu, Anda kemudian dapat menggunakan pendekatan yang sama untuk menemukan informasi tentang proses yang sebenarnya membuat file.

Ada versi GUI yang csysdigdisebut sysdig-inspect, jika itu lebih dari secangkir teh Anda.

Andy Dalton
sumber
atau mungkin loop sibuk yang terus-menerus berjalan mencoba untuk melihat apakah / ketika suatu proses menulis ke file itu ... unix.stackexchange.com/a/13782/8337
rogerdpack
2

Anda belum dapat inotifysehingga Anda dapat menulis skrip yang memeriksa file dalam satu lingkaran:

#!/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
dogbane
sumber
2
Ini tidak menunjukkan program apa yang membuatnya
OverCoder