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

标签 linux security coredump

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

然而,虽然这在 core(8) 联机帮助页中未提及,但 apport documentation on the Ubuntu wiki claim ,

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.

在我的进程中是否有一种方法(即不依赖于它外部系统的配置)可以确保我的进程的核心转储永远不会生成?

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

最佳答案

根据 the POSIX spec , 核心转储只发生在响应信号时,其 Action 是默认 Action ,其默认 Action 是“用额外的 Action 异常终止进程”。

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

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

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

相关文章:

C用fork()编写后关闭FDT?

sqlite - 如何确定SQLite数据库没有被修改?

c++ - 包含 ada dll 的崩溃 C++ 应用程序不会生成核心转储

python - 如何在核心处理程序中获取信息

java - 当IBM-JDK中jvm处于 Activity 状态时如何生成核心转储文件

linux - 使用 shell 脚本对文件进行排序然后删除旧文件

c++ - 为字符串中的特殊单词着色

linux - 运行位于/bin中的自定义程序

java - 如何安全地向要启动的后台应用程序提供敏感信息(例如密码)?

php - 如何从 md5 移动到 PBKDF2?