पता करें कि कौन सी प्रक्रिया किसी फ़ाइल को बदल रही है


35

मैं एक विश्वसनीय तरीका खोजने की कोशिश कर रहा हूं कि मेरी मशीन पर कौन सी प्रक्रिया एक कॉन्फ़िगरेशन फ़ाइल ( /etc/hostsविशिष्ट होने के लिए) बदल रही है ।

मुझे पता है कि मैं यह lsof /etc/hostsपता लगाने के लिए उपयोग कर सकता हूं कि वर्तमान में कौन सी प्रक्रियाएं खुली हैं, लेकिन यह मदद नहीं करता है क्योंकि प्रक्रिया स्पष्ट रूप से फाइल को खोल रही है, इसे लिख रही है, और फिर इसे फिर से बंद कर रही है।

मैंने lsofरिपीट ऑप्शन (-r) को भी देखा , लेकिन ऐसा लगता है कि यह केवल एक बार एक सेकंड के रूप में तेजी से चलता है, जो शायद कभी भी प्रगति में लेखन पर कब्जा नहीं करेगा।

मैं फाइलसिस्टम में बदलाव की निगरानी के लिए एक दंपती उपकरण के बारे में जानता हूं, लेकिन इस मामले में मैं यह जानना चाहता हूं कि कौन सी प्रक्रिया जिम्मेदार है, जिसका अर्थ है इसे अधिनियम में पकड़ना।

जवाबों:


52

इसे खोजने के लिए आप ऑडिटिंग का उपयोग कर सकते हैं। यदि पहले से उपलब्ध नहीं है, तो अपने डिस्ट्रो के लिए ऑडिटिंग स्थापित करें और सक्षम करें।

/ etc / मेजबान पर एक ऑडिट घड़ी सेट करें

/sbin/auditctl -w /etc/hosts -p war -k hosts-file

-w watch /etc/hosts
-p warx watch for write, attribute change, execute or read events
-k hosts-file is a search key.

मेजबानों के फ़ाइल बदलने तक प्रतीक्षा करें और फिर लॉग इन करने के लिए ausearch का उपयोग करें

/sbin/ausearch -f /etc/hosts | more

आपको आउटपुट का द्रव्यमान मिलेगा


समय-> बुध अक्टूबर 12 09:34:07 2011 प्रकार = पथ संदेश = ऑडिट (1318408447.180: 870): आइटम = 0 नाम = "/ आदि / मेजबान" इनोड = 2211062 देव = fd: 00 मोड: 0100644 ouid = 0 ogid = 0 rdev = 00: 00 obj = system_u: object_r: etc_t: s0 प्रकार = CWD msg = ऑडिट (1318408447.180: 870): cwd = "/ home / iain" प्रकार = SYSCALL संदेश = ऑडिट (1318408447.180: 870): चाप = c000003e syscall = 2 सफलता = हां बाहर निकलना = 0 a0 = 7fff73641c4f a1 = 941 a2 = 1b6 a3 = 3e7075310c आइटम = 1 ppid - 7259 pid = 7294 au id = 1001 uid = 0 gid = 0 euid = 0 suid = 0 suid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts0 ses = 123 comm = "स्पर्श" exe = "/ bin / touch" subj = user_u: system_r: unconfined_t, s0 key = "host-file"


इस मामले में मैंने फ़ाइलों को बदलने के लिए टच कमांड का उपयोग किया, जो कि टाइमस्टैम्प है वह 7294 था और यह ppid 7259 (मेरा शेल) था।


2
"अपने डिस्ट्रो के लिए ऑडिटिंग सक्षम करें" को शायद थोड़ा विस्तारित किया जाना चाहिए। अनायास, ऊपर दिए गए आदेशों ने मुझे न तो त्रुटि दी और न ही परिणाम। "" sbin / audctll -e 1 "ने भी मदद नहीं की। लॉगिंग करने के लिए ऑडिट डेमॉन चलाने से मदद मिली - "/etc/init.d/auditd start" (हालाँकि इसने मेरे नियमों को हटा दिया, इसलिए मुझे उन्हें फिर से दर्ज करना पड़ा)।
तोबिकेन

मेरे लिए काम नहीं किया, ausearchहमेशा लौटता है<no matches>
m0skit0

1
कभी-कभी आपको वास्तविक प्रक्रिया को प्राप्त करने के लिए कई ऑडिट सेट करने की आवश्यकता हो सकती है जो संशोधन की शुरुआत करता है यदि वह प्रक्रिया उदाहरण के लिए एक बाहरी कमांड को कॉल करने के लिए है ताकि वह इसके लिए काम कर सके। यानी मैं यह जानने की कोशिश कर रहा था कि एक उपयोगकर्ता क्रेस्टब प्रविष्टि लगातार रीसेट क्यों की जा रही थी। क्रॉस्टैब कमांड जिम्मेदार था, लेकिन जब तक मैंने इसे बाहर निकलने वाले पीपीपी की जांच की, तब तक मुझे ऑडिट / usr / bin / crontab भी करना था, फिर क्रॉस्ट तक पहुंच के टाइमस्टैम्प का मिलान क्रॉस्टैब के ऑडिट एग्जीक्यूटिव से करें और फिर चेक करें यह ppid है ... जो एक ऑर्केस्ट्रेशन डेमॉन का पता लगाता है, जो एक विशिष्ट उपयोगकर्ता क्रोन कॉन्फिगर कर रहा था।
Wil

3

तुम भी inotify- उपकरण का उपयोग कर सकते हैं:

  inotifywait -mq -e open -e modify /etc/hosts

14
ऑडिट आपको इच्छित जानकारी देने में सक्षम है। भले ही यह धारणा बनाना आसान है कि इन-ओटिफाइ आपको ऐसा करने देगा - यह नहीं होगा, क्योंकि यह आपको प्रक्रिया आईडी नहीं देगा जो संशोधन किया था।
ऑब्जेक्टेड'

2

बहुत खोज के बाद, मुझे समाधान मिला, बस इस कमांड का उपयोग करें: sudo fs_usage | grep [path_to_file]


2
यह केवल MacOS के लिए है ...
मर्क

0

शायद बेहतर है कि फिर इन्क्रॉन जैसी किसी चीज़ का इस्तेमाल करें

http://inotify.aiken.cz/?section=incron&page=about&lang=en

फिर आप इसे स्क्रिप्ट को किसी प्रकार के आरेखों को ट्रिगर करने के लिए प्राप्त कर सकते हैं

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