初中级Linux运维工程师在线评测:http://www.gtalent.cn/exam/interview/eUrdXoILlsGnh6At

Linux 的 memfd_secret 系统调用已经进入 Linux-Next 分支,接下来或将合并进 Linux 5.13 主线。
该功能已经开发超过一年。memfd_secret() 系统调用可以在 Linux 上创建秘密内存区域,该区域仅对拥有的进程可见,而不会映射到其他进程或内核页表。其可用于在 Linux 上为用户空间中的 OpenSSL 创建秘密内存区,以存储私钥,并减少私钥不受任何其他硬件加密保护时在系统内存中暴露的可能性。但是,为了确保 memfd_secret() 系统调用不被滥用,默认情况下将禁用在系统上创建秘密内存区的功能,除非在启动时通过了特殊选项。目前,秘密内存功能和 memfd_secret() 系统调用需要 "secretmem_enable" 选项来开启。

这项工作是由 IBM 工程师 Mike Rapoport 领导的,他最初在 2019 年为 Linux 内核内存管理代码提出了一个 "MAP_EXCLUSIVE" 标志,以支持只有拥有进程才能看到的映射。这次对 memfd_create() 的秘密内存支持是对同一概念的进化。memfd_secret() 被做成一个专门的系统调用,而不是 memfd_create() 的扩展,因为它的目的是允许用户创建更安全的内存映射,而不是简单地允许基于文件的内存访问。

下面的例子演示了 memfd_secret() 的使用(省略错误处理):
fd = memfd_secret(0); ftruncate(fd, MAP_SIZE); ptr = mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

 

【王老师说运维】:运维之linux基础入门实战(http://www.codeforest.cn/course/443)