क्या कमांड लाइन के तर्कों सहित निष्पादित सभी कमांड को लॉग इन करने का एक आसान तरीका है?


11

मैं यह जानने की कोशिश कर रहा हूं rrdtoolकि यह देखने के लिए कि वह जिस रास्ते को प्राप्त कर रहा है वह गलत है या नहीं।

मुझे पता है कि मैं एक शेल स्क्रिप्ट में निष्पादन योग्य को लपेट सकता हूं जो मापदंडों को लॉग करेगा, लेकिन मैं सोच रहा था कि क्या इसके लिए निगरानी करने के लिए एक और अधिक कर्नेल-विशिष्ट तरीका था, शायद एक फाइलसिस्टम कॉलबैक जो देखता है कि जब कोई विशेष / प्रोक / पीआईडी ​​/ एक्सई। किसी दिए गए बाइनरी से मेल खाता है?


क्या auditdकमांड-लाइन तर्कों को रिकॉर्ड करने के साथ-साथ कार्यक्रम चलाए जाने का एक तरीका है ? serverfault.com/questions/765179/…
नील

जवाबों:


16

हां, एक कर्नेल सुविधा है: ऑडिट सबसिस्टम। auditdडेमॉन प्रवेश करता है, और आदेश auditctlप्रवेश नियम सेट करता। आप कुछ फ़िल्टरिंग के साथ सभी कॉल को एक विशिष्ट सिस्टम ऑल में लॉग इन कर सकते हैं। यदि आप निष्पादित सभी आदेशों और उनके तर्कों को लॉग करना चाहते हैं, तो execveसिस्टम कॉल लॉग करें:

auditctl -a exit,always -S execve

किसी विशेष कार्यक्रम के आह्वान का विशेष रूप से पता लगाने के लिए, प्रोग्राम निष्पादन योग्य पर एक फ़िल्टर जोड़ें:

auditctl -a exit,always -S execve -F path=/usr/bin/rrdtool

लॉग में दिखाया गया है /var/log/audit.log, या जहाँ भी आपका वितरण उन्हें डालता है। ऑडिट सबसिस्टम को नियंत्रित करने के लिए आपको रूट होना चाहिए।

एक बार जांच करने के बाद, लॉगिंग नियम को हटाने के -dबजाय उसी कमांड लाइन का उपयोग करें -a, या auditctl -Dसभी ऑडिट नियमों को हटाने के लिए चलाएं ।

डिबगिंग उद्देश्यों के लिए, प्रोग्राम को एक रैपर स्क्रिप्ट द्वारा प्रतिस्थापित करने से आपको लॉग इन करने की सुविधा मिलती है जैसे कि पर्यावरण, मूल प्रक्रिया के बारे में जानकारी आदि।


क्यों -F path=/ust/bin/rrdtool? मैं कैसे rrdtoolसंबंधित सॉफ्टवेयर भी नहीं मिलता है।
ग्रीम

@Gememe प्रश्न में वर्णित समस्या एक आह्वान पर नज़र रख रही थी rrdtool। यदि आप सभी कार्यक्रमों के इनवॉइस लॉग करना चाहते हैं, तो -F path=…भाग को छोड़ें (आपको पाठ्यक्रम के बहुत सारे लॉग मिलेंगे)।
गिलेस एसओ- बुराई को रोकना '

सही ... प्रश्न की पहली पंक्ति। धन्यवाद।
ग्रीम

यह सब बहुत अच्छा है, लेकिन मैं इसे प्रारंभिक अवस्था में कॉन्फ़िगर कैसे रीसेट करूं? अन्यथा यह नए और नए लॉन्च किए गए कमांड के साथ लॉग भरना जारी रखेगा ... या क्या यह auditctlकमांड केवल रिबूट तक प्रभावी है?
रुस्लान

@Ruslan auditctlकेवल रिबूट तक जीवित रहता है, लेकिन यह एक अच्छा बिंदु है, फिर भी, मैंने अपने उत्तर को रिबूट किए बिना उन्हें हटाने के निर्देश जोड़े हैं।
गाइल्स 'एसओ- बुराई को रोकें'

6

आप स्नूपि का उपयोग कर सकते हैं ।

Snoopy अधिक हल्का समाधान है क्योंकि इसे कर्नेल सहयोग की आवश्यकता नहीं है। सभी की जरूरत है कि गतिशील लोडर (डीएल) है जो स्नूपी लाइब्रेरी को लोड करता है, जिसमें पथ निर्दिष्ट है /etc/ld.so.preload

प्रकटीकरण: मैं वर्तमान स्नूपी मेंटेनर हूं।


क्या किसी विशेष शेल से प्रत्यक्ष या अप्रत्यक्ष रूप से कमांड के लिए लॉगिंग करना संभव है?
आर.वी.

