Bagaimana cara menambahkan data koneksi sumber jaringan atau pengguna ke entri riwayat?

8

Saya ingin mengubah pengaturan riwayat untuk semua pengguna pada sistem yang saya kelola. Saya ingin memuat informasi dari terminal penghubung seperti dariwho

sysadmin:/ # who
sysadmin  pts/0        Mar 26 07:11 (sysadmin.doofus.local)

Saat ini saya memodifikasi riwayat saya dengan cara-cara berikut. Saya tahu bahwa banyak dari pengaturan ini telah dibahas di sini beberapa kali. Namun, saya menarik kode ini dari " Resep Administrasi Sistem Linux oleh: Juliet Kemp " sejak lama.

shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T  "

shopt -s histappend memperbaiki masalah ketika Anda memiliki beberapa terminal, informasi terbuka mungkin hilang.

PROMPT_COMMAND='history -n;history -a' meluas untuk memberikan penambahan waktu-nyata ke sejarah di beberapa terminal.

HISTSIZE=100000 HISTFILESIZE=100000 memperpanjang jumlah historyretensi

HISTTIMEFORMAT="%m/%d/%y %T + msgstr "awali setiap baris sejarah dengan cap waktu

Apa yang biasanya Anda dapatkan history

835  ls
836  cd ..

historyHasil saya yang dimodifikasi saat ini

5853  03/26/12 07:16:49  ls
5854  03/26/12 07:16:50  ll

Kembali dari historysaya ingin melihat

5853  03/26/12 07:16:49  sysadmin.doofus.local    ls
5854  03/26/12 07:16:50  sysadmin.doofus.local    ll

001  03/26/12 05:11:29  demo_user.doofus.local    cd
002  03/26/12 05:11:30  demo_user.doofus.local    ll

Saya tidak "menikah" untuk melihat DNSnama itu. Saya hanya ingin ada di sana jika menariknya dari whoatau lokasi lain tanpa perlu melakukan pencarian atau permintaan apa pun. Saya akan senang dengan alamat IP.

002  03/26/12 05:11:30  192.168.0.2    ll

Mengapa? Saya mengelola beberapa sistem di mana userid yang berbagi beberapa pengguna dari kelompok yang sama untuk melakukan tugas sehari-hari mereka. Ini akan memungkinkan saya untuk menghubungkan lokasi mereka yang sebenarnya & pengguna aktual dalam organisasi dengan apa yang mereka lakukan dalam sejarah.

Saya sadar bahwa ini tidak optimal dan ingin mengubahnya tetapi, ketika Anda berada di kapal seukuran kapal pesiar, Anda tidak berusaha membuat jepit rambut berputar. (Catatan: ketika Anda melakukannya, para penumpang mencoba untuk melemparkan Anda ke laut)

Lagi pula, sampai saya dapat memigrasikannya ke solusi yang lebih baik, saya ingin memiliki kemampuan pelacakan ini.

Juga, jika Anda memiliki rekomendasi apa pun yang sedang saya gunakan untuk historymodifikasi saya, saya akan senang mendengarnya.

Terima kasih,

Edit: 1

Saya tidak ingin menjalankan program lain atau harus mengkonfigurasi sesuatu tambahan "sesuai alasan."

Saya ingin menambahkan 0overhead, jika saya harus menambahkannya harus kecil.

Saya percaya pengguna saya, saya hanya ingin (jika terjadi sesuatu) untuk melihat yang mana dari 10 pengguna yang masuk ke sistem dengan pengguna yang sama: kata sandi yang melakukannya. Atau, itu mungkin bukan pengguna itu bisa saja dilupakan cronpada sistem yang melakukan koneksi sebagai pengguna untuk melakukan sesuatu. Atau aplikasi Ex: BMC Control-Myang menghubungkan sshdan menjalankan tugas. Ini bukan tentang menemukan "pengguna jahat" karena dapat melacaknya dengan upaya minimal.

Edit 2:

Sistem menjalankan SLES dan RHEL

2bc
sumber
1
Kedengarannya seperti proses akuntansi mungkin bermanfaat. Riwayat shell tidak pernah dirancang untuk masuk, dan jika Anda ingin menggunakannya, Anda harus memercayai semua pengguna Anda. Lihat pertanyaan terkait tentang kegiatan pemantauan dan jawaban terkait .
jw013
@ jw013 Terima kasih atas komentarnya. Namun, itu harus dikonfigurasi dan dikelola ditambah saya memberikan informasi yang saya baca saya akan lebih baik tidak termasuk direktori seperti /proc /devdan /homedirektori pengguna . Ini menambah overhead. Padahal historysudah direkam dan informasi koneksinya diketahui oleh sistem yang menghubungkan IP dll ... Informasi ini jika belum tersedia "secara statis" dapat diatur seperti itu atau disimpan dalam variabel atau file dan input ke historycatatan dan kinerja hit akan menjadi sangat kecil atau 0.
2bc
Jika ini di Linux, pertimbangkan untuk menggunakan auditd. Saya tidak yakin apakah lognya akan memberi Anda informasi yang cukup. Kesulitan dari apa yang Anda inginkan justru mengapa akun yang dibagikan begitu dikecewakan.
Gilles 'SO- stop being evil'
Ada di Linux, saya akan mengedit pertanyaan saya untuk membuatnya lebih jelas. auditdsangat banyak seperti inotifyAnda harus mengatakan apa yang harus dimonitor untuk perubahan. File individual, direktori, dll. Saya tidak ingin pergi ke tingkat konfigurasi itu. Sebenarnya (saya lakukan) tetapi pada dasarnya tidak terlalu peduli. Saya harus puppetmenangani hal-hal itu. auditddilengkapi dengan beban tambahan dan waktu untuk pengaturan juga. Jika akun memodifikasi sesuatu, saya masih ingin melihat kembali sejarah dan melihat siapa atau apa yang masuk dan mencoba.
2bc
2
hm, karena PROMPT_COMMAND=hanya menjalankan perintah normal sebelum prompt berikutnya, tidak bisakah Anda menulis fungsi memanggil sed / awk yang bekerja pada baris terakhir dari file histori untuk menambahkan informasi. lalu panggil fungsi itu PROMPT_COMMAND=untuk menambahkan data? itu akan menjadi peretasan tetapi harus melakukan pekerjaan.
llua

