<p>必须启用pam_limits.so模块才能使limits.conf生效,需检查/etc/pam.d/common-session(Debian/Ubuntu)或system-auth(RHEL系)等文件是否含session required pam_limits.so,且SSH或图形登录对应PAM文件也需配置;编辑/etc/security/limits.conf按domain type item value格式设置软硬限制,如* soft nofile 65535;修改后须重新登录验证,用ulimit -a或cat /proc/self/limits确认。</p>

确认 PAM limits 模块已启用
系统必须加载 pam_limits.so 才能生效资源限制。检查关键 PAM 配置文件是否包含该模块:
- /etc/pam.d/common-session(Debian/Ubuntu 系统)或
- /etc/pam.d/system-auth(RHEL/CentOS/Fedora 系统)
确保其中存在以下行(注意空格规范,不能有拼写错误):
session required pam_limits.so
若使用 systemd 登录(如 GNOME、Wayland),还需确认 /etc/pam.d/login 或 /etc/pam.d/sshd(SSH 场景)中也启用了该行。缺少任一环节,limits.conf 的配置将被忽略。
编辑 /etc/security/limits.conf 设置规则
该文件采用四字段格式:domain type item value,每行定义一条限制:
-
domain:可为用户名(如
alice)、组名(如@devs)、通配符*(所有普通用户)或root(注意 root 多数限制默认不生效) -
type:
soft(用户可临时提升至硬限)、hard(管理员设定上限,不可自调)、-(同时设软硬限) -
item:常用项包括
nproc(最大进程数)、as(虚拟内存 KB)、nofile(最大打开文件数)、cpu(CPU 时间分钟)、maxlogins(并发登录数) -
value:纯数字,如
1024、50000
示例:
alice hard nproc 64@staff - nofile 8192* soft as 1048576(所有用户软限 1GB 虚存)
区分软限与硬限的实际效果
软限制是当前会话生效的默认值,用户可通过 ulimit 命令自行提高,但不能超过硬限制:
- 查看当前软限:
ulimit -u(进程数)、ulimit -n(文件数) - 临时提软限(仅本会话):
ulimit -n 4096 - 硬限只能由 root 修改配置并重启会话后生效,普通用户执行
ulimit -H -n只能读取,无法修改
例如设置 bob soft nproc 32 和 bob hard nproc 128 后,bob 登录后默认最多开 32 进程;他可运行 ulimit -u 96 提升到 96,但无法达到 129。
验证与排错要点
配置修改后不会影响已有会话,必须新开终端或重新 SSH 登录才加载新 limits。
- 验证是否加载成功:
ulimit -a查看当前会话全部软限 - 查某进程实际限制:
cat /proc/$(pgrep -u alice bash)/limits - 常见失败原因:
• PAM 配置漏加session required pam_limits.so
• limits.conf 行末有多余空格或 tab 导致解析失败
• 用了不支持的 item(如写成mem而非as或rss)→ 日志报unknown limit type
• 使用了图形登录但未在/etc/pam.d/lightdm或gdm中启用模块
对高安全要求场景,建议搭配 cgroups 或 systemd user slices 做更细粒度控制,PAM limits 主要覆盖登录会话级基础防护。


















