it-swarm-ko.tech

어떻게 시스템에서 양성 사용자를 쫓아 내나요?

나는 이것을 조금 전에 인터넷 검색하고 몇 가지 방법을 발견했지만 Google이 모든 것을 알지 못한다고 생각합니다. 그렇다면 yo 어떻게 리눅스 박스에서 사용자를 쫓아 내나요? 또한 처음 로그인 한 것을 어떻게 알 수 있습니까? 그리고 관련 ... 사용자가 X11 DE에 로그인 한 경우 방법이 작동합니까?

68
xenoterracide

아마도 더 쉬운 방법이 있지만, 나는 이것을합니다 :

  1. 컴퓨터에 누가 로그인했는지 확인-who 또는 w 사용 :

    > who  
    mmrozek  tty1         Aug 17 10:03  
    mmrozek  pts/3        Aug 17 10:09 (:pts/2:S.0)
    
  2. TTY가 연결된 쉘의 프로세스 ID를 찾으십시오.

    > 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
    

방금 who-u 깃발; PID는 오른쪽에있는 숫자입니다.

> 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이 이미 지적했듯이 who를 사용하여 로그인 한 사람을 찾을 수 있습니다. 그러나 프로세스가 여러 개인 경우 각 프로세스를 개별적으로 종료하는 것보다 더 편리한 방법이 있습니다. killall -u username 해당 사용자의 모든 프로세스를 종료합니다.

33
sepp2k

점!

나는 받아 들여진 대답의 유머에 감사하지만 전문적으로 나는 그것을 옹호 할 수 없다.

내가 아는 가장 우아한 방법은 셸에 -HUP을 보내서 사용자 끊기를 시뮬레이션하는 것입니다. 이 연결을 유휴 상태의 sshd로 보내 연결 손실을 시뮬레이트하여 전체 셸 환경 (하위 셸 포함)을 정리하거나 특정 중첩 된 셸 (예 : 연결이 끊긴 터미널 멀티플렉서 내부 설정)에 보낼 수 있습니다. 정말 정확하려면 파일 시스템 마운트 해제를 방지하십시오.

부팅하기 전에 write를 사용하여 터미널 유휴 pty로 메시지 보내기 is 재미있는 취미.

23
Andrew B

사용자 'username'을 로그 아웃하십시오.

skill -KILL -u username

보다 man skill

13
bsd

다른 유용한 명령은 pkill here pkill -u username && pkill -9 -u username. killall는 Solaris IIRC에서 완전히 다른 것을 의미한다는 단점이 있습니다. 또한 pkill에는 약간 더 고급 옵션이 있습니다.

11
Maciej Piechotka

우선, 이것은 더 큰 문제를 나타냅니다. 시스템을 믿지 않는 사용자가 있다면, 레벨을 조정하고 이미지를 다시 만들어야합니다.

이를 염두에두고 다음 중 일부 또는 전부를 수행 할 수 있습니다.

 # 환경 설정 
 $ BADUSER = foo # 여기서 foo는 문제의 사용자 이름입니다. 
 $ 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 = $ (날짜 + % F) 
 $ TAR_FILENAME = "$ {BADUSER}-$ {TSTAMP} .tar.bz2"
 $ OWNED_FILENAME = "$ {BADUSER } -files-$ {TSTAMP} .txt "
 
 # 사용자의 향후 로그인 비활성화 
 $ Sudo chsh -s/bin/false"$ {BADUSER} "
 
 # 사용자 프로세스를 모두 종료 
 $ BADPROCS = $ (ps auwx | grep '^ $ {BADUSER}'| awk '{print $ 2}') 
 $ Sudo kill -9 $ {BADPROCS} 
 
 # 사용자의 홈 디렉토리 백업/삭제 
 $ mkdir -p $ {BDIR} 
 $ Sudo tar -cfj $ {BDIR}/$ {TAR_FILENAME} $ {BADHOMEDIR} 
 $ Sudo rm -rf $ {BADHOMEDIR} /.* $ {BADHOMEDIR}/* 
 
 # 모든 파일 찾기 사용자가 소유 함 [.__ __.] $ Sudo find/-user $ {BADUSER}> ~/backup/$ {OWNED_FILENAME} 
 
 # 사용자 제거 
 $ Sudo userdel $ {BADUSER} 
3
cjac

나는 모든 것을 둘러 보았고이 작업을 자동화하는 단일 스크립트를 찾을 수 없었습니다.

따라서 여기에 제안 된 솔루션을 기반으로 대화식 Bash 스크립트 의 모든 내용을 혼합하여 who -u의 사용자 및 세션을 나열하여 사용자가 수행 할 작업을 선택할 수 있습니다.

그러면 다음 중 하나를 수행 할 수 있습니다.

  • 사용자의 모든 세션을 종료하십시오 killall -u <username> -HUP
  • 특정 세션을 종료하십시오 kill <PID>

필요한 모든 정보는 who -u에서 가져온 다음 mapfileawk를 사용하여 구문 분석됩니다.

나중에 write를 사용하여 메시지를 보낼 가능성을 추가 할 것입니다 (프로세스가 지연됨).

kill -9를 사용하여 특정 세션을 종료하는 옵션도 추가 할 것입니다. 그러나 나는 단지 kill에 아무런 문제가 없었으며 다른 사람들이 지적했듯이 가능한 경우 kill -9는 피해야합니다.

Github에서 코드를 확인하거나 자동화 된 방식으로 코드를 수행하는 방법에 대해 자세히 알아 보려면 다음 코드를 확인하십시오.

0
Gus Neves

제 생각에는 killall -u username 귀하와 동일한 사용자 인 경우, 귀하는 귀하를 쫓아 낼 것입니다. kill 프로세스가 더 나은 솔루션이 될 것입니다.

0
Mailo

그렇다면 어떻게 리눅스 박스에서 [양성] 사용자를 쫓아 내나요?

결국 사용자 ID에서 소유, 연관 또는 생성 된 프로세스를 식별하고 종료합니다. 최종 목표를 달성하기 위해 어떤 명령을 사용 하든지 반드시 도달하는 한 중요하지는 않습니다.

기본적으로 두 가지 대답 ...

Option A : 해당 사용자의 로그 아웃을 유발합니다. 따라서 이는 사용자가 소유하고 uid로 추적 할 수 있으며 실행중인 특정 Linux 배포판에 대한 일부 로그인 프로세스의 일부로 분류 된 프로세스를 식별하는 것을 의미합니다. "로그인"전에 SSH 또는 VNC와 같은 상위 프로세스가 있고 "로그인"후 GDM과 같은 하위 프로세스가 있다는 것을 인식하십시오. 일반적으로 상위 프로세스를 종료하면 하위 프로세스가 종료되지만 항상 그런 것은 아닙니다. 따라서 로그 아웃 후 더 이상 필요하지 않은 다른 프로세스를 종료하려고합니다. 이 모든 작업을 수행하면 백그라운드 작업이 계속 실행됩니다. 양성 사용자이므로 로그 아웃하고 싶을 수도 있습니다. 내가 아는 한, /usr/bin/w/usr/bin/who가 로그인 프로세스를 통과 한 사람을보고합니다.

option B : 특정 uid가 소유 한 모든 프로세스를 완전히 종료합니다. 이는 단순히 해당 사용자가 소유 한 모든 프로세스를 종료하는 것을 의미하며, 로그인되어 있으면 로그 아웃됩니다. 시스템에서 쫓아냅니다 . 그것은 간단한 ps -ef | grep <uid>이면되고 모든 프로세스를 허용 가능한 방식으로 끝내야합니다.

sLES 11에서보고

man skill ...이 도구는 아마도 쓸모없고 이식 할 수 없습니다. 명령 구문이 잘못 정의되었습니다. killall, pkill 및 pgrep 명령을 대신 사용하십시오.

kill -9 FTW!

0
ron