.bashrcで機密情報の環境変数を設定するべきではない

npm でマルウェアが発見されました。プロセスの環境変数を勝手に外部サーバーに送るそうです。

環境変数でパスワードや API Key などの機密情報を管理しているとやばい。対策としては環境変数で機密情報を管理しなければよいわけですが、そうはいっても楽だし便利なので、気をつけながら使うみたいな解決策はないでしょうか。

.bashrcに書かない

まず、.bashrc.bash_profile

export PASSWORD=password1234

などと書くのをやめます。パスワードなどは必要になったらその都度 export することにします。

でも面倒なので一気に読み込みたい

面倒ですね。じゃあこういうのはどうでしょうか。環境変数の書き込まれたファイルを用意します。

PASSWORD1 password1234
PASSWORD2 1999hoge
API_KEY1 31f30ddbcb1bf8446576f0e64aa4c88a9f055e3c
API_KEY2 3b2c6c10d0e78072d14e02cc4c587814d0f10f3a

ファイル env_list環境変数の名前と値をスペース区切りで書きました。そして、これらの変数を読み込むシェルを、関数として .bashrc に書いておきます。

# 指定したファイルから環境変数を export する
function set_env() {
  env_file=/tmp/env_$RANDOM
  cat $1  | awk '{print "export " $1 "=" $2}' | cat >> $env_file && source $env_file && rm $env_file
}

# 指定したファイルから環境変数を unset する
function unset_env() {
  unset `cat $1 | awk '{print $1}' | xargs echo`
}

これで、たとえば上記の env_list ファイルを環境変数にするときには、

$ set_env env_list
$ echo $PASSWORD1
password1234

とすればいいし、環境変数を削除するときには、

$ unset_env env_list
$ echo $PASSWORD1
(何も表示されない)

とすればいい。

でも本質的には解決していないけどね

以上、とりあえず機密情報の環境変数.bashrc から分離して管理する方法でした。

まあでもこういうことをしても忘れてしまうし、人災は防げない。そうすると、きちんとやるなら環境変数に機密情報を入れないっていうのが本筋かなっていう気がする。セキュリティ詳しくないからよくわからんけど。