気づく:同じ脆弱性が既に存在します。この問題ただし、問題の他の設定(私の場合はパスワードを保存する必要はありません)によって、他の解決策が許可されます(つまりファイルにパスワードを保存する代わりに、ファイル記述子を使用してください。イルカチュウの答え)。
my_file
機密データが保存されている対称的に暗号化されたファイル(gpg 1.xを使用)があり、次のスクリプトを使用して編集したいとします。
read -e -s -p "Enter passphrase: " my_passphrase
gpg --passphrase $my_passphrase --decrypt $my_file | stream_editing_command | gpg --yes --output $my_file --passphrase $my_passphrase --symmetric
unset my_passphrase
stream_editing_command
ストリーム内の特定の場所にアイテムを置き換え/追加します。
私の質問:これは安全ですか?変数$my_passphrase
および/または復号化された出力は何とか表示/アクセスできますか?安全でない場合は、スクリプトをどのように変更する必要がありますか?
答え1
gpg --passphrase $my_passphrase
私の質問:これは安全ですか? $my_passphrase変数および/または復号化された出力は何とか表示/アクセスできますか?
いいえ、実際には安全とは見なされません。パスワードは、ps
実行中の他のすべてのプロセスのコマンドラインと同様に、出力に表示されます。データ自体は表示されず、他のユーザーはパイプラインにアクセスできません。
これマニュアルページgpg
こんな言葉があります--passphrase
。
--passphrase string
使用ひもパスワードで。このオプションは、パスワードが1つだけ提供されている場合にのみ使用できます。明らかに、マルチユーザシステムでは、これに対するセキュリティは非常に疑わしい。回避できる場合は、このオプションを使用しないでください。
もちろん、システムに他のユーザーがなく、サービスが破損していないと思う場合は、誰もプロセスのリストを確認してはいけません。
ただし、とにかく--passphrase-fd
シェルを使用してパスワードをプログラムにリダイレクトできます。ここに文字列を使用してください。
#!/bin/bash
read -e -s -p "Enter passphrase: " my_passphrase
echo # 'read -s' doesn't print a newline, so do it here
gpg --passphrase-fd 3 3<<< "$my_passphrase" --decrypt "$my_file" |
stream_editing_command |
gpg --yes --output "$my_file" --passphrase-fd 3 3<<< "$my_passphrase" --symmetric
gpg
これは、入力全体を取得する前に2番目のファイルが出力ファイルを切り捨てない場合にのみ機能します。そうしないと、最初のファイルがgpg
切り捨てられる前にファイルを読み取ることができない可能性があります。
コマンドラインを使用したくない場合は、パスワードをファイルに保存してから--passphrase-file
。パスワードは実際には永続ストアに保存されません。