history隐藏历史命令记录的小技巧

不能删除所有的命令记录,需要确保操作是有记录的,但是执行的部分命令又不想被别人知道orz。
试想这样一种场景?
0x01 不记录历史命令执行
set +o history //设置命令不记录进history set -o histoty //设置命令记录进history
以下图为例,记录了最近执行的历史命令。

0x02 使用history -d 删除指定命令记录
history n //显示最近n条历史命令记录 history -d n //删除第n条命令记录

这种方式过于明显,删除的操作也被记录进去。
0x03 编辑 ~/.bash_history 文件删除历史记录

这里有两种方式生效:
1、需要执行history -w 将内存的记录写入文件
2、断开shell后会自动将内存的记录写入文件
同理可以手动编辑 ~/.bash_history 删除历史记录。

但是通过这种方式删除历史命令,只要当前shell没有断开,history看到的还是没有删除的状态,这是为什么呢?
参考 图-history 执行过程
与上面同理:
1、执行history -r 从文件读取到内存中
2、下次新起shell后会将文件读取到内存中
使用sed命令快速删除的技巧
比如前3868行是用户的正常操作记录,3868以后是恶意的操作记录。我们可以只保留正常的操作,删除不必要痕迹的历史操作记录,这里,我们只保留前150行:

0x04 执行命令前加入空格(部分可用)
[root@VM-8-4-centos ~]# [space] command // [space]表示空格

测试时使用的是腾讯云的centos,是改过/etc/bashrc系统配置。因此在部分系统上是可用的,如果不生效则需要修改bashrc使这种方式生效。
echo HISTCONTROL=ignorespace >> ~/.bashrc
source ~/.bashrc
0x05 chattr +ai .bash_history 不记录后续历史记录
这种方式比较hack,通过给.bash_history文件加入特殊权限(不可编辑和追加),使history命令看到的记录永远都是一致的。
chattr +ai ~/.bash_history

这样history永远都只有执行 chattr +ai .bash_history 命令之前的历史记录(下次新起shell时还是先读取.bash_history文件到内存中)。这种方式使内存中的记录无法成功写入文件,从而达到隐藏命令记录的效果。
在下次新打开一个shell的情况下,重启启用历史记录可执行下面的命令恢复。
chattr -ai .bash_history
0x06 隐藏ssh登录记录(补充)
虽然隐藏了history执行命令的记录,但是从ssh登录的记录依然可以看到对应的时间段有ssh连接执行过程操作。
下面的方式可以隐藏ssh的登录记录,不会被w、last等指令检测到。
ssh -T root@目标ip /bin/bash -i

但是/var/log/secure日志中还是能检测到。所以最好干掉ssh日志中包含对应连接ip的记录。
sed -i '/.*192.168.0.1.*/d' /var/log/secure
删除指定ip在ssh日志中的记录。
总结
上面总结的5种方式都可以实现对部分history命令记录的隐藏,但是最推荐的还是直接编辑 .bash_history 文件的方式实现,毕竟linux下一切皆文件(本质)。
赞赏微信赞赏
支付宝赞赏
2条评论