เป็นไปได้หรือไม่ที่จะรู้ว่าโปรแกรมหรือสคริปต์ใดที่สร้างไฟล์ที่กำหนด?


35

ไฟล์สามไฟล์ปรากฏในไดเรกทอรีบ้านของฉันซึ่งเรียกว่า "client_state.xml", "lockfile" และ "time_stats_log" สองอันสุดท้ายนั้นว่างเปล่า ฉันสงสัยว่าพวกเขาไปถึงที่นั่นได้อย่างไร ไม่ใช่ครั้งแรกที่มันเกิดขึ้น แต่ครั้งสุดท้ายคือเมื่อหลายสัปดาห์ก่อน ฉันลบไฟล์และไม่มีอะไรเสียหายหรือบ่น stat $filenameฉันยังไม่ได้สามารถที่จะคิดว่าสิ่งที่ผมทำในขณะที่รายงานโดย มีวิธีใดที่ฉันจะทราบได้ว่าพวกเขามาจากไหน

อีกวิธีหนึ่งมีวิธีการตรวจสอบไดเรกทอรีบ้าน (แต่ไม่ใช่ไดเรกทอรีย่อย) สำหรับการสร้างไฟล์หรือไม่


เนื่องจากฉันแน่ใจว่าบางคนจะพูดถึงมันฉันไม่มีความรู้แจ้ง
Wolf

คำตอบ:


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และไม่มี
Wolf

1
@ Wolf สิ่งที่ distro? หากคุณสร้างเคอร์เนลของคุณเองมันคือCONFIG_INOTIFY_USER( Filesystems-> Inotify support for userspace) inotifywaitอาจจะอยู่ในแพ็คเกจชื่อคล้าย ๆ กันinotify-tools
Michael Mrozek

@Michael มัน openSUSE 11.3 ฉันไม่เคยสร้างเคอร์เนล มีการใช้ Linux เพียงประมาณ 5 เดือนและเป็นแนวคิดที่น่ากังวล แต่ฉันจะมองไปรอบ ๆ เพื่อสอนหรืออะไรซักอย่าง
Wolf

@ Wolf คำตอบของ dogbaneอาจจะง่ายกว่านี้ถ้าเคอร์เนลที่คุณไม่ได้มาด้วย
Michael Mrozek

2
@Michael จริงๆแล้วหลังจากการล่าสัตว์และค้นคว้าเพิ่มอีกนิดหน่อยฉันได้เพิ่มที่เก็บของชุมชนซึ่งมันกลับกลายเป็นว่ามีinotify-toolsแพ็คเกจอยู่ดังนั้นตอนนี้ฉันจึงมีinotifywait(และinotifywatch) ฉันทดสอบมันออกมาและดูเหมือนว่าจะใช้งานได้
Wolf

22

คุณสามารถดูทุกอย่างที่เกิดขึ้นในระบบแฟ้มโดยการเข้าถึงมันมากกว่าLoggedFS นี่เป็นระบบไฟล์แบบสแต็กที่บันทึกทุกการเข้าถึงในแผนผังทรี

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

การบันทึกไดเรกทอรีหลักทั้งหมดอาจทำให้ระบบของคุณช้าลง อย่างน้อยคุณจะต้องเขียนไฟล์กำหนดค่าด้วยตัวกรองที่เข้มงวด

หากคุณมีการเข้าถึงรูทบน Linux คุณสามารถใช้ระบบย่อยการตรวจสอบเพื่อบันทึกสิ่งต่าง ๆ จำนวนมากรวมถึงการเข้าถึงระบบไฟล์ ตรวจสอบให้แน่ใจภูตจะเริ่มต้นจากนั้นกำหนดสิ่งที่คุณต้องการเข้าสู่ระบบด้วยauditd auditctlการดำเนินการแต่ละบันทึกการเข้าถูกบันทึกไว้ใน/var/log/audit/audit.log(ในการกระจายทั่วไป) วิธีเริ่มดูไฟล์โดยเฉพาะ:

auditctl -w /path/to/file

หรือในรูปแบบยาว

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

หากคุณวางการเฝ้าดูในไดเรกทอรี (ด้วย-wหรือ-F dir=) ไฟล์ในนั้นและไดเรกทอรีย่อยจะถูกเรียกซ้ำด้วย


BSD ยังสนับสนุนสิ่งนี้ผ่านการตรวจสอบเหตุการณ์ด้านความปลอดภัย freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit.html
Shawn J. Goff

4

คุณอาจต้องการดูauditdแพคเกจนี้ช่วยให้คุณทำการตรวจสอบความปลอดภัยและรับข้อมูลมากมายเกี่ยวกับผู้ที่เปลี่ยนแปลงสิ่งที่อยู่ในระบบไฟล์


หากคุณมีเซิร์ฟเวอร์ที่ให้การเข้าถึงเชลล์สำหรับผู้ใช้หลายคนและจำเป็นต้องให้ความรับผิดชอบในระดับหนึ่งสำหรับการกระทำแต่ละอย่างคุณสามารถสร้างเชลล์บางอย่าง (เช่น bash และ tcsh) ด้วยการบันทึกประวัติคำสั่ง ฉันเขียนโพสต์บล็อกเกี่ยวกับการเข้าสู่ระบบเชลล์ที่ < timkennedy.net/2010/12/07/… > การบันทึกเชลล์ไม่ใช่การแทนที่ระบบการตรวจสอบจริงเพราะมันจะไม่บันทึกคำสั่งที่ดำเนินการโดยเชลล์ที่ไม่มีการโต้ตอบ (เช่นสคริปต์หรือโปรแกรม) เพื่อให้ได้เม็ดละเอียดนั้นคุณต้องมีโซลูชันการตรวจสอบที่ดี
Tim Kennedy

1
@TimKennedy - โพสต์บล็อกของคุณไม่ได้มาอีกแล้ว
slm

1
ขอโทษ ไซต์ถูกแฮ็กและหยุดลงชั่วคราว หน้าใหม่อยู่ที่timkennedy.net/2010/12/logging-shell-commands-to-syslog-on.html
Tim Kennedy

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>เพื่อ "ขุด" (ซึ่งจะแสดงผลลัพธ์ที่คล้ายกับคำสั่งด้านบน) ด้วยวิธีนี้คุณสามารถใช้วิธีการเดียวกันเพื่อค้นหาข้อมูลเกี่ยวกับกระบวนการที่สร้างไฟล์ขึ้นจริง

มีรุ่น GUI ที่csysdigเรียกว่าsysdig-inspectถ้านั่นคือถ้วยชาของคุณ


หรืออาจเป็นห่วงไม่ว่างที่ทำงานอย่างต่อเนื่องพยายามที่จะดูว่า / เมื่อกระบวนการเขียนไปยังไฟล์นั้น ... 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
สิ่งนี้ไม่แสดงว่าโปรแกรมสร้างขึ้นมาอย่างไร
OverCoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.