Saya sedang mengerjakan proyek yang berkaitan dengan migrasi VM. Terkadang gambar VM akan hilang dan saya hanya ingin tahu siapa pelakunya. Saya mencoba strace pada proses yang mencurigakan tetapi tidak berhasil.
Saya sedang mengerjakan proyek yang berkaitan dengan migrasi VM. Terkadang gambar VM akan hilang dan saya hanya ingin tahu siapa pelakunya. Saya mencoba strace pada proses yang mencurigakan tetapi tidak berhasil.
Jawaban:
Akhirnya saya menemukan jawabannya di sini .
Daemon Audit Linux akan melakukan triknya.
sudo auditctl -w /path/to/somefile -p wra
lalu
ausearch -f /path/to/somefile -i
Anda dapat mengetahui PID suatu proses, yang menggunakan beberapa file terbuka lsof
.
Setelah file ditutup dan dihapus, Anda tidak dapat memperoleh informasi itu.
BTW. Perlu diingat, bahwa menghapus file adalah operasi pada direktori, bukan pada file itu sendiri.
Izinkan saya menyarankan alternatif dengan sysdig karena jawaban di atas sudah menua. Biarkan menampilkan pid
dan name
proses yang menghapus file /tmp/test
. Pertama kita membuat file dengan touch /tmp/test
. Kemudian kita mulai sysdig
dengan filter berikut:
$ sudo sysdig -p'%proc.pid,%proc.name' '(evt.type=unlinkat and (evt.arg.name=test or evt.arg.name=/tmp/test)) or (evt.type=unlink and evt.arg.path=/tmp/test)'
unlinkat(2)
membutuhkan or
filter jika jalur (mis. evt.arg.name
) mungkin relatif . Untuk menangani keduanya unlink
(panggilan mana unlink(2)
) dan rm
(panggilan mana unlinkat(2)
dalam versi GNU-nya), filter harus cocok dengan kedua syscall.
sysdig
harus berjalan ketika suatu proses menghapus file. Lalu ketika kita menjalankan perintah seperti itu:
$ unlink /tmp/test
$ touch /tmp/test
$ rm /tmp/test
$ cd /tmp; touch test; rm test
Ini akan menampilkan output seperti itu:
11380,unlink
11407,rm
11662,rm
Silakan merujuk ke panduan pengguna sysdig untuk penjelasan tentang pemfilteran dan keluaran.
Karena saringannya cukup panjang, saya merasa nyaman untuk menulis pahat. Ini adalah skrip lua yang dikaitkan dengan sysdig
perintah:
description = "displays processes that delete a file"
short_description = "spy file deletion"
category = "files"
args =
{
{
name = "path",
description = "the path of the file to monitor",
argtype = "string"
},
}
function on_set_arg(name, val)
path = val
return true
end
function on_init()
local filename = path
for i in string.gmatch(path, "[^/]+") do
filename = i
end
chisel.set_event_formatter("%proc.pid\t%proc.name")
chisel.set_filter(
"(evt.type=unlinkat and (evt.arg.name=" .. path .. " or \
evt.arg.name=" .. filename .. ")) or \
(evt.type=unlink and evt.arg.path=" .. path .. ")")
return true
end
Jangan ragu untuk berkomentar dan memperbaikinya. Anda dapat meletakkan skrip lua dalam spy_deletes.lua
file di dalam direktori dan mengeksekusi sysdig
di direktori ini untuk membuat pahat tersedia. Saat mengetik sudo sysdig -cl
Anda akan melihatnya sebagai:
Category: files
---------------
spy_deletes spy file deletion
Sekarang Anda bisa menyebutnya:
$ sudo sysdig -c spy_deletes /tmp/test
Dan dalam jenis terminal lain:
$ touch test; unlink test
$ touch test; unlink /tmp/test
$ touch test; rm test
$ touch test; rm /tmp/test
Ini akan menampilkan:
16025 unlink
16033 unlink
16041 rm
16049 rm
The unlinkat
Filter akan layak untuk menjadi lebih akurat dan hanya cocok dengan path absolut. Ini akan membutuhkan untuk mengambil fd dari direktori yang dilewati unlinkat(2)
.
rm /tmp/test
di terminal lain. Saya mengedit jawaban saya untuk membuatnya lebih jelas.