主頁(yè) > 知識(shí)庫(kù) > Shell腳本經(jīng)典之Fork炸彈的分析與預(yù)防

Shell腳本經(jīng)典之Fork炸彈的分析與預(yù)防

熱門標(biāo)簽:地圖標(biāo)注人員分布 益陽(yáng)400電話申請(qǐng)辦理流程 梧州防封電銷卡 上海機(jī)器人外呼系統(tǒng)哪家好 怎么用百度地圖標(biāo)注坐標(biāo) 江西全自動(dòng)外呼系統(tǒng)報(bào)價(jià) 400的電話一般從哪里辦理 春運(yùn)地圖標(biāo)注app 昆明電銷機(jī)器人價(jià)格

fork炸彈介紹

眾所周知,bash是一款極其強(qiáng)大的shell,提供了強(qiáng)大的交互與編程功能。這樣的一款shell中自然不會(huì)缺少函數(shù)這個(gè)元素來(lái)幫助程序進(jìn)行模塊化的高效開(kāi)發(fā)與管理。于是產(chǎn)生了由于其特殊的特性,bash擁有了fork炸彈。Jaromil在2002年設(shè)計(jì)了最為精簡(jiǎn)的一個(gè)fork炸彈的實(shí)現(xiàn)。

所謂fork炸彈是一種惡意程序,它的內(nèi)部是一個(gè)不斷在fork進(jìn)程的無(wú)限循環(huán),fork炸彈并不需要有特別的權(quán)限即可對(duì)系統(tǒng)造成破壞。fork炸彈實(shí)質(zhì)是一個(gè)簡(jiǎn)單的遞歸程序。由于程序是遞歸的,如果沒(méi)有任何限制,這會(huì)導(dǎo)致這個(gè)簡(jiǎn)單的程序迅速耗盡系統(tǒng)里面的所有資源。

現(xiàn)在來(lái)看看Jaromil設(shè)計(jì)的最簡(jiǎn)單的fork炸彈

fork炸彈分析

:() { :|: };:

一行看似無(wú)法理解的只有13個(gè)字符的命令,即可占用掉所有系統(tǒng)的資源。其實(shí),這行命令如果這樣寫成bash script就不難理解了

:()
{
 :|:
}
;
:
  • 第 1 行 說(shuō)明下面要定義一個(gè)函數(shù),函數(shù)名為小數(shù)點(diǎn),沒(méi)有可選參數(shù)。
  • 第 2 行 表示函數(shù)體開(kāi)始。
  • 第 3 行 是函數(shù)體真正要做的事情,首先它遞歸調(diào)用本函數(shù),然后利用管道調(diào)用一個(gè)新進(jìn)程(它要做的事情也是遞歸調(diào)用本函數(shù)),并將其放到后臺(tái)執(zhí)行。
  • 第 4 行 表示函數(shù)體結(jié)束。
  • 第 5 行 并不會(huì)執(zhí)行什么操作,在命令行中用來(lái)分隔兩個(gè)命令用。從總體來(lái)看,它表明這段程序包含兩個(gè)部分,首先定義了一個(gè)函數(shù),然后調(diào)用這個(gè)函數(shù)。
  • 第 6 行 表示調(diào)用本函數(shù)。

冒號(hào)”:”其實(shí)是函數(shù)名,這個(gè)bash腳本就是在不斷的執(zhí)行該函數(shù),然后不斷fork出新的進(jìn)程。

fork炸彈預(yù)防

那么,有沒(méi)有辦法扼制這種情況的發(fā)生呢?答案是肯定的,只需設(shè)置進(jìn)程的limit數(shù)即可。

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

在上面的例子中,我們將用戶可以創(chuàng)建的最大進(jìn)程數(shù)限制為 128,執(zhí)行fork炸彈會(huì)迅速fork出大量進(jìn)程,此后會(huì)由于資源不足而無(wú)法繼續(xù)執(zhí)行。使用工具ulimit即可設(shè)置各種限制數(shù),具體的請(qǐng)參考該工具的man或help。

fork 炸彈讓我們認(rèn)識(shí)到了遞歸函數(shù)的強(qiáng)大功能,同時(shí)也意識(shí)到一旦使用不當(dāng),遞歸函數(shù)所造成的破壞將是巨大的。實(shí)際上,fork 炸彈只是一個(gè)非常簡(jiǎn)單的遞歸函數(shù),它并不涉及參數(shù)傳遞、返回值等問(wèn)題,而這些問(wèn)題在使用bash編程時(shí)是否有完善的支持呢?在bash中編寫遞歸函數(shù)時(shí)應(yīng)該注意相關(guān)問(wèn)題。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 提高你工作效率的shell命令總結(jié)大全
  • shell腳本學(xué)習(xí)之調(diào)用腳本將文件打包zip的方法示例
  • Linux下NC反彈shell命令(推薦)
  • shell腳本實(shí)現(xiàn)多彩進(jìn)度條
  • shell如何記錄用戶的IP與命令詳解
  • shell腳本實(shí)現(xiàn)多進(jìn)程運(yùn)行的方法示例
  • 詳解Linux Shell 實(shí)現(xiàn)一個(gè)獲取任意位數(shù)的隨機(jī)密碼的腳本

標(biāo)簽:北京 贛州 河南 亳州 懷化 新疆 惠州 九江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Shell腳本經(jīng)典之Fork炸彈的分析與預(yù)防》,本文關(guān)鍵詞  Shell,腳本,經(jīng)典,之,Fork,炸彈,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Shell腳本經(jīng)典之Fork炸彈的分析與預(yù)防》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Shell腳本經(jīng)典之Fork炸彈的分析與預(yù)防的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章