Centos7:使用history中显示命令执行的时间及IP

简介

使用history 中显示命令执行的时间及IP

在Centos中可以用history 命令查看某个用户过的命令,比如在root用户执行history 命令,可以看到下面的结果:

[root@centos ~]# history |head -2
    1  vi /etc/sysconfig/network-scripts/ifcfg-eth0
    2  /etc/init.d/network  restart

 在默认的情况下,只能看到执行的命令,如果能看到命令执行的时间及IP地址,有时会对我们排查故障、诊断问题有很大的帮助,也可以用于操作审计。

一 、history 显示命令执行时间

bash可以通过设置环境变量HISTTIMEFORMAT可以控制history命令的显示方式,要使这个变量对所有的用户生效,可以将变量的设置放在/etc/bashrc文件下。

编辑/etc/bashrc文件,加入下面的内容:

export HISTTIMEFORMAT="%F %T `whoami` "

二、 在命令历史文件名中嵌入ip信息

要使history 记录命令执行的ip则比想象的要复杂,常见的在HISTTIMEFORMAT环境变量中嵌入who命令来获取ip,实际显示的是运行history 命令的会话的ip地址,不是历史记录中的命令的实际执行者的ip。要想获得命令的执行者的ip,有一个办法是设置HISTFILE环境变量,将IP作为命令历史文件的一部分。除了用who命令获得ip信息外,现在大部分系统都是使用ssh远程连接,环境变量SSH_CLIENT里面含有IP地址信息,把这个里面的ip地址取出来也可以,方法如下:

arr=($SSH_CLIENT)
ssh_ip=${arr[0]}
export ssh_ip
[root@centos ~]# echo $ssh_ip
192.168.100.88

SSH_CLIENT是以空格分隔的字符串,将它数组化后,取得数组的第一个元素就是ip地址,有了IP地址,将它作为命令历史文件名称的一部分设置HISTFILE环境变量

export HISTFILE=$ssh_ip$RANDOM".history"

加入$RANDOM变量的目的是防止一个ip多次使用一个用户账号登录,覆盖掉以前的文件。

这时后运行几个命令退出会话再重新登录后就可以看到命令的历史记录文件了。

[root@centos ~]# source /etc/bashrc
[root@centos ~]# ls -l
总用量 8
-rw-------  1 root root  154 10月 23 17:07 192.168.100.884450.history

/etc/bashrc 中ip地址记录相关的部分如下:

export HISTTIMEFORMAT="%F %T `whoami` "
arr=($SSH_CLIENT)
ssh_ip=${arr[0]}
export ssh_ip
export HISTFILE=$ssh_ip$RANDOM".history"

验证

[root@centos ~]# source /etc/bashrc
[root@centos ~]# history |head -2
1 2023-10-23 17:13:19 root source /etc/bashrc
2 2023-10-23 17:13:31 root history |head -2
[root@centos ~]#
[root@centos ~]# cat 192.168.100.8830936.history
#1698052399
source /etc/bashrc

©版权声明:
作者:xiaofu
文章标题:Centos7:使用history中显示命令执行的时间及IP
文章地址:https://blog.xf0.cc/208.html
作者地址:https://blog.xf0.cc/author/xiaofu
来源:Fu Zai's Notes
文章版权归作者所有,未经允许请勿转载。
THE END
分享
二维码
海报
Centos7:使用history中显示命令执行的时间及IP
简介 使用history 中显示命令执行的时间及IP 在Centos中可以用history 命令查看某个用户过的命令,比如在root用户执行history 命令,可以看到下面的结果: [ro……
文章目录
关闭
目 录