fork炸弹一共13个字节,送大家看看!

仅仅用于软件推荐,不适合发求软件或软件使用问题方面的贴子
头像
cvlsam
帖子: 188
注册时间: 2009-05-16 22:13
来自: 不详

Re: fork炸弹一共13个字节,送大家看看!

#16

帖子 cvlsam » 2009-08-14 14:51

lerosua 写了:
slinux 写了:http://www.ringkee.com/note/opensource/ ... #id2546655

呵呵,前天刚看了这个。。 :em04
看了下,终于明白原理了。
:em06
dongyuqi
帖子: 2
注册时间: 2009-08-13 16:06

Re: fork炸弹一共13个字节,送大家看看!

#17

帖子 dongyuqi » 2009-08-16 16:34

害人者恒自害
头像
mickeywaley
帖子: 1427
注册时间: 2009-03-19 9:19
系统: ubuntu
来自: 江苏
联系:

Re: fork炸弹一共13个字节,送大家看看!

#18

帖子 mickeywaley » 2009-08-20 18:00

原来是这样 :em09

代码: 全选

bash应用示例
fork炸弹

一段只有13个字符的脚本,能使你的系统因产生大量的进程耗尽系统资源而瘫痪。下面是这段脚本,大家千万不要在工作环境中使用,切记,切记!否则由此引起的一切后果,本人概不负责,呵呵。

.(){ .|.& };.

上面的代码用分段显示的方式会清楚一点,每行的意义是:

.()                     #定义名为.的函数
{                       #函数开始的大括号
 .|. &                  #函数主体,调用函数本身并利用管道调用一个新进程,放到后台运行。
}                       #函数结束的大括号
;                       #分号分隔脚本两部份
.                       #调用刚定义的.函数

当bash处于非POSIX模式中时,"."号优先解释为函数名而不是内嵌命令。而在POSIX模式下,"."号优先解释为内嵌点命令而不是函数名,该脚本不能运行。默认bash处于非POSIX模式,命令解释顺序为:

   1.

      关健字,如:if,for等。
   2.

      别名。
   3.

      特殊内嵌命令,如:break、continue、eval、exec、exit、export等。POSIX模式的特殊内嵌命令还包括.(点号)和:(冒号)。在POSIX模式下会优先匹配点号。
   4.

      函数。在非POSIX模式下会优先匹配函数。
   5.

      非特殊内嵌命令,如cd,ls等。
   6.

      最后解释的是脚本和执行程序。

要使用 POSIX 模式来运行 bash 脚本,可以使用以下三种方法:

    *

      使用--posix选项启动bash。
    *

      在运行bash前,使用set -o posix命令设置bash环境。
    *

      使用/bin/sh启动bash。

知道了fork炸弹的原理了,我们可以通过调整用户可运行的进程数来限制fork炸弹的危害。

debian:~# ulimit -u 100
debian:~# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 2495
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 100
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
debian:~#                                                               

上面的命令限制用户只可运行100个进程。
chenxiwenender
帖子: 13
注册时间: 2009-06-19 23:09

Re: fork炸弹一共13个字节,送大家看看!

#19

帖子 chenxiwenender » 2009-10-28 15:41

mickeywaley 写了:原来是这样 :em09

代码: 全选

bash应用示例
fork炸弹

一段只有13个字符的脚本,能使你的系统因产生大量的进程耗尽系统资源而瘫痪。下面是这段脚本,大家千万不要在工作环境中使用,切记,切记!否则由此引起的一切后果,本人概不负责,呵呵。

.(){ .|.& };.

上面的代码用分段显示的方式会清楚一点,每行的意义是:

.()                     #定义名为.的函数
{                       #函数开始的大括号
 .|. &                  #函数主体,调用函数本身并利用管道调用一个新进程,放到后台运行。
}                       #函数结束的大括号
;                       #分号分隔脚本两部份
.                       #调用刚定义的.函数

当bash处于非POSIX模式中时,"."号优先解释为函数名而不是内嵌命令。而在POSIX模式下,"."号优先解释为内嵌点命令而不是函数名,该脚本不能运行。默认bash处于非POSIX模式,命令解释顺序为:

   1.

      关健字,如:if,for等。
   2.

      别名。
   3.

      特殊内嵌命令,如:break、continue、eval、exec、exit、export等。POSIX模式的特殊内嵌命令还包括.(点号)和:(冒号)。在POSIX模式下会优先匹配点号。
   4.

      函数。在非POSIX模式下会优先匹配函数。
   5.

      非特殊内嵌命令,如cd,ls等。
   6.

      最后解释的是脚本和执行程序。

要使用 POSIX 模式来运行 bash 脚本,可以使用以下三种方法:

    *

      使用--posix选项启动bash。
    *

      在运行bash前,使用set -o posix命令设置bash环境。
    *

      使用/bin/sh启动bash。

知道了fork炸弹的原理了,我们可以通过调整用户可运行的进程数来限制fork炸弹的危害。

debian:~# ulimit -u 100
debian:~# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 2495
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 100
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
debian:~#                                                               

上面的命令限制用户只可运行100个进程。
额。。。递归阿~
回复