在编程的时候,有的时候我们会需要传递敏感信息,比如密码,API key 等。如果是把这些敏感信息写在代码中的话,那么可能会有泄露的可能。如果是单独用一个文件来存放这些敏感信息,那么也需要注意这个文件的安全性问题。有没有一种办法是最安全的呢?
答案是有的,就是使用环境变量。在一个会话里面设置的环境变量在别的会话里面是读取不到的,这样可以确保我们的敏感信息不会意外泄露。
使用环境变量就一定够了吗?不一定。相信你一定知道一般(默认情况)我们在命令行的操作都是会被 shell 记录的,你可以用 history
这个命令查看你之前的操作命令。对的,也可以看到我们执行了设置敏感信息的命令。
幸运的是,我们可以选择不让 shell 记录我们的操作。原理就是 shell 有一个变量 HISTCONTROL
,这个变量可以控制某些命令不被记录,比如以空格开头的,或者是重复的命令。看来我们找到方法了,只需要正确设置 HISTCONTROL
的值然后在执行包含敏感信息的命令时在前面加一个 Space 即可。
要达到不让 shell 记录的目的,首先我们需要去 .bashrc
文件中设置 HISTCONTROL=ignoreboth
。然后在执行敏感命令的时候,在命令前面多敲一个 Space,这样我们的操作就不会被记录。就算是用 ⬆️ 也是看不到的。
单次执行
# 注意命令前面有一个空格
pass=test ./show_name
多次执行
# 这里只用在执行 export 的时候多一个空格就行
export pass=test
./show_name