GNU/Linux >> Linux の 問題 >  >> Linux

シェル スクリプト mktemp、一時的な名前付きパイプを作成する最良の方法は何ですか?

tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"

既存のファイルやシンボリック リンクに乗っ取られやすい通常のファイル作成とは異なり、mkfifo を介した名前パイプの作成 または、基になる関数が指定された場所に新しいファイルを作成するか、失敗します。 : >foo のようなもの 攻撃者が mktemp の出力を予測できる場合、安全ではありません その後、攻撃者はターゲット ファイルを自分で作成できます。しかし mkfifo foo そのようなシナリオでは失敗します。

完全な POSIX 移植性が必要な場合は、mkfifo -m 600 /tmp/myfifo ハイジャックに対しては安全ですが、サービス拒否の可能性があります。強力なランダム ファイル名ジェネレーターにアクセスできない場合は、再試行を管理する必要があります。

一時ファイルにまつわる微妙なセキュリティの問題を気にしない場合は、単純なルールに従うことができます:プライベート ディレクトリを作成し、そこにすべてを保存します。

tmpdir=
cleanup () {
  trap - EXIT
  if [ -n "$tmpdir" ] ; then rm -rf "$tmpdir"; fi
  if [ -n "$1" ]; then trap - $1; kill -$1 $$; fi
}
tmpdir=$(mktemp -d)
trap 'cleanup' EXIT
trap 'cleanup HUP' HUP
trap 'cleanup TERM' TERM
trap 'cleanup INT' INT
mkfifo "$tmpdir/pipe"

より安全な代替手段は mktemp を使用することです ディレクトリを安全に作成するには、そのディレクトリ内に名前付きパイプを配置し、 rm -R $dir を実行します 最後にそれを取り除くために。


「dry-run」オプションを使用してください:

mkfifo $(mktemp -ut pipe.XXX)

Linux
  1. シェルを使用してinitシステムを検出しますか?

  2. シェルスクリプト行の最後にあるアンパサンドとはどういう意味ですか?

  3. シェルスクリプトで一時ファイルを作成するにはどうすればよいですか?

  1. シェル内の複数のファイルにパイプしますか?

  2. シェル スクリプトとはシェル スクリプトの作成方法

  3. Bashスクリプトの実行とソースの違いは何ですか?

  1. `:-`はシェルスクリプトで何を意味しますか?

  2. $の意味は?シェルスクリプトでは?

  3. .bashrc で環境変数を設定する最良の方法は何ですか?