Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确保我的Linux程序不会';不产生堆芯转储?_Linux_Security_Coredump - Fatal编程技术网

如何确保我的Linux程序不会';不产生堆芯转储?

如何确保我的Linux程序不会';不产生堆芯转储?,linux,security,coredump,Linux,Security,Coredump,我有一个程序,它将安全敏感信息(如私钥)保存在内存中,因为它会在程序的生命周期中使用这些信息。此程序的生产版本将RLIMIT_CORE设置为0,以尝试确保永远不会生成可能包含此敏感信息的核心转储 然而,尽管在核心(8)手册页中没有提到这一点,但权利要求 请注意,即使ulimit设置为禁用的核心文件(通过指定 使用ulimit-c0),核心文件大小为零,apport仍将捕获 撞车 在我的流程中(即,不依赖外部系统的配置)是否有一种方法可以确保从不生成流程的核心转储 注意:我知道有很多方法(如下面的

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

然而,尽管在
核心(8)
手册页中没有提到这一点,但权利要求

请注意,即使ulimit设置为禁用的核心文件(通过指定 使用ulimit-c0),核心文件大小为零,apport仍将捕获 撞车

在我的流程中(即,不依赖外部系统的配置)是否有一种方法可以确保从不生成流程的核心转储

注意:我知道有很多方法(如下面的评论中提到的方法),其中具有root或进程所有者权限的用户仍然可以访问敏感数据。我在这里的目标是防止敏感数据通过保存到磁盘、发送到Ubuntu bug跟踪系统或诸如此类的方式意外暴露。(由于明确了这一点。)

根据,内核转储仅在响应其操作为默认操作且其默认操作为“使用其他操作异常终止进程”的信号时发生

因此,如果您向下滚动到中的列表,“默认操作”列中所有带有“A”的内容都是您需要担心的信号。用于捕获所有这些,只需在信号处理程序中调用
exit
(或
\u exit


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

注意,一个有决心的用户可以修补运行您的应用程序的自己的内核,以仍然获得内核转储。进程内存也可以通过
/proc/
获得,这是一个好主意。然而,这让我觉得很难确保您已经正确地实现了它,并且它在所有情况下都能工作。我可以马上想到两个潜在的错误:1)我忘记或误读了您的系统特定文档,错过了一个信号;2)我捕获了类似SIGSEGV的东西,但我的(显然已损坏)程序已将自己置于无法正确退出的状态,并且无论如何都会生成一个内核转储。1的修复。这是: