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)