首页/安全/安全加固速查/PAM limits 会话资源限制
口令与认证策略55 条

PAM limits 会话资源限制

/etc/security/limits.conf 限制用户级资源(进程数、文件数、登录数),防 fork 炸弹与资源耗尽型滥用,属认证会话加固的一部分。

安全加固速查安全更新于 2026-10-13

PAM limits 是什么

limits.conf 由 PAM 的 pam_limits 模块读取,为登录会话设置用户级资源上限,例如进程数、打开文件数、并发登录会话数与核心转储大小。它能限制单个账号把主机资源耗尽的行为,比如 fork 炸弹,属于认证会话加固的一部分;但对不经过 PAM 的进程以及 systemd 托管的服务无效。

基本信息

加固项会话级资源约束
适用平台Linux(pam_limits,主流发行版通用)
风险等级低
配置文件/etc/security/limits.conf 与 limits.d 目录
生效范围经 PAM 建立的登录会话

典型使用场景

  • 多用户主机:限制单账号可创建的进程数,抑制 fork 炸弹
  • 跳板机:限制并发登录会话数,降低账号被共用的风险
  • 服务账号:按应用实际需求设置打开文件数上限
  • 合规核查:确认关键限制项存在且不是默认的无限制
  • 排障定位:应用报打开文件数过多时,区分会话限制与服务限制

基线示例与生效核验

基线示例与生效核验
# 写入 /etc/security/limits.d/90-baseline.conf
*     hard    nproc      4096      # 单用户最大进程数
*     hard    nofile     65535     # 单用户最大打开文件数
*     hard    maxlogins  10        # 并发登录会话数
@dev  hard    core       0         # 关闭开发组的核心转储
# 生效核验(限制只对新会话生效,必须重新登录)
ulimit -u; ulimit -n
su - testuser -c 'ulimit -u'

限制项判读

限制项含义注意点
nproc单用户最大进程数对已存在的进程不生效
nofile单用户最大打开文件数与 systemd 的 LimitNOFILE 相互独立
maxlogins并发登录会话数上限连接复用不计入新会话
core核心转储大小置 0 可避免转储泄密
systemd 托管的服务走 unit 里的 LimitXXX 配置,不受 limits.conf 约束:应用侧的限制要在 unit 文件里设置。
限制只对新建会话生效:改完文件后要重新登录再验证,否则读到的仍是旧值。

落地检查点

  • 先统计现有会话的实际取值,再决定限制值,避免直接照搬模板把业务压垮
  • 把限制写入 limits.d 目录下的独立文件,便于版本管理与逐项回退
  • 服务侧的限制同时检查 systemd unit 的 Limit 配置,两边口径保持一致
  • 对 service 账号按应用文档设置 nofile,并在变更记录中注明依据
  • 把 nproc、nofile、core 三项纳入季度基线核查,确认未被放宽

易错点

  • nofile 与 systemd 默认值叠加:应用报打开文件数过多时,必须同时检查 unit 与 limits,只改一边无效
  • maxlogins 限制的是会话数:连接复用不建立新会话,实际约束弱于预期
  • 改完 limits.conf 直接验证:限制只对新会话生效,不重新登录会误判为配置未生效
  • core 未限制:进程崩溃时转储可能包含凭据等敏感内容并落在磁盘上,长期无人清理

数据来源与参考

  • man 5 limits.conf
  • CIS Benchmark:会话限制条目

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