CentOS 網管小筆記 : 凍結帳號及強制登出

以前曾經管理一個 8 node 的 cluster 一段時間,而當時有個需求就是再某一段時間要對整個 cluster 作封測,由於當時 cluster 有外借一個帳號給別人,所以就會擔心再封得時候其他人跑進來玩耍,這樣封測的結果就不準了。但是如果直接刪除帳號到時候再開給他,顯得麻煩,於是就 survey 了一下如何凍結帳號,最好是可以凍結後時間到了就會自動解鎖,設定完後就不用煩惱。

  • 以下的這些指令都是 Linux 內建的,不過你會需要 root 權限。

管理密碼 > passwd

沒想到這個建密碼一定會用到的指令還有其他強大功能,我利用管理特定使用者的密碼狀態,來達到管理特定使用者的長好是否有效的效果,另外usermod 也有類似的功能。

#凍結帳號
passwd -l {username}
#example :
passwd -l ctsai
#解鎖帳號
passwd -u {username}
#example :
passwd -u ctsai
#檢驗帳號狀態
passwd -S {username}
#example :
passwd -S SISQUAKE
#凍結的狀態
SISQUAKE LK 2016-03-11 0 99999 7 -1 (密碼已鎖定。)
#解鎖的狀態
SISQUAKE PS 2016-03-11 0 99999 7 -1 (密碼已設定,SHA512 加密法。)

強制退出使用者 > skill

當你把某個使用者的密碼失效後,系統並不會馬上把該使用者退出,他原本登入的 session 還會繼續 keep 住,並且可以繼續正常執行,如果你真要馬上把該使用者被登出,就可以使用以下指令:

skill -KILL -u {username}
#example :
skill -KILL -u ctsai

這個指令真的十分兇猛,這是由於給的 signal 是 KILL ,即是立即終止,所以不管是這個使用者的 session 或是 process 都會馬上清光光,請小心使用。

排程解鎖 > at

有另一個指令 chage 可以限制某個帳號的有效時間 , 不過如果要做到自動的解鎖的話就沒有現有的指令可以使用,所以這裡就引入一個很實用的排程指令 at ,這裡的排程是特定排程,非例行排程,也就是指定時間執行,不會重複定時執行。

1.首先要開啟 atd 服務(CentOS 6 以下)

service atd restart

不想每次重開都開就記得下

chkconfig atd on

2.指定時間執行

at 16:00 2015-03-09

3.下完後會進去 at 的 bash ,可以想像就是到時候要執行的 script ,依序打入要執行的指令 結束時按 ctrl + D

#example :
at 16:00 2015-03-12
at> skill -KILL -u ctsai
at>
job 21 at 2015-03-12 16:00
       ^ at job ID

4.查詢at job 的bash

at -c + {at job ID}
#example :
at -c 21

5.查看所有at job 序列

atq
#example :
atq
21  2015-03-12 16:00 a root

Reference

鳥哥的 Linux 私房菜