tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
Tidak seperti pembuatan file biasa, yang cenderung dibajak oleh file yang sudah ada atau tautan simbolik, pembuatan pipa nama melalui mkfifo
atau fungsi yang mendasari membuat file baru di tempat yang ditentukan atau gagal. Sesuatu seperti : >foo
tidak aman karena jika penyerang dapat memprediksi output dari mktemp
maka penyerang dapat membuat file target untuk dirinya sendiri. Tapi mkfifo foo
akan gagal dalam skenario seperti itu.
Jika Anda memerlukan portabilitas POSIX penuh, mkfifo -m 600 /tmp/myfifo
aman terhadap pembajakan tetapi rentan terhadap penolakan layanan; tanpa akses ke generator nama file acak yang kuat, Anda perlu mengelola percobaan ulang.
Jika Anda tidak peduli dengan masalah keamanan halus seputar file sementara, Anda dapat mengikuti aturan sederhana:buat direktori pribadi, dan simpan semuanya di sana.
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"
Alternatif yang lebih aman adalah menggunakan mktemp
untuk membuat direktori dengan aman, lalu letakkan pipa bernama Anda di dalam direktori itu, lakukan rm -R $dir
untuk menyingkirkannya pada akhirnya.
Gunakan opsi "dry-run":
mkfifo $(mktemp -ut pipe.XXX)