나는 이것을 조금 전에 인터넷 검색하고 몇 가지 방법을 발견했지만 Google이 모든 것을 알지 못한다고 생각합니다. 그래서 어떻게 당신은 당신의 리눅스 박스 떨어져 사용자를 걷어차? 또한 처음 로그인 한 것을 어떻게 알 수 있습니까? 그리고 관련 … 사용자가 X11 DE에 로그인 한 경우 방법이 작동합니까?
답변
아마도 더 쉬운 방법이 있지만, 나는 이것을합니다 :
-
컴퓨터에 누가 로그인했는지 확인-
who
또는w
:> who mmrozek tty1 Aug 17 10:03 mmrozek pts/3 Aug 17 10:09 (:pts/2:S.0)
-
TTY가 연결된 쉘의 프로세스 ID를 찾으십시오.
> ps t PID TTY STAT TIME COMMAND 30737 pts/3 Ss 0:00 zsh
-
연결이 끊어 질 때 웃으십시오 (이 단계는 선택 사항이지만 권장 됨).
> echo "HAHAHAHAHAHAHAHA" | write mmrozek pts/3
-
해당 프로세스를 종료하십시오.
> kill -9 30737
방금 플래그 를 제공 who
하여 1 단계와 2 단계를 결합 할 수 있음을 발견했습니다 -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)
답변
Micheal이 이미 지적했듯이, who
누가 로그인했는지 확인할 수 있습니다 . 그러나 프로세스가 여러 개인 경우 각 프로세스를 개별적으로 종료하는 것보다 더 편리한 방법이 있습니다 killall -u username
. 해당 사용자가 모든 프로세스를 종료하는 데 사용할 수 있습니다 .
답변
점!
나는 받아 들여진 대답의 유머에 감사하지만 전문적으로 나는 그것을 옹호 할 수 없다.
내가 아는 가장 우아한 방법은 쉘에 -HUP을 보내서 사용자 끊기를 시뮬레이션하는 것입니다. 이것을 유휴 sshd로 보내면 연결이 끊어지는 것을 시뮬레이트하여 전체 셸 환경 (하위 셸 포함)의 정리를 트리거하거나 특정 중첩 셸 (예 : 연결이 끊긴 터미널 멀티플렉서 내부의 설정)에 보낼 수 있습니다. 정말로 정확하려면 파일 시스템 마운트 해제를 방지하십시오.
사용 write
당신이 그들을 부팅하기 전에 말기 유휴 ptys에 메시지를 보내도록하는 것입니다 하지만 재미있는 취미.
답변
사용자 ‘username’을 로그 아웃하십시오.
skill -KILL -u username
보다 man skill
답변
다른 유용한 명령이 pkill
여기 있습니다 pkill -u username && pkill -9 -u username
.
killall
Solaris IIRC에서는 완전히 다른 것을 의미한다는 점에서 단점이 pkill
있습니다. 또한 약간 더 고급 옵션이 있습니다.
답변
우선, 이것은 더 큰 문제를 나타냅니다. 시스템을 믿지 않는 사용자가 있다면, 레벨을 조정하고 이미지를 다시 만들어야합니다.
이를 염두에두고 다음 중 일부 또는 전부를 수행 할 수 있습니다.
# 환경을 설정 $ 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}
답변
나는 모든 것을 둘러 보았고이 작업을 자동화하는 단일 스크립트를 찾을 수 없었습니다.
따라서 여기에 제안 된 솔루션을 기반으로 대화 형 Bash 스크립트에 모든 것을 혼합 who -u
하여 사용자가 수행 할 작업을 선택할 수 있는 사용자와 세션을 나열했습니다 .
그러면 다음 중 하나를 수행 할 수 있습니다.
- 사용자의 모든 세션을 종료
killall -u <username> -HUP
- 특정 세션을 죽이다
kill <PID>
모든 필요한 정보는에서 제공 who -u
한 후 사용하여 구문 분석 mapfile
하고 awk
.
write
나중에 사용하여 메시지를 보낼 수있는 가능성을 추가 할 것입니다 (프로세스가 지연됨).
아마와 함께 특정 세션을 죽일 수있는 옵션이 추가됩니다 kill -9
뿐만 아니라입니다. 그러나 나는 kill
다른 사람들이 지적한대로 문제가 없었으며 kill -9
가능하면 피해야합니다.
github에서 코드를 확인하거나 자동화 된 방식으로 코드를 수행하는 방법에 대해 자세히 알아 보려면 다음 코드를 확인하십시오.