「Linux」- 強制使用者下線 @2021-01-20
阿新 • • 發佈:2021-01-21
內容簡介
本文將介紹如何顯示已登入系統的使用者,以及如何強制已登入使用者下線。
問題描述
之前有些開發拿到ROOT帳號。現在,要回收ROOT帳號,修改密碼,並強制已登入使用者下線。如果不強制下線,他們還可以使用ROOT使用者繼續操作。
解決辦法
找到使用者登入程序,然後結束這些程序即可。
#1 檢視已登入使用者
檢視當前使用者
#!/bin/sh ################################################################################ # 顯示當前登入的使用者的使用者名稱 ################################################################################ whoami # 沒有其他選項 ################################################################################ # 顯示當前登入的使用者的使用者名稱 ################################################################################ id -un
上述命令是等價的,都顯示了當前登入的使用者。
查詢已登入使用者
#!/bin/sh ################################################################################ # 顯示系統中登入的使用者,及正在執行的動作 ################################################################################ w ################################################################################ # 顯示當前登入的使用者 ################################################################################ who ################################################################################ # 顯示當前登入使用者(特殊一些) # 沒有其他的選項,功能單一。如果使用者具有多個程序,則顯示多次使用者名稱。 ################################################################################ users
#2 結束登入使用者
目前還沒有發現直接找到使用者登入程序的辦法。這裡我們只能拿到登入系統的使用者的TTY或者PTS值,需要通過這些值來查找出程序。
準確辦法
具體方法如下:
#!/bin/sh # 在所有的程序中,查詢登入程序 ps -dN | grep -E $(who | awk '{printf "%s|", $2}')AAA # 關於「AAA」:因為在拼接正則表示式的時候結尾多了一個「|」,會導致所有的程序都匹配,所以添加了「AAA」字串。 # 從這些程序中排除當前登入使用者的程序 ps -dN | grep -E $(who | awk '{printf "%s|", $2}')AAA | grep -v $$ # 格式化輸出,將程序ID顯示在一行 ps -dN | grep -E $(who | awk '{printf "%s|", $2}')AAA | grep -v $$ | awk '{printf "%s ", $1}' # 最後結束所有的使用者 kill -KILL $(ps -dN | grep -E $(who | awk '{printf "%s|", $2}')AAA | grep -v $$ | awk '{printf "%s ", $1}')
注意事項:
(1)使用$$獲取當前程序。這裡存在一個問題:在tmux(或者screen程式)中這是不可行的。
投機取巧
其實我們面對一般都是SSH帳號:
#!/bin/sh # 要死大家一起死: kill -KILL $(ps -auxwww | grep -E 'sshd:' | grep -v 'grep' | awk '{printf "%s ", $2}')
參考文獻
- WikiNotes/強制使用者下線
- 4 Ways to Identify Who is Logged-In on Your Linux System
- Force logout a user
- How to get the process ID (PID) of a shell script
- Did you ever face this situation, a lot of terminal connections to your server?
- List all connected SSH sessions?