উত্তর:
এটি নিরীক্ষণের জন্য নিখুঁত কাজ বলে মনে হচ্ছে। আধুনিক রেডহ্যাট ভিত্তিক সিস্টেমগুলিতে একটি ডিফল্ট পরিষেবা অডিট চালানোর পরে আপনি একটি নিয়ম তৈরি করতে পারেন যা কার্যকর করে আপনি যা চান ঠিক তা করবে
auditctl -a task,always -F uid=0
এই কমান্ডটি ভঙ্গ করে ম্যান পৃষ্ঠার অতিরিক্ত ব্যবহার করে আমরা দেখতে পাই যে:
-a list,action task Add a rule to the per task list. This rule list is used only at the time a task is created -- when fork() or clone() are called by the parent task. When using this list, you should only use fields that are known at task creation time, such as the uid, gid, etc. always Allocate an audit context, always fill it in at syscall entry time, and always write out a record at syscall exit time.
যখনই একটি কাঁটাচামচ বা ক্লোন সিস্টেম কল প্রস্থান করে তখনই এই ক্রিয়াটির জন্য সর্বদা রেকর্ড লিখুন।
চূড়ান্ত বিকল্পটি ফিল্টার স্ট্রিং হিসাবে বিবেচনা করা যেতে পারে, আমাদের ব্যবহারে -F uid=0
প্রক্রিয়া মালিকের uID 0 হয় এমন ক্ষেত্রে কেবল আমাদের সীমাবদ্ধ করে।
মনে রাখবেন যে নিরীক্ষণটি সঠিকভাবে কনফিগার
-a task,always -F uid=0
করা হয়েছে এবং আপনার বিতরণের জন্য প্রাসঙ্গিক ফাইলটিতে নিয়মটি যুক্ত করে এই নিয়মটি রান সময়ে চালানো যেতে পারে likely/etc/audit/audit.rules
কেবল মনে রাখবেন যে এটি বেশ ডাঙ শোরগোল হবে, এবং আপনার লগ রিভিউগুলি যার জন্য করছেন এটির জন্য প্রস্তুত থাকা প্রয়োজন।
CONFIG_PROC_EVENTS এবং / অথবা CONFIG_KPROBES দিয়ে আপনার কার্নেলটি পুনরায় সংশোধন না করে এটি করার একটি পরিষ্কার উপায় নেই বলে আমি মনে করি না (যদিও আমি এটির করার কোনও উপায় আছে কিনা তা জানতে আগ্রহী তাই আমি আপনার প্রশ্নকে সমর্থন করেছি)।
আমার / ডিরেক্টরিতে ডিরেক্টরি তৈরির জন্য আইওয়াচ / ইনোটিফাই ব্যবহার করার ধারণা ছিল তবে এটি কাজ করে না বলে মনে হয় না, নিরীক্ষাও হয়নি। দেখে মনে হচ্ছে এটি আপনার সেরা পছন্দ, নোংরা হলেও, কোনও স্ক্রিপ্ট থেকে পরিবর্তনের জন্য নিয়মিতভাবে পার্স করা। নিম্নলিখিত পার্ল কোড এটি করবে, যদিও কিছু মিস করার এবং উপেক্ষা করার প্রবণতা ছিল ps
(কারণ এটি অন্যথায় নিজেকে ট্রিগার করবে):
perl -e 'my %pids; while(1) { my @pids = `ps -U root -u root`; foreach (@pids) { next if /ps$/; ($pid) = /^\s*(\d+)\D/; if (!$pids{$pid}) { $pids{$pid}++; print "Process $pid created (" . `cat /proc/$pid/cmdline` . ")\n"; } } }
আমি ভাবতে পারি সবচেয়ে ভাল উপায় হ'ল স্নুপি গ্রন্থাগারটি বন্ধ করা । স্নোপি একটি খুব ছোট শেয়ার্ড লাইব্রেরি যা সিস্টেমে কল হয়ে যায় /etc/ld.so.preload
এবং execve()
calls এটি সমস্ত exec()
, বা মূল থেকে কেবল লগ করার জন্য কনফিগারযোগ্য । বর্তমান অবতারে, প্রতিবার কোনও ম্যাচিং ইভেন্ট (সিস্কেল টু execve()
) সংঘটিত হওয়ার সময় স্নিপি লগইন করে ys এটি কোনও বৃহত্তর প্রোগ্রাম নয় (বেশিরভাগ কয়েক শতাধিক কোডের লাইন, বেশিরভাগ), এবং ক্রিয়াকলাপটি লগইনের পরিবর্তে (বা অতিরিক্ত হিসাবে) কোনও স্ক্রিপ্ট সম্পাদন করতে এত অসুবিধা ছাড়াই সংশোধন করা যেতে পারে। স্নোপি সি তে লেখা আছে in
কয়েকটি বিষয় লক্ষণীয়: