命令前添加空格
命令行输入命令前加一个空格,history不会记录该命令,前提是histcontrol环境变量为ignorespace或ignoreboth才管用,这个基本都是默认值,我这里测试该变量为空,环境是zsh,也一样有效。
whoami前添加了空格,pwd没有添加,history查看内容如下:
如果histcontrol不允许添加空格,那么已提权或是root权限的话,则可以从新设置该变量:
注意:1,export的等号两边不能有空格,否则会报错。2,环境变量名称区分大小写。
禁用当前会话的所有历史记录
HISTSIZE环境变量用来设置history记录的命令条数,打开命令行,首先设置HISTSIZE为0,默认为1000条,注意只适用于当前打开的会话:
清除缓存记录
也可以在操作结束后,选择把缓存清除,history的c参数用来清除历史命令,这里测试zsh下回提示not found,可以删除.zsh_history文件,效果一样,从新开个会话或终端,发现历史记录已经被清除了:
只针对当前工作记录进行隐藏
前面几种都是相当于清除了所有记录,容易被发现,这时就有需求,针对我们操作段来隐藏,即之前的记录不动,从现在开始隐藏,可以通过set +o history命令来实现:
该命令作用将设置历史记录不进行存储,为了更好的隐藏,该命令前可以添加空格,这样该命令本身也会被隐藏:
此时通过history命令查看结果:
删除指定命令
如果想删除history中的指定命令,则可以先grep筛选,然后根据序号进行删除,history命令通过d参数指定要删除命令的序号:
需要注意的是,测试时发现不能一次性删除多条,如果删除后,序号会实时改变,再按原来序号删除就错位了。
内联命令
之前Linux应急文章也记录过关于历史命令的内容,通过内联命令去间接执行其它命令,这里再贴一下,就不从新写了。
通过history查看用户的历史命令,查找蛛丝马迹。有的公司可能会经常ssh远程登录,导致history记录了相关的密码,所以对history有限制,可能只能查看几条,这种情况不方便排查,但也方便了攻击者。
这里顺便测试下如何不被history记录,如果执行以下命令unset命令,则后续命令不会被记录,包括.bash_history和history,上下键也不行。
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0
还有一种是通过类似于vim带内联命令行的,执行命令history不会记录,但工具可能会有日志,例如vim的日志中就记录了内联命令行运行的命令,所以如果使用这种方法,则要记得清理工具日志。
总结
至于哪个合适,需要看下自己需求,如果想保留原来的记录,不想被太容易发现,则设置set +o history合适,如果不在乎,想清空所有记录,并且不记录,简单粗暴,那么上面那一串unset命令更合适。
原文始发于微信公众号(aFa攻防实验室):Linux隐藏history历史记录