Menggunakan Linux, saya ingin melacak executable yang dieksekusi atas nama saya, termasuk seluruh baris perintah (dalam praktiknya, setiap exec * () dilakukan sebagai pengguna saya sendiri). Suatu program yang tidak saya kendalikan seharusnya, untuk menangani suatu tugas, untuk mengeksekusi program yang saya lewati, tetapi saya ingin memastikan ia melakukannya, dan opsi apa yang digunakannya. Program yang tidak saya kontrol itu licik, dan tampaknya mengubah perilaku tergantung pada nama program yang seharusnya dijalankan untuk tugas tersebut, jadi saya tidak bisa meneruskan skrip shell yang akan mencatat info dan memanggil yang asli program.
Apakah mungkin bagi saya untuk diberitahu tentang semua eksekutif * () yang dilakukan sebagai pengguna saya pada sistem di Linux, termasuk baris perintah penuh? Pendek berjalan ps
dalam satu lingkaran, yaitu. Saya lebih suka melakukannya secara langsung pada sistem tempat saya bekerja dan tidak memerlukan akses root, tetapi jika perlu saya dapat menelurkan sistem di mana saya memiliki akses root, instal program dan selidiki di sana.
Menggunakan Ubuntu 12,4 LTS.
sumber
audit
, tetapi 'seluruh baris perintah' di shell juga dapat memengaruhi proses anak menggunakan pengaturan pengalihan / perpipaan dan envvar serta berisi pergantian / ekspansi, kutipan tidak signifikan dan jarak, dan kontrol struktur sukadoa && dob
, dan Anda tidak akan mendapatkannya.Jawaban:
Anda harus mengonfigurasi
auditd
untuk merekamexecve
acara. Contoh pada RHEL5:Saya mengabaikan peringatan lengkung dan sepertinya tidak masalah tetapi Anda dapat menggunakan
-F arch=b64
atau-F arch=b32
mengaturnya jika Anda mau.Hasil di atas adalah:
Itu jelas cepat dan kotor tetapi itulah dasar bagaimana Anda melakukannya. Apa yang perlu Anda lakukan mungkin sangat bergantung pada apa yang Anda coba lakukan dengan tepat. Anda dapat mengurangi aliran audit menggunakan berbagai filter dalam
auditctl
perintah tetapi saya tidak tahu informasi itu sehingga saya tidak tahu apa yang harus dimasukkan. Jika Anda memerlukan sesuatu yang lebih spesifik, saya sarankan Anda memeriksa halaman manual atau mengirim komentar untuk jawaban ini dan saya akan memperbaruinya lagi.Harapan yang membantu mendorong Anda ke arah yang benar.
EDIT:
Karena pertanyaan Anda melibatkan melihat pengguna tertentu, saya dapat menunjukkan kepada Anda bahwa:
Identik dengan yang di atas, tetapi hanya
execve
oleh seseorang yang menjalankan dengan ID pengguna efektif yang16777216
akan dicatat. Jika Anda perlu menentukan nilai penggunaloginuid
(yang awalnya mereka login ke sistem) maka Anda memfilter denganauid
:Filter AUID / loginuid akan berguna misalnya jika pengguna akan melakukan
su
atausudo
melakukan root. Dalam situasi itu akan ada banyak hal berjalan sebagai root, tetapi Anda hanya peduli dengan hal-hal yang ditendang oleh pengguna yang bersangkutan.auditctl
juga memungkinkan Anda menumpuk filter sehingga Anda dapat memfilter dengan keduanyaeuid
danauid
:sumber
Anda telah menanyakan sesuatu yang sederhana. Saya telah membuat contoh dengan
mplayer
tetapi saya kira itu dapat disesuaikan dengan situasi lain:Seperti yang Anda lihat ini sangat sederhana: Ini mem-parsing argumen pertama, karena merupakan file, log dibuat menjadi file pusat
$LOG
dan digabungkan menjadi file (yang selalu memiliki namamplayer.log
yang sama di direktori yang sama.Jadi, pengguna dapat memperoleh film terbaru yang telah ia baca di setiap direktori.
sumber