tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
На відміну від звичайного створення файлів, який схильний до викрадення наявним файлом або символічним посиланням, створення імені каналу через mkfifoабо основної функції або створює новий файл у вказаному місці, або не працює. Щось подібне : >fooнебезпечно, тому що якщо зловмисник може передбачити вихід, mktempтоді зловмисник може створити цільовий файл для себе. Але mkfifo fooне вдалося б за такого сценарію.
Якщо вам потрібна повна портативність POSIX, mkfifo -m 600 /tmp/myfifoвона безпечна проти викрадення, але схильна до відмови в обслуговуванні; без доступу до сильного генератора випадкових імен файлів, вам потрібно буде керувати спробами повторних спроб.
Якщо вам не піклуються про тонкі проблеми безпеки навколо тимчасових файлів, ви можете дотримуватися простого правила: створити приватний каталог і тримати все там.
tmpdir=
cleanup () {
if [ -n "$tmpdir" ] ; then rm -rf "$tmpdir"; fi
if [ -n "$1" ]; then kill -$1 $$; fi
}
tmpdir=$(mktemp -d)
trap 'cleanup' EXIT
trap 'cleanup HUP' HUP
trap 'cleanup TERM' TERM
trap 'cleanup INT' INT
mkfifo "$tmpdir/pipe"