Jawaban:

1

Dari saran llua, kita dapat bekerja sedikit lebih banyak dengan sejarah. Tambahkan baris ke file BASH RC seluruh sistem, mungkin /etc/bash.bashrc.

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

Atur pendataan untuk "local6" di logger sistem Anda. Mungkin kira-kira seperti ini:

local6.*    /var/log/commands.log

Mulai ulang logger sistem. Mungkin mengatur rotasi file log. Keluar; Gabung; dan, sejarah sekarang ditulis ke /var/log/commands.log dalam format seperti ini:

tanggal waktu host nama logger: username [audit_pid]: perintah [return_val]

Ini bisa disesuaikan lebih lanjut dengan selera.

Christopher
sumber
1

Paragraf berikut menjelaskan gagasan secara umum dan ketinggalan zaman dalam beberapa aspek, tetapi Anda dapat menggunakan kemudian menggunakan yang terbaru dari halaman ini . Mari kita gunakan file besar ~ / .bash_history.archive (terpisah dari HISTFILE = ~ / .bash_history). Dan kemudian pada saat keluar dari setiap sesi bash memungkinkan menambahkan baris sejarah baru untuk itu.

Masalah pertama dengan pendekatan ini adalah: bagaimana membuat bash untuk memanggil skrip ini di setiap jalan keluar? Tentu jika Anda keluar dengan mengetikkan 'keluar' maka Anda dapat alias fungsi 'keluar' tapi saya menggunakan pintasan Ctrl-D untuk itu dan saya tidak bisa menemukan cara bagaimana menugaskannya kembali ke sesuatu tetapi tidak dibangun pada fungsi keluar.

Jadi upaya pertama adalah: melarang Ctrl-D oleh

export IGNOREEOF=10

dan tentukan kombinasi Ctrl-X ganda untuk memanggil fungsi keluar.

Tetapi pendekatan yang tepat adalah dengan menggunakan tramp keluar bash, yang merupakan solusi sempurna karena dipanggil terlepas dari cara Anda keluar dari bash: Ctrl-D, keluar, tutup jendela xterm.

trap 'archive_history' EXIT

Langkah berikut adalah menentukan baris awal di bash_history kami sehingga kami hanya dapat menyimpan baris baru dan memastikan bahwa kami menambahkan file sejarah.

export CURBASHSTART=`grep -v "^[ \t]*$" $HISTFILE | wc -l | awk '{print $1}'` CURBASHDATE=`date`

shopt -s cmdhist histappend

Itu yang kita butuhkan di awal bash - sekarang kita tahu dari mana sejarah garis saat ini (segar) dimulai. Untuk menyimpan riwayat, tambahkan bagian selanjutnya ke ~ / .bashrc Anda.

archive_history()
{
    HISTORYOLD=${HISTFILE}.archive
    CURTIME=`date`
    CURTTY=`tty`
    if  [ x$HISTDUMPPED = x ]; then
      echo "#-${HOSTNAME}-- ${CURBASHDATE} - ${CURTIME} ($CURTTY) ----" >>   $HISTORYOLD

      history $(($HISTCMD-${CURBASHSTART-0})) | sed -e 's/^[ ]*[0-9][0-9]* [ ]*//g'  >> $HISTORYOLD
      export HISTDUMPPED=1
    fi
}

exit ()
{
   archive_history
   builtin exit

}

File ~ / .inputrc harus berisi baris berikutnya untuk mendefinisikan kembali jalan pintas ke Ctrl-x x. Pada percobaan pertama Anda mungkin merasa bahwa itu adalah jalan pintas yang mengerikan, tetapi kemudian Anda terbiasa - percayalah.

$if Bash
# to exit through calling exit function which will archive the history
"\C-x\C-x": "exit\n"
# to dump history we have so far
"\C-x\C-w": "archive_history\n"

$endif

Juga jika sesi bash Anda adalah sesi masuk dan Anda keluar dengan memanggil ' logout', maka Anda dapat menambahkan baris berikutnya ke~/.bash_logout

archive_history

Setelah semua tindakan yang disebutkan selesai, Anda dapat menemukan ~/.bash_history.archivefile Anda yang berisi bagian-bagian seperti ini

#-belka-- Sun Oct 12 21:52:13 EDT 2003 - Sun Oct 12 21:53:25 EDT 2003 (/dev/pts/13) ----
exit
aptitude
exit
#-washoe-- Sun Oct 12 18:03:16 EDT 2003 - Sun Oct 12 23:06:48 EDT 2003 (/dev/pts/3) ----

exit
cd progr/letters/resume/
e resume.tex

yang secara umum dapat dibaca sebagai file histori biasa jika diinginkan.

Rahul Patil
sumber