tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
Ao contrário da criação de arquivos regulares, que é propensa a ser sequestrada por um arquivo existente ou por um link simbólico, a criação de um canal de nome por meio de mkfifo
ou a função subjacente cria um novo arquivo no local especificado ou falha. Algo como : >foo
não é seguro, porque se o invasor puder prever a saída de mktemp
, o invasor poderá criar o arquivo de destino para si mesmo. Mas mkfifo foo
falharia em tal cenário.
Se você precisar de portabilidade POSIX completa, mkfifo -m 600 /tmp/myfifo
é seguro contra seqüestro, mas propenso a negação de serviço; sem acesso a um gerador de nome de arquivo aleatório strong, você precisaria gerenciar tentativas de repetição.
Se você não se importa com os sutis problemas de segurança em torno de arquivos temporários, siga uma regra simples: crie um diretório privado e mantenha tudo lá.
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"