it-swarm-tr.com

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

Bunu biraz önce googling yapıyordum ve birkaç yol fark ettim, ancak google'ın her şeyi bilmediğini tahmin ediyorum. Peki siz kullanıcıları Linux kutunuzdan nasıl atacaksınız? ayrıca ilk etapta giriş yaptıklarını nasıl görüyorsunuz? ve ilgili ... kullanıcı bir X11 DE oturum açtıysanız yönteminiz çalışır mı (sadece merak ediyorum bir gereklilik değil)?

68
xenoterracide

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

  1. Makinenize kimlerin giriş yaptığını görün - who veya w kullanın:

    > 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 bağlantı 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 işlemi öldür:

    > kill -9 30737
    

Az önce who the -u bayrağı; PID sağdaki sayıdır:

> 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

Micheal'ın işaret ettiği gibi, kimin oturum açtığını bulmak için who kullanabilirsiniz. Ancak, birden fazla işlemleri varsa, her işlemi tek tek öldürmekten daha kolay bir yol vardır: killall -u username kullanıcı tarafından tüm işlemleri öldürmek için.

33
sepp2k

Nekromansi!

Kabul edilen cevabın mizahını takdir ediyorum, ancak profesyonel olarak savunamıyorum.

Farkında olduğum en zarif yöntem, kullanıcı aramasını taklit etmek için Shell'e bir -HUP göndermektir. Tüm Shell ortamının (alt kabuklar dahil) temizlenmesini tetikleyen bağlantılarının kaybolmasını simüle etmek için kullanıcının boştaki sshd'sine gönderebilir veya bunu belirli bir iç içe kabuklara (örneğin, bağlantısı kesilmiş bir terminal çoklayıcısının içinde ayarlananlara) gönderebilirsiniz. bir dosya sisteminin bağlantısını kesmekten alıkoyuyor).

Onları başlatmadan önce terminal boşta kalan ptys göndermek için write kullanarak is eğlenceli bir hobi.

23
Andrew B

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

skill -KILL -u username

Görmek man skill

13
bsd

Diğer kullanışlı komut pkill burada pkill -u username && pkill -9 -u username. killall Solaris IIRC'de tamamen farklı bir şey anlamına gelmesi dezavantajına sahiptir - ayrıca pkill biraz daha gelişmiş seçeneklere sahiptir.

11
Maciej Piechotka

Her şeyden önce, bu daha büyük bir sorunu gösterir. Sisteminize güvenmediğiniz kullanıcılarınız varsa, büyük olasılıkla sisteminizi düzeltmeli ve yeniden görüntülemelisiniz.

Bunu göz önünde bulundurarak, aşağıdakilerin bir kısmını veya tümünü yapabilirsiniz:

 # çevreyi kurdu 
 $ BADUSER = foo # burada foo söz konusu kullanıcı adıdır 
 $ USERLINE = $ (grep '^ $ {BADUSER}:'/etc/passwd ) 
 $ BADUID = $ (echo $ {USERLINE} | awk -F: '{print $ 3}') 
 $ BADGID = $ (echo $ {USERLINE} | awk -F: '{ print $ 4} ') 
 $ BADHOMEDIR = $ (echo $ {USERLINE} | awk -F:' {print $ 6} ') 
 $ BDIR = "~/backup/home-backup /" 
 $ TSTAMP = $ (tarih +% F) 
 $ TAR_FILENAME = "$ {BADUSER} - $ {TSTAMP} .tar.bz2" 
 $ OWNED_FILENAME = "$ {BADUSER } -files - $ {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 işlemlerini öldür 
 $ BADPROCS = $ (ps auwx | grep '^ $ {BADUSER}' | awk '{print $ 2}') 
 $ Sudo kill -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}/* 
 [.____. # # Tüm dosyaları bul kullanıcının sahibi [.__ __.] $ Sudo find/-user $ {BADUSER}> ~/backup/$ {OWNED_FILENAME} 
 
 # Kullanıcıyı kaldır 
 $ Sudo userdel $ {BADUSER} 
3
cjac

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

Bu nedenle, burada önerilen çözümlere dayanarak, etkileşimli bir Bash betiğinde kullanıcıları ve who -u ne yapacağını seçmek için.

Daha sonra aşağıdakilerden birini yapabilirsiniz:

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

Gerekli tüm bilgiler who -u 'Dan gelir ve daha sonra mapfile ve awk kullanılarak ayrıştırılır.

Daha sonra write kullanarak bir mesaj gönderme imkanı ekleyeceğim (gecikme ile süreci çatallama).

Muhtemelen kill -9 İle belirli bir oturumu öldürme seçeneğini de ekleyeceğim. Ama sadece kill ile hiçbir problemim olmadı ve başkalarının da işaret ettiği gibi, mümkünse kill -9 Kaçınılmalıdır.

Bunu denemek veya otomatik bir şekilde nasıl yaptığım hakkında daha fazla bilgi edinmek isterseniz github'daki kodu kontrol edebilirsiniz:

0
Gus Neves

Kanımca, killall -u username çünkü sizinle aynı kullanıcıysa, kendinizi başlatacaksınız. Yani kill süreç daha iyi bir çözüm olacaktır.

0
Mailo

Peki [benign] kullanıcıları Linux kutunuzdan nasıl atacaksınız?

Sonunda, bir kullanıcı kimliğine ait olan, ilişkilendirilen veya ortaya çıkan süreçleri tanımlamak ve sonlandırmak söz konusudur. Bu hedefe ulaşmak için hangi komutları kullanırsanız kullanın, oraya vardığınız sürece önemli değildir.

Temel olarak iki cevap ...

Seçenek A: adı geçen kullanıcının oturumunun kapatılmasına neden olur, bununla birlikte birçok girişleri vardır. Yani bu, kullanıcının sahip olduğu, uid ile izlenebilir ve çalıştırdığınız belirli Linux dağıtımı için bazı giriş işlemlerinin bir parçası olarak sınıflandırılan süreçlerin tanımlanması anlamına gelir. "Giriş" den önce SSH veya VNC gibi üst süreçler ve "giriş" den sonra GDM gibi alt süreçler olduğunu unutmayın. Genellikle bir üst süreci öldürmek alt süreci öldürecektir, ancak her zaman değil. Yani artık oturumu kapattıktan sonra artık gerekli olmayan bu diğer süreçleri öldürmek istersiniz. Tüm bunları yaparken, bu arka plan işlerini çalışır durumda tutacaktır ... çünkü bu iyi huylu bir kullanıcıdır ve belki de sadece bunları kapatmak istersiniz. Bildiğim kadarıyla, /usr/bin/w ve /usr/bin/who, oturum açma işleminden kimin geçtiğini bildirir.

seçenek B: belirli bir uid'in sahip olduğu tüm süreçleri tamamen sonlandırın, bu sadece adı geçen kullanıcının sahip olduğu tüm işlemleri öldürmek anlamına gelir, bu da giriş yapmışlarsa bunları da kapatır. onları sistemden atın . Bu sadece basit bir ps -ef | grep <uid> ve sonra tüm bu işlemleri kabul edilebilir bir şekilde sonlandırmak.

fwiw SLES 11 rapor ediyor

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

kill -9 FTW!

0
ron