将密码安全地传递给另一个程序(单独的 shell/dbus)

Posted

技术标签:

【中文标题】将密码安全地传递给另一个程序(单独的 shell/dbus)【英文标题】:Communicate password securely to another program (separate shell/dbus) 【发布时间】:2014-02-12 03:55:07 【问题描述】:

我正在编写一个包含一些受密码保护的文件(密钥)的构建脚本。我需要一种方法来提示用户一次输入密码,然后在多个脚本中使用此密钥。这些脚本不在同一个 shell 中,并且可能通过 dbus 生成其他窗口。然后我可以向他们发送命令,其中一个必须有权访问密码。

我已经有了这项工作,但在某些情况下,密码要么直接在命令行上使用(通过 dbus 传递),要么放入文件中(然后将名称传递给其他脚本)。这两个都没有我想要的安全*。命令行以历史记录结束,该历史记录可以存储在一个文件中,也可以出现在进程列表中,第二个选项存储在一个其他人可以读取的文件中。

是否有一些标准方法可以在两个进程之间创建一个临时通信通道,该通道可以传递密码并且不会被系统上的另一个用户(包括 root)截获?

*注意:这主要是一个完全安全的练习。对于我当前的项目,密码的临时文件存储是可以的。

【问题讨论】:

包括 root 部分让人很难想象一个不能被破坏的解决方案。 Root 最终可以安装自定义内核模块来跟踪系统内传输的每个字节。你可以跑,但你不能隐藏…… 我想我只对非特殊措施的安全感兴趣。足够安全的东西,因此标准安装上的 root 无法通过有限的几个命令获得访问权限。或者至少不涉及写入磁盘的东西,最终可能会被 root 以外的人看到(想想托管的提供者)。 您可以向他们发送命令吗?如何?如果通过套接字等完成,你也可以发送密码吗?或者你能用一个临时令牌生成所有脚本,它们可以用来打电话回家并在需要时询问密码? 我正在使用qdbus 向shell 发送命令。我认为发送对我的需要来说足够安全(仅在内存中),但是命令随后在 shell 上执行,从而在历史记录中结束。 @IMTheNachoMan 我有一段时间没看它了,但我从来没有找到解决方案。 【参考方案1】:

除了设置“root 是全能的”之外,我想Private DBus Connection 可以解决问题,尽管我能找到的文档似乎对究竟是什么让私有连接变得私有有点了解。

然而,the DBus Specification,更具体地说,关于窃听的Message Bus Specification 小节部分表示:

接收 DESTINATION 指示不同的单播消息 接收者称为窃听。在充当消息总线的消息总线上 安全边界(如标准系统总线)、安全策略 通常应该防止窃听,因为单播消息是 通常保密,可能包含安全敏感信息。

因此,您甚至可能不需要使用会产生更多间接费用的私有连接。但在安全至上的风险/回报基础上,这可能是您更安全的选择。希望对您有所帮助。

【讨论】:

以上是关于将密码安全地传递给另一个程序(单独的 shell/dbus)的主要内容,如果未能解决你的问题,请参考以下文章

在单独运行的 Python 脚本之间传递数据

通过标准输入安全地将密码传递给 openssl

将 Kivy Widget 传递给另一个类

Core Data 将 objectID 传递给另一个线程

将 API 响应传递给另一个操作

将 UI Thread 方法传递给另一个线程以在 C# 中调用