当前位置: 首页 > article >正文

Bash fork 炸弹 —— :(){ :|: };:

🧠 什么是 Fork 炸弹?

Fork 炸弹是一种拒绝服务(DoS)攻击技术,利用操作系统的 fork() 系统调用不断创建新进程,直到系统资源(如进程表、CPU、内存)被耗尽,从而使系统无法响应正常操作。

在类 Unix 系统中,fork() 是用于创建新进程的系统调用。


(){ :|:& };: 是一个著名的 Bash fork 炸弹(fork bomb)脚本,它通过递归创建大量子进程,迅速耗尽系统资源,导致系统变得极度缓慢甚至完全崩溃。

🔍 :(){ :|:& };: 的结构解析

这个 Bash 脚本看起来简短,但其结构非常巧妙:

:(){ :|:& };:

逐部分解释如下:

  • :():定义一个名为 : 的函数。

  • { :|:& }:函数体,执行以下操作:

    • ::递归调用自身。
    • |:将前一个调用的输出通过管道传递给另一个调用。
    • &:将整个管道命令放入后台执行。
  • ;:表示命令结束。

  • ::调用函数,启动递归过程。

简化后的可读版本如下:

forkbomb() { forkbomb | forkbomb & }; forkbomb

每次函数调用都会启动两个新的后台进程,导致进程数量呈指数级增长,迅速耗尽系统资源。


⚠️ 执行后的影响

执行该脚本后,系统会出现以下问题:

  • 进程表耗尽:无法创建新进程,系统无法响应用户输入。
  • CPU 和内存资源耗尽:系统变得极度缓慢,可能完全无响应。
  • 需要强制重启:通常只能通过硬重启来恢复系统。([Baeldung][1])

在某些系统中,可能会看到如下错误信息:


bash: fork: Resource temporarily unavailable

🛡️ 防范措施

为了防止 fork 炸弹造成系统崩溃,可以采取以下措施:

1. 限制用户的最大进程数

编辑 /etc/security/limits.conf 文件,添加以下内容:([It’s FOSS][7])

username hard nproc 100

username 替换为目标用户名,100 为允许的最大进程数。

2. 使用 ulimit 命令设置限制

在用户的 shell 配置文件中添加:

ulimit -u 100

这将限制用户最多只能创建 100 个进程。([教程要点][8])

3. 配置 systemd 的 cgroup 限制

对于使用 systemd 的系统,可以设置每个用户的最大进程数:([Baeldung][1])

sudo systemctl set-property user-$(id -u).slice TasksMax=100

这将限制当前用户最多只能创建 100 个任务。


🧪 合法用途

尽管 fork 炸弹具有破坏性,但在受控环境中,它也可用于:

  • 测试系统的资源限制配置:验证系统对资源滥用的防护能力。
  • 演示递归和进程管理机制:用于教学目的,展示递归函数和进程创建的效果。
  • 测试监控和报警系统的响应能力:确保在资源异常使用时,监控系统能够及时报警。

在进行上述测试时,务必在虚拟机或非生产环境中进行,避免对实际系统造成影响。


✅ 总结

Bash fork 炸弹 :(){ :|:& };: 是一个利用递归函数快速耗尽系统资源的脚本,具有极大的破坏性。

通过合理配置系统的资源限制,可以有效防范此类攻击。

在学习和测试时,应确保在安全、受控的环境中进行,避免对实际系统造成损害。

http://www.lryc.cn/news/2379386.html

相关文章:

  • 互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖
  • IT审计之外包
  • 精益数据分析(66/126):技术驱动的大规模用户调研——从工具组合到高效验证
  • 通俗解释Transformer在处理序列问题高效的原因(个人理解)
  • 第12章 Java多线程机制
  • 区间带边权并查集,XY4060泄露的测试点
  • 【数据结构】1-4算法的空间复杂度
  • nt!ExRemoveHeadNBQueue 函数分析
  • OpenAI推出Codex — ChatGPT内置的软件工程Agents
  • AI日报 · 2025年5月15日|GPT-4.1 登陆 ChatGPT
  • W5500使用ioLibrary库创建TCP客户端
  • SQL练习(12/81)
  • 组态王|如何创建组态王工程?
  • mysql数据库-3(备份和恢复)
  • 估分啦~全国青少年信息素养大赛部分赛项已考完~图形化/算法创意实践
  • 【Linux服务器】-虚拟机安装(CentOS7.9)
  • 鸿蒙OSUniApp 制作简洁高效的标签云组件#三方框架 #Uniapp
  • 2025年渗透测试面试题总结-百度面经(题目+回答)
  • java集合相关的api-总结
  • 深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)
  • 分别用 语言模型雏形N-Gram 和 文本表示BoW词袋 来实现文本情绪分类
  • C#.NET 或 VB.NET Windows 窗体中的 DataGridView – 技巧、窍门和常见问题
  • PyTorch音频处理技术及应用研究:从特征提取到相似度分析
  • SHAP分析图的含义
  • VSTO(C#)Excel开发进阶2:操作图片 改变大小 滚动到可视区
  • 多用途商务,电子产品发布,科技架构,智能手表交互等发布PPT模版20套一组分享
  • Java正则表达式:从基础到高级应用全解析
  • WindowsPE文件格式入门11.资源表
  • C语言标准I/O与Linux系统调用的文件操作
  • 【MYSQL】笔记