一、查看及管理當前登錄用戶
1、使用w命令查看登錄用戶正在使用的進程信息,w命令用於顯示已經登錄系統的用戶的名稱,以及他們正在做的事。該命令所使用的信息來源於/var/run/utmp文件。w命令輸出的信息包括:
- 用戶名稱
- 用戶的機器名稱或tty號
- 遠程主機地址
- 用戶登錄系統的時間
- 空閑時間(作用不大)
- 附加到tty(終端)的進程所用的時間(JCPU時間)
- 當前進程所用時間(PCPU時間)
- 用戶當前正在使用的命令
$ w 23:04:27 up 29 days, 7:51, 3 users, load average: 0.04, 0.06, 0.02 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ramesh pts/0 10.1.80.56 22:57 8.00s 0.05s 0.01s sshd: ramesh [priv] jason pts/1 10.20.48 23:01 2:53 0.01s 0.01s -bash john pts/2 10.1.80.7 23:04 0.00s 0.00s 0.00s w
此外,可以使用who am i查看使用該命令的用戶及進程,使用who查看所有登錄用戶進程信息,這些查看命令大同小異;
2、使用pkill強制退出登錄的用戶
使用pkill可以結束當前登錄用戶的進程,從而強制退出用戶登錄,具體使用可以結合w命令;
首先:使用w查看當前登錄的用戶,注意TTY所示登錄進程終端號
其次:使用pkill –9 -t pts/1 結束pts/1進程所對應用戶登錄(可根據FROM的IP地址或主機號來判斷)
二、查看所有登錄用戶的操作歷史
在linux系統的環境下,不管是root用戶還是其它的用戶只有登陸系統后用進入操作我們都可以通過命令history來查看歷史記錄,可是假如一台服務器多人登陸,一天因為某人誤操作了刪除了重要的數據。這時候通過查看歷史記錄(命令:history)是沒有什么意義了(因為history只針對登錄用戶下執行有效,即使root用戶也無法得到其它用戶histotry歷史)。那有沒有什么辦法實現通過記錄登陸后的IP地址和某用戶名所操作的歷史記錄呢?答案:有的。
通過在/etc/profile里面加入以下代碼就可以實現:
PS1="`whoami`@`hostname`:"'[$PWD]'
historyUSER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
thenUSER_IP=`hostname`fiif [ ! -d /tmp/dbasky ]
thenmkdir /tmp/dbaskychmod 777 /tmp/dbaskyfiif [ ! -d /tmp/dbasky/${LOGNAME} ]
thenmkdir /tmp/dbasky/${LOGNAME}chmod 300 /tmp/dbasky/${LOGNAME}fiexport HISTSIZE=4096DT=`date "+%Y-%m-%d_%H:%M:%S"`
export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP} dbasky.$DT"
chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null
source /etc/profile 使用腳本生效
退出用戶,重新登錄
上面腳本在系統的/tmp新建個dbasky目錄,記錄所有登陸過系統的用戶和IP地址(文件名),每當用戶登錄/退出會創建相應的文件,該文件保存這段用戶登錄時期內操作歷史,可以用這個方法來監測系統的安全性。
root@zsc6:[/tmp/dbasky/root]ls10.1.80.47 dbasky.2013-10-24_12:53:08root@zsc6:[/tmp/dbasky/root]cat 10.1.80.47 dbasky.2013-10-24_12:53:08
查看在12:53:08從10.1.80.47登錄的root用戶操作命令歷史