आप अपने सिस्टम से एक सौम्य उपयोगकर्ता को कैसे किक करते हैं?


66

मैं इसे कुछ समय पहले गुगली कर रहा था और कुछ तरीकों पर ध्यान दिया था, लेकिन मैं अनुमान लगा रहा हूं कि Google सभी को नहीं जानता है। तो आप अपने लिनक्स बॉक्स से उपयोगकर्ताओं को कैसे मारेंगे? यह भी देखने के बारे में कि वे पहली बार में लॉग इन कैसे होते हैं? और संबंधित ... क्या आपका तरीका काम करता है यदि उपयोगकर्ता को X11 DE में लॉग इन किया जाता है (आवश्यकता नहीं है तो मैं सिर्फ उत्सुक हूं)?


3
स्वीकृत उत्तर को देखते हुए मान्यताओं को प्रतिबिंबित करने के लिए परिवर्तित प्रश्न। सुरक्षा भंग के संदर्भ में, आपके सिस्टम से दुर्भावनापूर्ण उपयोगकर्ता को किक करने का एकमात्र तरीका उस उपयोगकर्ता की तुलना में अधिक स्मार्ट होना है। एक चतुर उपयोगकर्ता खुद को utmp में दिखाने या के रूप में के रूप में तुच्छ कुछ को मिल जाएं जाने के लिए नहीं जा रहा है who(1)या w(1)। स्थापित किए जा सकने वाले किसी भी संभावित रूटकिट से छुटकारा पाने का एकमात्र मूर्खतापूर्ण तरीका पूरी तरह से मिटा देना और सिस्टम को फिर से स्थापित करना है।
jw013

जवाबों:


139

वहाँ शायद एक आसान तरीका है, लेकिन मैं ऐसा करता हूं:

  1. देखें कि आपकी मशीन में कौन लॉग इन हुआ है - उपयोग करें whoया w:

    > who  
    mmrozek  tty1         Aug 17 10:03  
    mmrozek  pts/3        Aug 17 10:09 (:pts/2:S.0)
    
  2. उनके TTY से जुड़े शेल की प्रक्रिया आईडी देखें:

    > ps t  
    PID   TTY      STAT   TIME COMMAND  
    30737 pts/3    Ss     0:00 zsh
    
  3. उनके आसन्न वियोग पर हँसो (यह कदम वैकल्पिक है, लेकिन प्रोत्साहित किया गया है)

    > echo "HAHAHAHAHAHAHAHA" | write mmrozek pts/3
    
  4. इसी प्रक्रिया को मारें:

    > kill -9 30737
    

मैं तो बस आप चरणों देकर 1 और 2 को जोड़ सकते हैं की खोज की झंडा; PID दाईं ओर वाला नंबर है: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 के लिए "उनके आसन्न वियोग पर हँसो (यह कदम वैकल्पिक है, लेकिन प्रोत्साहित किया गया है)"
जोश

9
kill -9, हुह? आप वास्तव में इस पर BOFH मोड में हैं।
जंदर

12
@ जेंडर आप सिस्टम को बंद कर रहे हैं; तुम कितने अच्छे हो?
माइकल Mrozek

6
आम तौर पर, मैं कहूंगा कि लोगों को दुर्व्यवहार के लिए प्रोत्साहित न करेंkill -9 , और इसके बजाय gentler संकेतों के साथ शुरू करें , लेकिन मुझे लगता है कि इस संदर्भ में यह बहुत मायने नहीं रखता है। मैं सिर्फ एक टिप्पणी छोड़ रहा हूं जब लोग मजाक को याद करते हैं।
जवानी

5
वहाँ भी हत्या है जो मूल रूप से पूरी प्रक्रिया को स्वचालित करती है (यहां तक ​​कि अपने शिकार का मज़ाक बना रही है यदि आप बटरहेड मोड को सक्षम करते हैं)
उलरिच डेंगल