मुझे यकीन नहीं है कि मैं आपके प्रश्न को समझता हूं - क्या आप "शेल" का मतलब विशिष्ट प्रोग्राम के रूप में करते हैं जो शेल (बैश, डैश, जेडश आदि) के रूप में उपयोग किया जाता है, या आप का मतलब है कि आप सिर्फ विशिष्ट पीटीवाई लॉग इन करना चाहते हैं? स्नोपॉपी फ़िल्टरिंग ढांचा प्रदान करता है, लेकिन वर्तमान में केवल कुछ बुनियादी फ़िल्टर लागू होते हैं, सूची के लिए यहां देखें: लिंक । यदि आपके पास एक ठोस usecase है जो दूसरों के लिए लागू हो सकता है, तो कृपया सुविधा अनुरोध में बताएं, और, ओह, btw, पैच का स्वागत है :)
बोस्त्जन स्कुफ्का

मेरा मतलब सिर्फ एक विशिष्ट पीटीवाई था।
आरवी

पीटीवाई उपलब्ध एटीएम के लिए कोई विशिष्ट फिल्टर नहीं है। हालाँकि, आप सब कुछ लॉग इन करने के लिए स्नूपि का उपयोग कर सकते हैं, जिसमें पीटीवाई भी शामिल है, और फिर अपने सिसलॉग डेमॉन में फ़िल्टरिंग करें। मुझे नहीं पता कि आप किसका उपयोग कर रहे हैं, लेकिन syslog-ng (उदाहरण के लिए) regex मिलान, सकारात्मक या नकारात्मक कर सकते हैं।
बोस्जान स्कुफ्का

पक्का शुक्रिया! उपकरण और दृष्टिकोण सामान्य रूप से काफी उपयोगी है। मुझे आसानी से कुछ फ़िल्टरिंग मिल सकती है जो मुझे चाहिए।
आरवी

2

लिनक्स कर्नेल "ऑडिट" सबसिस्टम वही कर सकता है जो आपको चाहिए।

जैसे अगर आप ये कमांड चलाते हैं:

auditctl -a exit,always -F arch=b64 -S execve
auditctl -a exit,always -F arch=b32 -S execve

फिर प्रत्येक निष्पादन घटना लॉग की जाती है, और उसके आसपास बहुत सी जानकारी प्रदान की जाती है

उदाहरण के लिए यह मेरे चलने का आउटपुट है tail /var/log/audit/audit.log

exit=0 a0=7f0e4a21e987 a1=7f0e4a21e6b0 a2=7f0e4a21e808 a3=8 items=2 ppid=906 pid=928 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="tail" exe="/usr/bin/tail" subj=kernel key=(null)
type=EXECVE msg=audit(1543671660.203:64): argc=2 a0="tail" a1="/var/log/audit/audit.log"
type=CWD msg=audit(1543671660.203:64):  cwd="/home/sweh"
type=PATH msg=audit(1543671660.203:64): item=0 name="/usr/bin/tail" inode=266003 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PATH msg=audit(1543671660.203:64): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=273793 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1543671660.203:64): proctitle=7461696C002F7661722F6C6F672F61756469742F61756469742E6C6F67

कुछ दिलचस्प मूल्य हैं जिन्हें देखा जा सकता है; उदाहरण के लिए "auid" 500 है, जो कि मेरा लॉगिन आईडी है, भले ही "uid" शून्य हो ('क्योंकि मैं नीचे चल रहा हूँ' su)। भले ही उपयोगकर्ता ने खातों को स्विच किया हो suया फिर sudoहम अभी भी उनकी "ऑडिट आईडी" पर वापस नज़र रख सकें

अब वे auditctlकमांड रिबूट पर खो जाएंगे। आप उन्हें एक कॉन्फ़िगरेशन फ़ाइल में रख सकते हैं (उदाहरण के लिए /etc/audit/rules.d/, निर्देशिका में CentOS 7 पर)। सटीक स्थान आपके OS संस्करण पर निर्भर करेगा। auditctlमैन्युअल पृष्ठ यहाँ मदद करनी चाहिए।

खबरदार, हालांकि ... यह बहुत सारे लॉग संदेश उत्पन्न करने का कारण होगा । सुनिश्चित करें कि आपके पास डिस्क पर पर्याप्त स्थान है!

यदि आवश्यक हो तो नियमों को एक विशिष्ट उपयोगकर्ता या एक विशिष्ट कमांड तक सीमित किया जा सकता है।

और खबरदार भी; यदि कोई उपयोगकर्ता कमांड निष्पादन (जैसे mysql --user=username --password=passwd) में पासवर्ड डालता है तो यह लॉग इन किया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.