क्या किसी को रूट प्रक्रिया स्पॉन की निगरानी करने का एक सरल तरीका पता है


13

मैं एक स्क्रिप्ट को निष्पादित करना चाहता हूं जब एक नई रूट प्रक्रिया सामने आती है। (लिनक्स पर) मैं बस कैसे कर सकते हैं?

धन्यवाद


यह एक दिलचस्प सवाल है, लेकिन क्या इसके लिए एक व्यावहारिक अनुप्रयोग है? मैं अपने दिमाग को मिटा रहा हूं और मैं एक रिक्त चित्र बना रहा हूं ...
स्टीवन मंडे

जवाबों:


9

यह ऑडिट के लिए एक आदर्श नौकरी की तरह लगता है। एक बार जब आपके पास ऑडिट चल रहा हो, तो आधुनिक रेडहैट आधारित प्रणालियों पर एक डिफ़ॉल्ट सेवा, आप एक नियम को तैयार कर सकते हैं, जिसे आप प्रस्तुत करके वास्तव में करेंगे

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

बस इस बात का ध्यान रखें कि यह बहुत ख़तरनाक शोरगुल होगा, और जिसे करने के लिए आपके लॉग रिव्यू को तैयार करना होगा।


दरअसल, अब जब मैंने इसे लिखा है, तो मुझे अचानक एहसास हुआ कि मैंने शीर्षक में प्रश्न का उत्तर दिया है, न कि प्रश्न में प्रश्न। मुझे आशा है कि यह अभी भी उपयोगी है।
स्कॉट पैक

आप कभी-कभी pid = 0 और कभी-कभी uid = 0 का उपयोग क्यों कर रहे हैं
Dakusan

@ ददाकुसन ज्यादातर इसलिए कि मुझे एक संपादक की जरूरत है। अभी तय किया है।
स्कॉट पैक

2

मुझे नहीं लगता कि 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"; } } }

आपको अपने कोड के अंत में एक भी उद्धरण याद आ रहा है। इसे संपादित नहीं किया जा सकता क्योंकि SO को बदलने के लिए कम से कम 6 वर्णों की आवश्यकता होती है। इसके अलावा, सभी उपयोगकर्ताओं के लिए, "यू-रूट" के बजाय "-ax" का उपयोग करें
डाकुसन

1

सबसे अच्छा तरीका है कि मैं snoopy पुस्तकालय का निर्माण करने के बारे में सोच सकता हूं । स्नूपॉपी एक बहुत छोटी साझा लाइब्रेरी है जो सिस्टम कॉल के /etc/ld.so.preloadआसपास हुक और लपेट जाती execve()है। यह सभी को लॉग करने के लिए exec()या बस रूट से उन लोगों के लिए विन्यास योग्य है । यह वर्तमान अवतार में, स्नोपी हर बार एक मिलान घटना (एक syscall execve()) होता है syslog करने के लिए लॉग करता है। हालांकि यह एक बड़ा कार्यक्रम नहीं है (कोड की एक दो पंक्तियाँ, अधिकतम पर), और गतिविधि को लॉग करने (या इसके अलावा) के बजाय एक स्क्रिप्ट को निष्पादित करने के लिए बहुत कठिनाई के बिना संशोधित किया जा सकता है। Snoopy C में लिखा गया है।

ध्यान देने योग्य कुछ बातें:

  • यदि आप हर बार एक स्क्रिप्ट चलाते हैं, तो एक रूट प्रक्रिया शुरू की जाती है, आपकी स्क्रिप्ट एक रूट प्रक्रिया होगी, जिसे स्क्रिप्ट को फिर से स्पॉन करने की आवश्यकता होगी, जो एक और रूट प्रक्रिया होगी, आदि सावधान रहें कि आप लूप में नहीं आते हैं। वहाँ।
  • एक ठेठ लिनक्स बॉक्स पर, कई प्रक्रियाएं होती हैं जो रूट के रूप में चलती हैं, और नियमित रूप से पैदा होती हैं। उदाहरण के लिए, क्रोन सिस्टम क्रोनोजर को हर मिनट या कुछ मिनटों में रूट कर सकता है। यदि आप इसे तब देखना चाहते हैं जब कोई उपयोगकर्ता रूट के रूप में लॉग इन करता है, तो यह अधिक काम होगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.