32

जैसा कि माइकल ने पहले ही बताया था, आप यह whoपता लगाने के लिए उपयोग कर सकते हैं कि कौन किसके लॉग इन है। हालांकि यदि उनके पास कई प्रक्रियाएं हैं, तो प्रत्येक प्रक्रिया को व्यक्तिगत रूप से मारने की तुलना में अधिक सुविधाजनक तरीका है: आप killall -u usernameउस उपयोगकर्ता द्वारा सभी प्रक्रियाओं को मारने के लिए उपयोग कर सकते हैं ।


+1। killallग्राफ़िकल वातावरण में उपयोग करना थोड़ा अधिक उचित होगा, क्योंकि मारने के लिए सिर्फ एक खोल से अधिक नहीं है।
जॉन डब्ल्यूएच स्मिथ

3
चेतावनी: यदि आप इसे रूट उपयोगकर्ता के लिए उपयोग करते हैं तो आप सभी रूट प्रक्रियाओं को मार देंगे और आपको सर्वर को फिर से शुरू करने की आवश्यकता होगी।
कुनोक

@Kunok क्या साइटट्रेशन के तहत आप मशीन से रूट उपयोगकर्ता को किक करना चाहेंगे? जैसे कि अगर वह अकाउंट हाईजैक हो गया या कुछ और?
एलेक्सज मगुरा

23

काला जादू!

मैं स्वीकार किए गए उत्तर के हास्य की सराहना करता हूं, लेकिन पेशेवर रूप से मैं इसकी वकालत नहीं कर सकता।

सबसे सुंदर विधि, जिसके बारे में मुझे पता है कि उपयोगकर्ता हैंगअप का अनुकरण करने के लिए शेल में एक -HUP भेजना है। आप अपने कनेक्शन के खो जाने का अनुकरण करने के लिए उपयोगकर्ता के निष्क्रिय sshd पर भेज सकते हैं, जो पूरे शेल वातावरण (चाइल्ड शेल सहित) की सफाई को ट्रिगर करता है, या इसे विशिष्ट नेस्टेड शेल (जैसे, एक विखंडित टर्मिनल मल्टीप्लेक्सर के अंदर स्थापित करने वाले) को भेजता है यदि आप वास्तव में सटीक होना चाहते हैं, तो आप एक फाइल सिस्टम को अनमाउंट करने से रोक रहे हैं)।

writeयद्यपि आप बूट करने से पहले उन्हें निष्क्रिय रूप से निष्क्रिय संदेश भेजने के लिए संदेश का उपयोग कर रहे हैं, हालांकि यह एक मजेदार शौक है।


1
जबकि छद्म-सर्वशक्तिमान भावना जो एक किल -9 के साथ होती है, मजेदार है, यह सुझाव शायद बेहतर है। मुझसे एक अप-वोट।
एंड्रयू फालंगा

4
इस उत्तर को स्पष्ट करने के लिए, मैंने क्या किया था: echo "Hasta la vista, baby" | write user_name pty_name && sleep 30 && killall -u user_name -HUP(नींद उपयोगकर्ता को बचाने और लॉग ऑफ करने का मौका देती है, लेकिन आप शायद इसका उपयोग केवल उस उपयोगकर्ता पर कर रहे हैं जो वैसे भी लॉग ऑफ करना भूल गया है)
wkschwartz

13

उपयोगकर्ता 'उपयोगकर्ता नाम' लॉगआउट करें:

skill -KILL -u username

देख man skill


3
मुझे लगता है कि मार डालेगा सब है कि उपयोगकर्ता ही नहीं, उनके खोल द्वारा प्रक्रियाओं, लेकिन अगर है कि क्या आप तो चाहते हैं यह निश्चित रूप से सरल है
माइकल Mrozek

मैं वास्तव में इसे आरएचईएल 7
एंटीवायरल सिप

11

