Tampilan langsung perintah shell Linux yang dijalankan oleh pengguna lain?

27

Apakah mungkin bagi pengguna root di Linux untuk memiliki tampilan real-time (atau mendekati waktu-nyata) dari perintah shell yang dijalankan oleh pengguna lain yang masuk melalui terminal atau SSH? Jelas mereka disimpan di .bash_history, tetapi itu hanya disimpan ketika pengguna log off dan dapat dinonaktifkan juga.

Sunting: idealnya sesuatu yang dapat dengan mudah dinyalakan dan dimatikan.

EMP
sumber
ttyrpldsepertinya bagus. direkomendasikan dalam pertanyaan ini. serverfault.com/questions/40011/…
hayalci

Jawaban:

16

sebagai root, Anda bisa mengganti shell mereka dengan skrip wrapper sederhana yang mencatat perintah mereka sebelum meneruskannya ke shell asli. Ini hanya akan berfungsi sebelum mereka masuk.

Tim Howland
sumber
20
Kami melakukan ini untuk memantau akun yang diretas di perusahaan sebelumnya. Dibuat "/ bin / bash" (perhatikan spasi) yang merupakan pembungkus di sekitar skrip-perintah. Bekerja seperti pesona :)
Commander Keen
Sangat pintar! +1
EMP
9

Gunakan sniffy jika Anda ingin masuk ke sesi pengguna atau screen -xjika Anda memiliki kerja sama.

Berhati-hatilah, bahwa memata-matai pengguna Anda mungkin tunduk pada peraturan atau bahkan ilegal, tergantung pada undang-undang setempat Anda.

David Schmitt
sumber
7

Mengganti shell sangat mudah untuk dielakkan, menambal shell itu sendiri lebih baik, tetapi Anda harus menambal semua shell. Cracker favorit kami menggunakan ini, sebagai bonus ia tidak repot-repot menonaktifkan bash_history.

ssh host /bin/sh -i  

Snoopy adalah pembungkus di sekitar fungsi exec, dan mencatat setiap biner eksternal yang dijalankan (bukan shell builtin)

@ David saran Schmitt sombong menggunakan metode yang lebih baik, itu menyentuh pseudoterminal.

ttysnoop menggunakan metode yang sama, tetapi tidak dipelihara. (Saya mungkin memiliki masalah membuatnya koneksi log ssh, tidak dapat mengingat)

Anda dapat mencoba menambal ssh untuk mencatat sesi, tetapi tambalan itu sudah lama .

pseudopod dan rootsh dapat digunakan untuk mencatat sudo yang sah. Dan shwatcr adalah hal lain untuk memonitor login.

hayalci
sumber
Apa yang ssh host /bin/sh -iseharusnya dilakukan?
Mike Pennington
+1 untuk snoopy, tidak sempurna tetapi melakukan apa yang kami butuhkan untuk dilakukan.
skinp
4

Jika Anda bersikap kooperatif, Anda dapat menggunakan layar GNU antara dua pengguna - mintalah seorang untuk membuat sesi layar, lalu mintalah yang lain bergabung menggunakan screen -x.

Jika Anda ingin root untuk "memata-matai" pengguna lain tanpa sepengetahuan mereka, solusi terbaik dan paling efisien mungkin perangkat lunak / perangkat keras keylogger.

Tim
sumber
4

Sysdig adalah alat yang ampuh untuk eksplorasi tingkat sistem - inilah yang Anda inginkan;)

contoh:

sysdig -i spy_users

Kategori: Keamanan

spy_users Menampilkan aktivitas pengguna interaktif

daftar setiap perintah yang pengguna luncurkan secara interaktif (mis. dari bash) dan setiap direktori yang dikunjungi pengguna

Andrzej Chabierski
sumber
2

Anda bisa mencoba patch bash-BOFH. Cari-cari tambalan.

squillman
sumber
1

Saya menulis metode untuk mencatat semua perintah / built 'bash' ke dalam file teks atau server 'syslog' tanpa menggunakan patch atau alat yang dapat dieksekusi khusus.

Sangat mudah untuk digunakan, karena ini adalah shellscript sederhana yang perlu dipanggil sekali pada inisialisasi 'bash'.

Lihat metode di sini: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger

Francois Scheurer
sumber
Selamat Datang di Kesalahan Server! Kami benar-benar lebih suka jawaban memiliki konten, bukan petunjuk ke konten. Ini memastikan bahwa jawabannya akan tetap tersedia bahkan jika tautannya mati. Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
user9517 mendukung GoFundMonica
Selamat Datang di Kesalahan Server! Harap baca faq kami secara khusus Bolehkah saya mempromosikan produk atau situs web yang saya berafiliasi di sini? .
user9517 mendukung GoFundMonica
1
function spy() { 
   ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ; 
   /usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \
        | grep -Poi 'write\(...\"[[:print:]]{1,2}\"[.][.][.][,]..\)' ; 
}

[436] klikevil@epiphany ~ $ w<br>
 09:36:43 up 12:06,  6 users,  load average: 0.46, 0.29, 0.20<br>
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT<br>
klikevil pts/0    75.125.126.8     23:05    2:19m 10:33   0.18s cmd                                      <br>
klikevil pts/1    75.125.126.8     00:18    6:50m  0.06s  0.04s sshd: klikevil [priv]<br>
klikevil tty7     :0               09:02   17:07m  2:02   0.32s x-session-manager<br>
klikevil pts/2    :0.0             09:03    3:30   0.08s  0.08s bash<br>
klikevil pts/3    :0.0             09:03    0.00s  0.76s  0.00s w<br>
klikevil pts/4    :0.0             09:06    3:13   0.46s  0.00s /bin/sh /usr/bin/thunder<br>
[437] klikevil@epiphany ~ $ spy 2<br>
write(2, "e"..., 1)<br>
write(2, "c"..., 1)<br>
write(2, "h"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "s"..., 1)<br>
write(2, "u"..., 1)<br>
write(2, "p"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "d"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, "g"..., 1)<br>
write(2, "\n"..., 1)<br>
^C<br>

Tampaknya bekerja cukup baik jika Anda tidak keberatan memilah-milah banyak baris.

Jessica Parker
sumber
1

Snoopy dimaksudkan untuk pembuatan perintah ringan.

Jika Anda ingin live view dari perintah yang dijalankan pada sistem Anda, ini mungkin itu. Peringatan: snoopy bukan solusi audit yang tepat dan dapat dengan mudah dielakkan.

Namun, jika Anda ingin melihat setiap karakter yang diketikkan di terminal, maka Anda harus menggunakan alat lain.

Pengungkapan: Saya pengelola snoopy saat ini.

Bostjan Skufca
sumber
-3

coba ekspor ini HISTTIMEFORMAT = "% T" jalankan beberapa perintah dan "histori" sesudahnya ...

masber
sumber