İyi huylu bir kullanıcıyı sisteminizden nasıl atabilirsiniz?


66

Bunu biraz önce googling yapıyordum ve birkaç yol fark ettim, ancak sanırım google’ın her şeyi bilmediğini tahmin ediyorum. Peki yok sen Linux'ta kapalı kullanıcıları tekme? Ayrıca ilk etapta giriş yaptıklarını nasıl görüyorsunuz? ve ilişkili ... kullanıcı bir X11 DE'ye giriş yaptığında yönteminiz işe yarıyor mu (sadece merak ediyorum bir gereklilik değil)?


3
Kabul edilen cevap verilen varsayımları yansıtan değiştirilmiş soru. Güvenlik ihlali bağlamında, kötü niyetli bir kullanıcıyı sisteminizden atmanın tek yolu o kullanıcıdan çok daha akıllı olmaktır. Akıllı bir kullanıcı kendileri utmp gösterilmesini veya olduğunca önemsiz bir şey tarafından bulunmasını sağlar izin gitmiyor who(1)ya w(1). Takılabilecek tüm olası kök setlerinden kurtulmanın tek kolay yolu, sistemi tamamen silmek ve yeniden yüklemektir.
jw013,

Yanıtlar:


140

Muhtemelen daha kolay bir yolu var, ama bunu yapıyorum:

  1. Makinenize kimin giriş yaptığını görün - kullanın whoveya w:

    > who  
    mmrozek  tty1         Aug 17 10:03  
    mmrozek  pts/3        Aug 17 10:09 (:pts/2:S.0)
    
  2. TTY'lerinin bağlı olduğu kabuğun işlem kimliğine bakın:

    > ps t  
    PID   TTY      STAT   TIME COMMAND  
    30737 pts/3    Ss     0:00 zsh
    
  3. Yaklaşan kopmalarına gülün (bu adım isteğe bağlıdır, ancak teşvik edilir)

    > echo "HAHAHAHAHAHAHAHA" | write mmrozek pts/3
    
  4. İlgili süreci öldürün:

    > kill -9 30737
    

Sadece vererek adımları 1 ve 2 birleştirebilirsiniz keşfetti bayrağı; PID, sağdaki sayıdır:who-u

> 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)

61
+1 "Yaklaşan kopmalarına gül. (Bu adım isteğe bağlıdır, ancak teşvik edilir)"
Josh

9
kill -9, ha? Bu konuda gerçekten BOFH modundasınız.
Jander

12
@Jander Bir kullanıcıyı sistemden atıyorsunuz; ne kadar iyi olman gerekiyor?
Michael Mrozek

6
Normalde, insanları kötüye kullanmaya teşvik etmediğinikill -9 ve bunun yerine daha yumuşak sinyallerle başladığını söyleyebilirim , ancak bu bağlamda çok da önemli olmadığını düşünüyorum. İnsanların şakayı özlemeleri ihtimaline karşı yorum bırakıyorum.
jw013

