lerosua 写了:看了下,终于明白原理了。

lerosua 写了:看了下,终于明白原理了。
代码: 全选
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个进程。
额。。。递归阿~mickeywaley 写了:原来是这样![]()
代码: 全选
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个进程。