使用 OpenSSL,在 bash 中有两种方法可以使用环境变量作为密码:
pass:"${var}"
和env:var
。
我想知道哪种方法提供的安全性最高,因为手册页让它看起来像是ps
在传递时可以读取密码pass:"${var}"
,并且也可能使用env:var
。
OpenSSL 手册页的相关部分:
密码短语参数
几个命令接受密码参数,通常分别使用 -passin 和 -passout 作为输入和输出密码。这些允许从各种来源获取密码。这两个选项都采用单个参数,其格式如下所述。如果没有给出密码参数并且需要密码,则提示用户输入密码:通常会从当前终端读取密码,并关闭回显。
密码:密码
实际密码是 password。由于密码对实用程序(如 Unix 下的“ps”)是可见的,因此这种形式只应在安全性不重要的场合使用。
环境:变量
从环境变量 var 获取密码。由于其他进程的环境在某些平台上是可见的(例如某些 Unix 操作系统下的 ps),因此应谨慎使用此选项。
答案1
手册页对这个问题说得很清楚,你应该使用环境:变量方法。
手册页是正确的,所有命令行参数都可以通过 ps 看到全部用户在系统上。
alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456
evil$ ps aux|grep openssl
alice 17594 115 0.0 17108 4424 pts/6 R+ 11:02 0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456
如果您使用环境变量,其他用户(root 除外)将只能看到该变量的名称,但看不到其内容。
alice$ OPENSSLPW=123456
alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW
evil$ ps aux|grep openssl
alice 17713 115 0.0 17108 4424 pts/6 R+ 11:02 0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW