首页/安全/安全加固速查/禁用 core dump(limits + sysctl)
主机加固基线90 条

禁用 core dump(limits + sysctl)

core dump 会把进程内存写到磁盘,可能包含口令、密钥等敏感数据;收紧 core 限制并禁止 SUID 程序转储,降低内存数据泄露面。

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

core dump 的风险

core dump 会把进程崩溃时的完整内存写到磁盘,其中可能包含口令、密钥、会话票据等敏感数据。收紧 core 上限并禁止 SUID 程序转储,可以显著减少内存数据落盘泄露的面。配置分两处:limits 控制用户进程的 core 上限,内核参数 fs.suid_dumpable 控制 SUID 程序是否允许转储。

基本信息

基线配置limits 中 core 为 0,fs.suid_dumpable = 0
配置文件/etc/security/limits.d/ 与 /etc/sysctl.d/
适用平台RHEL / CentOS 系与 Debian / Ubuntu 系
风险等级中
核查命令ulimit -c、sysctl fs.suid_dumpable

典型使用场景

  • 数据库、认证服务等内存敏感主机的数据保护
  • 合规基线核查中的进程内存转储项
  • 排查磁盘上出现异常的大体积 core 文件
  • 统一配置 systemd 托管服务的 core 限制
  • 调试环境临时开启 core 后的恢复与清理

limits 配置

limits 配置
# /etc/security/limits.d/99-core.conf
* soft core 0     # 软限制,默认不允许生成 core 文件
* hard core 0     # 硬限制,普通用户无法自行提高上限

内核参数与核查

内核参数与核查
echo 'fs.suid_dumpable = 0' >> /etc/sysctl.d/99-hardening.conf   # 禁止 SUID 程序转储
sysctl --system                       # 重新加载全部 sysctl 配置
sysctl fs.suid_dumpable               # 复核取值,应为 0
ulimit -c                             # 当前会话的 core 上限,应为 0
coredumpctl list 2>/dev/null | tail   # systemd-coredump 场景查看已存在的转储

配置项读法

配置项含义注意点
soft core默认 core 上限设为 0 阻止自动生成
hard core硬上限soft 为 0 而 hard 很大时用户可自行提高
fs.suid_dumpableSUID 程序是否允许转储保持为 0
LimitCOREsystemd 服务的 core 限制limits.conf 对服务无效,需在单元文件设置
已有转储文件磁盘上已存在的 core排查并清理敏感残留
limits.conf 对已运行的进程与 systemd 托管的服务不生效:服务要在单元文件里写 LimitCORE=0,否则全局配置改了它照样会生成 core。
调试确实需要 core 时临时放开(ulimit -c unlimited),用完立刻恢复配置并删除转储文件,避免敏感内存数据长期留在磁盘上。
如果主机上确有调试需求(例如内核或服务崩溃分析),可以只对特定用户或服务放开 core,而不必全局打开:在对应服务的单元文件或用户的 limits 片段里单独设置,比放宽全局配置精确得多。

易错点

  • 只设 soft 不设 hard,普通用户可以自行把上限提到 unlimited,hard 才是真正的天花板
  • 以为改了 limits.conf 就覆盖所有服务,systemd 服务需要在单元文件里单独设置 LimitCORE
  • 调试后忘记恢复配置和清理 core 文件,敏感内存数据长期滞留在磁盘上
  • 忽略 systemd-coredump 的集中管理机制,转储被存进日志目录而非工作目录,排查时找不到文件

数据来源与参考

  • limits.conf(5)、sysctl.d(5) 手册
  • CIS Linux Benchmark:Disable core dumps

相关工具

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