您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

谁删了我的文件?Linux下用bpftrace轻松抓到元凶

时间:2020-08-21 11:11:34  来源:  作者:

稀松平常的一天,小W在机器上部署好最新版本的代码就下班回家了。

第二天一上班,发现服务有异常,而主机上的一些关键文件莫名消失。查看日志没有发现其他人登录过。Nani?

怀疑是自己手残的小W,战战兢兢重新部署了一下。

结果第三天重蹈覆辙,文件又如约消失了!

难道是传说中的密室删除事件?这下小W慌了……

谁删了我的文件?Linux下用bpftrace轻松抓到元凶

 

赶紧求助号称linux百事通的小X。

只见小X不慌不忙,打开编辑器输入了一些脚本,并且叮嘱他晚上下班的时候记得运行,明天早上过来看结果。

小W按照提示,重新部署了代码,然后在终端开启了一个tmux,启动了下面的命令:

bpftrace unlink.bpftrace

小W略有不安的睡了一觉,早上一看,文件果然又没有了。赶紧打开tmux看看有没有抓到信息,果然发现了一些蛛丝马迹:

Attaching 2 probes...
my-precious-file.txt deleted by command 'rm' with pid 3675070
 ... whose parent is 'sh' command with pid 3675069
 ... whose parent is 'cron' command with pid 3675068
 ... whose parent is 'cron' command with pid 1360
 ... whose parent is 'systemd' command with pid 1

啊哈!日志显示的很清晰,顺藤摸瓜,找到了crontab里一个在夜里2点定时清理临时文件的配置,但是命令行里有个bug,匹配到了不该删除的文件。

这下对小W来说就简单了,修正cron命令行以后,简单测试了一下——这次自己的文件就不会被删除了!

小W最后再上线一次代码,开心的等下班拉小X一起吃串去!

哦差点忘了,脚本在这里:

#include <linux/sched.h>
#include <linux/dcache.h>

tracepoint:syscalls:sys_enter_unlink,tracepoint:syscalls:sys_enter_unlinkat {
    printf("%s deleted by command '%s' with pid %dn",
            str(args->pathname), comm, pid);
    $p = curtask->real_parent;
    $i = 0;
    while ($i < 100) {
        $i++;
        printf(" ... whose parent is '%s' command with pid %dn",
               $p->comm,
               $p->tgid);
        $p = $p->parent;
        if ($p == 0 || $p->tgid == 0) {
            break;
        }
    }
}

解析

Linux下文件的删除一般通过2个系统调用:unlink和unlinkat。内核的ftrace在系统调用出入口都有tracepoint,能够暴露传入的参数。

bpftrace程序可以在这些点上挂载一个BPF程序,采集和输出当时的状态。

所以我们在这两个系统调用入口处,打印被删除的文件名和父进程的信息,就不难找到删除操作的来源了。

那么,你已经知道怎样写一个抓取删除文件夹(rmdir)的脚本了吗?



Tags:bpftrace   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
稀松平常的一天,小W在机器上部署好最新版本的代码就下班回家了。第二天一上班,发现服务有异常,而主机上的一些关键文件莫名消失。查看日志没有发现其他人登录过。Nani?怀疑是自...【详细内容】
2020-08-21  Tags: bpftrace  点击:(92)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(13)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(21)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(21)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(34)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(26)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(16)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(24)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条