क्या यह पता लगाना संभव है कि किसी फ़ाइल को किस प्रोग्राम या स्क्रिप्ट ने बनाया है?


35

मेरे ग्राहक निर्देशिका में तीन फाइलें अचानक दिखाई दीं, जिन्हें "client_state.xml", "लॉकफाइल", और "time_stats_log" कहा जाता है। अंतिम दो खाली हैं। मैं सोच रहा हूं कि वे वहां कैसे पहुंचे। यह पहली बार नहीं हुआ है, बल्कि आखिरी बार सप्ताह पहले हुआ था; मैंने फाइलें डिलीट कर दीं और कुछ भी नहीं तोड़ा या शिकायत नहीं की। मैं उस समय के बारे में सोच नहीं पा रहा हूं जो मैं कर रहा था stat $filename। क्या कोई तरीका है जिससे मैं पता लगा सकता हूँ कि वे कहाँ से आए हैं?

वैकल्पिक रूप से, क्या फ़ाइलों के निर्माण के लिए घर की निर्देशिका (लेकिन उप-निर्देशिका नहीं) की निगरानी करने का एक तरीका है?


जब से मुझे यकीन है कि कोई इसका उल्लेख करेगा, मेरे पास इनोटिफ़ाइ नहीं है।
वुल्फ

जवाबों:


18

मुझे नहीं लगता कि यह निर्धारित करने का कोई तरीका है कि किस प्रोग्राम ने एक फ़ाइल बनाई

अपने वैकल्पिक प्रश्न के लिए: आप फ़ाइल को फिर से उपयोग किए जाने के लिए देख सकते हैं , हालांकि, उपयोग कर रहे हैं inotify। सबसिस्टम के inotifywaitलिए एक कमांड-लाइन इंटरफ़ेस है inotify; आप इसे createअपने घर निर्देशिका में घटनाओं को देखने के लिए कह सकते हैं :

$ (sleep 5; touch ~/making-a-test-file) &
[1] 22526

$ inotifywait -e create ~/
Setting up watches.
Watches established.
/home/mmrozek/ CREATE making-a-test-file

आप शायद इसे -m(मॉनिटर) के साथ चलाना चाहते हैं , जो इसे पहली घटना को देखने के बाद बाहर निकलने के लिए नहीं कहता है


मुझे कैसे मिलेगा inotify? यह स्थापित नहीं है (कर्नेल 2.6.34) और वहाँ नहीं है /dev/inotify
वुल्फ

1
@ भेड़िया क्या बिगाड़ता है? यदि आप अपना कर्नेल बनाते हैं, तो यह CONFIG_INOTIFY_USER( Filesystems-> Inotify support for userspace) है। inotifywaitशायद एक पैकेज में कुछ नाम की तरह हैinotify-tools
माइकल Mrozek

@ मिचेल, यह 11.3 से खुला है। मैंने कभी कर्नेल नहीं बनाया है; केवल 5 महीनों के लिए लिनक्स का उपयोग कर रहा है और यह एक कठिन अवधारणा का एक सा है। लेकिन मैं एक ट्यूटोरियल या कुछ के लिए चारों ओर देखूंगा।
वुल्फ

अच्छी तरह से, dogbane का जवाब आसान हो सकता है अगर गिरी आपके पास उसे साथ नहीं आता है
माइकल Mrozek

2
@ मिकेल वास्तव में, थोड़ा और शिकार और अनुसंधान के बाद, मैंने एक सामुदायिक रिपॉजिटरी को जोड़ा, जो यह बताता है कि इसमें inotify-toolsपैकेज शामिल है , इसलिए मेरे पास अब inotifywait(और है)inotifywatch ) है। मैंने इसका परीक्षण किया और यह काम करने लगता है।
वुल्फ

22

आप एक फ़ाइल सिस्टम पर सब कुछ देख सकते हैं, जिसे लॉगफ़्फ़ पर एक्सेस करके । यह एक स्टैक्ड फाइलसिस्टम है जो डायरेक्टरी ट्री में हर एक्सेस को लॉग करता है।

loggedfs -l /var/tmp/$USER-home-fs.log ~

अपने पूरे घर निर्देशिका में प्रवेश करने से आपका सिस्टम धीमा हो सकता है। आप कम से कम कड़े फिल्टर के साथ एक विन्यास फाइल लिखना चाहते हैं ।

यदि आपके पास लिनक्स पर रूट एक्सेस है, तो आप बड़ी संख्या में चीजों को लॉग करने के लिए ऑडिट सबसिस्टम का उपयोग कर सकते हैं, जिसमें फाइल सिस्टम एक्सेस शामिल है। सुनिश्चित करें कि auditdडेमॉन शुरू हो गया है, फिर जो आप लॉग इन करना चाहते हैं उसे कॉन्फ़िगर करें auditctl। प्रत्येक लॉग ऑपरेशन को /var/log/audit/audit.log(विशिष्ट वितरण पर) दर्ज किया गया है । किसी विशेष फ़ाइल को देखना शुरू करने के लिए:

auditctl -w /path/to/file

या लंबे रूप में

auditctl -a exit,always -F path=/path/to/file

यदि आप किसी निर्देशिका (साथ -wया -F dir=) पर एक घड़ी लगाते हैं, तो उसमें और इसके उपनिर्देशिका की फ़ाइलों को पुन: देख लिया जाता है।


