如何确保我的Linux程序不会产生核心转储?

时间:2012-12-19 05:20:35

标签: linux security coredump

我有一个程序可以将安全敏感信息(例如私钥)保存在内存中,因为它在程序的生命周期内使用它们。此程序的生产版本将RLIMIT_CORE设置为0,以确保永远不会生成可能包含此敏感信息的核心转储。

但是,虽然core(8)联机帮助页中未提及apport documentation on the Ubuntu wiki声明,

  

请注意,即使ulimit设置为禁用核心文件(通过规范a   核心文件大小为零使用ulimit -c 0),apport仍将捕获   崩溃。

我的流程中是否有办法(即,不依赖于外部系统的配置)我可以确保永远不会生成我的流程的核心转储?

注意:我知道有很多方法(例如下面的评论中提到的方法),具有root或进程所有者权限的用户仍然可以访问敏感数据。我的目标是通过将敏感数据保存到磁盘,发送到Ubuntu错误跟踪系统或类似的东西来防止无意中暴露敏感数据。 (感谢Basile Starynkevitch明确表示这一点。)

1 个答案:

答案 0 :(得分:1)

根据the POSIX spec,核心转储仅在响应其操作是默认操作的信号时发生,其默认操作是“通过其他操作异常终止进程”。

因此,如果向下滚动到the description of signal.h中的列表,“默认操作”列中带有“A”的所有内容都是您需要担心的信号。使用sigaction来捕获所有这些内容,只需在信号处理程序中调用exit(或_exit)。

我相信这些是POSIX允许您生成核心转储的唯一方法。可以想象,Linux可能有其他“后门”用于此目的;不幸的是,我不足以确定内核专家......