リダイレクトせずにファイルに書きますか?

リダイレクトせずにファイルに書きますか?

私は通常コンパイルされたアプリケーションを作成しており、特別なファイルを作成し、その中にマジッククッキーを作成する必要があります。アプリケーションから直接ファイルに書き込むことはできません。システムセキュリティモデルでは、これを行うには高い特権でヘルパーツールを実行する必要があります。ヘルパーツールに必要な数のパラメータを提供できます。今、ヘルパーツールでいくつかの非常に単純なシステムコマンドを選択してファイルを生成したいと思います。このような:

/bin/sh -c "/bin/echo -n 'magic' > /some/where/file"

ファイルに書き込むには Cookie が必要なため、Simple はtouch切り捨てられません。echoファイルを書き込むにはリダイレクトが必要なため、Shell WrapperのないSimpleは機能しません。私はこれらのマイナーな操作を完了するためにroot権限を使用してシェルを呼び出すことに慣れていません。ファイルを作成するための非常にシンプルで制限されたシステムコマンドはありますか?

答え1

出力リダイレクトもなくパイプもありませんが、「この文字列」は次のようになります。

dd of=/some/where/file <<<'magic'

答え2

これはどうですか:

echo -n 'magic' | sudo tee /some/where/file > /dev/null

もちろんリダイレクトもありますが、teeだけがシェルではなくrootとして実行されています。にも適用されますdd of=...

答え3

別の考慮事項は、他のユーザーが観察できるため、マジッククッキーの値をコマンドラインに入力したくないことです。プログラムが一時的であっても(コマンドライン文字列をゼロにするプログラムを含む)攻撃の機会があります。したがって、理論的には次のようになります。

writestringtofile 'magic' /some/where/file

危険なアプローチです。したがって、@stribikaの提案に同意します。値を一時ファイルに書き込み、その場所にコピーします。一時ファイル(mkstemp())を生成するには、安全な機能を使用して競合状態が発生しないようにします。

答え4

今、必要なタスクを正確に実行する簡単なプログラムがあります。

https://github.com/rewallf/write_stdin_to_file

関連情報