ubuntu History命令显示操作时间、用户和登录IP

0x01 背景
在ubuntu系统的维护中,经常会用到history命令。
但是考虑到同事误操作责任追究以及被入侵后的线索追查,ubuntu系统中默认提供的history命令难以满足我们的需求。
经过一番调研,发现可以通过修改/etc/profile 文件 一定程度上满足需求。
0x02 需求
执行history命令时能够实现以下效果:
(1)显示命令执行的时间
(2)显示执行命令的用户名
(3)显示执行命令的用户的源IP
(4)A用户可以方便的查看B用户的历史记录
0x03 配置实现
要实现第二小节中的前两个需求,只需要简单配置/etc/profile文件即可,即在/etc/profile文件尾追加以下内容:

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


要实现第三个需求,稍微复杂一点,需要首先通过 以下命令来获取登录源IP:
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`


然后再export HISTTIMEFORMAT时,将USER_IP作为参量写入HISTTIMEFORMAT,即:
export HISTTIMEFORMAT="%F %T $USER_IP:`whoami` "


而要实现第四个需求,则需要修改历史记录的存放位置,默认情况下,历史记录是存储在用户目录下的.bash_history(完整路径为/home/用户名/.bash_history)文件中的,所以A用户要访问B用户的历史记录必须先提升自己为root权限,否则是无法打开B用户的home目录的,即使拥有了root权限,如果系统有10个用户,则需要进入10个不同的文件夹查看各个文件夹下的.bash_history文件,从而实现查找所有拥有所有历史记录的目的。
为了方便,可以利用HISTFILE环境变量,将所有用户的历史记录,集中到一个目录下,通过用户名区分各自的历史记录文件:
export HISTFILE="/opt/history/${LOGNAME}"


综合以上所以小技巧,我们不难得到以下脚本:
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
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] "
export HISTFILE="/opt/history/${LOGNAME}.history"
chmod 600 /opt/history/*history* 2>/dev/null

将以上代码追加到/etc/profile文件末尾即可,然后退出登录再重新登录,即可发现history的显示格式和存储文件都发生了变化。


0x04总结分析
对于需求中的第二条,其实是比较冗余的,一个用户执行history只显示自己的历史记录才是符合常理的,如果执行history,可以连其它用户的执行记录都打印出来,虽然有用户名这个字段来区分,但是一眼看去,区分起来还是比较麻烦的,而通过HISTFILE将所有用户的历史记录存储文件集中到一个目录下,即可以方便管理员查看所有用户命令,又不会影响各个用户自己执行的效果。
到此,借助第三小节的最后的整合配置,可以为系统维护人员提供极大的管理遍历,但是依然有一个小瑕疵:
历史记录存储文件中存储了历史操作的命令记录,但是时间和用户名以及IP却不是可显的,其内容格式如下:
#1359020553
ifconfig
#1359020554
ls
#1359020559
cat /etc/profile

很明显#1359020559是该cat /etc/profile的执行时间,尽管系统可以准确的识别并格式化为易人话的数据并输出,但文件中存储的内容却不方便人工阅读,并且文件中并为记录该命令执行的用户名和登录源IP(或许应该在其它文件中有记录,但是暂时不确定history命令是如何定位执行某个命令的用户名和登录源IP的)。














  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值