You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sudo运行进程无法生成core dump的问题咨询与解决

问题描述

已在/etc/security/limits.conf中添加以下配置并重启系统:

root            soft    core            unlimited
*               soft    core            unlimited

当前普通用户及通过sudo su切换到root时,均能正常生成core dump,执行ulimit -a显示core文件大小为unlimited。但以普通用户执行sudo bash -c "ulimit -a"时,输出的core文件大小为0;且通过sudo运行的进程因SIGSEGV等信号终止时,不会在/var/lib/apport/coredump/目录生成core dump,执行sudo bash -c "ulimit -c unlimited"也无法解决。

想弄明白:为什么sudo的core dump限制和root用户不同?该如何解决?

原因分析

sudo自带安全策略,默认会重置大部分环境变量和资源限制,目的是防止普通用户通过继承环境变量或资源限制提升权限、泄露敏感信息。/etc/security/limits.conf的配置属于PAM模块的会话限制,但sudo默认不会完全继承这些限制,而是按照自身配置重新设置资源限制,其中就包括将core文件大小限制重置为0。

而sudo su能保留core限制的原因是:su会启动新的登录会话,重新加载PAM的限制配置,相当于初始化了root用户的完整环境,因此能读取到limits.conf中的设置。

解决方法

方法1:修改sudo配置持久保留core限制

使用visudo命令编辑sudoers文件(必须用visudo,它会自动检查语法错误,避免配置失效导致sudo无法使用),添加以下任意一种配置:

  • 允许sudo保留用户的core限制环境变量:
    Defaults        env_keep += "RLIMIT_CORE"
    
  • 直接设置sudo默认的core限制为unlimited:
    Defaults        core=unlimited
    

保存退出后,重新执行sudo bash -c "ulimit -a",就能看到core文件大小变为unlimited,此时sudo运行的进程触发崩溃时也会正常生成core dump。

方法2:临时保留环境执行sudo

如果只是临时需要,可以使用sudo -E参数强制保留用户环境(前提是sudoers配置中未禁止env_keep相关设置):

sudo -E bash -c "ulimit -a"

这种方法仅临时生效,每次执行sudo都需要加-E,不如修改sudo配置持久有效。

额外检查:apport配置

若修改sudo配置后仍无法生成core dump,可检查apport的配置文件/etc/apport/crashdb.conf,确保Default段中的enable设置为1;同时确认/var/lib/apport/coredump/目录的权限为root:adm、权限值为750,保证apport有权限写入core文件。


内容的提问来源于stack exchange,提问作者JenyaKh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:02:26