.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
から分離して管理する方法でした。
まあでもこういうことをしても忘れてしまうし、人災は防げない。そうすると、きちんとやるなら環境変数に機密情報を入れないっていうのが本筋かなっていう気がする。セキュリティ詳しくないからよくわからんけど。