मैं लिनक्स पर अपने उपयोगकर्ता द्वारा बनाए गए निष्पादनयोग्य को कैसे ट्रैक कर सकता हूं?


11

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

क्या पूरे कमांड लाइन सहित लिनक्स पर सिस्टम पर मेरे उपयोगकर्ता के रूप में सभी निष्पादन * () के बारे में सूचित किया जाना संभव है? psलूप में चलने का छोटा , यानी। मैं इसे सीधे उस सिस्टम पर करूंगा जिस पर मैं काम करता हूं और रूट एक्सेस की आवश्यकता नहीं है, लेकिन अगर मुझे जरूरत है तो मैं एक सिस्टम को स्पॉन कर सकता हूं जिस पर मेरे पास रूट एक्सेस हो, प्रोग्राम इंस्टॉल करें और वहां जांच करें।

Ubuntu 12.4 LTS का उपयोग करना।


मैं यहां उबंटू के बजाय पूछ रहा हूं, क्योंकि यह एक असली उबंटू प्रश्न की तुलना में एक यूनिक्स / लिनक्स प्रश्न है।
पियरे लेबेपिन

1
कार्यक्रम कितना डरपोक है? क्या यह डिबगर्स का पता लगाने या बायपास करने की कोशिश करता है? क्या यह गतिशील रूप से जुड़ा हुआ है? यदि यह बहुत डरपोक है, तो आपको एक आभासी मशीन का उपयोग करने की आवश्यकता हो सकती है जहां आप रूट कर रहे हैं। (यह उस कार्यक्रम के लिए भी सबसे सरल रणनीति हो सकती है जो विशेष रूप से डरपोक नहीं है।)
गिल्स एसओ- बुराई को रोकें '

@ गिल्स वास्तव में एक संभावना है, मैं एक वीएम की कोशिश करने जा रहा हूं, फिर सवाल का अद्यतन करें यदि वह काम करने योग्य हो।
पियरे लेबेपिन

नोट: आप वास्तव में प्रोग्रामनाम और तर्क चाहते हैं, जो उत्तर auditदेता है, लेकिन शेल में एक 'पूरी कमांड लाइन' भी पुनर्निर्देशन / पाइपिंग और एनवार सेटिंग्स का उपयोग करने के साथ-साथ प्रतिस्थापन / निष्कासन, निरर्थक उद्धरण का उपयोग करके बच्चे की प्रक्रिया को प्रभावित कर सकती है। और रिक्ति, और नियंत्रण संरचनाओं की तरह doa && dob, और आप उन नहीं मिलेगा।
dave_thompson_085

जवाबों:


10

आपको auditdरिकॉर्ड execveघटनाओं को कॉन्फ़िगर करने की आवश्यकता है । RHEL5 पर उदाहरण:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]#

मैं आर्च चेतावनी को अनदेखा करता हूं और यह कोई मायने नहीं रखता है, लेकिन आप चाहें तो इसे इस्तेमाल -F arch=b64या -F arch=b32सेट कर सकते हैं।

उपरोक्त का परिणाम है:

[root@ditirlns01 ~]# ls /tmp/whatever
ls: /tmp/whatever: No such file or directory
[root@ditirlns01 ~]# grep whatever /var/log/audit/audit.log
type=EXECVE msg=audit(1386797915.232:5527206): argc=3 a0="ls" a1="--color=tty" a2="/tmp/whatever"
type=EXECVE msg=audit(1386797927.133:5527241): argc=3 a0="grep" a1="whatever" a2="/var/log/audit/audit.log"
[root@ditirlns01 ~]#

यह स्पष्ट रूप से त्वरित और गंदा है, लेकिन यह मूल बातें है कि आप इसे कैसे करते हैं। आपको वास्तव में जो करने की कोशिश कर रहे हैं, उस पर बहुत कुछ निर्भर करता है। आप auditctlकमांड में विभिन्न फिल्टर का उपयोग करके ऑडिट फ्लो को कम कर सकते हैं, लेकिन मुझे उस जानकारी में से कोई भी जानकारी नहीं है इसलिए मुझे नहीं पता कि क्या शामिल करना है। यदि आपको कुछ और विशिष्ट की आवश्यकता है, तो मेरा सुझाव है कि आप या तो मैन पेज की जांच करें या इस उत्तर के लिए एक टिप्पणी पोस्ट करें और मैं इसे कुछ और अपडेट करूंगा।

