导出包含密码的变量然后重置它是否安全?

导出包含密码的变量然后重置它是否安全?

我的脚本需要多次调用需要密码的程序,密码只能作为环境变量传递。因为我只想询问用户一次密码,所以我这样做了:

read -s PASSPHRASE
export PASSPHRASE
program some_option
program some_other_option
program yet_another_option
PASSPHRASE=""

据我了解,PASSPHRASE变量的内容只能由当前 shell 和program三个调用期间访问,然后变量将被重置,并且其他任何人都无法访问密码。

我是对的,还是我做错了?

我担心系统上的其他用户(不包括root)以及我的用户帐户上运行的其他程序。

答案1

定义“安全”

  1. root 始终可以读取所有内容,因此对于 root 来说没有什么是安全的
  2. 用户 U 的环境变量对其他用户来说是安全的
  3. 用户 U 和程序 P 的环境变量对于用户 U 运行的程序 Q 来说并不安全

因此,root 可以在短时间内读取该环境变量,并且同一用户运行的其他程序也可以在短时间内读取该环境变量

解决方案:

  1. 自己的根,或信任的根
  2. 不要使用同一用户运行其他程序
  3. 以自己的用户身份运行这些程序

如果您不想导出环境变量,可以像这样调用命令:

PASSPHRASE="$PASSPHRASE" command-name -option

可能会让事情变得更安全一些,但同一用户运行的其他程序仍然可能通过一些技巧(ktrace/strace、调试)看到它们

相关内容