You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何ulimit无法阻止以超级用户运行的fork炸弹?

问题根源:root用户默认不受limits.conf的资源限制约束

嘿,我刚好碰到过类似的问题!你之所以修改/etc/security/limits.conf后,用root测试fork炸弹还是中招,核心原因是Linux系统默认不让limits.conf的配置约束root用户——毕竟root是超级用户,系统默认给它开了“特权通道”,允许它突破普通用户的资源限制。

具体原因拆解

Linux的ulimit机制本质是用来管控普通用户的,防止单个普通用户耗尽系统资源(比如开几万进程搞崩系统)。但root作为系统管理员,需要在极端场景下还能操作系统(比如资源快耗尽时启动修复进程),所以默认不受这些配额限制。哪怕你在limits.conf里用*匹配所有用户,这个*也不包含root哦。

让root也受限制的解决办法

如果确实要给root加进程数限制,得这么做:

  1. 明确给root用户配置限制
    打开/etc/security/limits.conf,添加针对root的硬/软限制,比如:

    root soft nproc 1500  # 超过这个数会给警告
    root hard nproc 2000  # 绝对不能突破的上限
    

    别用*,*只对普通用户生效。

  2. 确保PAM模块加载生效
    检查/etc/pam.d/login和/etc/pam.d/sshd(如果用SSH登录root)里有没有这行:

    session required pam_limits.so
    

    没有的话加上,这是让PAM在用户登录时加载资源限制配置的关键。

  3. 验证配置是否生效
    重新登录root,执行ulimit -u,如果输出的数值和你配置的一致,说明限制已经生效了。这时候再跑fork炸弹,系统会因为无法创建更多进程而阻止它。

额外小建议

你提到的cgroup确实是更靠谱的方案,它能对进程组、用户甚至容器做更精细的资源管控,而且天然能约束root用户。如果要做长期防护,cgroup比ulimit灵活得多。

内容的提问来源于stack exchange,提问作者Alvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:10:23