2016-07-16 6 views
0

セイgpg2を使用して暗号化されたファイルの更新内容とのbashスクリプト

file.txtを暗号化したファイルがあるとしなければなりません再度暗号化してください。

(1)gpg2を使用したbashスクリプトでは、どのような方法が最も簡単でしょうか?操作では、解読するパスワードを1回だけユーザーに要求する必要があります。後で最終暗号化に同じパスワードを使用する必要があります。ここで

は、最も可能性の高い、非常に安全でないが、私はarchieveしようとするものの実施例である:

function update-encrypted-file() { 
    read pass_tmp; 
    local pass=$pass_tmp; 
    unset pass_tmp; 

    local file="file.txt"; 
    local tmp_result=$(cat $file | gpg2 --batch --passphrase $pass | update); 
    echo $tmp_result | gpg2 -c --batch --passphrase $pass > $file; 
} 

更新がかなったかもしれないのに対し。 alias update="tr -d X"(すべてのXを削除してください)

(2)上記の例が安全でない場合はどうなりますか?私はread自体を使用していると思いますが、なぜか見て興味深いでしょう。変数がローカルに設定されていないと、パスワードは短時間グローバルスペース内に入ります。それはおそらくフェッチされますか?この場合、pin30-ttyをどのように使うのか分かりませんでした。(this post)

(3)それ以外は、--passphraseのgpg2ドキュメントには、「明らかに、ユーザシステムを避けるためにこのオプションを使用しないでください。 " これは、コマンドがログに記録されているので、端末内で手動で使用する場合にのみ当てはまりますか?

答えて

1

私はあなたの個人的な質問に直接答えているわけではありませんが、パスワード管理とGnuPGについて少し議論していますが、3番目の質問のために:のコマンドラインプロセスからすべてユーザーは誰でもに利用可能です。確認するには、単純なps axを特権のないユーザーとして実行してください。秘密を決してパラメータとして渡さないでください!

明らかに、最も安全なオプションは、には絶対にパスフレーズを保持しないことになります。。あなたがそれを持っていなければ、あなたはそれを混乱させることはできません。 GnuPG 2.1では、これは実際のGnuPGバイナリ(gpg/gpg2)にも適用されました。最も重要な秘密鍵操作(パスフレーズの処理を含む)は小さいgpg-agentによって実行されます(したがって攻撃面が小さくなります) GnuPGバイナリはキーへのdirecctアクセスもパスフレーズも取得しません。

これはまた、私が行っていることです。パスフレーズを処理する代わりに、代わりにを使用してください。とにかくそれは利用可能です(GnuPG 2.1以降も必要です)。正しく設定されていれば(デフォルトの設定です)、gpg-agentはしばらくの間パスフレーズをキャッシュします。ユーザーが別の設定をしている場合、彼はキャッシュされたパスフレーズを望まないと決めました。

すぐに、gpg-agentは、設定された方法でユーザーにパスフレーズを問い合わせます。グラフィカルユーザーインターフェイスを使用している場合は、ウィンドウがポップアップする可能性があります。

GnuPG設定が混乱している場合(たとえば、独自の設定ファイルの場合は、自分で起動するgpg-agent ...)、これはもちろんあなたの仕事です。 gpg-agentのインスタンスを起動して、キャッシュやその他のオプションを完全に制御できるようにするには、個々のユースケースで必要に応じて--options,--homedir--no-use-standard-socketを利用してください。

local tmp_result=$(cat $file | gpg2 --batch --passphrase $pass | update); 
echo $tmp_result | gpg2 -c --batch --passphrase $pass > $file; 

パスフレーズのために説明したのと同じ理由のためにこれをしないでください。


は最後に、あなたがecho内容の中間結果を保存しています!代わりに、結果を暗号化プロセスに直接パイプしてください(ここではcatは必要ありません)。

+1

最後の例は正常に動作するはずですか?私は更新されたファイルの代わりに空のファイルを持つことになります。それは同じファイルに標準と標準出力を持っているという問題のためではありませんか?例えばlike:

+1

実際、それについては考えていませんでした。しかし、一時ファイルに書き込んだ後で、変数にコンテンツを格納するのではなく、元に戻すことをお勧めします。あらゆる種類の(サイズ)制限があり、暗号化されていないバージョンは絶対に保存しない方がよいでしょう。 –

+1

であり、将来、 'echo $ unquotedVar'はシェルのアンチパターンであり、' \ r、\ n'や多くのCtrl-Charsがその値にあるときに問題を引き起こすでしょう。一般的に、すべての変数をdbl-quoteしてください! '' $ file ''、 '$ pass' 'を除いて、ここでは必要ないと同意します。皆さんお元気で。 – shellter

関連する問題