fork炸弹是什么?
fork炸弹以极快的速度创建大量进程(进程数呈以2为底数的指数增长趋势),并以此消耗系统分配予进程的可用空间使进程表饱和,而系统在进程表饱和后就无法运行新程序,除非进程表中的某一进程终止;但由于fork炸弹程序所创建的所有实例都会不断探测空缺的进程槽并尝试取用以创建新进程,因而即使在某进程终止后也基本不可能运行新进程。fork炸弹生成的子程序在消耗进程表空间的同时也会占用CPU和内存,从而导致系统与现有进程运行速度放缓,响应时间也会随之大幅增加,以致于无法正常完成任务,从而使系统的正常运作受到严重影响。
fork炸弹本体就是下面一串简单的shell脚本代码

function bomb()
{bomb|bomb &
};
bomb

由于shell函数可以省略function前缀,因此也可以写成更精炼的模式

:() { :|:& };:

当linux系统运行此脚本后,立刻卡死,只有重启才能够解决,而且这种脚本的运行不需要任何特殊权限,以普通用户的身份就可以运行,因此非常危险


如何预防fork炸弹?
使用ulimt命令可以预防fork炸弹,通过ulimit限制用户最大进程数,可以避免fork炸弹无限制创建进程
设置用户最大进程数100

ulimit -u 100

查看用户资源

ulimit -a

max user process 已经变成了100,此时运行fork炸弹脚本已经

此时再去运行fork脚本,会出现没有子进程的提示。明显创建的进程已经达到了上限。就无法执行了

但是这种方法只针对当前终端有效,更彻底的办法,需要修改/etc/security/limits.conf这个文件

sudo vi /etc/security/limits.conf

/etc/security/limits.conf

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#        - NOTE: group and wildcard limits are not applied to root.
#          To apply a limit to the root user, <domain> must be
#          the literal username root.
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
##*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4# End of file

在后面追加资源限制,格式是

<domain>        <type>  <item>  <value>

限制用户grass的最大进程数200

grass hard nproc 200

保存退出即可,用户grass运行fork炸弹就不会对系统造成影响了

Linux fork炸弹以及预防办法相关推荐

  1. Linux fork炸弹的分析

    作为Linux/Unix 系统上内核与用户之间的接口,shell由于使用方便.可交互能力强.具有强大的编程能力等特性而受到广泛的应用.bash(Bourne Again shell)是对 www.ga ...

  2. 经典的 Fork 炸弹解析

    转载自: http://blog.saymagic.cn/2015/03/25/fork-bomb.html 本文地址:https://linux.cn/article-5685-1.html Jar ...

  3. Linux的fork实现原理,【Linux】Fork炸弹详解

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 众所周知,bash是一款极其强大的shell,提供了强大的交互与编程功能.这样的一款shell中自然不会缺少"函数"这个元素来帮助程序 ...

  4. linux bash Shell脚本经典之Fork炸弹解析:() { :|: };:

    众所周知,bash是一款极其强大的shell,提供了强大的交互与编程功能.这样的一款shell中自然不会缺少"函数"这个元素来帮助程序进行 模块化的高效开发与管理.于是产生了由于其 ...

  5. fork炸弹c语言能否运行,Fork炸弹简析和应对方法

    简述 第一次听到fork炸弹这种东西的时候以为是一个很神奇的破坏力惊人的高能脚本,然而稍微深入的了解了一下才发现这个玩意其实是个挺简单纯粹的东西,只是被一个叫Jaromil的家伙对他的精美包装给戏耍了 ...

  6. docker防止fork炸弹

    博客搬家,原地址:https://langzi989.github.io/2016/12/29/docker防止fork炸弹/ 在开发过程中,我们使用了docker作为容器来进行编程语言代码的评测,以 ...

  7. 制作一枚有针对性的fork炸弹

    恕我不再赘述bash实现的fork炸弹. 我们看看把一个内部调用了fork的平常的程序制作成一枚fork炸弹是多么的简单.先看代码: #include <stdio.h> #include ...

  8. php linux fork进程 多个进程/线程共享一个 socket连接 出现多个进程响应串联

    简单说来就是:因为fork,父子进程共享了一个redis连接.然后父子进程在发送了各自的redis请求分别获取到了对方的响应体. 复现示例代码: testFork.php <?php requi ...

  9. linux fork函数的精辟解说

    此文原文来源于一个blog,文章的名称为:linux fork函数的精辟解说原文地址:http://blog.chinaunix.net/space.php?uid=12461657&do=b ...

最新文章

  1. 解决 EF whereT(func) 查询的一个性能问题
  2. centos6.5 设置tomcat8自启动
  3. 框架、文档、视图类之间的调用关系
  4. java笔记数组小知识点
  5. 【收藏】GeoMesa-HBase原理篇——写入过程
  6. Scala函数作为函数的返回值
  7. oracle 显示最后几条,oracle 先分组后获取每组最大值的该条全部信息
  8. linux下的bc计算器设置scale精度
  9. LwIP之协议栈接口
  10. Eclipse智能感知功能优化
  11. 苹果Mac超轻量级菜单栏应用程序:Micro Snitch
  12. SSH和SSM两个框架的浅显的区别
  13. HIbernate Session 线程安全的问题
  14. tp51 自定义404界面的配置
  15. 电脑没声音,音频设备无法使用。扬声器安装程序unknown
  16. 《王亡於江上》之周昭王姬瑕
  17. cms,crm名词解释
  18. python opencv 读取png图像的alpha通道
  19. 复合索引 /多列索引 /联合索引 /组合索引?????
  20. OS X下修改系统Hosts文件以及苹果手机如何host映射

热门文章

  1. CSS强制换行 - 英文单词换行
  2. 【开发工具】PacketTracer
  3. [Reprint]C++普通函数指针与成员函数指针实例解析
  4. 2021年中国三价镉市场趋势报告、技术动态创新及2027年市场预测
  5. Linux 桌面修改文件mime类型图标
  6. matter.js文档翻译
  7. php wordpress单本小说网站源码+采集,晒晒我写的WordPress单本小说通用采集程序
  8. 四问知乎黄继新:慢公司下一步
  9. centos命令窗口如何复制粘贴
  10. 我遗失了一本名叫《爱情》的书