tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
Im Gegensatz zur normalen Dateierstellung, die anfällig dafür ist, von einer vorhandenen Datei oder einem symbolischen Link übernommen zu werden, leitet die Erstellung eines Namens durch mkfifo
oder die zugrunde liegende Funktion erstellt entweder eine neue Datei an der angegebenen Stelle oder schlägt fehl. Etwas wie : >foo
ist unsicher, denn wenn der Angreifer die Ausgabe von mktemp
vorhersagen kann dann kann der Angreifer die Zieldatei für sich selbst erstellen. Aber mkfifo foo
würde in einem solchen Szenario fehlschlagen.
Wenn Sie volle POSIX-Portabilität benötigen, mkfifo -m 600 /tmp/myfifo
ist sicher gegen Entführung, aber anfällig für Denial-of-Service; Ohne Zugriff auf einen starken Zufallsgenerator für Dateinamen müssten Sie Wiederholungsversuche verwalten.
Wenn Sie sich nicht um die subtilen Sicherheitsprobleme bei temporären Dateien kümmern, können Sie eine einfache Regel befolgen:Erstellen Sie ein privates Verzeichnis und bewahren Sie alles dort auf.
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"
Eine sicherere Alternative ist die Verwendung von mktemp
Um ein Verzeichnis sicher zu erstellen, legen Sie dann Ihre benannte Pipe in dieses Verzeichnis, führen Sie einen rm -R $dir
aus um es am Ende loszuwerden.
Verwenden Sie die Option "Trockenlauf":
mkfifo $(mktemp -ut pipe.XXX)