Bagaimana cara mencatat semua perintah shell UNIX yang dikirimkan oleh semua pengguna?

8

Apakah ada cara yang elegan untuk mencatat setiap perintah yang dikirimkan dalam semua shell pada mesin? Ini dalam konteks server Ubuntu yang jarang digunakan, di mana saya adalah satu-satunya pengguna manusia. (Ada beberapa akun pengguna yang digunakan oleh sistem otomatis.)

Saya ingin ini tidak mengganggu dan overhead rendah, jadi saya akan senang jika ada metode sederhana yang melibatkan sesuatu seperti script.

jl6
sumber

Jawaban:

9

Sejak awal waktu (sebenarnya berasal dari masa ketika orang harus benar-benar membayar uang nyata per siklus komputer yang mereka gunakan) Unix dan klonnya telah memiliki sistem yang disebut Proses Akuntansi ( acct) bawaan. Hal ini memungkinkan administrator sistem untuk mengetahui dengan tepat apa yang dilakukan pengguna mereka dan dapat menagih mereka sesuai.

The acctfasilitas masih ada di sebagian besar sistem Unix dan Linux sampai hari ini.

Situs ini: http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html memberi tahu Anda cara mengaktifkannya.

Majenko
sumber
Bisakah ini juga digunakan untuk mencatat pengguna yang melakukan sudo dan su, dan perintah root mana yang sesudahnya?
Daniel Beck
Saya percaya ini mencatat setiap perintah yang dijalankan, dikunci oleh pengguna, tty, dll. Anda dapat mencocokkan perintah pada tty dengan pengguna yang masuk ke tty tersebut untuk melacak apa yang pengguna atau sudo mereka lalui.
Majenko
Terima kasih, saya sama sekali tidak mengetahui fitur ini. Pembacaan cepat dari halaman manual menunjukkan bahwa logging berlanjut sampai kondisi ruang disk rendah tercapai - karenanya mungkin kebutuhan untuk skrip logrotate.
j6
saya pikir proses akuntansi baru saja login program mana yang berjalan, bukan perintah dengan semua argumennya?
Sirex
2

Ini adalah cara yang sangat bagus dan cepat untuk mencatat semua perintah shell :

Langkah 1:

Gunakan editor teks favorit Anda untuk membuka / etc / bashrc dan menambahkan baris berikut di akhir:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Langkah 2:

Setel syslogger untuk menjebak local6 ke file log dengan menambahkan baris ini di file /etc/syslog.conf:

local6.*                /var/log/cmdlog.log

[Lihat Posting Blog Lengkap Di Sini]

serigala menangis
sumber
Saya memperingatkan pengguna akan dapat menonaktifkan ini mengatur ulang variabel dan karena dieksekusi "sebelum mengeluarkan setiap prompt utama" fakta ini tidak akan dicatat.
dmckee --- ex-moderator kitten
2

Anda bisa menggunakan snoopy .

Sangat mudah untuk menginstal dan menghapus (tidak perlu modul kernel atau patching). Perhatikan bahwa ini bukan solusi audit yang tepat dan dapat dengan mudah dielakkan.

Pengungkapan: Saya pengelola snoopy saat ini.

Bostjan Skufca
sumber
Bostjan Skufca juga memberikan instruksi tambahan untuk menginstal snoopy di Ubuntu di sini dan juga dalam komentar tambahan di utas yang sama di sini .
karel
+1 untuk snoopy; ini menyediakan log perintah dan argumen yang bagus di /var/log/auth.log
David Goodwin