我正在编写bash
脚本,需要询问用户密码并将其传递给openssl
。虽然openssl
可以读取密码本身,但我需要运行两次程序,并且不想两次询问用户。这是脚本:
cp file{,.old}
read -sp 'Enter password. ' PASS; echo
export PASS
# decode | edit | encode
openssl enc -d -aes-256-cbc -k "$PASS" -in file.old | \
sed ... | openssl enc -e -aes-256-cbc -k "$PASS" -out file
unset PASS
这是不安全的,因为通过查看命令行很容易获得密码。ps
例如,有人可以使用阅读它。
openssl
可以从环境变量中读取密码,因此可以替换-k "$PASS"
为-pass env:PASS
,但这仍然不安全;任何进程的环境变量都可以自由读取(再次ps
可以做到)。
那么,如何安全地将密码传递给两个openssl
实例?
可以在此处使用GnuPG和PinEntry的组合gnupg.org/related_software/pinentry/index.en.html
—
Nikhil Mulley,
“任何进程的环境变量都可以自由读取”-这并不完全正确。
—
Martin von Wittich '16
ps
从中读取进程的环境/proc/<pid>/environ
,但是此文件具有0600
权限,因此只有root和运行该进程的用户才能读取该进程的环境。我说那很安全。