Saya tahu saya dapat melihat file terbuka dari suatu proses menggunakan lsof
pada saat itu di mesin Linux saya. Namun, suatu proses dapat membuka, mengubah, dan menutup file dengan sangat cepat sehingga saya tidak akan dapat melihatnya ketika memantau menggunakan skrip shell standar (misalnya watch
) seperti yang dijelaskan dalam "monitor file proses terbuka di linux (real-time)" .
Jadi, saya pikir saya sedang mencari cara sederhana untuk mengaudit suatu proses dan melihat apa yang telah dilakukannya dari waktu ke waktu. Akan lebih bagus jika juga memungkinkan untuk melihat koneksi jaringan apa yang dibuatnya (mencoba) dan agar audit dimulai sebelum proses mendapat waktu untuk berjalan tanpa audit dimulai.
Idealnya, saya ingin melakukan ini:
sh $ audit-lsof /path/to/executable
4530.848254 OPEN read /etc/myconfig
4530.848260 OPEN write /var/log/mylog.log
4540.345986 OPEN read /home/gert/.ssh/id_rsa <-- suspicious
4540.650345 OPEN socket TCP ::1:34895 -> 1.2.3.4:80 |
[...]
4541.023485 CLOSE /home/gert/.ssh/id_rsa <-- would have missed
4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80 | this when polling
Apakah ini mungkin menggunakan strace
dan beberapa bendera untuk tidak melihat setiap panggilan sistem?
sumber
Jawaban:
Menjalankannya dengan
mungkin akan cukup.
Anda harus menggunakan
-o
opsi untuk menempatkan keluaran strace di tempat lain selain konsol, jika prosesnya dapat mencetak ke stderr. Jika proses Anda bercabang, Anda juga perlu-f
atau-ff
.Oh, dan Anda mungkin juga ingin
-t
, sehingga Anda dapat melihat kapan panggilan terjadi.Catatan, Anda mungkin perlu mengubah daftar panggilan fungsi tergantung pada apa proses Anda - saya perlu menambahkan
getdents
misalnya, untuk mendapatkan sampel yang lebih baik menggunakanls
:sumber
-o
untuk mendorong output ke file. Kemudian Anda dapat berjalantail -F strace.output
di terminal lain untuk mendapatkan pembaruan "langsung".strace
ke proses yang berjalan dengan-p PID
opsi.-y
ke "[p] rints path yang terkait dengan argumen deskriptor file"