GNU/Linux >> Tutoriales Linux >  >> Linux

Shell Script mktemp, ¿cuál es el mejor método para crear una canalización con nombre temporal?

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

A diferencia de la creación normal de archivos, que es propensa a ser secuestrada por un archivo existente o un enlace simbólico, la creación de un canal de nombre a través de mkfifo o la función subyacente crea un nuevo archivo en el lugar especificado o falla. Algo así como : >foo no es seguro porque si el atacante puede predecir la salida de mktemp entonces el atacante puede crear el archivo de destino por sí mismo. Pero mkfifo foo fallaría en tal escenario.

Si necesita portabilidad POSIX completa, mkfifo -m 600 /tmp/myfifo es seguro contra el secuestro pero propenso a una denegación de servicio; sin acceso a un generador seguro de nombres de archivos aleatorios, deberá administrar los intentos de reintento.

Si no le importan los sutiles problemas de seguridad relacionados con los archivos temporales, puede seguir una regla simple:cree un directorio privado y guarde todo allí.

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"

Una alternativa más segura es usar mktemp para crear un directorio de forma segura, luego coloque su tubería con nombre dentro de ese directorio, haga un rm -R $dir para deshacerse de él al final.


Utilice la opción de "ejecución en seco":

mkfifo $(mktemp -ut pipe.XXX)

Linux
  1. ¿Detectar el sistema Init usando el shell?

  2. ¿Cuál es la mejor manera de garantizar que solo se ejecute una instancia de un script Bash?

  3. ¿Cuál fue el método de compresión SquashFS?

  4. ¿Cuál es la mejor manera de establecer una variable de entorno en .bashrc?

  5. ¿Cuál es la mejor manera de verificar si un volumen está montado en un script Bash?

¿Qué es el Shell en Linux?

Cómo crear scripts de shell

Los 10 mejores libros de Linux para leer en 2019

¿Qué es Shebang en Linux Shell Scripting?

Cómo crear y ejecutar un script de shell en Ubuntu 22.04

¿Cuál es el shell predeterminado de Busybox?