बीएसडी सिक्योरिटी इवेंट ऑडिटिंग के माध्यम से भी इसका समर्थन करता है। freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit.html
Shawn J. Goff

4

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


यदि आपके पास एक सर्वर है जो कई उपयोगकर्ताओं के लिए शेल एक्सेस प्रदान करता है, और व्यक्तिगत कार्यों के लिए कुछ स्तर की जवाबदेही प्रदान करने की आवश्यकता है, तो आप कमांड इतिहास लॉगिंग के साथ कुछ गोले (जैसे bash और tcsh) बना सकते हैं। मैंने < timkennedy.net/2010/12/07/… > पर गोले में लॉगिंग के बारे में एक ब्लॉग पोस्ट लिखा था । शेल लॉगिंग वास्तविक ऑडिटिंग सिस्टम के लिए एक प्रतिस्थापन नहीं है, क्योंकि यह गैर-संवादात्मक शेल (जैसे स्क्रिप्ट या प्रोग्राम) द्वारा चलने वाले कमांड को लॉग नहीं करेगा। उस प्रकार की ग्रैन्युलैरिटी पाने के लिए आपको वास्तव में एक अच्छे ऑडिटिंग समाधान की आवश्यकता होती है।
टिम केनेडी

1
@TimKennedy - आपका ब्लॉग पोस्ट अब नहीं आ रहा है।
slm

1
माफ़ कीजिये। साइट हैक हो गई, और थोड़ी देर के लिए नीचे था। नया पृष्ठ timkennedy.net/2010/12/12/log-shell-commands-to-syslog-on.html पर है
टिम कैनेडी

3

मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन मैं किसी अन्य दृष्टिकोण का सुझाव दूंगा जब कोई इसे उपयोगी समझेगा। मैंने मूल रूप से इसे एक प्रश्न के उत्तर के रूप में पोस्ट किया था जिसे इस एक को धोखा दिया गया था।

एक विकल्प का उपयोग करना है sysdig: एक ओपन-सोर्स सिस्टम मॉनिटरिंग एप्लिकेशन। इसका उपयोग करते हुए, आप नाम से एक फ़ाइल पर गतिविधि के लिए निगरानी कर सकते हैं। मान लीजिए कि आप देखना चाहते हैं कि किस प्रक्रिया के तहत एक फ़ाइल बनाई जा रही है जिसका नाम है /tmp/example.txt:

# sysdig fd.name=/tmp/example.txt
567335 16:18:39.654437223 0 touch (5470) < openat fd=3(<f>/tmp/example.txt) dirfd=-100(AT_FDCWD) name=/tmp/example.txt flags=70(O_NONBLOCK|O_CREAT|O_WRONLY) mode=0666
567336 16:18:39.654438248 0 touch (5470) > dup fd=3(<f>/tmp/example.txt)
567337 16:18:39.654438592 0 touch (5470) < dup res=0(<f>/tmp/example.txt)
567338 16:18:39.654439629 0 touch (5470) > close fd=3(<f>/tmp/example.txt)
567339 16:18:39.654439764 0 touch (5470) < close res=0
567342 16:18:39.654441958 0 touch (5470) > close fd=0(<f>/tmp/example.txt)
567343 16:18:39.654442111 0 touch (5470) < close res=0

उस आउटपुट से, आप देख सकते हैं कि एक प्रक्रिया जिसका नाम है touch pid 5470 फाइल को खोला।

यदि आप अधिक जानकारी चाहते हैं, तो आप "कैप्चर मोड" में चल सकते हैं जहां एक सिस्टम कॉल ट्रेस एकत्र किया गया है:

# sysdig -w /tmp/dumpfile.scap

फिर फ़ाइल के बनने की प्रतीक्षा करें, फिर रुकें sysdigऔर चलाएँ:

# csysdig -r /tmp/dumpfile.scap

वह सब कुछ हुआ जो आप का पता लगाने देंगे। आप प्रेस <F2>और चयन कर सकते हैं Files, <F4>फ़ाइल नाम के लिए खोज करने के लिए प्रेस, फिर <F6>"खुदाई" (जो आपको ऊपर दिए गए कमांड के समान आउटपुट दिखाएगा) को दबाएं । इसके साथ, आप उस प्रक्रिया के बारे में जानकारी प्राप्त करने के लिए उसी दृष्टिकोण का उपयोग कर सकते हैं जिसने वास्तव में फ़ाइल बनाई थी।

वहाँ की एक जीयूआई संस्करण है csysdigकहा जाता है sysdig-inspect, अगर है कि अधिक चाय के अपने कप है।


या शायद एक व्यस्त लूप जो लगातार lsof चलाता है यह देखने की कोशिश कर रहा है कि क्या / जब एक प्रक्रिया उस फ़ाइल को लिख रही है ... unix.stackexchange.com/a/13782/8337
rogerdpack

2

आपको ऐसा नहीं मिला inotifyहै, आप एक स्क्रिप्ट लिख सकते हैं जो फ़ाइल को लूप में जांचती है:

#!/bin/sh

while [ true ]; do                     # Run for as long as nessesary
  if [ -f /path/to/file ]; then        # If fileexists
    echo "Found file"                  # Notify and stop monitoring
    exit 0
  fi
  sleep 5                             # Else wait 5 secs
done

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