আমি ভিএম মাইগ্রেশন সম্পর্কিত একটি প্রকল্পে কাজ করছি। কখনও কখনও ভিএম চিত্রটি অদৃশ্য হয়ে যায় এবং আমি কেবল অপরাধী কে তা জানতে চাই। আমি সন্দেহজনক প্রক্রিয়াগুলিতে স্ট্রেস চেষ্টা করেছি কিন্তু কোনও ফলসই হয়নি।
আমি ভিএম মাইগ্রেশন সম্পর্কিত একটি প্রকল্পে কাজ করছি। কখনও কখনও ভিএম চিত্রটি অদৃশ্য হয়ে যায় এবং আমি কেবল অপরাধী কে তা জানতে চাই। আমি সন্দেহজনক প্রক্রিয়াগুলিতে স্ট্রেস চেষ্টা করেছি কিন্তু কোনও ফলসই হয়নি।
উত্তর:
শেষ পর্যন্ত আমি এখানে উত্তর খুঁজে পেয়েছি ।
লিনাক্স অডিট ডিমন কৌশলটি করবে।
sudo auditctl -w /path/to/somefile -p wra
এবং তারপর
ausearch -f /path/to/somefile -i
আপনি কোনও প্রক্রিয়াটির পিআইডি খুঁজে পেতে পারেন, এতে কিছু ফাইল খোলা রয়েছে lsof
।
একবার ফাইল বন্ধ হয়ে যায় এবং মুছে ফেলা হয়, আপনি সেই তথ্যটি পেতে পারেন না।
BTW। মনে রাখবেন, ফাইল মুছে ফেলা হচ্ছে এটি যে ডিরেক্টরিতে রয়েছে তার মধ্যে এটি অপারেশন, কোনও ফাইল নিজেই নয়।
উপরের উত্তরগুলি বার্ধক্যজনিত হওয়ায় আমাকে সিডডিগের সাথে বিকল্পটির পরামর্শ দিন । ফাইলটি মোছার প্রক্রিয়াগুলির 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)
এটির জিএনইউ সংস্করণে যা কল করে ), ফিল্টারটি উভয় সিস্টেমে মেলে।
sysdig
একটি প্রক্রিয়া ফাইল মুছে ফেলা হবে যখন চলমান উচিত। তারপরে যখন আমরা এই জাতীয় আদেশগুলি কার্যকর করি:
$ unlink /tmp/test
$ touch /tmp/test
$ rm /tmp/test
$ cd /tmp; touch test; rm test
এটি এমন আউটপুট প্রদর্শন করবে:
11380,unlink
11407,rm
11662,rm
ফিল্টারিং এবং আউটপুট সম্পর্কে ব্যাখ্যার জন্য দয়া করে সিসডিগ ব্যবহারকারী গাইড দেখুন ।
ফিল্টারটি বেশ লম্বা হওয়ায়, একটি ছিনছাটি লিখতে আমার পক্ষে সুবিধাজনক মনে হয়েছিল। এটি একটি লুয়া স্ক্রিপ্ট যা 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
অন্য টার্মিনালে টাইপ করছিলাম । আমি আমার উত্তরটি এটিকে পরিষ্কার করার জন্য সম্পাদনা করেছি।