जवाबों:
यह ऑडिट के लिए एक आदर्श नौकरी की तरह लगता है। एक बार जब आपके पास ऑडिट चल रहा हो, तो आधुनिक रेडहैट आधारित प्रणालियों पर एक डिफ़ॉल्ट सेवा, आप एक नियम को तैयार कर सकते हैं, जिसे आप प्रस्तुत करके वास्तव में करेंगे
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
को आपके वितरण के लिए प्रासंगिक फ़ाइल में जोड़ रहा है , सबसे अधिक संभावना है।/etc/audit/audit.rules
बस इस बात का ध्यान रखें कि यह बहुत ख़तरनाक शोरगुल होगा, और जिसे करने के लिए आपके लॉग रिव्यू को तैयार करना होगा।
मुझे नहीं लगता कि CONFIG_PROC_EVENTS और / या CONFIG_KPROBES के साथ अपने कर्नेल को फिर से देखे बिना ऐसा करने का एक साफ तरीका है (हालांकि मुझे यह जानने में अच्छा लगेगा कि क्या ऐसा करने का कोई तरीका है, इसलिए मैंने आपके प्रश्न का मूल्यांकन किया है)।
मुझे निर्देशिका के अंदर / निर्माण के लिए iwatch / inify का उपयोग करने का विचार था, लेकिन यह काम नहीं करता था, न ही ऑडिटक्टल। यह आपकी सबसे अच्छी पसंद की तरह दिखता है, हालांकि गंदा है, लगातार स्क्रिप्ट से बदलाव के लिए ps को लगातार पार्स करना है। निम्नलिखित पर्ल कोड यह करेगा, हालांकि कुछ को याद करने और अनदेखा करने की संभावना होगी 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"; } } }
सबसे अच्छा तरीका है कि मैं snoopy पुस्तकालय का निर्माण करने के बारे में सोच सकता हूं । स्नूपॉपी एक बहुत छोटी साझा लाइब्रेरी है जो सिस्टम कॉल के /etc/ld.so.preload
आसपास हुक और लपेट जाती execve()
है। यह सभी को लॉग करने के लिए exec()
या बस रूट से उन लोगों के लिए विन्यास योग्य है । यह वर्तमान अवतार में, स्नोपी हर बार एक मिलान घटना (एक syscall execve()
) होता है syslog करने के लिए लॉग करता है। हालांकि यह एक बड़ा कार्यक्रम नहीं है (कोड की एक दो पंक्तियाँ, अधिकतम पर), और गतिविधि को लॉग करने (या इसके अलावा) के बजाय एक स्क्रिप्ट को निष्पादित करने के लिए बहुत कठिनाई के बिना संशोधित किया जा सकता है। Snoopy C में लिखा गया है।
ध्यान देने योग्य कुछ बातें: