2019-01-07



centos 7 查看所有登录用户的操作历史

在Linux系统的环境下,不管是root用户还是其它的用户只有登陆系统后用进入操作我们都可以通过命令history来查看历史记录。可是假如一台服务器多人登陆,一天因为某人误操作了删除

了重要的数据。这时候通过查看历史记录(命令:history)是没有什么意义了(因为history只针对登录用户下执行有效,即使root用户也无法得到其它用户histotry历史)。那有没有什么

办法实现通过记录登陆后的IP地址和某用户名所操作的历史记录呢?答案肯定是有的!

 

通过在/etc/profile文件底部添加以下代码就可以实现:

[root@test ~]# cat /etc/profile

......
#记录每个用户的操作信息

export PS1='[\u@\h \w]# '

history

USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`


if [ "$USER_IP" = "" ]

then

USER_IP=`hostname`

fi

if [ ! -d /opt/history ]

then

mkdir /opt/history


chmod 777 /opt/history

fi

if [ ! -d /opt/history/${LOGNAME} ]

then

mkdir /opt/history/${LOGNAME}


chmod 300 /opt/history/${LOGNAME}

fi

export HISTSIZE=4096


DT=`date +"%Y%m%d_%H%M%S"`


export HISTFILE="/opt/history/${LOGNAME}/${USER_IP} history.$DT"


chmod 600 /opt/history/${LOGNAME}/*history* 2>/dev/null

 

[root@test ~]# source /etc/profile     #使得上面配置生效

 

上面脚本在系统的/opt下新建个history目录,记录所有登陆过系统的用户和IP地址(文件名),每当用户登录/退出会创建相应的文件,该文件保存这段用户登录时期内操作历史,可以用这个

方法来监测系统的安全性。

------------------------------------------------------------------------------------------------------------------------------------------

上面的显示跟默认的linux终端显示不太习惯。现在要求终端里切换路径后,只显示当前的简介路径,不显示全部路径,并且后面带上#或$符号,那么只需要将上面的第一行

PS1参数后面的设置如下:

1)只显示当前简介路径,不显示全路径,显示#号。注意下面在"#"符号后面空出一格,这样终端的"#"符号跟命令之间就有了一格的距离,习惯而已!

PS1="[\u@\h \W]# "

2)只显示当前简介路径,不显示全路径,显示$号。注意下面的"$"符号后面空出一格。

PS1="[\u@\h \W]\$ "

 

这里我在脚本选择第(1)种带"#"号显示(也可以两种都不选,直接将第一行PS1的设置给去掉,这样就是默认的了终端显示.线上使用的话,推荐使用这种默认的),生效后的终

端显示内容和linux默认显示的一样。即export PS1="[\u@\h \W]# "