如何保护Ubuntu免受叉子炸弹袭击


72

我听到有人在谈论叉子炸弹,我进行了一些研究,发现了一些令人恐惧的信息,这些信息使人们可以在命令行中键入某些看起来很奇怪的字符,从而在计算机上造成不良后果。我当然不会发出我不理解的命令,但是永远不知道会发生什么。

我听说某些操作系统允许管理员对用户进程进行一定的限制,以减轻派生炸弹的影响,这是Ubuntu默认情况下的这种保护,还是具有sudo特权的人必须设置此项?如果是这样,怎么办?

Answers:


73

您可以通过修改来轻松限制可在Ubuntu和大多数其他Linux发行版中产生的进程数量 /etc/security/limits.conf

sudoedit /etc/security/limits.conf

然后将此行添加到该文件的底部:

*    hard     nproc     nnn

哪里:

  • hard 在内核级别设置限制,以便在不重新启动的情况下无法更改它。
  • nproc 是每个用户的最大进程数。
  • nnn 是您应该通过以下方式为系统计算的数字:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

上面的命令将列出所有用户(包括线程)的所有进程,对它们进行汇总并列出进程数量最大的用户名。为了安全起见,在运行上述命令之前,请打开通常需要数量的应用程序,然后再将该数字加倍以确保安全。

设置此限制后,您需要重新启动,但这会影响系统上的每个非root用户。因此,如果任何非root用户执行fork炸弹,则将具有该硬限制。

默认情况下,组和通配符限制不适用于root用户root如果要将规则应用于超级用户,请在规则中使用文字用户名。

另外,如果您不希望很快重新启动,可以使用sudo ulimit -u 800它将限制仅对正在运行的会话进行限制,但是很容易被具有sudo特权的叉炸弹绕开!

重新启动后,/etc/security/limits.conf将使用其中的任何内容。

有关叉子炸弹的其他一些信息:它们不是恶意软件或任何可怕的东西。它们通常包含一些基本内容,例如脚本,该脚本会自我调用两次,从而使它在计算机上的存在呈指数增长。即使它们以快速的速度占用了很小的内存,它们的倍数也会迅速填满所有可用的RAM,并且机器会冻结或重新启动。唯一的危险是丢失未保存的信息。我将恶作剧分类为恶作剧,而不是恶意软件。

重要提醒:

当您不确定98%的动作时,应该很少在命令行中执行任何操作。如果您无法阅读正在执行的命令,请不要执行。这对无法读取的十六进制/ base64字符块应用了double,可用于掩盖各种麻烦。如果不确定命令,可以随时在Ubuntu手册页中搜索该命令的操作,并在使用时格外小心,sudo因为该命令将作为root用户执行。


@MarcoCeppi:对于一个典型的Unity用户而言,您的电话号码距离并不远:对于我的系统,当前的计算输出为404 ...
Fabby

1
如果我说输入类似内容alias ":(){ :|: & };:"="echo 'No.'".bashrc它将在每次登录时执行吗?
UniversallyUniqueID

选择较高的nproc限制是否有不利之处?似乎没有多少空间可以限制甚至是当前进程数量的两倍,甚至更高,甚至可以达到10,000甚至更多,仍然可以对付叉子炸弹?每个前叉/进程消耗多少内存?也许有一个更通用的RAM派生限制?
Xen2050

1

我喜欢的一种简单方法是创建别名,尽管并不总是使用别名,请检查上面的答案。

alias :="echo No."

现在

$ :(){ :|: & };:
bash: syntax error near unexpected token `('

22
当然,这是一个常见的解决方案;如何停止a(){ a|a & };a?(或任何其他函数的名字吗?)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.