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