आशा है कि आपको सही दिशा में धकेलने में मदद करता है।

संपादित करें:

चूंकि आपके प्रश्न में एक विशेष उपयोगकर्ता को देखना शामिल है जो मैं आपको दिखा सकता हूं:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F euid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch

उपरोक्त की पहचान, लेकिन execveप्रभावी उपयोगकर्ता आईडी के साथ चलने वाले किसी व्यक्ति द्वारा केवल 16777216लॉग इन किया जाएगा। यदि आपको उपयोगकर्ता के loginuidमूल्य को निर्दिष्ट करने की आवश्यकता है (जो उन्होंने शुरू में सिस्टम में लॉग इन किया था) तो आप auidइसके बजाय फ़िल्टर करें :

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch

उपयोगकर्ता के लिए suया sudoरूट करने के लिए AUID / loginuid फ़िल्टर उदाहरण के लिए उपयोगी होगा । उस स्थिति में रूट के रूप में बहुत सारी चीजें चल रही होंगी, लेकिन आप केवल उस सामान से संबंधित हैं जो उपयोगकर्ता द्वारा पूछताछ में बंद कर दिया गया था। auditctlआपको फ़िल्टर को स्टैक करने देता है ताकि आप दोनों द्वारा फ़िल्टर कर सकें euidऔर auid:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216 -F euid=0
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]# ls /tmp/nashly -ltar
ls: /tmp/nashly: No such file or directory
[root@ditirlns01 ~]# grep nashly /var/log/audit/audit.log
type=EXECVE msg=audit(1386798635.199:5529285): argc=4 a0="ls" a1="--color=tty" a2="/tmp/nashly" a3="-ltar"
type=EXECVE msg=audit(1386798646.048:5529286): argc=3 a0="grep" a1="nashly" a2="/var/log/audit/audit.log"

1
"ध्यान दें कि मेरे पास रूट एक्सेस नहीं है"। (अन्यथा यह एक अच्छा जवाब होगा।)
गाइल्स का SO- बुराई पर रोक

धिक्कार है ... इतना करीब ...
ब्राचली

धन्यवाद, यह काम किया। मुझे यह जोड़ना चाहिए कि मुझे apt-get द्वारा ऑडिटेकल को स्थापित करना था, यह Ubuntu पर पूर्वस्थापित नहीं था।
पियरे लेबेपिन

धन्यवाद। अच्छे उदाहरण हैं। लेकिन क्या ऑडिट लॉग से बाहर निकलने का कोड प्राप्त करने का कोई तरीका है?
कैस

0

आपने कुछ सरल पूछा है। मैंने एक उदाहरण दिया है, mplayerलेकिन मुझे लगता है कि इसे अन्य स्थितियों के अनुकूल बनाया जा सकता है:

#! /bin/sh
# This executable must be used instead of /usr/bin/mplayer
# do not forget the chmod +x filename...
LOG=/tmp/mplayer.log
echo "$@" >> $LOG
if [ -n "$1" ] && [ -f "$1" ] ; then
        filename="$1"
        echo "$(date "+%F %T") $(basename "$filename")" \
        | tee -a "$(dirname "$filename")/mplayer.log"  >> $LOG
fi
/usr/bin/mplayer "$@"

जैसा कि आप देख सकते हैं यह बहुत सरल है: यह पहली दलील को पार्स करता है, क्योंकि यह एक फाइल है, एक लॉग को केंद्रीय फ़ाइल में बनाया जाता है $LOGऔर इसे एक फ़ाइल में सम्‍मिलित किया जाता है (जिसका हमेशा एक mplayer.logही निर्देशिका में एक ही नाम होता है।

इसलिए, उपयोगकर्ता को प्रत्येक निर्देशिका पर पढ़ी गई नवीनतम फिल्म मिल सकती है।


क्यू ने विशेष रूप से कहा कि एक स्क्रिप्ट को प्रतिस्थापित करना काम नहीं करेगा।
dave_thompson_085

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