禁用系统的核心转储(core dump)功能

Linux系统 0 334 团子精英 收藏

Coredump核心转储是在程序崩溃时生成的内存镜像文件,用于调试,但在生产环境中通常会禁用以避免磁盘空间占用和安全风险。

下面的方法,可以完全禁止掉Coredump功能

1. bash ulimit软硬限制core为0


ulimit -c 0        # 当前shell会话中禁用core dump
ulimit -S -c 0     # 仅设置软限制
ulimit -H -c 0     # 设置硬限制(需要root权限)
  • 作用:对当前shell及后续进程禁用核心转储。

  • 永久生效:需要将 ulimit -c 0 添加到 ~/.bashrc 或 /etc/profile 中。

2. csh limit软硬限制core为0

limit coredumpsize 0

注意:一定是CSH模式下才有limit命令

  • 作用:在C shell中禁用核心转储。

  • 永久生效:添加到 ~/.cshrc 或 /etc/csh.cshrc

3. systemctl disable abrtd --now

systemctl disable abrtd --now
  • 作用

    • abrtd(Automatic Bug Reporting Tool)是收集崩溃报告的服务。

    • disable 禁止开机自启,--now 立即停止服务。

  • 注意:在RHEL/CentOS/Fedora中常见,禁用后不会自动收集崩溃报告。

4. kernel.core_pattern = |/bin/false

echo "kernel.core_pattern = |/bin/false" >> /etc/sysctl.conf
sysctl -p
  • 作用

    • core_pattern 定义core文件的生成方式,|/bin/false 表示将core数据通过管道传递给 /bin/false(立即丢弃)。

    • 这是全局生效的,优先级高于ulimit。

  • 注意:使用 |/bin/false 或 |/usr/bin/logger -t core_dump(仅记录日志)是常见做法。

5. systemd-coredump配置

# /etc/systemd/coredump.conf
[Coredump]
Storage=none
systemctl daemon-reexec
  • 作用

    • 配置systemd不存储核心转储文件(Storage=none)。

    • daemon-reexec 重新加载systemd管理器配置。

  • 注意:此配置仅影响由systemd管理的服务,不影响用户会话。

验证是否生效

# 检查core_pattern
sysctl kernel.core_pattern
# 检查当前shell的core限制
ulimit -c
# 测试生成core(应失败)
sleep 10 &
kill -SIGSEGV $!  # 触发段错误
ls core* 2>/dev/null || echo "No core dump generated"


注意事项

  1. 权限要求:除ulimit用户级设置外,其他操作均需root权限。

  2. 安全影响:禁用core dump可能增加故障排查难度,建议在测试环境保留调试能力。

  3. 优先级kernel.core_pattern 的设置会覆盖ulimit的限制。

  4. 系统差异:不同发行版可能使用不同的崩溃收集工具(如Ubuntu用apport)。

如果需要临时启用core dump进行调试,可以:

ulimit -c unlimited
sysctl -w kernel.core_pattern=core.%p


相关推荐:

网友留言:

您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码