環境変数にパスワードを渡すことは、プログラムにファイルからパスワードを読み取らせるのと同じくらい安全です。同じユーザーとして実行されているプロセスのみがプロセスの環境を読み取ることができ、これらのプロセスはとにかく同じファイルを読み取ることができます。
これは、コマンドラインでパスワードを渡すこととは異なることに注意してください。コマンドライン引数は、同じユーザーとして実行されているプロセスだけでなく、同じマシン上で実行されているすべてのプロセスで読み取り可能です(強化対策を除く)。
環境を介して変数を渡す場合、プログラムが他のプログラムを起動するかどうかに注意してください。これらの他のプログラムは、親の環境を継承します。そのため、他のプログラムが環境のコンテンツを誤ってリークする恐れがある場合は、これを行わないでください。
シナリオの欠陥は、「サーバーシステムのセットアップ時に適切な環境変数を作成する」ことです。環境変数は、プロセスの動的なプロパティです。システムのセットアップ時に作成することはできません。セットアップすることで、再起動後も存続するものを意味する場合ではありません。つまり、特定のユーザーがログインしたときに、管理者がこの変数が環境に存在するように調整したと考えられます。これは、構成ファイル(通常~/.pam_environment
、~/.profile
またはから読み取られたファイル~/.profile
)を介して行われます。したがって、このソリューションでは、実際には、パスワードを構成ファイルから移動しません。
パスワードがユーザーのログイン時環境にあるように設定するのは良い考えではありません。これは、そのユーザーとして実行されているすべてのプロセスが秘密を持っているため、どこでもリークに対して脆弱であることを意味します。
パスワードは、バージョン管理下にある構成ファイルおよび通常の展開メカニズムとは別のファイルに配置する必要があります。便利な場合は、ある時点で環境にパスワードを入れてもかまいませんが、できるだけ小さなプログラムセットに対して実行する必要があります。