Saya ingin mengeksekusi skrip ketika proses root baru muncul. (di Linux) Bagaimana saya bisa melakukan itu?
Terima kasih
linux
unix
monitoring
process
pemain langit
sumber
sumber
Jawaban:
Ini kedengarannya seperti pekerjaan yang sempurna untuk auditd. Setelah Anda menjalankan audit, layanan default pada sistem berbasis RedHat modern, Anda dapat membuat aturan yang akan melakukan apa yang Anda inginkan dengan menjalankan
auditctl -a task,always -F uid=0
Melanggar aturan ini, menggunakan halaman manual secara berlebihan, kami menemukan bahwa:
Jadi selalu tuliskan catatan untuk tindakan ini setiap kali garpu atau panggilan sistem kloning keluar.
Opsi terakhir dapat dianggap sebagai string filter, dalam penggunaan kami
-F uid=0
hanya membatasi kita untuk kasus-kasus di mana uid dari pemilik proses adalah 0.Perhatikan bahwa aturan ini dapat dijalankan pada saat dijalankan dengan memastikan bahwa auditd dikonfigurasi dengan benar, dan menambahkan aturan
-a task,always -F uid=0
ke file yang relevan untuk distribusi Anda, kemungkinan besar
/etc/audit/audit.rules
Hanya perlu diingat bahwa ini akan sangat berisik, dan siapa pun yang melakukan tinjauan log Anda harus siap untuk itu.
sumber
Saya tidak berpikir ada cara yang bersih untuk melakukan ini tanpa mengkompilasi ulang kernel Anda dengan CONFIG_PROC_EVENTS dan / atau CONFIG_KPROBES (walaupun saya ingin tahu apakah ada cara untuk melakukannya, jadi saya menjawab pertanyaan Anda).
Saya memang punya ide untuk menggunakan iwatch / inotify untuk pembuatan direktori di dalam / proc tetapi tampaknya tidak berfungsi, begitu pula auditctl. Sepertinya pilihan terbaik Anda, meskipun kotor, adalah untuk terus mengurai ps untuk perubahan dari skrip. Kode Perl berikut akan melakukannya, meskipun cenderung akan melewatkan beberapa dan mengabaikannya
ps
(karena hal itu akan memicu dirinya sendiri):sumber
Cara terbaik yang dapat saya pikirkan adalah membangun perpustakaan snoopy . snoopy adalah perpustakaan bersama yang sangat kecil yang terhubung
/etc/ld.so.preload
dan membungkusexecve()
panggilan sistem. Dapat dikonfigurasi untuk mencatat semuaexec()
, atau hanya yang dari root. Dalam inkarnasi saat ini, snoopy log ke syslog setiap kali acara yang cocok (syscall toexecve()
) terjadi. Ini bukan program besar (beberapa ratus baris kode, paling banyak), dan dapat dimodifikasi tanpa banyak kesulitan untuk mengeksekusi skrip alih-alih (atau selain) mencatat aktivitas. Snoopy ditulis dalam C.Beberapa hal yang perlu diperhatikan:
sumber