
linux下历史命令一般有两大用处,一个是快速复用,另外是审计,快速复用在以前的文章linux命令行技巧中提过,有兴趣的能够去看看,今天主要说审计部分,分两部分:记录历史命令和隐藏命令行历史,分别针对运维防御及入侵渗透,下面分别介绍linux
本来的linux默认记录1000条历史记录,且只记录命令,彻底没办法作审计,当遇到服务器入侵等状况,作审计工做时,若是你没有开启audit,或其余第三方审计工具,在经过history作审计的时候,即使命令不被清除,你也只能看到历史命令,看不到其余任何信息,审计很不方便shell
这边直接上代码服务器
history微信
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`less
if [ "$USER_IP" = "" ]运维
then编辑器
USER_IP=`hostname`工具
fi测试
if [ ! -d /tmp/dbasky ]flex
then
mkdir /tmp/dbasky
chmod 777 /tmp/dbasky
fi
if [ ! -d /tmp/dbasky/${LOGNAME} ]
then
mkdir /tmp/dbasky/${LOGNAME}
chmod 300 /tmp/dbasky/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date "+%Y-%m-%d_%H:%M:%S"`
export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP} dbasky.$DT"
chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null
简单解释一下,以上部分脚本是在/tmp目录下建立一个dbasky目录,用来存放全部的用户的历史命令,HISTSIZE设置为4096条,能够根据本身状况自定义,在该目录下,不一样的用户名分别在不一样的文件夹下,历史命令文件以用户IP+日期的形式记录
这样在后期作审计的时候,能够很快速的找到某用户某时间的历史命令
若是须要记录哪条命令是哪一个时刻执行的,须要自定义HISTTIMEFORMAT,添加时间在命令以前
或者以为上面的方法比较复杂,那你就直接用HISTTIMEFORMAT定义历史记录格式,而后经过修改HISTSIZE,增长历史命令记录数量
你还能够在这里增长用户,以及客户端IP等
相对于命令行记录,隐藏命令行历史,除了在渗透测试中使用,还有一些使用场景,好比特权命令不想被别人看到,或者比较重要的命令不但愿在浏览历史命令时被误执行
这里说的不是彻底意义上的禁用历史命令记录,若是你要那么作,那你直接在环境变量/etc/profile中将HISTSIZE设置为0便可
下面的几个方法是临时隐藏命令行历史
在命令前插入空格
在命令行前插入空格是最简单的方式,可是这个方式的前提是环境变量HISTCONTROL的支持,在HISTCONTROL中有四种模式
export HISTCONTROL=erasedups # 清除整个命令历史中的重复条目
export HISTCONTROL=ignoredups # 忽略记录命令历史中连续重复的命令
export HISTCONTROL=ignorespace # 忽略记录空格开始的命令
export HISTCONTROL=ignoreboth # 等价于ignoredups和ignorespace
在命令行前插入空格,而不记录历史命令,须要HISTCONTROL为ignorespace或ignoreboth的状况,默认HISTCONTROL为ignoredups(CentOS六、7),因此须要先执行export设置HISTCONTROL为上面说的两种模式,以后在当前环境变量下执行命令不被记录
HISTSIZE设置当前会话历史命令记录
在前面提到,经过HISTSIZE=0,能够关闭历史命令记录,那么咱们能够经过export HISTSIZE=0的方式,关闭当前会话的历史命令记录,而不影响全局
经过set命令来配置关闭history
linux下set命令能够用于设置shell环境变量和shell执行方式
set经过+或-号来设置选项关闭或开启,o选项用于指定选项名
因此经过set +o history的方式,能够关闭history,固然,也能够在set前面加空格,那么该命令也不会被记录
而后再经过set -o history的方式,开启history,这种方式的好处在于,你没必要所有清除全部历史命令,这样在渗透过程当中能够灵活屏蔽不想被记录的命令,而不会被审计人员发现
history命令管理
最后这种方式就是直接经过history命令来清除部分或所有历史命令
经过history -c命令能够清除全部历史命令,在操做完成以后,能够经过这种方式清除全部历史记录,这种方式能够完成隐藏,可是会露马脚
另外就是经过history -d 命令行id的方式,删除想要删除的命令,不过最好在history命令前加空格,这样作比较隐秘,这种方式首先须要经过history命令结合grep等查找命令,查寻要删除命令的id,经过删除这个id来删除历史命令
或者经过上下键翻找历史命令,经过Ctrl+U来清除当前行的记录
不过这种方式会留个小马脚
ok,以上就是今天要介绍的linux下命令历史记录的保存及隐藏方式

更多精彩内容请扫描下方二维码关注公众号



本文分享自微信公众号 - 运维研习社()。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。