我编写了一个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
但是,这种方法不起作用,并且永远不会到达实际启动程序的行。当我删除脚本的第一行时,程序以空密码开头。
你能建议一种替代(安全)的方式吗?谢谢!
答案 0 :(得分:0)
好的,在与其他安全意识工程师分享这个问题之后,事实证明这个问题实际上是双重的:
第一个问题有一个简单的答案:将秘密置于环境中被视为最佳实践(参见http://12factor.net/config)。
第二个问题的答案基本上是另一个问题:什么是威胁模型?我自己的推理:得到密码需要什么?做根。如果这个人是root用户,我可以阻止任何事吗?不,root可以在内存中获取任何内容。 Root可以在处理之前窃取python程序处理的数据。下一个威胁模型是获得访问权限并且是非root用户的人。如果我将它存储在具有适当访问权限的文件中,我可以阻止这些用户读取密码。
所以我要做的就是替换:
read -s -p "passphrase :" passphrase
使用:
PASSPHRASE=$(cat /etc/mypassphrase)
并将文件设置为属于root,否则不可读。如果这不起作用,我会更新这个答案。