关闭核心转储需限制生成、过滤内容、控制路径、阻断高风险场景:一、运行时用ulimit -c 0临时禁用;二、/etc/security/limits.conf设soft/hard core为0实现全局限制;三、sysctl配置fs.suid_dumpable=0阻止setuid进程生成core;四、重定向core_pattern至独立分区并启用systemd-coredump管控;五、程序启动前调用prctl(PR_SET_DUMPABLE, 0)或madvise(..., MADV_DONTDUMP)屏蔽敏感内存。

关闭系统核心转储(core dump)是防止敏感内存数据(如密码、密钥、令牌)在进程崩溃时被写入磁盘泄露的关键措施。重点不是“完全禁用”或“一刀切”,而是**限制生成、过滤内容、控制路径、阻断高风险场景**。
一、立即生效的运行时限制
对当前会话或所有新进程快速禁用 core dump:
- 执行 ulimit -c 0 —— 立即禁止当前 shell 及其子进程生成 core 文件(临时生效,登出即失效)
- 写入全局限制:编辑 /etc/security/limits.conf,添加两行:
* soft core 0
* hard core 0
重启用户会话或重新登录后生效,覆盖所有普通用户
二、内核级强制拦截
从源头阻止 setuid 程序或特权进程生成 core,避免提权后窃取凭证:
- 编辑 /etc/sysctl.conf,追加:
fs.suid_dumpable = 0
执行 sysctl -p 加载配置 - 该设置让内核拒绝为任何 setuid/setgid 进程生成 core,是防止横向提权后内存泄露的核心防线
三、重定向并管控存储路径
即使未完全禁用,也绝不允许 core 写入根分区或敏感位置:
- 修改 /proc/sys/kernel/core_pattern,例如:
echo '/var/crash/core.%e.%p.%t' | sudo tee /proc/sys/kernel/core_pattern - 更推荐使用 systemd-coredump 统一管理:安装后配置 /etc/systemd/coredump.conf,设置:
MaxUse=512M
KeepFree=1G
Storage=external
并确保 /var/crash/ 是独立挂载的小分区,挂载选项含 nodev,nosuid,noexec
四、程序启动时主动屏蔽
对已知处理敏感数据的服务(如数据库、API网关),在启动前关闭 dump 能力:
- 在服务启动脚本开头加入:
prctl -r PR_SET_DUMPABLE 0
或在 C/Go 等代码中调用 prctl(PR_SET_DUMPABLE, 0) - 对 malloc 分配的敏感内存块,使用 madvise(addr, len, MADV_DONTDUMP) 显式排除,glibc 2.25+ 支持


















