it-swarm-eu.dev

Jak nakopnete benigního uživatele z vašeho systému?

Dělal jsem si to už dávno a všiml jsem si pár způsobů, ale hádám, že google neví všechno. Jak tedy vy vyhodíte uživatele z vašeho Linuxu? také jak se chystáte vidět, že jsou přihlášeni na prvním místě? a související ... funguje vaše metoda, pokud je uživatel přihlášen k X11 DE (není to požadavek, jen jsem zvědavý)?

68
xenoterracide

Pravděpodobně existuje snadnější způsob, ale já to dělám:

  1. Podívejte se, kdo je přihlášen do vašeho počítače - použijte who nebo w:

    > who  
    mmrozek  tty1         Aug 17 10:03  
    mmrozek  pts/3        Aug 17 10:09 (:pts/2:S.0)
    
  2. Vyhledejte ID procesu Shell, ke kterému je TTY připojeno:

    > ps t  
    PID   TTY      STAT   TIME COMMAND  
    30737 pts/3    Ss     0:00 zsh
    
  3. Smát se při jejich blížícím se odpojení (tento krok je volitelný, ale podporován)

    > echo "HAHAHAHAHAHAHAHA" | write mmrozek pts/3
    
  4. Zabijte odpovídající proces:

    > kill -9 30737
    

Právě jsem zjistil, že můžete zkombinovat kroky 1 a 2 tím, že přidáte příznak who-u; PID je číslo vpravo:

> 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

Jak již Micheal zdůraznil, můžete pomocí who zjistit, kdo je přihlášený. Pokud však mají více procesů, existuje mnohem pohodlnější způsob, než zabít každý proces jednotlivě: můžete použít killall -u username zabít všechny procesy tímto uživatelem.

33
sepp2k

Necromancy!

Vážím si humoru přijaté odpovědi, ale profesionálně to nemohu obhajovat.

Nejpůvabnější metoda, o které vím, je poslat -HUP do prostředí Shell, aby se simulovalo zablokování uživatele. Můžete to poslat do nečinného sshd uživatele a simulovat ztrátu spojení, což spouští vyčištění celého prostředí Shell (včetně podřízených skořápek), nebo to poslat do konkrétních vnořených skořápek (řekněme ty, které se nastavují uvnitř odpojeného terminálového multiplexeru, který brání vám v odpojení souborového systému), pokud chcete být opravdu přesní.

Používání write k odesílání zpráv na terminálně nečinné ptys před jejich zavedením je zábavný koníček.

23
Andrew B

Odhlášení uživatele 'username':

skill -KILL -u username

Viz man skill

13
bsd

Další užitečný příkaz je pkill zde pkill -u username && pkill -9 -u username. killall má tu nevýhodu, že v systému Solaris IIRC to znamená něco úplně jiného - také pkill má o něco pokročilejší možnosti.

11
Maciej Piechotka

Především to znamená větší problém. Pokud máte uživatele, kterým nedůvěřujete ve svůj systém, měli byste jej pravděpodobně vyrovnat a znovu obrázek.

