对于Linux系统而言,我们知道要查看用户的操作记录命令可以用 history 命令查看,但是 history命令还是比较过于简陋,默认history命令只显示编号,如下图所示,这里就缺少很多我们需要的信息了,比如是在哪个时间点哪个用户做 了什么操作。
[root@localhost ~]# history | head
1 cd /usr/local/
2 ls
3 vim /etc/profile
4 ls
5 history | grep tar
6 ls
7 cd /usr/local/
8 ls
9 cd nexus-2.14.9-01/
10 ls
这里我们给 history 命令加上时间和日期。
export HISTTIMEFORMAT="%F %T "
然后再来看一下,可以看到多了日期和时间了。
[root@localhost ~]# history |head
1 2019-01-24 23:43:21 cd /usr/local/
2 2019-01-24 23:43:21 ls
3 2019-01-24 23:43:21 vim /etc/profile
4 2019-01-24 23:43:21 ls
5 2019-01-24 23:43:21 history | grep tar
6 2019-01-24 23:43:21 ls
7 2019-01-24 23:43:21 cd /usr/local/
8 2019-01-24 23:43:21 ls
9 2019-01-24 23:43:21 cd nexus-2.14.9-01/
10 2019-01-24 23:43:21 ls
但是这还是不能满足我们的需求,我们还想知道是哪个用户的操作的,这里我们需要这样设置一下:
export HISTTIMEFORMAT="%F %T `whoami` "
然后再来看一下,可以看到多了用户。
[root@localhost ~]# history |head
1 2019-01-24 23:43:21 root cd /usr/local/
2 2019-01-24 23:43:21 root ls
3 2019-01-24 23:43:21 root vim /etc/profile
4 2019-01-24 23:43:21 root ls
5 2019-01-24 23:43:21 root history | grep tar
6 2019-01-24 23:43:21 root ls
7 2019-01-24 23:43:21 root cd /usr/local/
8 2019-01-24 23:43:21 root ls
9 2019-01-24 23:43:21 root cd nexus-2.14.9-01/
10 2019-01-24 23:43:21 root ls
上面我们就可以看出是哪个用户操作了,不过这个有点鸡肋,因为显示的是当前用户的操作。
如果我还想知道哪个用户通过哪个ip操作的,可以执行如下命令:
export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` "
然后再看一下history记录:
[root@localhost ~]# history |head
1 2019-01-24 23:43:21 root pts/0 (192.168.0.200) cd /usr/local/
2 2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls
3 2019-01-24 23:43:21 root pts/0 (192.168.0.200) vim /etc/profile
4 2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls
5 2019-01-24 23:43:21 root pts/0 (192.168.0.200) history | grep tar
6 2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls
7 2019-01-24 23:43:21 root pts/0 (192.168.0.200) cd /usr/local/
8 2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls
9 2019-01-24 23:43:21 root pts/0 (192.168.0.200) cd nexus-2.14.9-01/
10 2019-01-24 23:43:21 root pts/0 (192.168.0.200) ls
以上操作都是临时的,退出系统后,下次就不生效了。
根据需求,有三种不同的设置环境变量的方法。
1、临时设置当前用户的环境变量
2、永久设置当前/其他用户的环境变量
3、永久设置所有用户的环境变量
第一种就不说了,就是上面介绍的:
export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` "
第二种,我们需要在当前用户的.bashrc或者.bash_profile文件里面追加命令,最后source一下就可以了。
echo 'export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` " ' >> ~/.bashrc
或者
echo 'export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` " ' >> ~/.bash_profile
第三种就是需要将这个设置添加到/etc/profile里面了
将HISTTIMEFORMAT变量加入到/etc/profile文件中,让它对所有用户永久生效。
echo 'export HISTTIMEFORMAT="%F %T `who am i |awk '{print \$1\" \"\$2" \"\$5}'` " ' >> /etc/profile
注意:如果原先有HISTTIMEFORMAT需要注释掉原先的。
运行下面的命令文件中的修改生效。
source /etc/profile
接下来我们讲一下第二点,第二点要讲的原因是因为第一点history命令是有条数限制的,默认history只有1000条记录,我们用echo $HISTSIZE可以查看具体条数。虽然我们可以通过增加HISTSIZE参数来增加history的记录条数,但是数量还是有限,而且只能记录当前登录的用户操作。
所以这里我们第二点讲的就是如何记录所有用户的操作记录。这里我们就叫它开启linux系统用户命令日志审计功能。
1.创建用户审计文件存放目录和审计日志文件:
mkdir - p /var/log/usertmonitor/
2.创建用户审计日志文件:
echo usermonitor > /var/log/usertmonitor/usertmonitor.log
3.将日志文件所有者赋予一个最低权限的用户:
chown nobody:nobody /var/log/usertmonitor/usertmonitor.log
4.给该日志文件赋予所有人的写权限:
chmod 002 /var/log/usertmonitor/usertmonitor.log
5.设置文件权限,使所有用户对该文件只有追加权限:
chattr +a /var/log/usertmonitor/usertmonitor.log
6.编辑/etc/profile文件,添加如下脚本命令:
export HISTORY_FILE=/var/log/usertmonitor/usertmonitor.log
export PROMPT_COMMAND='{ date "+%Y-%m-%d" %T #### $(who am i | awk "{print \$1\" \"\$2\" \"\$5}") #### $(whoami) #### $(history 1 | { read x cmd; echo "$cmd";})";} >> $HISTORY_FILE'
7.使配置生效
source /etc/profile
8.查看效果
[root@localhost usertmonitor]# cat usertmonitor.log |head
usermonitor
19-01-25 00:57:01 #### root pts/0 (192.168.0.200) #### root #### source /etc/profile
19-01-25 00:57:07 #### root pts/0 (192.168.0.200) #### root #### cd ..
19-01-25 00:57:07 #### root pts/0 (192.168.0.200) #### root #### ls
19-01-25 00:57:10 #### root pts/0 (192.168.0.200) #### root #### cd /root/
19-01-25 00:57:11 #### root pts/0 (192.168.0.200) #### root #### ls
19-01-25 00:57:24 #### root pts/0 (192.168.0.200) #### root #### touch 123.txt
19-01-25 00:57:24 #### root pts/0 (192.168.0.200) #### root #### ls
19-01-25 00:57:31 #### root pts/0 (192.168.0.200) #### root #### cp 123.txt 456.txt
19-01-25 00:57:32 #### root pts/0 (192.168.0.200) #### root #### ls
审计时查看/var/log/usermonitor/usermonitor.log 文件即可,它会记录登上服务器所有用户使用的命令。我们也还可以对这个文件进行打包分割操作等等,随便写个脚本就行了。
通过以上 2 点设置后,我们可以方便的记录用户的所有操作信息了,少数的最近操作可以直接 history 查看,多数的就查看/var/log/usermonitor/usermonitor.log 文件了。
注意点:如果以上设置不生效,也就是登录以后 echo $HISTTIMEFORMAT 看一下是否不生效,请一步步排查是否.bash_profile 或者.bashrc 或者/etc/profile 或者/etc/bashrc 里面的 HISTTIMEFORMAT 是否设置冲突了!