国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Linux Shell > 正文

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

2020-07-27 18:53:39
字體:
來源:轉載
供稿:網(wǎng)友

fork炸彈介紹

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

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

現(xiàn)在來看看Jaromil設計的最簡單的fork炸彈

fork炸彈分析

:() { :|:& };:

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

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

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

fork炸彈預防

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

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

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

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

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 抚松县| 缙云县| 五峰| 桐梓县| 昌乐县| 县级市| 巴塘县| 新闻| 克什克腾旗| 青田县| 罗山县| 布尔津县| 拉孜县| 香河县| 文安县| 冕宁县| 修武县| 云和县| 简阳市| 遂川县| 襄汾县| 广宁县| 武威市| 阜阳市| 三穗县| 会泽县| 仁寿县| 防城港市| 巴林右旗| 永济市| 扎赉特旗| 乐至县| 高要市| 黄山市| 内黄县| 湘乡市| 曲周县| 綦江县| 杭锦后旗| 修文县| 昭平县|