Raj*_*h M 15 telnet operating-systems process c
#include <stdlib.h>
#include <unistd.h>
int main()
{
while(1)
fork();
}
Run Code Online (Sandbox Code Playgroud)
这是分叉炸弹的代码。
在我们学院,我们通过 telnet 即客户端服务协议进行连接。大约 100 个系统连接到服务器。突然我们看到服务器变得很慢,一段时间后它崩溃了。我开始知道有人实施了一个叉子炸弹。
我们如何检测分叉炸弹是在哪个系统上实现的?我们怎样才能阻止它?
一种方法是限制单个用户可以拥有的最大进程数。有什么方法可以阻止它并知道它是从哪个系统实现的?
Bar*_*han 16
一种方法是限制一个用户可以运行的进程数。
只需以 root 身份登录,然后编辑此文件,即可添加用户并配置其限制。
# vi /etc/security/limits.conf
Run Code Online (Sandbox Code Playgroud)
将此行添加到文件中
john hard nproc 10
Run Code Online (Sandbox Code Playgroud)
现在用户 john 只能创建 10 个进程。
Thi*_*ter 14
要停止正在运行的 fork 炸弹,您可以使用killall <name>来杀死炸弹的所有进程。但是,由于分叉炸弹通常会导致系统负载非常高,您可能无法通过 SSH 连接或执行它。因此,可能需要重新启动,或者至少要快得多。
如果每个用户在系统上都有自己的帐户,您只需检查每个人的主目录并搜索可执行文件即可。很有可能他还上传了源代码,所以找到它应该不会太难。如果它是所有学生的共享帐户,那你就不走运了。尤其是在用户的 telnet 或 ssh 会话终止后,您将没有机会找出是谁启动的。
但是,与其惩罚引爆叉形炸弹的用户,不如修复系统配置以解除叉形炸弹。您可以设置每个用户的进程限制/etc/security/limits.conf,从而防止分叉炸弹失控——例如,只有 50 个进程,分叉炸弹不会造成太大损害。
| 归档时间: |
|
| 查看次数: |
6232 次 |
| 最近记录: |