अन्य उपयोगी कमांड pkillयहाँ है pkill -u username && pkill -9 -u usernamekillallनुकसान यह है कि Solaris IIRC पर इसका मतलब है कि कुछ पूरी तरह से अलग है - pkillथोड़ा और अधिक उन्नत विकल्प भी हैं।


8
सोलारिस 'किलॉल' का इस्तेमाल सर्वर पर सभी प्रक्रियाओं को मारने के लिए शटडाउन स्क्रिप्ट द्वारा किया जाता है। "यह वही करता है जो टिन पर लिखा है।"
dr-jan

दोस्तों, आप SIGKILL को इतना पसंद क्यों करते हैं? रनिंग प्रोग्राम और एप्लिकेशन के पास डेटा को बचाने और थोड़ा साफ करने का भी मौका नहीं होगा। SIGTERM (जैसा कि शटडाउन में उपयोग किया जाता है) या Sightup के रूप में अच्छी तरह से करना होगा और अधिक सुंदर तरीका है। (आप अभी भी छूट की अवधि समाप्त होने के बाद SIGKILL भेज सकते हैं।)
countermode

3

सबसे पहले, यह एक बड़ी समस्या को इंगित करता है। यदि आपके पास ऐसे उपयोगकर्ता हैं जिन्हें आप अपने सिस्टम पर भरोसा नहीं करते हैं, तो आपको शायद इसे स्तर और फिर से छवि देना चाहिए।

इसे ध्यान में रखते हुए, आप निम्न में से कुछ या सभी कर सकते हैं:

# पर्यावरण की स्थापना की
$ BADUSER = फू # जहां फू प्रश्न में उपयोगकर्ता नाम है
$ USERLINE = $ (grep '^ $ {BADUSER}:' / etc / passwd)
$ BADUID = $ (गूंज $ {USERLINE} | awk -F: '{प्रिंट $ 3}')
$ BADGID = $ (गूंज $ {USERLINE} | awk -F: '{$ $ 4}')
$ BADHOMEDIR = $ (गूंज $ {USERLINE} | awk -F: '{प्रिंट $ 6}')
$ BDIR = "~ / बैकअप / होम-बैकअप /"
$ TSTAMP = $ (दिनांक +% F)
$ TAR_FILENAME = "$ {BADUSER} - $ {TSTAMP} .tar.b2"
$ OWNED_FILENAME = "$ {BADUSER} -files - $ {TSTAMP} .t"

# उपयोगकर्ता का भविष्य लॉगिन अक्षम करें
$ sudo chsh -s / bin / false "$ {BADUSER}"

