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"