我的脚本需要多次调用需要密码的程序,密码只能作为环境变量传递。因为我只想询问用户一次密码,所以我这样做了:
read -s PASSPHRASE
export PASSPHRASE
program some_option
program some_other_option
program yet_another_option
PASSPHRASE=""
据我了解,PASSPHRASE
变量的内容只能由当前 shell 和program
三个调用期间访问,然后变量将被重置,并且其他任何人都无法访问密码。
我是对的,还是我做错了?
我担心系统上的其他用户(不包括root
)以及我的用户帐户上运行的其他程序。
答案1
定义“安全”
- root 始终可以读取所有内容,因此对于 root 来说没有什么是安全的
- 用户 U 的环境变量对其他用户来说是安全的
- 用户 U 和程序 P 的环境变量对于用户 U 运行的程序 Q 来说并不安全
因此,root 可以在短时间内读取该环境变量,并且同一用户运行的其他程序也可以在短时间内读取该环境变量
解决方案:
- 自己的根,或信任的根
- 不要使用同一用户运行其他程序
- 以自己的用户身份运行这些程序
如果您不想导出环境变量,可以像这样调用命令:
PASSPHRASE="$PASSPHRASE" command-name -option
可能会让事情变得更安全一些,但同一用户运行的其他程序仍然可能通过一些技巧(ktrace/strace、调试)看到它们