GNU/Linux >> Tutoriels Linux >  >> Linux

Shell Script mktemp, quelle est la meilleure méthode pour créer un canal nommé temporaire ?

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)

Linux
  1. Que signifie `:-` dans un script shell ?

  2. Que signifie l'esperluette à la fin d'une ligne de script Shell ?

  3. Comment créer un fichier temporaire en script shell ?

  4. Canaliser vers plusieurs fichiers dans le shell ?

  5. Quel est le meilleur VPS :Windows ou Linux ?

Qu'est-ce que le Shell sous Linux ?

Comment créer des scripts shell

Les 10 meilleurs livres Linux à lire en 2019

Qu'est-ce que Shebang dans Linux Shell Scripting ?

Comment créer et exécuter un script shell dans Ubuntu 22.04

Quel est le shell par défaut de Busybox ?