1. 程式人生 > 實用技巧 >「Linux」- 強制使用者下線 @2021-01-20

「Linux」- 強制使用者下線 @2021-01-20

內容簡介

本文將介紹如何顯示已登入系統的使用者,以及如何強制已登入使用者下線。

問題描述

之前有些開發拿到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}')

參考文獻