我有一个程序,将安全敏感信息(如私钥)保留在内存中,因为它在程序的整个生命周期中使用它们.该程序的生产版本将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可能会为此而设立其他“后门”不幸的是,我不够一个内核专家,以确保…