如何通过ulimit设置系统资源限制,构筑一道坚固的数据安全防线?
- 内容介绍
- 文章标签
- 相关推荐
服务器半夜崩溃、服务无响应,你的程序资源正在裸奔
凌晨三点告警响起:Too many open filesOom killer 已杀死关键进程或者使用者投诉网站卡死。回头一看,才发现是某个脚本疯狂 fork 进程、恶意程序把内存吃光、或者主要转储把磁盘塞满。在多使用者共享的 Linux 环境里不设限就等于放任资源被掏空。ulimit 就是用来给每个使用者和进程上锁的守护者它能限制文件大小、进程数、打开的文件描述符数量、CPU 时间和内存使用,从源头遏制资源滥用带来的数据安全风险。
ulimit 到底在防什么?先认清你的痛点
痛点一:进程爆炸拖垮整台机器。说起来, 一个账号写了死循环或被入侵后不断创建子进程。很快就会耗尽 PID,导致新服务无法启动。应对:限制可创建的最大进程数,防止恶意使用者通过大量进程消耗程序资源。
痛点二:文件描述符耗尽导致服务宕机。 数据库连接泄漏、高并发 Socket 没关闭。程序报 “too many open files”,Web 服务直接拒绝连接。应对:限制每个进程可同时打开的文件数,避免单个程序把句柄吃完。
痛点三:内存和 CPU 被无限制占用。 某个任务申请过大虚拟内存或长时间占用 CPU,导致其他业务被饿死。说到应对,用虚拟内存和 CPU 时间限制给跑偏的程序套上缰绳。
痛点四:主要文件占满磁盘。 程序崩溃后生成超大 core dump。 直接写满根分区,影响日志写入和数据持久化安全。
再看快速体检,看看你现在有多危险
打开终端执行体检命令。了解当前程序的真实水位:
ulimit -a
这相当于给程序做个体检,能看到 core file size、data seg size、open files、max user processes 等所有限制项。其实,如果看到大量 unlimited,就等于门没锁。
shel 级临时加固。先止血再谈长效
shel 级设置只对当前会话有效,适合应急测试。按理说,至于常用场景如下。
- 防止恶意使用者通过大量进程消耗程序资源;定期检查程序的 ulimit 设置,确保平安;要使这些限制在程序重启后仍然有效。可将它们添加到使用者的 shel 配置文件中,比方说 .bashrc。常见的 ulimit 设置如下:一个用于控制 shel 进程资源限制的命令行工具。通过使用 ulimit 你可以限制使用者或进程可以使用的程序资源,从而提高程序的安全性与稳定性;摆烂时先用临时命令止血,再落地永久配置;换个赛道想想,如果不设限,一台机器十个人登录。每人开五百个十兆文件,内存瞬间崩盘;细心的同学可能发现,并没有 socket 参数选项,但在 Linux 中一切皆文件。通过设置 nofile 的个数来显示 socket 的个数即可。
-
限制最大虚拟内存,防止内存炸弹攻击 :
ulimit -v 8192 # 单位 KB 约为8MB -
关闭或限制主要转储,避免磁盘被 core 文件填满 :
ulimit -c 0 # 禁止生成 core 文件 -
控制打开的文件描述符数量 :
ulimit -n 1024 # 单个使用者最多同时打开1024个文件/Socket -
控制单使用者的最大进程数 :
ulimit -u 100 # 防 fork 炸弹 -
限 CPU 运行时间,防止 CPU 被长时间占用 :
ulimit -t 300 # 最多300秒CPU时间 -
限堆栈大小。防止异常递归拖垮栈空间 :
ulimit -s 8192 # KB为单位 -
*另有数据段大小 *::
服务器半夜崩溃、服务无响应,你的程序资源正在裸奔
凌晨三点告警响起:Too many open filesOom killer 已杀死关键进程或者使用者投诉网站卡死。回头一看,才发现是某个脚本疯狂 fork 进程、恶意程序把内存吃光、或者主要转储把磁盘塞满。在多使用者共享的 Linux 环境里不设限就等于放任资源被掏空。ulimit 就是用来给每个使用者和进程上锁的守护者它能限制文件大小、进程数、打开的文件描述符数量、CPU 时间和内存使用,从源头遏制资源滥用带来的数据安全风险。
ulimit 到底在防什么?先认清你的痛点
痛点一:进程爆炸拖垮整台机器。说起来, 一个账号写了死循环或被入侵后不断创建子进程。很快就会耗尽 PID,导致新服务无法启动。应对:限制可创建的最大进程数,防止恶意使用者通过大量进程消耗程序资源。
痛点二:文件描述符耗尽导致服务宕机。 数据库连接泄漏、高并发 Socket 没关闭。程序报 “too many open files”,Web 服务直接拒绝连接。应对:限制每个进程可同时打开的文件数,避免单个程序把句柄吃完。
痛点三:内存和 CPU 被无限制占用。 某个任务申请过大虚拟内存或长时间占用 CPU,导致其他业务被饿死。说到应对,用虚拟内存和 CPU 时间限制给跑偏的程序套上缰绳。
痛点四:主要文件占满磁盘。 程序崩溃后生成超大 core dump。 直接写满根分区,影响日志写入和数据持久化安全。
再看快速体检,看看你现在有多危险
打开终端执行体检命令。了解当前程序的真实水位:
ulimit -a
这相当于给程序做个体检,能看到 core file size、data seg size、open files、max user processes 等所有限制项。其实,如果看到大量 unlimited,就等于门没锁。
shel 级临时加固。先止血再谈长效
shel 级设置只对当前会话有效,适合应急测试。按理说,至于常用场景如下。
- 防止恶意使用者通过大量进程消耗程序资源;定期检查程序的 ulimit 设置,确保平安;要使这些限制在程序重启后仍然有效。可将它们添加到使用者的 shel 配置文件中,比方说 .bashrc。常见的 ulimit 设置如下:一个用于控制 shel 进程资源限制的命令行工具。通过使用 ulimit 你可以限制使用者或进程可以使用的程序资源,从而提高程序的安全性与稳定性;摆烂时先用临时命令止血,再落地永久配置;换个赛道想想,如果不设限,一台机器十个人登录。每人开五百个十兆文件,内存瞬间崩盘;细心的同学可能发现,并没有 socket 参数选项,但在 Linux 中一切皆文件。通过设置 nofile 的个数来显示 socket 的个数即可。
-
限制最大虚拟内存,防止内存炸弹攻击 :
ulimit -v 8192 # 单位 KB 约为8MB -
关闭或限制主要转储,避免磁盘被 core 文件填满 :
ulimit -c 0 # 禁止生成 core 文件 -
控制打开的文件描述符数量 :
ulimit -n 1024 # 单个使用者最多同时打开1024个文件/Socket -
控制单使用者的最大进程数 :
ulimit -u 100 # 防 fork 炸弹 -
限 CPU 运行时间,防止 CPU 被长时间占用 :
ulimit -t 300 # 最多300秒CPU时间 -
限堆栈大小。防止异常递归拖垮栈空间 :
ulimit -s 8192 # KB为单位 -
*另有数据段大小 *::

