आप उपयोग कर सकते हैं auditd आपके सिस्टम पर चलने वाले कमांड को लॉग करने के लिए सबसिस्टम। यह कर्नेल में झुका हुआ है, इसलिए इसे निष्पादित होने वाली हर चीज को लॉग करना बहुत विश्वसनीय है
मेरे उदाहरण फेडोरा लिनक्स पर हैं, आपको अपने डिस्ट्रो के आधार पर छोटे अंतर मिल सकते हैं। ( auditd सबसिस्टम काफी जटिल है, इसलिए यह अधिकार प्राप्त करना मुश्किल हो सकता है।)
पहले जाँच लें कि आपके पास पहले से ऑडिट स्थापित है और चल रहा है, साथ:
$ systemctl status auditd.service
फिर आप जांच सकते हैं कि कौन से नियम लोड किए गए हैं। डिफ़ॉल्ट रूप से, फेडोरा पर, आपको मिलता है:
$ sudo auditctl -l
-a never,task
इसलिए हमें इस "कार्य" सूची (जो कि syscalls को दबाता है) को हटाने और लॉग को "निष्पादित" (जो syscall कमांड को निष्पादित करता है) को जोड़ने की आवश्यकता है।
$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve
एक बार ऐसा करने के बाद, सभी कमांड ऑडिट सिस्टम में लॉग इन हो जाएंगे।
तब आप इसे खोज सकते हैं, का उपयोग करके ausearch आदेश। उदाहरण के लिए, "gulp" कॉल करने वाले सभी निष्पादन को खोजने के लिए, आप इसका उपयोग कर सकते हैं:
$ sudo ausearch -c gulp
आउटपुट काफी वर्बोज़ होगा ... टाइप = EXECVE लाइन पर ध्यान दें। तर्कों को सूचीबद्ध किया जाएगा a0="gulp" a1="first_argument" a2="second_argument" ...
यदि आप एक उद्धृत स्ट्रिंग के बजाय संख्याओं का एक लंबा अनुक्रम प्राप्त करते हैं, तो उपयोग करें -i इसकी व्याख्या करने के लिए।
आपके सिस्टम पर चलने वाले प्रत्येक कमांड को लॉग करना बहुत महंगा हो सकता है और बहुत सारे डिस्कस्पेस का उपयोग कर सकता है! यह संभव है कि यह प्रदर्शन को भी प्रभावित करता है। यदि आप इन परिवर्तनों को पूर्ववत करना चाहते हैं, तो आप इस आदेश के साथ नियमों के डिफ़ॉल्ट सेट को पुनः लोड कर सकते हैं:
$ sudo augenrules --load
आप लॉगिंग नियम के लिए एक फ़िल्टर भी लगा सकते हैं, उदाहरण के लिए / usr / bin / gulp का केवल लॉग एक्जीक्यूटिव:
$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve
तो, शायद यह ओवरकिल है ... लेकिन यह उतना ही विश्वसनीय है जितना यह हो जाता है। मुझे आशा है कि आप अपना रास्ता खोज सकते हैं auditd सबसिस्टम और यह आपको वह जानकारी देता है जिसकी आपको तलाश है!