Saya ingin mendapatkan log dari semua proses yang diluncurkan dengan waktu mereka diluncurkan dan argumen mereka diluncurkan. Apakah ini mungkin di Linux?
55
Titik awal Anda harus diaudit.
Coba sesuatu seperti ini:
apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve
The audit system is disabled
Di mana saya bisa mengaktifkannya?chmod 0750 /sbin/audispd
tetapi masih tidak berfungsi (Debian Wheezy)Unable to set audit pid, exiting
tetapi saya kira masalah sebenarnya adalah bahwa sistem tersebut berjalan dalam wadah LXCSaya perlu melakukan ini, kecuali (1) Saya tidak membutuhkan waktu dan (2) Saya hanya tertarik pada proses yang dimulai oleh proses tertentu, dan anak-anaknya serta keturunan selanjutnya. Juga, di lingkungan saya menggunakan, itu tidak mungkin untuk mendapatkan
auditd
atauaccton
, tapi adavalgrind
.Awali yang berikut ini ke proses yang menarik di baris perintah:
Informasi yang Anda butuhkan ada di log output yang ditampilkan di STDERR.
sumber
memcheck
alat ini. Untuk menonaktifkan alat dan logging terkait, dan hanya mencetak penciptaan perintah baru (selain output biasa program anda), gunakan perintah berikut ini sebagai gantinya:valgrind --tool=none --trace-children=yes [command and args here]
. Setiap kali subproses muncul, Valgrind kemudian akan mencatat perintah lengkap, termasuk argumen yang diteruskan ke sana.Anda bisa menggunakan snoopy untuk ini.
Sangat mudah untuk menginstal, dan karena 2.x dapat mencatat data sewenang-wenang (argumen, variabel lingkungan, cwd, dll.).
Pengungkapan: Snoopy maintainer di sini.
sumber
Anda dapat menjalankan startmon dan mengikuti output standarnya, Ctrl-C saat selesai. Berikut ini cara mengkompilasi dan menjalankan startmon pada distro yang diturunkan Red Hat baru-baru ini (RHEL, Fedora, CentOS):
Pada Debian (dan Ubuntu dll), baris pertama dari perubahan di atas menjadi:
Atau Anda dapat mencoba
execsnoop
skrip di perf-tools, lihat jawaban ini . Secara default hanya 8 argumen pertama yang ditampilkan (9 termasuk nama program); Anda dapat meningkatkan ini melaluiJika Anda tidak memiliki akses root ke sistem, yang terbaik yang dapat Anda lakukan adalah tetap melakukan polling
/proc
dan berharap itu menangkap segalanya (yang tidak akan terjadi), tetapi untuk kelengkapannya adalah skrip untuk melakukan itu (saya telah membuat duplikat-penghapusan untuk menyederhanakan output) - walaupun ini tidak sebagus melacak mereka dengan benar dengan salah satu metode di atas, itu memang memiliki sedikit keuntungan menampilkan pemisah antara argumen baris perintah, jika Anda perlu memberitahu perbedaan antara spasi di dalam argumen dan ruang antara argumen. Script ini tidak efisien karena menggunakan CPU (well, salah satu core-nya) 100% dari waktu.Anda juga dapat menambal
execsnoop
untuk memberi tahu Anda secara lebih eksplisit argumen mana yang:grep -v sub.*arg < execsnoop > n && chmod +x n && mv n execsnoop
sumber
CONFIG_FTRACE
danCONFIG_KPROBES
melaluibrendangregg/perf-tools
Di shell lain:
Shell pertama menunjukkan data format:
CONFIG_PROC_EVENTS
Sesi sampel:
CONFIG_PROC_EVENTS
mengekspos peristiwa ke userland melalui soket netlink .proc_events.c diadaptasi dari: https://bewareofgeek.livejournal.com/2945.html
GitHub upsatream .
Namun saya tidak berpikir bahwa Anda dapat memperoleh data proses seperti UID dan memproses argumen karena
exec_proc_event
mengandung data yang sangat sedikit: https://github.com/torvalds/linux/blob/v4.16/include/uapi/linux/cn_proc .h # L80 Kita dapat mencoba untuk segera membacanya/proc
, tetapi ada risiko bahwa proses selesai dan yang lain mengambil PID-nya, sehingga tidak dapat diandalkan.Diuji di Ubuntu 17.10.
sumber
Anda juga dapat menggunakan di atas untuk melihat penggunaan sumber daya dengan proses. Ini adalah alat yang berguna untuk mencatat dan menganalisis penggunaan sumber daya di setiap bagian waktu
sumber
Anda dapat mencoba
cat ~/.bash_history
Adasystem log viewer
, ini dapat membantu Anda keluar.sumber
~/.bash_history
hanya berisi perintah yang sudah saya jalankan di terminal, rupanya. Saya mencari log semua program yang dijalankan, misalnya ketika saya mengklik ikon untuk membuka klien email saya, gedit, atau saya membuka browser saya, dan browser saya menjalankan proses lain dengan sendirinya. jawaban new123456 berhasil.history
adalah cara biasa mengakses informasi ini.