5
Ayrıca tüm süreci temelde otomatikleştiren bir slay vardır (hatta
butthead

32

Micheal'ın daha önce belirttiği gibi, whokimin giriş yaptığını bulmak için kullanabilirsiniz . Ancak, birden fazla işlemi varsa, her işlemi ayrı ayrı öldürmekten daha kolay bir yol vardır: killall -u usernametüm işlemleri o kullanıcı tarafından öldürmek için kullanabilirsiniz .


+1. killallGrafik ortamlarda kullanmak da biraz daha uygun olacaktır, çünkü öldürmek için bir kabuğundan daha fazlası vardır.
John WH Smith

3
UYARI: Bunu kök kullanıcı için kullanırsanız, tüm kök işlemlerini öldürür ve sunucuyu fiziksel olarak yeniden başlatmanız gerekir.
Kunok

1
@Kunok hangi durum altında root kullanıcısını makineden atmak istersiniz? Mesela bu hesap kaçırıldıysa ya da başka bir şey mi?
Alexej Magura

23

Nekromansi!

Kabul edilen cevabın mizahını takdir ediyorum, ancak profesyonel olarak bunu savunamam.

Farkında olduğum en zarif yöntem, kullanıcı takılmasını simüle etmek için kabuğa bir -HUP göndermek. Bunu, tüm kabuk ortamının (çocuk kabukları dahil) bir temizliğini tetikleyen bağlantısının kaybolmasını simüle etmek için kullanıcının boşta sshd'sine gönderebilir ya da bunu, belirli yuvalanmış kabuklara (örneğin, bağlantısı kesilmiş bir terminal çoklayıcı içinde ayarlananlar) gönderebilirsiniz. gerçekten kesin olmak istiyorsanız, sizi bir dosya sisteminden ayırmaktan alıkoyuyorlar.

Kullanılması writebunları önyükleme önce ölümcül boşta PTY'leri mesaj göndermek için olduğunu olsa eğlenceli bir hobi.


1
Öldürmeye -9 eşlik eden sözde-her yerde var olan duygu eğlenceli olsa da, bu öneri muhtemelen daha iyidir. Benden bir yukarı oy.
Andrew Falanga

4
Bu cevabı açık yapmak için, yaptığım şey şuydu: echo "Hasta la vista, baby" | write user_name pty_name && sleep 30 && killall -u user_name -HUP(uyku, kullanıcıya kaydetme ve oturumu kapatma şansını veriyor, ancak muhtemelen bunu sadece yine de oturumu kapatmayı unutan bir kullanıcı üzerinde kullanıyorsunuz)
wkschwartz

13

Kullanıcı 'kullanıcı adı' oturumunu kapatın:

skill -KILL -u username

Görmek man skill


3
Sanırım bu sadece kullanıcının kabuğuyla değil, tüm işlemlerini de öldürecek , ama istediğin buysa, bu kesinlikle daha kolaydır
Michael Mrozek

Bu RHEL7
antivirtel

11

Diğer faydalı komut pkillburada pkill -u username && pkill -9 -u username. killallSolaris IIRC'de tamamen farklı bir şey ifade ediyor - pkillbiraz daha gelişmiş seçeneklere sahip olmasının dezavantajı var.


8
Solaris'te 'killall', kapatma komut dosyaları tarafından sunucudaki tüm işlemleri (neredeyse) öldürmek için kullanılır. “Teneke söylediklerini yapar.”
dr-jan

Millet, neden SIGKILL'i bu kadar çok seviyorsunuz? Programları ve uygulamaları çalıştırmak, veri tasarrufu yapma ve biraz temizleme şansına bile sahip olmayacak. SIGTERM (kapanışta kullanıldığı gibi) veya SIGHUP da aynı şekilde çalışacaktır ve çok daha zarif. (Hala Ek sürenin dolmasından sonra SIGKILL gönderebilir.)
countermode

3

Her şeyden önce, bu daha büyük bir sorun olduğunu gösterir. Sisteminizde güvenmediğiniz kullanıcılarınız varsa, muhtemelen seviyelemeli ve yeniden görüntülemelisiniz.

Bunu akılda tutarak, aşağıdakilerin bir kısmını veya tamamını yapabilirsiniz:

# ortamı ayarla
$ BADUSER = foo # burada foo, söz konusu kullanıcı adıdır
$ USERLINE = $ (grep '^ $ {BADUSER}:' / etc / passwd)
$ BADUID = $ (echo $ {USERLINE} | awk -F: '{3 $} yazdır')
$ BADGID = $ (echo $ {USERLINE} | awk -F: '{4 $} yazdır')
$ BADHOMEDIR = $ (eko $ {USERLINE} | awk -F: '{$ $ 6}')
$ BDIR = "~ / yedekleme / ev yedekleme /"
$ TSTAMP = $ (tarih +% F)
$ TAR_FILENAME = "$ {BADUSER} - $ {TSTAMP} .tar.bz2"
$ OWNED_FILENAME = "$ {BADUSER} -dosyalar - $ {TSTAMP} .txt"

# kullanıcının gelecekteki girişini devre dışı bırak
$ sudo chsh -s / bin / false "$ {BADUSER}"

# kullanıcının tüm süreçlerini öldür
$ BADPROCS = $ (ps auwx | grep '^ $ {BADUSER}' | awk '{print $ 2}')
$ sudo öldürmek -9 $ {BADPROCS}

# kullanıcının ana dizinini yedekle / temizle
$ mkdir -p $ {BDIR}
$ sudo tar -cfj $ {BDIR} / $ {TAR_FILENAME} $ {BADHOMEDIR}
$ sudo rm -rf $ {BADHOMEDIR} /.* $ {BADHOMEDIR} / *

# kullanıcının sahip olduğu tüm dosyaları bul
$ sudo / -user $ {BADUSER}> ~ / backup / $ {OWNED_FILENAME}

# kullanıcıyı kaldır
$ sudo userdel $ $ {BADUSER}

Bilmiyorum ki, "seviye bir yeniden boyutlandırma" ile aynı fikirdeyim, bu pencereler değil, unix.
xenoterracide

3
Ayrıca, bir kullanıcıyı tekmelemek zorunda olmanız, mutlaka güvenilmez oldukları anlamına gelmez. Belki de çıkış yapmayı unuttular.
David Z,

xenoterracide: Belki de sadece sürdürdüğüm sistemleri korudum, fakat kontrolüm altındaki bir sistemden zorla çıkarılması gerektiğini hissettiğim bir kullanıcı olsaydı, ciddi bir şey olmuş olurdu.
cjac

-1 S / A konu dışı konularını mantıksal olarak takip etmeyen ve sürüklemeyen bir soruyu okumak için.
Wesley,

you have users that you don't trust on your system... Veya sadece birini diğerlerine mesaj olarak öldürüyor olabilirsiniz. Sonuçta, sysadmin'in inancı "sevilmekten daha korkmak daha iyidir" değil midir? Tüm şakalar bir yana, Machiavelli bir O'Reilly kitabı yazmalı.
Parthian Shot

0

Her yere baktım ve bu görevi otomatikleştirmek için tek bir komut dosyası bulamadım.

Bu nedenle, burada önerilen çözümlere dayanarak , kullanıcının ne yapacağını seçmesi için kullanıcıları ve oturumları listeleyen etkileşimli bir Bash komut dosyasında her şeyi karıştırdım who -u.

O zaman ikisinden birini yapabilirsiniz:

  • bir kullanıcı için tüm oturumları öldür killall -u <username> -HUP
  • belirli bir oturumu öldür kill <PID>

Gerekli tüm bilgiler gelir who -uve daha sonra mapfileve kullanılarak ayrıştırılır awk.

Daha writesonra kullanarak bir mesaj gönderme olanağını ekleyeceğim (işlemi geciktirmek suretiyle).

Muhtemelen belirli bir seansı öldürme seçeneğini de ekleyeceğim kill -9. Ancak, sadece killve başkaları tarafından işaret edildiği gibi hiçbir sorun yaşamadım , kill -9mümkünse kaçınılmalıdır.

Denemek veya otomatik olarak nasıl yaptığım hakkında daha fazla bilgi edinmek istiyorsanız, github'daki kodu kontrol edebilirsiniz:


0

Peki, nasıl [iyi huylu] kullanıcıları Linux kutunuzdan atıyorsunuz?

Sonunda, bir kullanıcı kimliğine ait, ilişkilendirilen veya doğuran bu süreçleri tanımlamak ve sonlandırmak gelir. Bu son hedefe ulaşmak için kullandığınız komutlar mutlaka oraya vardığınız sürece önemli değildir.

Temelde iki cevap ...

Seçenek A: Bahsedilen kullanıcının oturumu kapatmasına neden olur, bunun için ve her zaman birçok girişleri vardır. Bu, kullanıcının sahip olduğu, kullanıcı kimliği ile izlenen ve çalıştırmakta olduğunuz belirli Linux dağıtımı için bazı giriş işlemlerinin bir parçası olarak sınıflandırılan işlemleri tanımlamak anlamına gelir. "Giriş" den önce SSH veya VNC gibi ebeveyn süreçleri olduğunu ve "giriş" den sonra GDM gibi çocuk süreçleri olduğunu kabul edin. Böylece, oturumu kapattıktan sonra artık ihtiyaç duyulmayan açıkçası bu diğer süreçleri öldürmek istersiniz. Tüm bunları yaparken, arkaplan işlerinin çalışmaya devam etmesini sağlardı ... çünkü bu iyi huylu bir kullanıcı ve belki de sadece oturumunuzu kapatmak istiyorsunuz. Bildiğim kadarıyla biliyorum gibi /usr/bin/wve /usr/bin/whosüreç içinde günlüğüne geçtikten kim bildirir.

B seçeneği: belirli bir kullanıcı tarafından sahip olunan tüm işlemleri tamamen sonlandırın; bu, sadece söz konusu kullanıcının sahip olduğu tüm işlemlerin öldürülmesi anlamına gelir; bu, eğer oturum açmışlarsa, bunların da kapatılması anlamına gelir . Bunun sadece basit olması ps -ef | grep <uid>ve sonra tüm bu süreçleri kabul edilebilir bir şekilde sonlandırması gerekir.

SLES 11'deki fwiw raporları

adam beceri ... Bu araçlar muhtemelen eski ve taşınabilir değildir. Komut sözdizimi yetersiz tanımlanmış. Bunun yerine killall, pkill ve pgrep komutlarını kullanmayı düşünün.

kill -9 FTW!


-1

Benim düşünceme göre, kullanım killall -u usernameiçin pek kullanışlı değil, çünkü aynı kullanıcı ise, kendiniz başlayacaksınız. Böylece killsüreç daha iyi bir çözüm olacaktır.


Ayrıca, bu kullanıcı tarafından yürütülen işlemler varsa, SSHD, asla Sunucuya girmeyeceksiniz, SSH kapanmasına neden olabilir.
Mailo

3
Neden Dünya'da SSH cini (veya herhangi bir cini) herhangi bir gerçekçi nedenden dolayı sistemden zorla oturumu kapatılması gereken bir kullanıcının kimlik bilgilerini kullanarak çalışıyor? Ayrıca, bu cevabın Michael Mrozek'in cevabı veya Andrew B'nin cevabı (ve muhtemelen başkaları tarafından) kapsamadığı bir cevap nedir?
bir CVn

-2

Bu komut GUI için harika çalıştı benim "önemli" oturumunu reddetti ...

leaves@me:/# skill -HUP -u username
  • Ne oldu bilmiyorum.
  • Bir güncelleme yapılmış olmalı.
  • "Google" yine düştü.
  • İnterWeb'lerdeki bir virüstür.

İhtiyaç duymanız durumunda bazı sapmalar.


1
Bu, bsd'nin cevabında zaten belirtilmiş.
Stephen Kitt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.