web-dev-qa-db-ja.com

復号化されたファイルをディスクに書き込まずに、ファイルを復号化して別のコマンドで使用するにはどうすればよいですか?

ファイルを復号化して書き出すコマンド(ansible-vault decrypt)があります。ファイルまたは-/stdoutに書き出すことができます。

次に、この復号化されたファイル(秘密鍵)を、mycommand --key-file <path to file>のような引数を期待する別のコマンドで使用したいと思います。

現在のスクリプトはansible-vault decrypt --output mykey.keyを実行して復号化されたファイルをディスクに書き込み、次にmycommand --key-file mykey.keyを実行して、最後にrm mykey.keyで削除します。

復号化されたファイルをディスクにまったく書き込まず、mycommandがファイルのようにアクセスできるようにする方法はありますか?

Stdinからキーをまったく読み取らないため、2番目のコマンドにパイプすることはできません。私が考えることができる唯一のことは、コマンドを実行する前にramdiskを作成し、そこにキーを書き込み、すべてのコマンドが実行されたらramdiskをアンマウントすることです。

4
Pierre

コマンドがファイル名を予期しているが、ファイルの種類は気にしない場合は、パイプを介してデータを渡し、ファイル名として/dev/stdinを指定できます。 /dev/stdinは標準入力を指します。

ansible-vault decrypt | mycommand --key-file /dev/stdin

mycommandがパイプを受け入れない場合、これは機能しません(通常、プログラムがファイルをシーク可能にする必要がある場合に発生します)。その場合は、一時ファイルにキーを書き込む必要があります。

ほとんどのLinuxシステム(および他の多くのUnixバリアント)には、そのままの状態でメモリ内ファイルシステムがあります。このファイルシステムがマウントされる場所、およびそれを使用するために必要な権限は、ディストリビューションによって異なります。最近のLinuxシステムには /run を含むいくつかの場所に tmpfs ファイルシステムがマウントされています。通常、すべてのユーザーがログイン時にディレクトリ/run/user/1234を取得します。1234はユーザーIDです。多くのサービスは/runの下に独自のディレクトリを作成し、/var/runは通常/runへのシンボリックリンクです。 df -t tmpfsを使用して、システムで利用できるものを確認します。

一時ファイルシステムに書き込まれたデータは最終的にスワップになる可能性があることに注意してください。メモリの内容も同様です。ハードディスクの盗難が防御したい脅威である場合は、スワップを暗号化する必要があります。ハイバネーションを使用しない場合は、スワップの暗号化にランダムキーを使用できます。これは、起動ごとに生成され、どこにも保存されません。

これはfifoの本当に良いアプリケーションだと思います。

特別なファイルとして参照されるfifoを作成し(mkfifoを使用)、そのファイルへの出力をansibleにして、コマンドがそれを読み取ります。しかし、それはファイルではなく、ストレージに影響を与えません。

推奨されるように、シェルの「ここ」のファイルも適切な候補です(その<(CMD)構成)。

0
Pedro