S ohledem na to můžete provádět některé nebo všechny z následujících:

 # nastavení prostředí 
 $ BADUSER = foo #, kde foo je dotyčné uživatelské jméno 
 $ 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 = $ (datum +% F) 
 $ TAR_FILENAME = "$ {BADUSER} - $ {TSTAMP} .tar.bz2" 
 $ OWNED_FILENAME = "$ {BADUSER } -files - $ {TSTAMP} .txt "
 
 # deaktivovat budoucí přihlášení uživatele 
 $ Sudo chsh -s/bin/false" $ {BADUSER} "
 
 # zabije všechny procesy uživatele 
 $ BADPROCS = $ (ps auwx | grep '^ $ {BADUSER}' | awk '{print $ 2}') 
 $ Zabít sudo -9 $ {BADPROCS} 
 
 # Zpět nahoru/vymazat domovský adresář uživatele 
 $ Mkdir -p $ {BDIR} 
 $ Sudo tar -cfj $ {BDIR}/$ {TAR_FILENAME} $ {BADHOMEDIR} 
 $ Sudo rm -rf $ {BADHOMEDIR} /.* $ {BADHOMEDIR}/* 
 
 # Najděte všechny soubory vlastněné uživatelem [.__ __.] $ Sudo find/-user $ {BADUSER}> ~/backup/$ {OWNED_FILENAME} 
 
 # Odebrat uživatele 
 $ Sudo userdel $ {BADUSER} 
3
cjac

Rozhlédl jsem se všude kolem a nemohl jsem najít jediný skript pro automatizaci tohoto úkolu.

Takže na základě zde navrhovaných řešení jsem smíchal vše v interaktivní Bash skript , který uvádí uživatele a relace od who -u pro uživatele, aby si vybral, co má dělat.

Potom můžete buď:

  • zabít všechny relace pro uživatele killall -u <username> -HUP
  • zabít konkrétní relaci kill <PID>

Všechny požadované informace pocházejí z who -u a poté je analyzováno pomocí mapfile a awk.

Přidám možnost poslat zprávu pomocí write později (rozvětvení procesu se zpožděním).

Pravděpodobně přidám možnost zabít konkrétní relaci pomocí kill -9 také. Ale neměl jsem problémy s pouhým kill, a jak bylo uvedeno jinými, kill -9 pokud je to možné, je třeba se mu vyhnout.

Kód si můžete zkontrolovat na githubu, pokud jej chcete vyzkoušet, nebo se dozvědět více o tom, jak to dělám automatizovaným způsobem:

0
Gus Neves

Podle mého názoru není opravdu užitečné používat killall -u username protože pokud je to stejný uživatel jako vy, vykopnete se. Proces kill bude tedy lepším řešením.

0
Mailo

Jak tedy vyhodíte [benigní] uživatele z vašeho Linuxu?

Nakonec jde o identifikaci a ukončení těch procesů, které jsou vlastněny, přidruženy nebo vytvořeny z uživatelského id. Nezáleží na tom, jaké příkazy použijete k dosažení tohoto cíle, pokud se tam dostanete.

V zásadě dvě odpovědi ...

Varianta A: způsobuje odhlášení od uvedeného uživatele, pro které se vždy a bez ohledu na to mnoho přihlášení. To by znamenalo identifikovat ty procesy, které jsou vlastněny uživatelem, sledovatelné uidem, a klasifikované jako součást nějakého přihlašovacího procesu pro daný linux distro, který provozujete. Uvědomte si, že před „přihlášením“ existují nadřazené procesy, jako SSH nebo VNC, a podřízené procesy, jako je GDM po „přihlášení“ Obvykle zabití nadřazeného procesu zabije podřízený proces, ale ne vždy. Takže byste chtěli zabít tyto další procesy, které po odhlášení zjevně již nepotřebujete. Při tom všem by to nechalo běžet úlohy na pozadí ... protože je to neškodný uživatel a možná je jen chcete odhlásit. Pokud vím, /usr/bin/w a /usr/bin/who nahlásí, kdo prošel procesem přihlášení.

možnost B: ukončí všechny procesy vlastněné konkrétním uidem úplně, což by jednoduše znamenalo zabití všech a všech procesů vlastněných uvedeným uživatelem, také by se odhlásilo, kdyby byly přihlášeny. To by uspokojilo je odstartujte ze systému . To musí být pouze jednoduché ps -ef | grep <uid> a pak ukončit všechny tyto procesy jakýmkoli způsobem je přijatelný.

fwiw v SLES 11 to hlásí

dovednost člověka ... Tyto nástroje jsou pravděpodobně zastaralé a nepřenosné. Syntaxe příkazu je špatně definována. Místo toho zvažte použití příkazů killall, pkill a pgrep.

kill -9 FTW!

0
ron