tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
Na rozdíl od běžného vytváření souborů, které je náchylné k ukradení existujícím souborem nebo symbolickým odkazem, vytvoření kanálu názvů prostřednictvím mkfifo
nebo základní funkce buď vytvoří nový soubor na určeném místě, nebo selže. Něco jako : >foo
není bezpečné, protože pokud útočník dokáže předpovědět výstup mktemp
pak může útočník vytvořit cílový soubor pro sebe. Ale mkfifo foo
by v takovém scénáři selhal.
Pokud potřebujete plnou přenositelnost POSIX, mkfifo -m 600 /tmp/myfifo
je bezpečný proti únosu, ale je náchylný k odmítnutí služby; bez přístupu k silnému generátoru náhodných názvů souborů byste museli řídit pokusy o opakování.
Pokud vás nezajímají jemné bezpečnostní problémy kolem dočasných souborů, můžete se řídit jednoduchým pravidlem:vytvořte si soukromý adresář a ponechte si tam vše.
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"
Bezpečnější alternativou je použití mktemp
Chcete-li bezpečně vytvořit adresář, pak do tohoto adresáře vložte svůj pojmenovaný kanál a proveďte rm -R $dir
abych se toho nakonec zbavil.
Použijte možnost "suché spuštění":
mkfifo $(mktemp -ut pipe.XXX)