linux中,history命令,显示时间戳?操作人?IP地址?

需求描述

  在linux环境中,有的时候为了审计的需要,要记录谁什么时间从什么IP登录,执行了什么命令,bash的history命令就能够记录这些信息,但是在默认的情况下,是不记录时间的,所以呢,在这里记录下,对其进行改造。

操作过程

1.默认的history命令,只是显示行号,执行的命令

[root@testvm01 ~]# history | more
    3  ./test.sh
    4  ls
    5  vi nmon16e_x86_rhel65
    6  cdd /opt
    7  ls
    8  cd /opt
    9  ls
   10  cd softwares/
   11  ls
   12  cd ../app/
   13  ls
   14  cd test01/

备注:这样,就可以看到命令执行的历史,但是,看不到什么时间执行的,谁执行的。

2.使用HISTTIMEFORMAT变量来指定命令中增加时间戳

[root@testvm01 ~]# export HISTTIMEFORMAT="%F %T "      #注意: 在调用history命令时,行号 然后是HISTTIMEFORMAT的执行结果,然后是命令,注意%T后面有空格。
[root@testvm01 ~]# history | more
    5  2019-03-13 14:41:55 vi nmon16e_x86_rhel65 
    6  2019-03-13 14:41:55 cdd /opt
    7  2019-03-13 14:41:55 ls
    8  2019-03-13 14:41:55 cd /opt
    9  2019-03-13 14:41:55 ls
   10  2019-03-13 14:41:55 cd softwares/
   11  2019-03-13 14:41:55 ls
   12  2019-03-13 14:41:55 cd ../app/
   13  2019-03-13 14:41:55 ls
   14  2019-03-13 14:41:55 cd test01/

备注:这样就能够将命令执行的时间记录上了。或者说,给每个命令一个时间戳。或者说,本身命令历史就是有时间戳的,只是没有显示。

3.想要记录是哪个IP操作的,对HISTTIMEFORMAT变量进行改造

[root@testvm01 ~]# export HISTTIMEFORMAT="%F %T `who am i` "   #在后面,增加who am i的执行,就是哪个ip,哪个用户登录的。
You have new mail in /var/spool/mail/root
[root@testvm01 ~]# history 20
  990  2019-03-12 21:14:35 root     pts/2        2019-03-13 14:41 (192.168.53.2) vi zabbix_agent.sls 
  991  2019-03-12 21:16:08 root     pts/2        2019-03-13 14:41 (192.168.53.2) salt '*' state.sls init.zabbix_agent
  992  2019-03-12 21:16:33 root     pts/2        2019-03-13 14:41 (192.168.53.2) vi zabbix_agent.sls 
  993  2019-03-12 21:18:50 root     pts/2        2019-03-13 14:41 (192.168.53.2) salt '*' state.sls init.zabbix_agent
  994  2019-03-12 21:21:00 root     pts/2        2019-03-13 14:41 (192.168.53.2) ls
  995  2019-03-12 21:21:03 root     pts/2        2019-03-13 14:41 (192.168.53.2) cat zabbix_agent.sls 
  996  2019-03-12 21:30:02 root     pts/2        2019-03-13 14:41 (192.168.53.2) ls
  997  2019-03-12 21:30:07 root     pts/2        2019-03-13 14:41 (192.168.53.2) vi SysIni.sls 
  998  2019-03-12 21:33:38 root     pts/2        2019-03-13 14:41 (192.168.53.2) salt '*' state.sls init.SysIni
  999  2019-03-12 21:47:48 root     pts/2        2019-03-13 14:41 (192.168.53.2) salt 'testvm02' grains.items
 1000  2019-03-13 03:51:43 root     pts/2        2019-03-13 14:41 (192.168.53.2) init 0
 1001  2019-03-13 14:42:00 root     pts/2        2019-03-13 14:41 (192.168.53.2) history
 1002  2019-03-13 14:42:03 root     pts/2        2019-03-13 14:41 (192.168.53.2) history | more
 1003  2019-03-13 14:43:30 root     pts/2        2019-03-13 14:41 (192.168.53.2) export HISTTIMEFORMAT="%F %T "
 1004  2019-03-13 14:43:32 root     pts/2        2019-03-13 14:41 (192.168.53.2) history | more
 1005  2019-03-13 14:45:20 root     pts/2        2019-03-13 14:41 (192.168.53.2) history
 1006  2019-03-13 14:45:41 root     pts/2        2019-03-13 14:41 (192.168.53.2) history | more
 1007  2019-03-13 14:45:45 root     pts/2        2019-03-13 14:41 (192.168.53.2) history 20
 1008  2019-03-13 14:46:59 root     pts/2        2019-03-13 14:41 (192.168.53.2) export HISTTIMEFORMAT="%F %T `who am i` "
 1009  2019-03-13 14:47:02 root     pts/2        2019-03-13 14:41 (192.168.53.2) history 20

4.可以将这个变量加入到/etc/profile全局变量设置中,就对所有的会话都生效了

[root@testvm01 ~]# tail /etc/profile
        else
            . "$i" >/dev/null 2>&1
        fi
    fi
done

unset i
unset -f pathmunge

export HISTTIMEFORMAT="%F %T `who am i` "
[root@testvm01 ~]# source /etc/profile

备注:这样的话,对于后续登录的会话都是生效的。

疑问:在这里我就有个疑问了,为啥时间格式是%F %T呢,也找了半天,后来在bing上搜索了一个贴,里面提到,HISTTIMEFORMAT使用的是strftime函数的时间格式。

strftime函数的手册

http://man7.org/linux/man-pages/man3/strftime.3.html

里面提到

 %F     Equivalent to %Y-%m-%d (the ISO 8601 date format). (C99)
 %T     The time in 24-hour notation (%H:%M:%S).  (SU)

所以,就是需要的时间格式,自己也可以根据具体的情况,选择,是有AM/PM这种的,还是其他的方式,都可以,来源找到了,自然知道如何去配置。

 

文档创建时间:2019年3月13日14:53:50

posted @ 2019-03-13 14:56  Zhai_David  阅读(12190)  评论(4编辑  收藏  举报