VM geçişiyle ilgili bir proje üzerinde çalışıyorum. Bazen VM görüntüsü kaybolacak ve sadece suçlunun kim olduğunu bilmek istiyorum. Şüpheli süreçler üzerindeki sıkıntıyı denedim ama işe yaramadı.
VM geçişiyle ilgili bir proje üzerinde çalışıyorum. Bazen VM görüntüsü kaybolacak ve sadece suçlunun kim olduğunu bilmek istiyorum. Şüpheli süreçler üzerindeki sıkıntıyı denedim ama işe yaramadı.
Yanıtlar:
Sonunda cevabı burada buldum .
Linux Denetim arka plan programı hile yapacak.
sudo auditctl -w /path/to/somefile -p wra
ve sonra
ausearch -f /path/to/somefile -i
Bazı dosyaları açık olan bir işlemin PID'sini bulabilirsiniz lsof
.
Dosya kapatılıp silindikten sonra bu bilgileri alamazsınız.
BTW. Bir dosyayı silmenin, dosyanın kendisinde değil, bulunduğu dizinde çalıştığını unutmayın.
Yukarıdaki cevaplar yaşlandığından sysdig ile bir alternatif önereyim . Görüntülemek Izin pid
ve name
dosyayı silin süreçlerin /tmp/test
. Önce dosyayı ile oluşturuyoruz touch /tmp/test
. Sonra sysdig
aşağıdaki filtreyle başlıyoruz :
$ 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)
yol (ör. ) göreli olabiliyorsa bir or
filtre gerektirir . İşlemek için hem (ki çağrılar ) ve (çağıran onun GNU versiyonunda), filtre her iki syscalls aynı olmalıdır.evt.arg.name
unlink
unlink(2)
rm
unlinkat(2)
sysdig
bir işlem dosyayı sildiğinde çalışıyor olmalıdır. Sonra bu tür komutları yürüttüğümüzde:
$ unlink /tmp/test
$ touch /tmp/test
$ rm /tmp/test
$ cd /tmp; touch test; rm test
Böyle bir çıktı görüntüler:
11380,unlink
11407,rm
11662,rm
Filtreleme ve çıktı hakkında açıklama için lütfen sysdig kullanıcı kılavuzuna bakın .
Filtre oldukça uzun olduğu için bir keski yazmayı uygun buldum. Bir sysdig
komutla ilişkili lua betiğidir :
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
Yorum yapmaktan ve geliştirmekten çekinmeyin. Lua komut spy_deletes.lua
dosyasını bir dizinin içindeki bir dosyaya koyabilir sysdig
ve keskiyi kullanılabilir hale getirmek için bu dizinde yürütebilirsiniz . Yazarken şöyle sudo sysdig -cl
göreceksiniz:
Category: files
---------------
spy_deletes spy file deletion
Şimdi onu arayabilirsiniz:
$ sudo sysdig -c spy_deletes /tmp/test
Ve başka bir terminal türünde:
$ touch test; unlink test
$ touch test; unlink /tmp/test
$ touch test; rm test
$ touch test; rm /tmp/test
Çıktı verecektir:
16025 unlink
16033 unlink
16041 rm
16049 rm
unlinkat
Filtre daha doğru ve sadece mutlak yolunu eşleşecek şekilde hak. Bu, geçirilen dizinin fd'sinin alınmasını gerektirir unlinkat(2)
.
rm /tmp/test
başka bir terminal. Cevabımı daha açık hale getirmek için düzenledim.