0

我编写了一个需要密码才能运行的 python 程序,我想在启动时安全地读取密码。我也想用 runit 来监督这个程序。

到目前为止,我的程序从环境变量“PASSPHRASE”中读取密码。我打算以这样一种方式启动它,即 runit 会在启动时设置变量:

# !/bin/bash
# file /etc/sv/mypgrm/run
read -s -p "passphrase :" passphrase
exec 2>&1
exec chpst env PASSPHRASE=$passphrase myprgm

但是,这种方法不起作用,并且永远无法到达实际启动程序的行。当我删除脚本的第一行时,程序以空密码开始。

您能否建议一种替代(安全)的处理方式?谢谢!

4

1 回答 1

0

好的,在与具有安全意识的工程师分享这个问题后,事实证明这个问题实际上是 2-fold:

  1. 如何在不将秘密放入代码中的情况下配置我的应用程序?
  2. 如何存储秘密?

第一个问题有一个简单的答案:将秘密放入环境中被认为是最佳实践(参见http://12factor.net/config)。

第二个问题的答案本质上是另一个问题:威胁模型是什么?我自己的推理:获取密码需要什么?成为根。如果此人是 root,我可以阻止任何事情吗?不,root 可以获取内存中的任何内容。Root 甚至可以在 python 程序处理之前窃取它处理的数据。下一个威胁模型是获得访问权限并且是非 root 用户的人。如果我将密码存储在具有适当访问权限的文件中,我可以阻止这些用户读取密码。

所以我要做的是替换:

read -s -p "passphrase :" passphrase

和:

PASSPHRASE=$(cat /etc/mypassphrase)

并将文件设置为属于根目录,否则不可读。如果这不起作用,我将更新此答案。

于 2016-02-08T13:35:58.227 回答