GNU/Linux >> Znalost Linux >  >> Linux

Shell Script mktemp, jaká je nejlepší metoda k vytvoření dočasného pojmenovaného kanálu?

tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"

Na rozdíl od běžného vytváření souborů, které je náchylné k ukradení existujícím souborem nebo symbolickým odkazem, vytvoření kanálu názvů prostřednictvím mkfifo nebo základní funkce buď vytvoří nový soubor na určeném místě, nebo selže. Něco jako : >foo není bezpečné, protože pokud útočník dokáže předpovědět výstup mktemp pak může útočník vytvořit cílový soubor pro sebe. Ale mkfifo foo by v takovém scénáři selhal.

Pokud potřebujete plnou přenositelnost POSIX, mkfifo -m 600 /tmp/myfifo je bezpečný proti únosu, ale je náchylný k odmítnutí služby; bez přístupu k silnému generátoru náhodných názvů souborů byste museli řídit pokusy o opakování.

Pokud vás nezajímají jemné bezpečnostní problémy kolem dočasných souborů, můžete se řídit jednoduchým pravidlem:vytvořte si soukromý adresář a ponechte si tam vše.

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"

Bezpečnější alternativou je použití mktemp Chcete-li bezpečně vytvořit adresář, pak do tohoto adresáře vložte svůj pojmenovaný kanál a proveďte rm -R $dir abych se toho nakonec zbavil.


Použijte možnost "suché spuštění":

mkfifo $(mktemp -ut pipe.XXX)

Linux
  1. Co znamená `:-` ve skriptu Shell?

  2. Co znamená Ampersand na konci řádku skriptu Shell?

  3. Jak vytvořit dočasný soubor ve skriptu Shell?

  1. Potrubí k více souborům ve skořápce?

  2. Význam $? Ve skriptu Shell?

  3. Jaké je nejlepší VPS:Windows nebo Linux?

  1. Co jsou Shell Scripts? Jak vytvořit Shell skripty?

  2. Jaký je rozdíl mezi prováděním skriptu Bash a jeho získáváním?

  3. Jaký je nejlepší způsob, jak nastavit proměnnou prostředí v .bashrc?