Linux 基于history命令记录操作用户,命令执行时间,登陆IP等信息

Linux默认的history命令是一个常用的系统内置命令,该命令用来记录在某一个的所有使用过的命令的历史,但默认实在是十分简略,只记录有所执行的命令并没有记录在什么时间,什么人(哪个用户),通过何种方式登录系统(是远程连接系统还是本地登陆所执行的命令??)这些比较重要的信息,这些重要的信息也是日后运维审计的一部分,那么,我们可以改动这个命令来实现 history命令增加记录重要信息:命令执行时间,命令执行用户,命令执行时的登陆方式这三样东西吗? 答案当然是肯定的。

第一,who am i 命令

这个命令是相对于当前终端的命令,也就是只显示当前终端的登陆信息,如果是远程登陆,比如xshell,ssh 这样的登陆方式,示例如下:

本机本地登陆:

xshell 方式登陆:

 

可以看到,本地登陆和远程登陆 执行who am i 的差别是 本地没有IP,登陆方式为tty1, 远程登陆显示IP,登陆方式为pts/0 。

第二,历史命令 history的默认形式和优化后的形式

默认形式:

优化后的形式:

第三,如何优化? 编辑 /etc/profile 文件,这个文件是全局的,或者编辑用户的环境变量配置文件  ~/.bash_profile,  推荐使用全局环境变量文件  也就是  /etc/profile, 在该文件末尾添加如下内容:

if [ `who am i| awk '{print $NF}'|awk -F'(' '{print NF}'` -eq 2 ];then
unset HISTTIMEFORMAT
export HISTTIMEFORMAT="[%F %T]-[`whoami`]- at [`who am i| awk '{print $NF}'`] "
else
unset HISTTIMEFORMAT
export HISTTIMEFORMAT="[%F %T]-[`whoami`]- at [`hostname`] "
fi

以上脚本大意为 判断是否远程登陆,如果是远程,显示IP,如果不是远程而是本地登陆,历史命令记录终端所在机器的hostname,unset 是为了防止原变量干扰。

Logo

更多推荐