Linux fork炸弹以及预防办法
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炸弹以及预防办法相关推荐
- Linux fork炸弹的分析
作为Linux/Unix 系统上内核与用户之间的接口,shell由于使用方便.可交互能力强.具有强大的编程能力等特性而受到广泛的应用.bash(Bourne Again shell)是对 www.ga ...
- 经典的 Fork 炸弹解析
转载自: http://blog.saymagic.cn/2015/03/25/fork-bomb.html 本文地址:https://linux.cn/article-5685-1.html Jar ...
- Linux的fork实现原理,【Linux】Fork炸弹详解
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 众所周知,bash是一款极其强大的shell,提供了强大的交互与编程功能.这样的一款shell中自然不会缺少"函数"这个元素来帮助程序 ...
- linux bash Shell脚本经典之Fork炸弹解析:() { :|: };:
众所周知,bash是一款极其强大的shell,提供了强大的交互与编程功能.这样的一款shell中自然不会缺少"函数"这个元素来帮助程序进行 模块化的高效开发与管理.于是产生了由于其 ...
- fork炸弹c语言能否运行,Fork炸弹简析和应对方法
简述 第一次听到fork炸弹这种东西的时候以为是一个很神奇的破坏力惊人的高能脚本,然而稍微深入的了解了一下才发现这个玩意其实是个挺简单纯粹的东西,只是被一个叫Jaromil的家伙对他的精美包装给戏耍了 ...
- docker防止fork炸弹
博客搬家,原地址:https://langzi989.github.io/2016/12/29/docker防止fork炸弹/ 在开发过程中,我们使用了docker作为容器来进行编程语言代码的评测,以 ...
- 制作一枚有针对性的fork炸弹
恕我不再赘述bash实现的fork炸弹. 我们看看把一个内部调用了fork的平常的程序制作成一枚fork炸弹是多么的简单.先看代码: #include <stdio.h> #include ...
- php linux fork进程 多个进程/线程共享一个 socket连接 出现多个进程响应串联
简单说来就是:因为fork,父子进程共享了一个redis连接.然后父子进程在发送了各自的redis请求分别获取到了对方的响应体. 复现示例代码: testFork.php <?php requi ...
- linux fork函数的精辟解说
此文原文来源于一个blog,文章的名称为:linux fork函数的精辟解说原文地址:http://blog.chinaunix.net/space.php?uid=12461657&do=b ...
最新文章
- 解决 EF whereT(func) 查询的一个性能问题
- centos6.5 设置tomcat8自启动
- 框架、文档、视图类之间的调用关系
- java笔记数组小知识点
- 【收藏】GeoMesa-HBase原理篇——写入过程
- Scala函数作为函数的返回值
- oracle 显示最后几条,oracle 先分组后获取每组最大值的该条全部信息
- linux下的bc计算器设置scale精度
- LwIP之协议栈接口
- Eclipse智能感知功能优化
- 苹果Mac超轻量级菜单栏应用程序:Micro Snitch
- SSH和SSM两个框架的浅显的区别
- HIbernate Session 线程安全的问题
- tp51 自定义404界面的配置
- 电脑没声音,音频设备无法使用。扬声器安装程序unknown
- 《王亡於江上》之周昭王姬瑕
- cms,crm名词解释
- python opencv 读取png图像的alpha通道
- 复合索引 /多列索引 /联合索引 /组合索引?????
- OS X下修改系统Hosts文件以及苹果手机如何host映射