tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
Contrairement à la création de fichiers standard, qui est susceptible d'être piratée par un fichier existant ou un lien symbolique, la création d'un tube de nom via mkfifo
ou la fonction sous-jacente crée un nouveau fichier à l'emplacement spécifié ou échoue. Quelque chose comme : >foo
n'est pas sûr car si l'attaquant peut prédire la sortie de mktemp
alors l'attaquant peut créer le fichier cible pour lui-même. Mais mkfifo foo
échouerait dans un tel scénario.
Si vous avez besoin d'une portabilité POSIX complète, mkfifo -m 600 /tmp/myfifo
est à l'abri du piratage mais sujet à un déni de service ; sans accès à un puissant générateur de noms de fichiers aléatoires, vous auriez besoin de gérer les nouvelles tentatives.
Si vous ne vous souciez pas des problèmes de sécurité subtils liés aux fichiers temporaires, vous pouvez suivre une règle simple :créez un répertoire privé et conservez tout dedans.
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"
Une alternative plus sûre consiste à utiliser mktemp
pour créer un répertoire en toute sécurité, puis placez votre tube nommé dans ce répertoire, faites un rm -R $dir
pour s'en débarrasser à la fin.
Utilisez l'option "essai à sec" :
mkfifo $(mktemp -ut pipe.XXX)