私のスクリプトはパスワードを必要とするプログラムを複数回呼び出す必要があり、パスワードは環境変数にのみ渡すことができます。ユーザーにパスワードを一度だけ尋ねたいので、次のようにします。
read -s PASSPHRASE
export PASSPHRASE
program some_option
program some_other_option
program yet_another_option
PASSPHRASE=""
私が理解したところ、PASSPHRASE
変数の内容は現在のシェルからのみアクセスでき、program
3回の呼び出し中に変数はリセットされ、パスワードは他の人がアクセスできなくなります。
私が正しいか、それとも私が何か間違っているのでしょうか?
root
システムの他のユーザー(除く)と私のユーザーアカウントで実行されている他のプログラムが心配です。
答え1
「セキュリティ」を定義する
- すべては常にルートで読むことができるので、ルートで安全なものはありません。
- ユーザUの環境変数は他のユーザから安全である。
- ユーザUとプログラムPの環境変数は、ユーザUが実行するプログラムQに対して安全ではない。
したがって、ルートは短時間の環境変数を読み取ることができ、同じユーザーが実行する他のプログラムも短い時間の間環境変数を読み取ることができます。
解決策:
- 自分の根、または信頼の根
- 同じユーザーを使用して別のプログラムを実行しないでください
- あなた自身のユーザーとしてこのプログラムを実行してください。
環境変数をエクスポートしたくない場合は、次のようにコマンドを呼び出すことができます。
PASSPHRASE="$PASSPHRASE" command-name -option
状況をより安全にすることができますが、同じユーザーが実行している他のプログラムでは、いくつかのトリック(ktrace / strace、デバッグ)を使用してまだこれを確認できます。