Linux历史命令的记录与隐藏


linux下历史命令一般有两大用处,一个是快速复用,另外是审计,快速复用在以前的文章linux命令行技巧中提过,有兴趣的能够去看看,今天主要说审计部分,分两部分:记录历史命令和隐藏命令行历史,分别针对运维防御及入侵渗透,下面分别介绍linux





记录全部用户历史命令




本来的linux默认记录1000条历史记录,且只记录命令,彻底没办法作审计,当遇到服务器入侵等状况,作审计工做时,若是你没有开启audit,或其余第三方审计工具,在经过history作审计的时候,即使命令不被清除,你也只能看到历史命令,看不到其余任何信息,审计很不方便shell


这边直接上代码服务器

PS1="`whoami`@`hostname`:"'[$PWD]'

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


将以上命令复制到/etc/profile下面,source /etc/profile 使生效,从新登录就能够看到历史命令记录

简单解释一下,以上部分脚本是在/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下命令历史记录的保存及隐藏方式




精彩推荐


牛逼运维经常使用工具系列-1
牛逼运维经常使用工具系列-2


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


扫描二维码
关注咱们吧



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

相关文章
相关标签/搜索