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

但是,尽管core(8)联机帮助页中未提及此内容,但apport documentation on the Ubuntu wiki声称,



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

注意:我知道有很多方法(例如下面的注释中提到的方法),具有root或process owner特权的用户仍可以访问敏感数据。我的目的是通过将敏感数据保存到磁盘,发送到Ubuntu错误跟踪系统或类似方法,防止意外暴露敏感数据。 (感谢Basile Starynkevitch使其明确。)

最佳答案

根据the POSIX spec的说明,仅在响应信号时才发生核心转储,这些信号的操作是默认操作,并且其默认操作是“使用其他操作异常终止进程”。

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

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

关于linux - 如何确保我的Linux程序不产生核心转储?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13945984/

10-12 22:34