Audit file di Linux: bagaimana cara menonton pohon direktori untuk dihapus?

9

Saya memiliki skrip forum yang berjalan di server dan entah bagaimana sejumlah kecil lampiran mulai hilang. Saya ingin mencari tahu apa yang menghapus mereka dan kapan. Bagaimana saya bisa mengatur Linux auditd (auditctl) untuk menonton pohon direktori (lampiran disimpan di dalam pohon direktori multi-level) untuk mengawasi penghapusan file di sana?

Mungkin saya harus menggunakan beberapa alat lain untuk ini?

Vladislav Rastrusny
sumber

Jawaban:

8

Ini adalah jawaban yang saya tulis untuk pertanyaan sebelumnya:

Umumnya jika Anda ingin tahu apa proses / pengguna / file lakukan tanpa harus menjalankannya 24/7 Anda menggunakan auditctl.

Dengan anggapan Anda memiliki kontrol audit kernel terbaru-ish harus operasi sederhana. (Ini dalam Debian-fu, jika Anda menjalankan terjemahan Red Hat yang sesuai)

# apt-get install auditd

Pastikan itu berjalan (/etc/init.d/auditd status).

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

Ganti b64 dengan b32 jika Anda menjalankan lengkungan 32-bit, buka dapat diganti dengan panggilan sistem apa pun atau kata 'semua'

Untuk lebih lanjut baca manual auditctl.

Anda dapat menggunakan metode ini dan memintanya untuk menonton pemutusan sistem 'tautan'.

Parameter -w berguna untuk menonton file / direktori, tetapi ketika halaman manual menjelaskan ada peringatan.

-w path Menyisipkan arloji untuk objek sistem file di path. Anda tidak dapat memasukkan arloji ke direktori tingkat atas. Ini dilarang oleh kernel. Wildcard juga tidak didukung dan akan menghasilkan peringatan. Cara jam tangan bekerja adalah dengan melacak inode secara internal. Ini berarti bahwa jika Anda menaruh arloji di direktori, Anda akan melihat apa yang tampak sebagai peristiwa file, tetapi itu sebenarnya hanya pembaruan data meta. Anda mungkin melewatkan beberapa acara dengan melakukan ini. Jika Anda perlu menonton semua file dalam direktori, disarankan untuk menempatkan arloji individual di setiap file. Tidak seperti aturan audit syscall, jam tangan tidak memengaruhi kinerja berdasarkan jumlah aturan yang dikirim ke kernel.

Aaron Tate
sumber
Saya tidak bisa :( Saya memiliki PHP yang berjalan dalam mode CGI. Itu selalu merupakan proses baru di sana. Juga, saya ingin tidak menonton satu proses, tetapi menonton bagian tertentu dari sistem file untuk perubahan.
Vladislav Rastrusny
Ya, lihat hasil edit, saya buat, ada parameter untuk menonton direktori filesystem, tetapi dengan peringatan, atau file.
Aaron Tate
Ada sekitar 1000 folder dan sekitar 50 ribu file. Jadi ini juga tidak akan berhasil ... :(
Vladislav Rastrusny
Secara umum selama Anda mengetahui peringatan, Anda harus dapat melanjutkan dan menempatkan arloji di direktori tingkat atas yang berisi folder yang ingin Anda tonton.
Aaron Tate
Saya perlu melakukan hal yang sama (perhatikan folder untuk penghapusan sehingga saya dapat menemukan PID / nama proses yang melakukannya), tetapi ini sepertinya tidak berhasil (setidaknya pada kernel 3.x). Jika saya menjalankan "auditctl -a entry, selalu -F arch = b64 -S batalkan tautan -w / path / ke / dir" untuk melacak penghapusan maka saya mendapatkan "opsi tontonan tidak dapat diberikan dengan syscall". Ada yang punya ide?
IBBoard
1

Mungkin incron bisa digunakan?

PTman
sumber
Itu tidak memungkinkan menonton pohon secara keseluruhan. Hanya per-direktori seperti yang saya lihat.
Vladislav Rastrusny
0

Beberapa ide. Anda dapat menggunakan straceuntuk melihat apa yang sedang dilakukan aplikasi Anda, tetapi mungkin menghasilkan log log dan dapat memperlambat sistem.

Gagasan lain adalah menggunakan inotifywait, lalu lsof/fuserpada file untuk melihat apa yang menggunakannya. Anda dapat mencoba menjalankan skrip ini dengan prioritas tinggi (jika Anda bisa) untuk mendapatkan informasi seakurat mungkin. Mungkin tidak akan menerima unlinkpanggilan, karena file akan hilang sebelum acara dikirimkan.

Dan Andreatta
sumber
Saya tidak bisa. Saya tidak tahu proses untuk menjalankan strace mana karena saya menemukan file yang dihapus setelah beberapa waktu. inotifywait juga tidak akan berfungsi karena PHP berjalan sebagai CGI dan ada banyak proses PHP dengan ID yang berbeda di luar sana.
Vladislav Rastrusny
inotify digunakan untuk memonitor sistem file, bukan proses yang berjalan. Untuk strace, Anda harus melacak proses induk induk dengan -fbendera, untuk mengikuti anak-anak.
Dan Andreatta
0

Meskipun rekomendasi auditix fenix tampak ideal, Anda dapat menemukan IDS sistem file seperti AIDE bermanfaat. Sayangnya, tidak mungkin cukup halus untuk apa yang Anda coba isolasi.

Saya akan sering menulis skrip sebagai solusi untuk masalah seperti apa yang Anda gambarkan. Jika Anda tidak dapat mencapai apa yang Anda inginkan dengan solusi yang disarankan, tulis sendiri sesuatu. Ini seringkali tidak terlalu rumit.

Warner
sumber
Tampaknya, ini hanya untuk mencari perubahan file. Bukan untuk pemantauan waktu nyata.
Vladislav Rastrusny