Các tập tin biến mất trên máy chủ linux


13

Tôi đã có 4 tệp cụ thể dường như tiếp tục biến mất khỏi thư mục nhà của người dùng. Theo như chúng tôi biết, không có cronjobs hoặc các tác vụ tự động khác sẽ loại bỏ chúng. Tôi đã thiết lập audd trên chúng nhưng nhật ký không thực sự hiển thị bất cứ điều gì đáng quan tâm. Tôi có thể thấy tiện ích sao lưu của chúng tôi truy cập chúng mỗi tối cho đến khi chúng không còn ở đó nữa, nhưng không có gì khác. Có bất cứ điều gì có thể khiến những tập tin đó bị xóa sẽ xảy ra xung quanh audd không?

Các tập tin trong câu hỏi là:

/home/username/.bashrc
/home/username/.bash_profile

cũng như một vài tệp trong thư mục .ssh của người dùng đó. Bản sao của các tệp này được đặt vào thư mục con được gọi là "trình giữ" cũng bị xóa cùng một lúc. Thay đổi quyền trên 000 thành 000 và sở hữu chúng đã được root.

Hiện tại tôi đã có thiết lập inotifywait để đăng nhập tạo, xóa, di chuyển trên thư mục con đó, vì vậy hy vọng rằng nó sẽ bật lên một cái gì đó, mặc dù nó không đăng nhập nhiều ngoài khi nó xảy ra, không phải là nguyên nhân gây ra nó.


1
Vui lòng thêm tên và đường dẫn của họ vào bài viết của bạn, nó có thể giúp đỡ.
Shadok

2
Ngoài ra đăng nhật ký Audd có thể hữu ích.
Janne Pikkarainen

3
Ngoài ra, bạn có thể thử tạo các tệp được sở hữu dưới dạng root và chmod 000 để xem liệu chúng có còn bị xóa không (hoặc nếu điều đó khiến người khác phàn nàn / lỗi).
đa thức

5
Ngoài chmod 0000, bạn có thể thử chattr + i để cố gắng ngăn chặn ngay cả root khỏi nó
mer

1
lưu ý rằng chattr chỉ giúp hệ thống tập tin ext. nhưng một chattr sẽ giúp. :-) Bạn cũng có thể sử dụng SELINUX thay vì chattr để ngăn các tệp đó bị sửa đổi. nhưng IMHO việc xóa phải đến từ một quá trình hoặc người dùng.
JMW

Câu trả lời:


20

Giải pháp 1 : systemtap
Bạn có thể sử dụng systemtap để hiển thị tất cả các PID đang cố sử dụng unlink () trên inode của .bashrc.bash_profilecác tệp.

Cài đặt systemtap và các ký hiệu gỡ lỗi cho kernel của bạn.

Tạo một tệp có tên unlink.stapvới nội dung sau:

probe syscall.unlink
{
    printf ("%s(%d) unlink (%s) userID(%d)\n", execname(), pid(), argstr, uid())
}

Sau đó chạy nó với sudo stap unlink.stap

Giải pháp 2 : inotify
Bạn cũng có thể sử dụng inotify để xem khi nào tệp bị xóa.

Giải pháp 3 : ftrace
Một giải pháp khác là sử dụng ftrace :

trace-cmd record -e \*unlink\*

Đợi tệp bị xóa, nhấn CTRL + C để dừng trace-cmd record ..., sau đó chạy:

trace-cmd report

Giải pháp 4 :
Cài đặt bpftrace bpftrace, sau đó chạy:

bpftrace -e 'tracepoint:syscalls:sys_enter_unlink* { printf("%s %s\n", comm, str(args->pathname)); }'

5

Ngoài câu trả lời của micea, bạn có thể chattr + i các tệp dưới dạng root và xem có gì ghi lại lỗi khi cố xóa chúng không.


4

Bạn có chắc chắn rằng chính người dùng không (vô tình) xóa chúng?

Tôi đã có một số người dùng không biết gì (Windows) có cùng vấn đề. Hóa ra họ đã tự xóa các tệp đó mỗi lần họ truy cập thư mục chính của họ với ứng dụng khách ftp. Họ nhận thấy các tệp .xxxx (ứng dụng khách ftp không ẩn chúng) và xóa "sự lộn xộn".

Tôi chưa bao giờ tự làm điều đó cho đến khi một trong số họ phàn nàn về các tập tin xuất hiện lại một cách tự nhiên mà anh ta đã xóa vài ngày trước đó.


2
Hãy tin tôi, tôi sẽ thích nó dễ dàng.
Chad P

Điều này thật buồn cười :)
chụp

3
Bây giờ thì thật buồn cười .... Không nhiều lắm khi nó xảy ra và tôi không thể hiểu chuyện gì đang xảy ra. @Chad P: Vui lòng cho chúng tôi biết những gì bạn tìm thấy. Tôi thấy cái này khá tò mò.
Tonny

3

Chúng tôi sử dụng tập lệnh đăng xuất bash (~ / .bash_logout) để xóa một số tệp khi đăng xuất - bạn có thể kiểm tra xem liệu bạn có thiết lập đó không, có lẽ với một quả cầu ngón tay mập mạp trong đó.


2

Có vẻ giống như một kẻ xâm nhập hơn, người đang thực hiện một tên tệp find / home / user -name -exec rm -f {} \; sau tất cả lén lút của mình :). Chỉ cần đoán, bởi vì bạn đã đề cập rằng các tập tin sao lưu cũng đang bị xóa.


1

Để tránh mất tập tin và nội dung của chúng, bạn có thể thiết lập libtrash thông qua LD_PRELOAD. Sử dụng libtrash bạn có thể thực hiện một số điều nhưng những điều có thể thú vị với bạn là

INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN

Bài viết hay về libtrash có thể được tìm thấy ở đây

Một điều khác mà bạn đề cập, đó là bạn đã chọn các tập tin để root và chúng vẫn bị xóa. Đó là bởi vì / home / tên người dùng được sở hữu bởi tên người dùng; và nếu dir đã nói mod 755; sau đó bất kỳ tệp hoặc thư mục nào trong thư mục đó thuộc sở hữu của bất kỳ ai có thể bị xóa bởi người dùng; ngay cả khi nó là tập tin gốc hoặc dir. Về cơ bản, thực tế là việc xóa tệp trong thư mục có nghĩa là thay đổi nội dung thư mục và người dùng có 7 (trong 755) thư mục đó để anh ta có thể làm bất cứ điều gì mình muốn.

Có nhiều cách để chặn điều này như những người khác đã đề xuất thông qua chattr trên các hệ thống tệp ext để đặt các tệp là bất biến (+ i). Sau đó, người ta sẽ cần hủy đặt cờ bất biến trước khi thực hiện bất kỳ thay đổi nào đối với tệp / dir có cờ + i. Cờ / chattr bất biến chỉ có thể được sử dụng bởi root.

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.