tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
A differenza della normale creazione di file, che tende a essere dirottata da un file esistente o da un collegamento simbolico, la creazione di un name pipe tramite mkfifo
o la funzione sottostante crea un nuovo file nella posizione specificata o fallisce. Qualcosa come : >foo
non è sicuro perché se l'attaccante può prevedere l'output di mktemp
quindi l'attaccante può creare il file di destinazione per se stesso. Ma mkfifo foo
fallirebbe in uno scenario del genere.
Se hai bisogno della completa portabilità POSIX, mkfifo -m 600 /tmp/myfifo
è sicuro contro il dirottamento ma incline a un denial of service; senza l'accesso a un potente generatore di nomi di file casuali, dovresti gestire i tentativi.
Se non ti interessano i sottili problemi di sicurezza relativi ai file temporanei, puoi seguire una semplice regola:crea una directory privata e tieni tutto lì dentro.
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"
Un'alternativa più sicura è usare mktemp
per creare una directory in modo sicuro, quindi inserire la pipe denominata all'interno di tale directory, eseguire un rm -R $dir
per sbarazzarsene alla fine.
Usa l'opzione "dry-run":
mkfifo $(mktemp -ut pipe.XXX)