我正在尝试找到一种在会话期间安全存储数据的方法——特别是用于跳转框上的密码——因此用户只需在跳转框会话中输入给定目标的密码一次。理想情况下,我什至希望从根目录中隐藏数据。
尽管我信任具有 root 访问权限的人,但我不一定信任所有以 root 身份运行的程序——例如可能会暴露数据的备份。
SELinux 不会这样做 - RHEL 上可用的策略需要大量工作,它不可移植,当然,SELinux 很烂。
加密不起作用 - 然后我需要找出存储密钥的位置。
运行一个守护进程并将数据放在那里/使用套接字凭据传递进行身份验证,但是在实现这一点方面需要付出一些努力,我想确信数据在会话结束时被清除(这可能并不总是干净利落地结束)。
使用 O_TMPFILE 创建一个未命名的文件看起来解决了很多填充数据和在会话结束时清理的问题。但是另一个进程如何才能访问数据呢?我想答案是让拥有进程也打开一个监听套接字并以这种方式处理请求 - 但有没有更简单的解决方案?
我应该完全重新考虑这一点吗?
您可以使用内核密钥环(尤其是
keyctl
命令)以安全的方式存储数据。内核密钥环具有足够的粒度来存储特定用户甚至特定会话可用的密钥(因此,如果您使用 SSH 和控制台连接,或者使用来自两台不同机器的 SSH,则会话将与彼此。)
示例用法是:
内核存储了一个名为“mypassword”的密钥,其值为“supersecret”,仅在会话上(
@s
,也考虑@u
用于用户密钥环。)您可以改用该
padd
命令从标准输入读取:然后当您需要检索它时:
如果您想从它的描述(“mypassword”)中查找它,您可以使用以下
search
命令:(然后使用密钥的 ID 使用 打印它
keyctl print
。)密钥环可以做的还有很多……如果你想使用它,可以先阅读keyctl 的手册页,这可能会让你很好地了解支持哪些操作以及使用哪个密钥环。