it-swarm-id.com

Bagaimana Anda menendang pengguna jinak dari sistem Anda?

Saya sudah googling ini beberapa waktu lalu dan memperhatikan beberapa cara, tapi saya kira google tidak tahu semuanya. Jadi bagaimana Anda menendang pengguna dari kotak Linux Anda? juga bagaimana Anda bisa melihat mereka masuk di tempat pertama? dan terkait ... apakah metode Anda berfungsi jika pengguna masuk ke X11 DE (bukan persyaratan yang saya hanya ingin tahu)?

68
xenoterracide

Mungkin ada cara yang lebih mudah, tetapi saya melakukan ini:

  1. Lihat siapa yang masuk ke mesin Anda - gunakan who atau w:

    > who  
    mmrozek  tty1         Aug 17 10:03  
    mmrozek  pts/3        Aug 17 10:09 (:pts/2:S.0)
    
  2. Cari ID proses Shell yang terhubung dengan TTY mereka:

    > ps t  
    PID   TTY      STAT   TIME COMMAND  
    30737 pts/3    Ss     0:00 zsh
    
  3. Tertawalah pada pemutusan yang akan datang mereka (langkah ini opsional, tetapi dianjurkan)

    > echo "HAHAHAHAHAHAHAHA" | write mmrozek pts/3
    
  4. Bunuh proses yang sesuai:

    > kill -9 30737
    

Saya baru tahu Anda bisa menggabungkan langkah 1 dan 2 dengan memberikan who the -u bendera; PID adalah angka di sebelah kanan:

> who -u
mmrozek  tty1         Aug 17 10:03 09:01        9250
mmrozek  pts/18       Aug 17 10:09 01:46       19467 (:pts/2:S.0)
147
Michael Mrozek

Seperti yang telah ditunjukkan oleh Micheal, Anda dapat menggunakan who untuk mengetahui siapa yang masuk. Namun jika mereka memiliki beberapa proses, ada cara yang lebih mudah daripada membunuh setiap proses secara terpisah: Anda dapat menggunakan killall -u username untuk membunuh semua proses oleh pengguna itu.

33
sepp2k

Penujuman!

Saya menghargai humor dari jawaban yang diterima, tetapi secara profesional saya tidak bisa mendukungnya.

Metode paling anggun yang saya ketahui adalah mengirim -HUP ke Shell untuk mensimulasikan hangup pengguna. Anda dapat mengirim ini ke sshd idle pengguna untuk mensimulasikan koneksi mereka terputus, yang memicu pembersihan seluruh lingkungan Shell (termasuk cangkang anak), atau mengirim ini ke cangkang bersarang tertentu (misalnya, yang berada di dalam terminal multiplexer yang terputus yang menjaga Anda dari unmount sistem file) jika Anda ingin benar-benar tepat.

Menggunakan write untuk mengirim pesan ke ptys yang menganggur sebelum Anda mem-bootnya adalah hobi yang menyenangkan.

23
Andrew B

Logout 'username' pengguna:

skill -KILL -u username

Lihat man skill

13
bsd

Perintah lain yang bermanfaat adalah pkill di sini pkill -u username && pkill -9 -u username. killall memiliki kekurangan bahwa pada Solaris IIRC itu berarti sesuatu yang sama sekali berbeda - juga pkill memiliki opsi yang sedikit lebih maju.

11
Maciej Piechotka

Pertama-tama, ini menunjukkan masalah yang lebih besar. Jika Anda memiliki pengguna yang tidak Anda percayai pada sistem Anda, Anda mungkin harus naik level dan gambar ulang.

