zoukankan      html  css  js  c++  java
  • bash著名的fork炸弹

    之前有听别人说过执行:() { :|:& };:这样的字符串,会导致Linux系统崩溃,但一直不解其意。最近看了相关的文章,总算明白这个字符串的含义。

    众所周知,bash是一款极其强大的shell,提供了强大的交互与编程功能。这样的一款shell中自然不会缺少“函数”这个元素来帮助程序进行模块化的高效开发与管理。于是产生了由于其特殊的特性,bash拥有了fork炸弹。Jaromil在2002年设计了最为精简的一个fork炸弹的实现。

    所谓fork炸弹是一种恶意程序,它的内部是一个不断在fork进程的无限循环,fork炸弹并不需要有特别的权限即可对系统造成破坏。fork炸 弹实质是一个简单的递归程序。由于程序是递归的,如果没有任何限制,这会导致这个简单的程序迅速耗尽系统里面的所有资源。现在来看看Jaromil设计的 最简单的fork炸弹:

    可写成:() { :|:& };:或者.() { .|.& };.
    现在我们把字符串分解下

    .() 
    { 
    .|.&
    }
    ;
    .

    第一行,定义一个函数.(),函数名为.
    第二行和第四行{}就是函数内的内容
    第三行,调用函数.即递归调用函数本身,管道|调用.函数,并且放到后台运行
    第五行,因为是写在同一行,所以用;分隔
    第六行,即进入脚本后,默认调用.函数

    题外话,这种脚本,普通用户都可以执行,那么有没有办法避免这种隐患呢?
    可以先思考下。


    答案其实很简单,要想防止这种fork炸弹,也就是禁止用户创建过多的进程,可以修改/etc/security/limits.conf里的nproc,例如hard nproc 100来限制最大进程数

  • 相关阅读:
    Git
    linux下利用virtualenv搭建虚拟环境
    Session和Cookie
    Redis
    从零开始学Go之基本(二):包、函数声明与格式化输出
    从零开始学Go之HelloWorld
    C++ vector容器使用
    FIRST集和FOLLOW集的计算
    go编译错误:runnerw.exe:CreateProcess failed with error 216:
    Linux下vi编辑器常用命令
  • 原文地址:https://www.cnblogs.com/biaopei/p/15606453.html
Copyright © 2011-2022 走看看