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

前端之家收集整理的这篇文章主要介绍了如何确保我的Linux程序不产生核心转储?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个程序,将安全敏感信息(如私钥)保留在内存中,因为它在程序的整个生命周期中使用它们.该程序的生产版本将RLIMIT_CORE设置为0,以确保不会生成可能包含此敏感信息的核心转储.

然而,尽管在核心(8)联机页面中没有提到这一点,apport documentation on the Ubuntu wiki则声称,

Note that even if ulimit is set to disabled core files (by specyfing a
core file size of zero using ulimit -c 0),apport will still capture
the crash.

我的过程中有没有办法(即不依赖于外部系统的配置),我可以确保从未生成过程的核心转储?

注意:我知道有很多方法(如在下面的评论中提到的方法),具有根或进程所有者权限的用户仍然可以访问敏感数据.我正在瞄准的是通过将敏感数据保存到磁盘,将其发送到Ubuntu的错误跟踪系统或类似的事情来防止意外的暴露. (感谢Basile Starynkevitch做出这一点.)

解决方法

根据 the POSIX spec,核心转储仅在响应其操作是默认动作的信号时发生,其默认操作是“以额外的操作异常终止进程”.

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

我相信这些是POSIX让您生成核心转储的唯一方式.可以想象,Linux可能会为此而设立其他“后门”不幸的是,我不够一个内核专家,以确保…

猜你在找的Linux相关文章