Giám sát truy cập tệp Linux


20

Có cách nào trong unix để tìm ra ai đã truy cập tệp nhất định trong 1 tuần qua không? Nó có thể là người dùng hoặc một số tập lệnh ftp nó đến một nơi khác. Tôi có thể lấy danh sách tên người dùng đã truy cập tệp nhất định không? Làm thế nào tôi có thể tìm ra ai đang truy cập tập tin cụ thể ??

Câu trả lời:


39

Trừ khi bạn có chính sách ghi nhật ký cực kỳ bất thường, những người truy cập vào tệp nào không được ghi nhật ký (đó sẽ là một lượng thông tin khổng lồ). Bạn có thể tìm ra ai đã đăng nhập vào thời gian nào trong nhật ký hệ thống; các lastlệnh cho phép bạn đăng nhập lịch sử, và các bản ghi khác như /var/log/auth.logsẽ cho bạn biết cách người dùng xác thực và từ nơi họ đăng nhập (mà thiết bị đầu cuối, hoặc một máy chủ mà nếu từ xa).

Ngày mà một tệp được đọc lần cuối được gọi là thời gian truy cập của nó , hoặc viết tắt là atime . Tất cả các hệ thống tập tin unix có thể lưu trữ nó, nhưng nhiều hệ thống không ghi lại nó, bởi vì nó có một hình phạt hiệu suất (thường là nhỏ). ls -ltu /path/to/filehoặc stat /path/to/filehiển thị thời gian truy cập của tập tin.

Nếu người dùng truy cập tệp và không cố gắng ẩn dấu vết của mình, lịch sử trình bao của anh ta (ví dụ ~/.bash_history) có thể có manh mối.

Để tìm hiểu những gì hoặc ai có một tập tin mở bây giờ, sử dụng lsof /path/to/file.

Để ghi lại những gì xảy ra với một tệp trong tương lai, có một số cách:

  • Sử dụng inotifywait . inotifywait -e access /path/tosẽ in một dòng /path/to/ ACCESS filekhi ai đó đọc file. Giao diện này sẽ không cho bạn biết ai đã truy cập tệp; bạn có thể gọi lsof /path/to/filengay khi đường dây này xuất hiện, nhưng có một điều kiện cuộc đua (quyền truy cập có thể kết thúc sau thời gian lsof sẽ diễn ra).

  • LoggedFS là một hệ thống tệp có thể xếp chồng, cung cấp chế độ xem của cây hệ thống tệp và có thể thực hiện ghi nhật ký của tất cả các truy cập thông qua chế độ xem đó. Để cấu hình nó, xem cú pháp tệp cấu hình LoggedFS .

  • Bạn có thể sử dụng hệ thống con kiểm toán của Linux để ghi nhật ký một số lượng lớn, bao gồm cả 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
    

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


Cảm ơn bạn Gilles .. Tôi có tập tin dữ liệu này được tạo bởi tập lệnh. Tôi chỉ muốn biết điều gì xảy ra với tệp đó sau khi nó được tạo ra .. không phải các tập lệnh khác đang chọn nó để xử lý thêm vì vậy tôi muốn xem liệu có ai đó đang truy cập thủ công tệp dữ liệu đó không
Jack

@Jack: Thật khó để nói mà không biết nhiều về thiết lập của bạn, nhưng miễn là không có gì xóa hoặc đổi tên tệp, nó sẽ ở đó để các tập lệnh khác nhận nó, cho dù người khác có truy cập hay không. Từ nhận xét của bạn, tôi nghĩ bạn nên xem xét điều gì xảy ra khi bạn chạy tập lệnh của mình.
Gilles 'SO- ngừng trở nên xấu xa'

2
Này, bạn có thể tạo một vòng tròn đẹp với điều này:syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
penguin359

7

Ví dụ trên với inotifywait phải là một trong (xem trang man để biết thêm thông tin):

inotifywait /path/to/file
inotifywait -e open /pat/to/file

Hoặc với chế độ giám sát và dấu thời gian:

inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'

6

Câu trả lời trước đây không phải là cách thực hành tốt nhất để làm những gì bạn yêu cầu. Linux có API cho việc này. Các inotifyAPI http://linux.die.net/man/7/inotify

  1. Bạn có thể viết chương trình C để làm những gì bạn muốn chỉ cần gọi inotifyAPI trực tiếp
  2. Bạn có thể sử dụng kfsmd, http://www.linux.com/archive/feature/124903 một trình nền sử dụnginotify
  3. Nếu bạn muốn một cái gì đó hoạt động trên các nền tảng ( inotifycụ thể là Linux) và bạn đang sử dụng Java, JNotify hoạt động trên các nền tảng (Linux, Mac, Windows), trừu tượng hóa API cơ bản của HĐH gốc.

3
Chào mừng bạn đến với Stack Exchange . Câu trả lời không được trình bày theo thứ tự thời gian, vì vậy, câu trả lời trước đó không có nghĩa là câu trả lời của bạn. Tôi tự hỏi ai trong hai người kia mà bạn đang đề cập đến dù sao đi nữa: một người không có bất cứ điều gì trông giống như thực hành tốt hay xấu và người còn lại đề cập đến API inotify.
Gilles 'SO- ngừng trở nên xấu xa'

Rất có thể Glen đề cập đến câu trả lời ở trên với cách sắp xếp phiếu bầu mặc định. Thật vậy, câu trả lời phổ biến nhất không thể đưa ra một giải pháp cho câu hỏi. Có thể có một số lý do mà người ta có thể cần phải xem số lần truy cập tệp trong một khung thời gian nhất định.
Wtower ngày

1
Như đã giải thích trong unix.stackexchange.com/a/12251/20336 API inotify không cung cấp thông tin về người đã truy cập một tệp đã cho. Cộng với inotify thực sự không giúp tìm ra ai đã truy cập tệp vào tuần trước. Bạn cần các tính năng kiểm toán cho việc đó, yêu cầu sử dụng phần mềm được gọi auditd(tuy nhiên, thậm chí điều này không giúp tìm ra ai đã truy cập tệp vào tuần trước trừ khi bạn auditdđã chạy vào tuần trước).
Mikko Rantalainen 16/03/18

3

Điều này nói chung là không khả thi. Tôi đã thấy các hệ thống tệp có đủ kiểm toán để làm cho nó có thể theo cách này hay cách khác, nhưng nó không phải là một thứ Unix chung, không.

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.