Untuk mengetahui IP yang dieksekusi perintah tertentu di linux menggunakan ssh

10

Ada server yang diakses oleh banyak pengguna menggunakan ssh. Saya mencoba mencari tahu pengguna mana yang menjalankan perintah tertentu.

Saya dapat mengetahui daftar pengguna yang saat ini mengakses server menggunakan who Juga saya akan tahu daftar perintah yang dieksekusi menggunakan history.

Tetapi bagaimana cara mengetahui pengguna mana yang menjalankan perintah seperti cp file1.sh file2.shdi server? Pengguna telah menjalankan perintah dan keluar

Manu K Mohan
sumber

Jawaban:

4

Setiap pengguna baru yang terhubung menghasilkan sshdsesi baru dengan PID tertentu. Anda bisa menggunakan pstreeuntuk mencetak perintah mana yang diwarisi dari sshdsesi mana , dan kemudian periksa silang PID ini /var/log/auth.log.

Contoh (dianonimkan): Saya masuk ke server jauh dengan 3 sesi simultan, dengan pengguna jarak jauh yang sama. Saya sekarang ingin mencari tahu dari IP mana klien datang yang menjalankan perintah watch date.

$ pstree -p | grep watch
        |           |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar  7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log

pstree -pmenunjukkan bahwa watchperintah diwarisi dari sshddengan PID 15243. greping untuk PID ini di /var/auth/auth.logmenunjukkan bahwa itu adalah IP 12.34.56.78 yang memulai sesi ini. Karena itu, ini juga pengguna yang memulai watch.

Adapun untuk menemukan historysecara khusus pengguna ini, itu tidak dapat dilakukan dari apa yang dapat saya lihat ketika semua pengguna jarak jauh menggunakan pengguna SSH lokal yang sama. Juga, itu dapat dengan mudah dipalsukan / tidak diaktifkan / dll, jadi itu tidak benar-benar dapat diandalkan. Jika disimpan ke file histori, maka Anda bisa mencari cpperintah dan melihat kebelakang dalam file, tetapi jika tidak ada, maka tidak ada banyak yang harus dilakukan.

Daniel Andersson
sumber
Dikatakan kesalahan ini grep: /var/log/auth.log: No such file or directory:-(
Manu K Mohan
@ManuKMohan: Anda belum menyatakan sistem yang Anda gunakan. Di bawah RHEL / Fedora / Scientific Linux / dll, file yang relevan adalah /var/log/secure.
Daniel Andersson
Anderson Saya menggunakan Ubuntu
Manu K Mohan
@ManuKMohan: Jika /var/log/auth.log.1, dll., Ada, maka cobalah untuk melihat apakah mereka mengandung info tersebut. Setelah itu, restart rsyslog( sudo service rsyslog restart) dan lihat apakah itu mulai mengisi auth.log, yang seharusnya sudah dilakukan. SSHD log ke /var/log/auth.logsecara default di Ubuntu , jadi kecuali Anda telah secara eksplisit mengubah target logging melalui /etc/ssh/ssd_configatau /etc/syslog.conf(Anda dapat memeriksa ke file authlevel mana login di sini), itu harus ada di sana. Jika tidak: ada sesuatu :-).
Daniel Andersson
1

Anda bisa menambahkan dua baris ini ke / etc / profile atau / etc / bashrc untuk mencatat semua perintah yang dijalankan oleh bash:

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"                                                                                                  
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Ini akan menggunakan syslog untuk merekam setiap perintah yang dieksekusi bersama dengan pengguna yang melakukannya dan itu alamat IP dalam format seperti ini:

Jan  8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]

Selain itu Anda dapat menambahkan baris di bawah ini ke konfigurasi syslog Anda (/etc/syslog.conf) untuk mengarahkan ulang pesan local3 ke file tertentu.

local3.*                                                /var/log/prompt.log
Filipe
sumber
Sekarang syslog-ngsebagai perbaikan dan file konfigurasi /etc/syslog-ng/syslog-ng.conf .
Timo
1

Anda bisa menggunakan snoopy untuk ini.

Anda harus mengonfigurasinya untuk mencatat variabel lingkungan khusus (SSH_CLIENT) dengan menentukan IP =% {env: SSH_CLIENT} dalam definisi format pesan log (./configure flag atau dapat dikonfigurasi di snoopy.ini sejak versi 2.x).

Pengungkapan: Snoopy maintainer di sini.

Bostjan Skufca
sumber
0

Dengan asumsi bahwa Anda menggunakan bash, historyhanya akan menunjukkan kepada Anda riwayat baris perintah ANDA . Secara default, ini membaca ~/.bash_historyuntuk histori. Perhatikan bahwa ini dapat diubah (meskipun sangat tidak mungkin) dengan melakukan sesuatu seperti HISTFILE=/home/userFoo/.my_alt_history.

Dengan asumsi bahwa Anda melakukan root pada kotak, Anda dapat memindai semua direktori pengguna dan membaca histori mereka untuk melihat siapa yang menjalankan perintah itu.

pengguna1146334
sumber
Oh, dan jika mereka jahat, mereka bisa dengan mudah menghapus perintah ini dari sejarah mereka. Jika mereka aktif di kotak menjalankan perintah, Anda bisa melihatnya denganps -aux | grep "cp file1.sh file2.sh"
Semua pengguna secara jarak jauh mengakses nama pengguna server yang sama menggunakan ssh. Saya ingin tahu IP mana yang telah diakses untuk pengguna ini dan dan menjalankan perintah.
Manu K Mohan
Ini bukan kebijakan yang baik untuk meminta banyak pengguna berbagi nama pengguna dan kata sandi.
pjc50