मैं VM प्रवास से संबंधित परियोजना पर काम कर रहा हूं। कभी-कभी वीएम छवि गायब हो जाएगी और मैं सिर्फ यह जानना चाहता हूं कि अपराधी कौन है। मैंने संदिग्ध प्रक्रियाओं पर रोक लगाने की कोशिश की लेकिन कोई फायदा नहीं हुआ।
मैं VM प्रवास से संबंधित परियोजना पर काम कर रहा हूं। कभी-कभी वीएम छवि गायब हो जाएगी और मैं सिर्फ यह जानना चाहता हूं कि अपराधी कौन है। मैंने संदिग्ध प्रक्रियाओं पर रोक लगाने की कोशिश की लेकिन कोई फायदा नहीं हुआ।
जवाबों:
अंत में मुझे यहाँ उत्तर मिल गया ।
लिनक्स ऑडिट डेमॉन ट्रिक करेगा।
sudo auditctl -w /path/to/somefile -p wra
और फिर
ausearch -f /path/to/somefile -i
आप एक प्रक्रिया के पीआईडी का पता लगा सकते हैं, जिसमें कुछ फ़ाइल का उपयोग करके खुला है lsof
।
एक बार फ़ाइल बंद और हटा दी गई है, तो आपको वह जानकारी नहीं मिल सकती है।
Btw। ध्यान रखें, कि फ़ाइल हटाना उस निर्देशिका में ऑपरेशन है जो किसी फ़ाइल में नहीं है।
मुझे ssdig के साथ एक विकल्प सुझाने दें क्योंकि उपरोक्त उत्तर उम्र बढ़ने के हैं। आज्ञा देना प्रदर्शित pid
और name
प्रक्रियाओं है कि फ़ाइल को हटाने की /tmp/test
। सबसे पहले हम फाइल बनाते हैं touch /tmp/test
। फिर हम sysdig
निम्नलिखित फिल्टर से शुरू करते हैं:
$ 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)
एक की आवश्यकता है or
फिल्टर करता है, तो पथ (उदाहरण के लिए evt.arg.name
) हो सकता है रिश्तेदार । दोनों unlink
(जो कॉल करता है unlink(2)
) और rm
(जो unlinkat(2)
इसके GNU संस्करण में कॉल करता है ) को संभालने के लिए , फ़िल्टर को दोनों syscalls से मेल खाना चाहिए।
sysdig
जब कोई प्रक्रिया फ़ाइल को हटाती है तो उसे चलाना चाहिए। तब जब हम ऐसी आज्ञाओं को क्रियान्वित करते हैं:
$ unlink /tmp/test
$ touch /tmp/test
$ rm /tmp/test
$ cd /tmp; touch test; rm test
यह ऐसे आउटपुट को प्रदर्शित करेगा:
11380,unlink
11407,rm
11662,rm
कृपया फ़िल्टरिंग और आउटपुट के बारे में स्पष्टीकरण के लिए sysdig उपयोगकर्ता मार्गदर्शिका देखें ।
चूंकि फ़िल्टर बहुत लंबा है, इसलिए मुझे छेनी लिखना सुविधाजनक लगा। यह एक लुआ स्क्रिप्ट है जो एक sysdig
कमांड से जुड़ी है :
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
बेझिझक टिप्पणी करें और इसे सुधारें। आप spy_deletes.lua
एक निर्देशिका के अंदर एक फ़ाइल में लुआ स्क्रिप्ट रख सकते हैं और sysdig
इस निर्देशिका में निष्पादित कर सकते हैं ताकि छेनी उपलब्ध हो सके। टाइप करते समय sudo sysdig -cl
आप इसे इस प्रकार देखेंगे:
Category: files
---------------
spy_deletes spy file deletion
अब आप इसे कॉल कर सकते हैं:
$ sudo sysdig -c spy_deletes /tmp/test
और दूसरे टर्मिनल प्रकार में:
$ touch test; unlink test
$ touch test; unlink /tmp/test
$ touch test; rm test
$ touch test; rm /tmp/test
यह उत्पादन होगा:
16025 unlink
16033 unlink
16041 rm
16049 rm
unlinkat
फिल्टर और अधिक सटीक होना करने के लिए और केवल निरपेक्ष पथ से मेल खाते हैं लायक होगा। इसके लिए पारित निर्देशिका की fd को पुनः प्राप्त करना होगा unlinkat(2)
।
rm /tmp/test
दूसरे टर्मिनल में टाइप कर रहा था । मैंने इसे स्पष्ट करने के लिए अपने उत्तर को संपादित किया।