Kiểm toán tệp trong Linux: làm thế nào để xem cây thư mục để xóa?


9

Tôi có một kịch bản diễn đàn đang chạy trên máy chủ và bằng cách nào đó, một số lượng nhỏ tệp đính kèm bắt đầu bị mất. Tôi muốn tìm hiểu những gì đang xóa chúng và vào thời gian nào. Làm cách nào tôi có thể thiết lập Linux audd (audctl) để xem cây thư mục (tệp đính kèm được lưu trữ bên trong cây thư mục đa cấp) để theo dõi việc xóa tệp ở đó?

Tôi có thể sử dụng một số công cụ khác cho việc này?

Câu trả lời:


8

Đây là một câu trả lời tôi đã viết cho một câu hỏi trước đó:

Nói chung nếu bạn muốn biết một quy trình / người dùng / tệp đang làm gì mà không phải chạy lsof với nó 24/7, bạn sử dụng audctl.

Giả sử bạn có một kiểm soát kiểm toán kernel-ish gần đây sẽ là một hoạt động đơn giản. (Đây là trong Debian-fu, nếu bạn đang chạy Red Hat dịch phù hợp)

# apt-get install auditd

Đảm bảo rằng nó đang chạy (trạng thái /etc/init.d/auditd).

auditctl -a entry,always -F arch=b64 -S open -F pid=<process id>

Thay thế b64 bằng b32 nếu bạn đang chạy vòm 32 bit, mở có thể được thay thế bằng bất kỳ cuộc gọi hệ thống nào hoặc từ 'tất cả'

Để biết thêm chi tiết trang man Audctl.

Bạn có thể sử dụng phương pháp này và yêu cầu nó theo dõi cuộc gọi hệ thống 'hủy liên kết'.

Tham số -w rất hữu ích để xem các tập tin / thư mục, nhưng trang man giải thích có những cảnh báo.

-w path Chèn đồng hồ cho đối tượng hệ thống tệp tại đường dẫn. Bạn không thể chèn đồng hồ vào thư mục cấp cao nhất. Điều này bị cấm bởi kernel. Ký tự đại diện cũng không được hỗ trợ và sẽ tạo cảnh báo. Cách mà đồng hồ hoạt động là bằng cách theo dõi inode bên trong. Điều này có nghĩa là nếu bạn đặt một chiếc đồng hồ trên một thư mục, bạn sẽ thấy những gì dường như là sự kiện tệp, nhưng nó thực sự chỉ là việc cập nhật dữ liệu meta. Bạn có thể bỏ lỡ một vài sự kiện bằng cách làm điều này. Nếu bạn cần xem tất cả các tệp trong một thư mục, bạn nên đặt một đồng hồ riêng lẻ trên mỗi tệp. Không giống như các quy tắc kiểm toán tòa nhà, đồng hồ không ảnh hưởng đến hiệu suất dựa trên số lượng quy tắc được gửi đến kernel.


Tôi không thể :( Tôi có PHP chạy ở chế độ CGI. Đó luôn là một quy trình mới ở đó. Ngoài ra, tôi không muốn xem một quy trình duy nhất, mà hãy xem một phần cụ thể của hệ thống tệp để thay đổi.
Vladislav Rastrusny

Vâng, xem chỉnh sửa, tôi đã thực hiện, có các tham số để xem các thư mục hệ thống tệp, nhưng có cảnh báo hoặc tệp.
Aaron Tate

Có khoảng 1000 thư mục và khoảng 50k tệp. Vì vậy, điều này cũng sẽ không hoạt động ... :(
Vladislav Rastrusny

Nói chung, miễn là bạn biết về các cảnh báo, bạn sẽ có thể chỉ cần tiếp tục và đặt đồng hồ trên thư mục cấp cao nhất có chứa các thư mục bạn muốn xem.
Aaron Tate

Tôi cần phải làm điều tương tự (xem một thư mục để xóa để tôi có thể tìm thấy tên PID / quy trình đã làm điều đó), nhưng điều này dường như không hoạt động (ít nhất là trên kernel 3.x). Nếu tôi chạy "audctl -a entry, always -F arch = b64 -S unlink -w / path / to / dir" để theo dõi việc xóa thì tôi nhận được "tùy chọn xem không thể được cung cấp với một tòa nhà". Bất cứ ai có ý tưởng?
IBBoard


0

Một vài ý tưởng. Bạn có thể sử dụng straceđể xem ứng dụng của bạn đang làm gì, nhưng nó có thể tạo ra nhật ký nhật ký và có thể làm chậm hệ thống.

Một ý tưởng khác là sử dụng inotifywait, sau đó lsof/fuservào tệp để xem những gì đang sử dụng nó. Bạn có thể thử chạy tập lệnh này với mức độ ưu tiên cao (nếu có thể) để có thông tin chính xác nhất có thể. Nó có thể sẽ không bắt được unlinkcuộc gọi, vì tập tin sẽ biến mất trước khi sự kiện được gửi.


Tôi không thể. Tôi không biết nên chạy tiến trình nào vì tôi thấy các tệp bị xóa sau một thời gian. inotifywait sẽ không hoạt động vì PHP đang chạy dưới dạng CGI và có nhiều quy trình PHP với các ID khác nhau ngoài kia.
Vladislav Rastrusny

inotify được sử dụng để giám sát hệ thống tập tin, không phải các quy trình đang chạy. Đối với strace, bạn phải theo dõi quá trình cha mẹ chính bằng -fcờ, để theo dõi con cái.
Dan Andreatta

0

Mặc dù đề xuất kiểm toán của fenix có vẻ lý tưởng, bạn có thể thấy IDS hệ thống tệp như AIDE hữu ích. Thật không may, nó không chắc là đủ tốt cho những gì bạn đang cố gắng cô lập.

Tôi sẽ thường viết các kịch bản như một giải pháp cho các vấn đề như những gì bạn mô tả. Nếu bạn không thể thực hiện những gì bạn muốn với các giải pháp được đề xuất, hãy tự viết một cái gì đó. Nó thường không phức tạp lắm.


Có vẻ như, nó chỉ dành cho việc định vị các thay đổi tập tin. Không cho giám sát thời gian thực.
Vladislav Rastrusny
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.