Dengan mengingat hal itu, Anda dapat melakukan beberapa atau semua hal berikut ini:

 # atur lingkungan 
 $ BADUSER = foo # di mana foo adalah nama pengguna yang dipermasalahkan 
 $ USERLINE = $ (grep '^ $ {BADUSER}:'/etc/passwd ) 
 $ BADUID = $ (echo $ {USERLINE} | awk -F: '{print $ 3}') 
 $ BADGID = $ (echo $ {USERLINE} | awk -F: '{ cetak $ 4} ') 
 $ BADHOMEDIR = $ (echo $ {USERLINE} | awk -F:' {print $ 6} ') 
 $ BDIR = "~/backup/home-backup /" 
 $ TSTAMP = $ (tanggal +% F) 
 $ TAR_FILENAME = "$ {BADUSER} - $ {TSTAMP} .tar.bz2" 
 $ OWNED_FILENAME = "$ {BADUSER } -files - $ {TSTAMP} .txt "
 
 # nonaktifkan login masa depan pengguna 
 $ Sudo chsh -s/bin/false" $ {BADUSER} "
 
 # bunuh semua proses pengguna 
 $ BADPROCS = $ (ps auwx | grep '^ $ {BADUSER}' | awk '{print $ 2}') 
 $ Sudo kill -9 $ {BADPROCS} 
 
 # Buat cadangan/bersihkan direktori home pengguna 
 $ Mkdir -p $ {BDIR} 
 $ Sudo tar -cfj $ {BDIR}/$ {TAR_FILENAME} $ {BADHOMEDIR} 
 $ Sudo rm -rf $ {BADHOMEDIR} /.* $ {BADHOMEDIR}/* 
 
 #. Temukan semua file dimiliki oleh pengguna [.__ __.] $ Sudo find/-user $ {BADUSER}> ~/backup/$ {OWNED_FILENAME} 
 
 # Hapus pengguna 
 $ Sudo userdel $ {BADUSER} 
3
cjac

Saya melihat sekeliling dan tidak dapat menemukan satu skrip pun untuk mengotomatiskan tugas ini.

Jadi, berdasarkan solusi yang diusulkan di sini saya mencampur semuanya dalam skrip Bash interaktif yang mencantumkan pengguna dan sesi dari who -u bagi pengguna untuk memilih apa yang harus dilakukan.

Anda kemudian dapat:

  • bunuh semua sesi untuk pengguna killall -u <username> -HUP
  • bunuh sesi tertentu kill <PID>

Semua informasi yang diperlukan berasal dari who -u dan kemudian diuraikan menggunakan mapfile dan awk.

Saya akan menambahkan kemungkinan untuk mengirim pesan menggunakan write nanti (menunda proses dengan penundaan).

Saya mungkin akan menambahkan opsi untuk mematikan sesi tertentu dengan kill -9 demikian juga. Tapi saya tidak punya masalah dengan hanya kill dan seperti yang ditunjukkan oleh orang lain, kill -9 harus dihindari jika memungkinkan.

Anda dapat memeriksa kode di github jika Anda ingin mencobanya atau mempelajari lebih lanjut tentang bagaimana saya melakukannya dengan cara otomatis:

0
Gus Neves

Menurut pendapat saya, itu tidak benar-benar berguna untuk menggunakan killall -u username Karena jika itu adalah pengguna yang sama dengan Anda, Anda akan memulai sendiri. Jadi kill prosesnya akan menjadi solusi yang lebih baik.

0
Mailo

Jadi, bagaimana Anda menendang [jinak] pengguna dari kotak Linux Anda?

Pada akhirnya, hal itu berujung pada pengidentifikasian dan penghentian proses-proses yang dimiliki, dikaitkan, atau muncul dari id pengguna. Apa pun perintah yang Anda gunakan untuk mencapai tujuan akhir itu tidak masalah selama Anda sampai di sana.

Pada dasarnya dua jawaban ...

Opsi A: menyebabkan logout dari pengguna tersebut, untuk login yang pernah dan berapa banyak yang mereka miliki. Jadi ini berarti mengidentifikasi proses-proses yang dimiliki oleh pengguna, dapat dilacak oleh uid, dan diklasifikasikan sebagai bagian dari beberapa proses login untuk distro linux yang Anda jalankan. Sadarilah ada proses induk seperti SSH atau VNC sebelum "masuk" dan proses anak seperti GDM setelah "masuk" Biasanya membunuh proses induk akan membunuh proses anak, tetapi tidak selalu. Jadi, Anda ingin membunuh proses lain yang jelas tidak lagi diperlukan setelah logout. Dalam melakukan semua ini, ini akan membuat pekerjaan latar belakang tetap berjalan ... karena itu adalah pengguna yang ramah dan mungkin Anda hanya ingin keluar. Sejauh yang aku tahu, /usr/bin/w dan /usr/bin/who akan melaporkan siapa yang telah melewati proses login.

opsi B: akhiri semua proses yang dimiliki oleh uid tertentu sepenuhnya, yang berarti membunuh semua dan semua proses yang dimiliki oleh pengguna tersebut, ini juga akan mengeluarkannya jika mereka masuk. Ini akan memuaskan tendang mereka dari sistem . Itu hanya perlu sederhana ps -ef | grep <uid> dan kemudian mengakhiri semua proses itu dengan cara apa pun yang dapat diterima.

fwiw di SLES 11 melaporkannya

man skill ... Alat-alat ini mungkin sudah usang dan tidak dapat diport. Sintaks perintah tidak didefinisikan dengan baik. Pertimbangkan untuk menggunakan perintah killall, pkill, dan pgrep sebagai gantinya.

kill -9 FTW!

0
ron