¿Hay alguna ventaja en crear un archivo temporal de una manera más cuidadosa
Los archivos temporales generalmente se crean en el directorio temporal (como /tmp
) donde todos los demás usuarios y procesos tienen acceso de lectura y escritura (cualquier otro script puede crear los nuevos archivos allí). Por lo tanto, el script debe tener cuidado al crear los archivos, como usarlos con los permisos correctos (por ejemplo, leer solo para el propietario, ver help umask
:) y el nombre de archivo no debe adivinarse fácilmente (idealmente al azar). De lo contrario, si los nombres de archivo no son únicos, puede crear conflictos con el mismo script ejecutado varias veces (por ejemplo, condición de carrera) o algún atacante podría secuestrar alguna información confidencial (por ejemplo, cuando los permisos son demasiado abiertos y el nombre de archivo es fácil de adivinar) o crear / reemplazar el archivo con su propia versión del código (como reemplazar los comandos o consultas SQL dependiendo de lo que se esté utilizando) almacenado).
Puede usar el siguiente enfoque para crear el directorio temporal:
TMPDIR=".${0##*/}-$$" && mkdir -v "$TMPDIR"
o archivo temporal:
TMPFILE=".${0##*/}-$$" && touch "$TMPFILE"
Sin embargo, todavía es predecible y no se considera seguro.
Según man mktemp
, podemos leer:
Tradicionalmente, muchos scripts de shell toman el nombre del programa con el pid como sufijo y lo usan como un nombre de archivo temporal. Este tipo de esquema de nombres es predecible y la condición de carrera que crea es fácil de ganar para un atacante.
Por lo tanto, para estar seguro, se recomienda usar el mktemp
comando para crear un archivo o directorio temporal único ( -d
).