最近接到几个应急响应的需求,大多时候都是个人站长或者小企业的服务器,在安全方面都不会做,或者不注重,服务器常年被挂马或挖矿 基本拿到服务器之后,如果云服务器,就先做个快照,保存下。..

最近接到几个应急响应的需求,大多时候都是个人站长或者小企业的服器,在安全方面都不会做,或者不注重,服务器常年被挂马或挖矿
基本拿到服务器之后,如果云服务器,就先做个快照,保存下当时的情况,如果有特殊情况,可以通过快照转镜像,以模板的形式启动一台临时的服务器查看处理前的情况;如果是托管服务器,就只能是跑脚本取证,收集下日志,以备不时之需
今天想要说的是关于应急响应中的历史命令的问题
在应急响应过程中,首先取证,肯定是通过收集各种日志文件、历史记录等来判断服务器的状况,通常情况下历史命令是最直观的可以看到操作记录的信息,也是最有价值的信息,但这么重要的信息,当然别人是不会给你留下的,所以思考能不能把history记录存一下,大体思路
思路其实很简单,总结一句话,实时备份history到其他文件
在处理实时备份之前,先对history做个优化处理,我们先看下默认的history记录
啥也不是,只记录了执行的命令,其他什么信息都没有,我们看下改造后的结果
history中记录了命令数、执行时间、用户、终端、用户登录时间及IP以及执行的命令
实现这个很简单,修改历史命令记录格式如下:
1 | HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S `who am i` " |
前面是时间格式,是命令who am i,这里一定要空格分开,如果连一起,就是whoami,这两个是完全不同的,whoami,只能显示当前用户
将这个配置加入到/etc/profile中全局生效即可,接着介绍实现历史命令实时记录的几种方式
硬链接
在Linux中,硬链接的特性就是,当其中一个文件删除时,文件不会丢失,除非最后一个链接的文件被删除,所以我们可以根据这个特性,将/.bash_history文件硬链接到其他像存储的位置,这样,当/.bash_history文件被删除时,历史命令可以保留
这个方式优点很明显,简单粗暴,缺点也很明显,当不是删除文件,而是清空文件时,硬链接的文件也会被清空,起不到保留的作用
Python脚本实时监控
既然同步的方式不行,那么就可以用实时监控的方式,我们可以通过python脚本,实时监控~/.bash_history文件变化,并将变化的内容输入到另外的文件以达到保存的效果
1 | 我们通常在linux下查看日志的时候,最常用的应该就是tail命令了,它的-f参数或直接tailf,可以实时输出文件内容,所以我们可以利用该命令,通过python的Popen()函数去调用该命令来获取~/.bash_history的输出,代码如下: |
1 | import subprocesshistory_file = '~/.bash_history'command = 'tail -f ' + history_filepopen = subprocess.Popen(command,stdout=subprocess. |
1 | PIPE,stderr=subprocess.PIPE,shell=True)while True: line = popen.stdout.readline().strip() with open('/path/to/file', 'ab') as f: f.write(line) |
1 |
|
1 |
|
安装完成后,修改filebeat.yml配置文件
配置input部分,读取/root/.bash_history文件,以及output部分,输出格式为file,并配置记录文件的位置及文件名,配置完成后,启动filebeat,并查看filebeat输出的日志
message字段即拿到的历史命令信息,因为filebeat记录的是json格式,所以我们通过python提取message字段,就能很方便的提取历史命令记录
如果你觉得存储在本地还不够,廉价的对象存储是个不错的选择,通过官方提供的api,可以很方便的将记录整理并存储在对象存储中
今日彩蛋:
文章写到这里,本应该结束了,但是回顾整篇文章,我犯了一个很明显,却又不那么容易察觉的错误,那我就把这个问题作为一个彩蛋抛给大家,第一个发现错误并在评论区留言解决方式的朋友,我请你喝杯咖啡,欢迎参与
●漫画Nginx的subfilter
●没有lrzsz,怎么传文件到服务器?
●如何做Nginx安全日志可视化
●Nginx负载均衡配置误区
本文标题: 他清除了我的历史命令
发布时间: 2023年01月22日 00:00
最后更新: 2025年12月30日 08:54
原始链接: https://haoxiang.eu.org/49cbd6a6/
版权声明: 本文著作权归作者所有,均采用CC BY-NC-SA 4.0许可协议,转载请注明出处!