# उपयोगकर्ता की सभी प्रक्रियाओं को मार डालो
$ BADPROCS = $ (ps auwx | grep '^ $ {BADUSER} | awk' {प्रिंट $ 2} ')
$ sudo मार -9 $ {BADPROCS}

उपयोगकर्ता के होम डायरेक्टरी को # बैक अप / क्लियर करना
$ mkdir -p $ {BDIR}
$ sudo tar -cfj $ {BDIR} / $ {TAR_FILENAME} $ {BADHFEDI}
$ sudo rm -rf $ {BADHOMEDIR} /। $ $ {BADHOMEDIR / *

# उपयोगकर्ता के स्वामित्व वाली सभी फ़ाइलें खोजें
$ sudo / -user $ {BADUSER}> ~ / बैकअप / $ {OWNED_FILENAME} खोजें

# उपयोगकर्ता निकालें
$ sudo userdel $ {BADUSER}

मुझे नहीं पता है कि मैं "स्तर से सहमत हो जाऊंगा यह एक पुनर्जन्म है" यह यूनिक्स नहीं विंडोज़ है ... मुझे वास्तव में यह समस्या नहीं है ... मैं बस पूछ रहा था।
xenoterracide

3
इसके अलावा, सिर्फ इसलिए कि आपको एक उपयोगकर्ता को लात मारना है, जरूरी नहीं कि वे अविश्वसनीय हैं। शायद वे सिर्फ लॉग आउट करना भूल गए थे।
डेविड जेड

xenoterracide: हो सकता है कि मैं अपने द्वारा बनाए गए सिस्टम का सिर्फ सुरक्षात्मक हूं, लेकिन अगर मेरे पास एक उपयोगकर्ता था, जिसे मैंने महसूस किया था कि मुझे अपने नियंत्रण में एक प्रणाली से जबरन हटाया जाना चाहिए, तो कुछ गंभीर होना चाहिए था।
cjac

-1 सवाल को चीजों को पढ़ने के लिए जो तार्किक रूप से क्यू / ए-टॉपिक को फॉलो और ड्रैग नहीं करते हैं।
वेस्ले

you have users that you don't trust on your system... या यह सिर्फ यह हो सकता है कि आप एक को दूसरों को संदेश के रूप में मार रहे हैं। आखिरकार, क्या सिसडमिन का पंथ "प्यार होने की तुलना में भयभीत होना बेहतर नहीं है"? एक तरफ सभी चुटकुले, मैकियावेली को ओ'रेली पुस्तक लिखना चाहिए।
पार्थियन शॉट

0

मैंने चारों ओर देखा और इस कार्य को स्वचालित करने के लिए एक भी स्क्रिप्ट नहीं मिली।

इसलिए, यहां प्रस्तावित समाधानों के आधार पर, मैंने एक इंटरैक्टिव बैश स्क्रिप्ट में सब कुछ मिलाया , जो उपयोगकर्ता के लिए उपयोगकर्ता और सत्रों को सूचीबद्ध करता है कि who -uक्या करना है।

आप या तो कर सकते हैं:

  • एक उपयोगकर्ता के लिए सभी सत्रों को मार डालो killall -u <username> -HUP
  • एक विशिष्ट सत्र को मार डालो kill <PID>

सभी आवश्यक जानकारी से आता है who -uऔर फिर उपयोग करके पार्स किया जाता है mapfileऔर awk

मैं writeबाद में उपयोग करके एक संदेश भेजने की संभावना जोड़ूंगा (प्रक्रिया में देरी के साथ)।

मैं शायद एक विशेष सत्र को भी मारने का विकल्प जोड़ूंगा kill -9। लेकिन मुझे सिर्फ killऔर सिर्फ दूसरों की ओर से कोई समस्या नहीं थी , kill -9अगर संभव हो तो इससे बचना चाहिए।

यदि आप इसे आज़माना चाहते हैं या मैं इसे स्वचालित तरीके से कैसे कर रहा हूं, इसके बारे में अधिक जानने के लिए आप जीथब पर कोड की जांच कर सकते हैं:


0

तो आप अपने लिनक्स बॉक्स से [सौम्य] उपयोगकर्ताओं को कैसे किक करते हैं?

अंत में यह उन प्रक्रियाओं को पहचानने और समाप्त करने के लिए आता है, जो उपयोगकर्ता-आईडी से स्वामित्व, संबद्ध, या प्रायोजित हैं। उस अंतिम लक्ष्य को पाने के लिए आप जो भी आदेशों का उपयोग करते हैं, जरूरी नहीं कि जब तक आप वहां पहुंचते हैं, तब तक कोई फर्क नहीं पड़ता।

मूल रूप से दो उत्तर ...

विकल्प A: उक्त उपयोगकर्ता से लॉग आउट का कारण बनता है, जिसके लिए उनके पास कभी भी और कई लॉगिन हैं। तो इसका मतलब उन प्रक्रियाओं की पहचान करना होगा जो किसी उपयोगकर्ता के स्वामित्व में हैं, जो कि यूआईडी द्वारा पता लगाने योग्य हैं, और आपके द्वारा चलाए जा रहे दिए गए लिनक्स डिस्ट्रो के लिए कुछ लॉगिन प्रक्रिया के भाग के रूप में वर्गीकृत किया गया है। एहसास करें कि "लॉगिन" से पहले एसएसएच या वीएनसी जैसी माता-पिता प्रक्रियाएं हैं और "लॉगिन" के बाद जीडीएम जैसे बच्चे की प्रक्रियाएं आमतौर पर माता-पिता की प्रक्रिया को मारने से बच्चे की प्रक्रिया को मार दिया जाएगा, लेकिन हमेशा नहीं। तो आप इन अन्य प्रक्रियाओं को मारना चाहते हैं जो स्पष्ट रूप से लॉग आउट के बाद आवश्यक नहीं हैं। यह सब करने में, यह पृष्ठभूमि की नौकरियों को चालू रखेगा ... क्योंकि यह एक सौम्य उपयोगकर्ता है और शायद आप बस उन्हें लॉग आउट करना चाहते हैं। जहाँ तक मुझे पता है, /usr/bin/wऔर /usr/bin/whoरिपोर्ट करेगा कि लॉग इन प्रोसेस से कौन गुज़रा है।

विकल्प बी: एक विशिष्ट यूआईडी के स्वामित्व वाली सभी प्रक्रियाओं को पूरी तरह से समाप्त करें, जिसका सीधा मतलब होगा कि उपयोगकर्ता द्वारा स्वामित्व वाली किसी भी और सभी प्रक्रियाओं को मारना, यह भी लॉग इन होने पर उन्हें लॉग आउट कर देगा। यह किक सिस्टम को संतुष्ट करेगा । यह केवल एक सरल होने की जरूरत है ps -ef | grep <uid>और फिर उन सभी प्रक्रियाओं को समाप्त करना है जो कुछ भी स्वीकार्य है।

SLES 11 में fwiw यह रिपोर्ट करता है

आदमी कौशल ... ये उपकरण शायद अप्रचलित और अप्राप्य हैं। कमांड सिंटैक्स को खराब तरीके से परिभाषित किया गया है। इसके बजाय किलॉल, पीकिल और पीजीआरईपी कमांड का उपयोग करने पर विचार करें।

kill -9 FTW!


-1

मेरी राय में, यह वास्तव में उपयोग करने के लिए उपयोगी नहीं है killall -u usernameक्योंकि यदि यह आपके जैसा ही उपयोगकर्ता है, तो आप अपने आप को बंद कर देंगे। तो killप्रक्रिया एक बेहतर समाधान होगी।


यह भी कि अगर उस उपयोगकर्ता द्वारा चलाई जाने वाली प्रक्रियाएं हैं, तो शायद एसएसएचडी आप कभी भी सर्वर में नहीं आएंगे, एसएसएच बंद हो जाएगा।
मेलो

3
पृथ्वी पर SSH डेमॉन (या कोई डेमॉन) उपयोगकर्ता के क्रेडेंशियल्स का उपयोग करके क्यों चल रहा होगा जिसे किसी भी यथार्थवादी कारण के लिए सिस्टम से जबरन लॉग इन करना होगा? इसके अलावा, यह जवाब क्या जोड़ता है जो माइकल मर्ज़ेक के जवाब या एंड्रयू बी के जवाब (और संभवतः अन्य) द्वारा कवर नहीं किया गया है ।
एक CVn

-2

इस कमांड ने GUI के लिए बहुत काम किया मेरे "महत्वपूर्ण" ने साइन आउट करने से इंकार कर दिया ...

leaves@me:/# skill -HUP -u username
  • मुझे नहीं पता कि क्या हुआ।
  • कोई अपडेट रहा होगा।
  • "Google" फिर से डाउन हो गया।
  • यह इंटरवेब्स पर वायरस था।

यदि आपको उनकी आवश्यकता है तो कुछ विविधताएँ।


1
यह पहले से ही bsd के उत्तर में उल्लिखित है।
स्टीफन किट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.