首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止缓冲区交换

如何防止缓冲区交换
EN

Unix & Linux用户
提问于 2015-05-05 10:38:27
回答 2查看 1.1K关注 0票数 6

这个问题是Unix和Linux特有的。但这也是编程和安全问题。

我的程序将通过几种方法(解密密码文件、询问代理等)获得明确的密码或解密密钥,我希望确保在使用该密码文件后可以将其从内存中删除之前,不能将其写入交换空间。我认为这意味着要有不可交换的地址空间。但这通常需要根权限,而我的程序需要作为非根程序运行。这能在Unix中移植吗?它在Linux中有希望吗?

将系统配置为没有交换空间不是一个选项,因为程序的用户可能没有这样的权限,虽然这可能使系统更安全,但并非所有系统都能做到这一点。

我可以用C语言完成这个部分,不过在Python3中这样做也很好。

我的非根进程可以获得一些非交换页面作为安全性吗?

我能阻止这个过程被暂停吗?最好是退出,而不是为交换而编写的清除密码。

EN

回答 2

Unix & Linux用户

发布于 2015-05-05 11:53:41

在Linux上使用mlock http://linux.die.net/man/2/mlock

mlock()和mlockall()分别将调用进程的虚拟地址空间的一部分或全部锁定到RAM中,从而防止将该内存分页到交换区域。

手册页有更多细节。

票数 3
EN

Unix & Linux用户

发布于 2015-05-05 12:10:36

首先,我必须指出,我绝对不是安全方面的专家。

对于python部分,使用ctype将mlock封装到python似乎并不困难。从mlock的限制和权限部分来看,普通用户似乎可以锁定有限的内存。在我的系统上运行uname -a可以为我提供max locked memory (kbytes, -l) 64,它应该足以存储密码(但您可能需要处理溢出问题)。

对于休眠,您不能处理SIGSTOP信号,但是如果您的系统很优雅,您可以接收到SIGTSTP (参见[进程可以在linux中暂时冻结吗?])。如果您只接收到SIGSTOP[密码在内存中是安全的]似乎会说,除非使用磁盘加密,否则您将失败,这对您来说可能不是有效的解决方案。不过,您可以通过处理SIGCONT来检测漏洞,但这可能为时已晚。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/200523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档