Có thể tìm ra chương trình hoặc tập lệnh nào đã tạo một tệp đã cho không?


35

Ba tệp đột nhiên xuất hiện trong thư mục nhà của tôi, được gọi là "client_state.xml", "lockfile" và "time_stats_log". Hai cái cuối cùng trống rỗng. Tôi đang tự hỏi làm thế nào họ đến đó. Đây không phải là lần đầu tiên nó xảy ra, nhưng lần cuối cùng là vài tuần trước; Tôi đã xóa các tập tin và không có gì phá vỡ hoặc phàn nàn. Tôi đã không thể nghĩ về những gì tôi đã làm vào thời điểm báo cáo stat $filename. Có cách nào tôi có thể tìm ra họ đến từ đâu không?

Ngoài ra, có cách nào để theo dõi thư mục chính (nhưng không phải thư mục con) để tạo tệp không?


Vì tôi chắc chắn ai đó sẽ đề cập đến nó, tôi không có thông tin.
Sói

Câu trả lời:


18

Tôi không tin có một cách để xác định chương trình nào đã tạo một tệp.

Đối với câu hỏi thay thế của bạn: Tuy nhiên, bạn có thể xem tệp sẽ được tạo lại bằng cách sử dụng inotify. inotifywaitlà một giao diện dòng lệnh cho inotifyhệ thống con; bạn có thể bảo nó tìm kiếm các createsự kiện trong thư mục nhà của bạn:

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

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

Bạn có thể muốn chạy nó với -m(màn hình), điều này bảo nó không thoát sau khi thấy sự kiện đầu tiên


Làm thế nào để tôi có được inotify? Nó không được cài đặt (kernel 2.6.34) và không có /dev/inotify.
Sói

1
@Wolf gì distro? Nếu bạn xây dựng kernel của riêng mình, nó CONFIG_INOTIFY_USER( Filesystems-> Inotify support for userspace). inotifywaitcó lẽ là trong một gói có tên giống nhưinotify-tools
Michael Mrozek

@Michael, nó mởSUSE 11.3. Tôi chưa bao giờ xây dựng kernel; mới chỉ sử dụng Linux khoảng 5 tháng và đó là một khái niệm đáng ngại. Nhưng tôi sẽ tìm kiếm một hướng dẫn hoặc một cái gì đó.
Sói

@Wolf Chà, câu trả lời của dogbane có thể dễ dàng hơn nếu hạt nhân bạn không đi kèm với nó
Michael Mrozek

2
@Michael Trên thực tế, sau khi tìm kiếm và nghiên cứu thêm một chút, tôi đã thêm một kho lưu trữ cộng đồng, hóa ra, nó chứa inotify-toolsgói, vì vậy bây giờ tôi có inotifywait(và inotifywatch). Tôi đã thử nghiệm nó và nó dường như làm việc.
Sói

22

Bạn có thể xem mọi thứ xảy ra trên một hệ thống tập tin bằng cách truy cập nó qua LoggedFS . Đây là một hệ thống tập tin xếp chồng , ghi nhật ký mọi truy cập trong cây thư mục.

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

Đăng nhập toàn bộ thư mục nhà của bạn có thể làm chậm hệ thống của bạn mặc dù. Ít nhất bạn sẽ muốn viết một tệp cấu hình với các bộ lọc nghiêm ngặt.

Nếu bạn có quyền truy cập root, trên Linux, bạn có thể sử dụng hệ thống con kiểm toán để ghi nhật ký một số lượng lớn, bao gồm cả quyền truy cập hệ thống tệp. Hãy chắc chắn rằng auditddaemon được bắt đầu, sau đó cấu hình những gì bạn muốn đăng nhập auditctl. Mỗi hoạt động được ghi lại được ghi lại /var/log/audit/audit.log(trên các bản phân phối điển hình). Để bắt đầu xem một tập tin cụ thể:

auditctl -w /path/to/file

hoặc ở dạng dài

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

Nếu bạn đặt đồng hồ trên một thư mục (có -whoặc -F dir=), các tệp trong đó và các thư mục con của nó theo cách đệ quy cũng sẽ được xem.


BSD cũng hỗ trợ điều này thông qua Kiểm tra sự kiện bảo mật. freebsd.org/doc/en_US.ISO8859-1/books/handbook/audit.html
Shawn J. Goff

4

Bạn có thể muốn xem qua auditd, gói này cho phép bạn thực hiện kiểm tra bảo mật và nhận được nhiều thông tin về người đã thay đổi những gì trong hệ thống tệp.


nếu bạn có một máy chủ cung cấp quyền truy cập shell cho nhiều người dùng và cần cung cấp một số mức độ trách nhiệm cho từng hành động, bạn có thể xây dựng các shell nhất định (như bash và tcsh) bằng cách ghi nhật ký lịch sử lệnh. Tôi đã viết một bài đăng trên blog về việc đăng nhập shells tại < timkennedy.net/2010/12/07/ trên >. Ghi nhật ký Shell không phải là sự thay thế cho một hệ thống kiểm toán thực sự, vì nó sẽ không ghi nhật ký các lệnh được chạy bởi các trình bao không tương tác (như tập lệnh hoặc chương trình). Để có được mức độ chi tiết đó, bạn thực sự cần một giải pháp kiểm toán tốt.
Tim Kennedy

1
@TimKennedy - bài đăng trên blog của bạn sẽ không xuất hiện nữa.
slm

1
Lấy làm tiếc. trang web đã bị hack, và đã ngừng hoạt động trong một thời gian. trang mới có tại timkennedy.net/2010/12/logging-shell-commands-to-syslog-on.html
Tim Kennedy

3

Tôi biết đây là một câu hỏi cũ, nhưng tôi sẽ đề xuất một cách tiếp cận khác trong trường hợp ai đó thấy nó hữu ích. Ban đầu tôi đã đăng bài này như một câu trả lời cho một câu hỏi đã bị lừa với câu hỏi này.

Một lựa chọn là sử dụng sysdig: một ứng dụng giám sát hệ thống nguồn mở. Sử dụng nó, bạn có thể theo dõi hoạt động trên một tệp theo tên. Giả sử rằng bạn muốn xem quá trình tạo tệp có tên /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

Từ đầu ra đó, bạn có thể thấy rằng một quá trình có tên touchpid 5470 đã mở tệp.

Nếu bạn muốn biết thêm thông tin, bạn có thể chạy trong "chế độ chụp" trong đó thu thập dấu vết cuộc gọi hệ thống:

# sysdig -w /tmp/dumpfile.scap

Sau đó đợi tệp được tạo, sau đó dừng sysdigvà chạy:

# csysdig -r /tmp/dumpfile.scap

Điều đó sẽ cho phép bạn khám phá mọi thứ đã xảy ra. Bạn có thể nhấn <F2>và chọn Files, nhấn <F4>để tìm kiếm tên tệp, sau đó nhấn <F6>để "đào" (sẽ hiển thị cho bạn đầu ra tương tự như lệnh trên). Cùng với đó, bạn có thể sử dụng cùng một cách tiếp cận để tìm thông tin về quá trình thực sự tạo ra tệp.

Có một phiên bản GUI csysdigđược gọi sysdig-inspect, nếu đó là thêm tách trà của bạn.


hoặc có thể một vòng lặp bận rộn liên tục chạy lsof để thử xem / khi một quá trình đang ghi vào tệp đó ... unix.stackexchange.com/a/13782/8337
rogerdpack

2

Bạn chưa có inotifyđể bạn có thể viết một tập lệnh kiểm tra tệp trong một vòng lặp:

#!/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
Điều này không hiển thị chương trình nào đã tạo ra nó
OverCoder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.