特別なファイルを作成し、それに魔法のクッキーを書き込む必要がある通常のコンパイル済みアプリケーションを書いています。アプリケーションから直接ファイルを書き込むことはできません。システムセキュリティモデルでは、トリックを実行するために昇格された権限でヘルパーツールを起動する必要があります。ヘルパーツールに任意の数の引数を指定できます。次に、ヘルパーツールとして機能し、ファイルを作成する非常に単純なシステムコマンドを選択します。このようなもの:
/bin/sh -c "/bin/echo -n 'magic' > /some/where/file"
単純なtouch
は、Cookieをファイルに書き込む必要があるため、カットしません。シェルラッパーなしの単純なecho
は、ファイルを書き込むためにリダイレクトが必要なため機能しません。このような簡単なタスクを実行するために、root権限でシェルを呼び出すのは快適ではありません。ファイルを書き込むために呼び出すことができる本当にシンプルで制約のあるシステムコマンドはありますか?
これはどう:
echo -n 'magic' | Sudo tee /some/where/file > /dev/null
確かにこれにはリダイレクトがありますが、シェルではなくルートとしてのみ実行されます。で動作します dd of=...
も。
出力リダイレクトなし、パイプなし、ただし「ここに文字列」あり:
dd of=/some/where/file <<<'magic'
もう1つの考慮事項があります。それは、マジッククッキーの値を他のユーザーが監視できるため、コマンドラインに設定したくないということです。プログラムの存続期間が短い場合でも(プログラムがコマンドライン文字列をゼロにする場合を含む)、攻撃の機会があります。だから、理論的な:
_writestringtofile 'magic' /some/where/file
_
危険なアプローチです。したがって、@ stribikaの提案を支持します。一時ファイルに値を書き込み、適切な場所にコピーします。安全な関数を使用して一時ファイル(mkstemp()
)を作成し、競合状態が発生しないようにしてください。
spongefrom moreutils-標準入力を吸収し、ファイルに書き込みます。
echo -n 'magic' | sponge /some/where/file
シェルリダイレクトとは異なり、spongeは、出力ファイルを書き込む前にすべての入力を吸収します。可能な場合、spongeは、一時ファイルの名前を変更して、アトミックに出力ファイルを作成または更新します。
参照 詳細