No se puede crear el archivo temporal para el documento aquí: permiso denegado

11

[Nota: Esta Q similar se refiere al mismo mensaje de error bash. Se ha marcado un duplicado de este otro Q . Pero debido a que encontré una fuente muy diferente para este error, responderé mi propia Q a continuación.]

Esta línea de script bash que funcionaba anteriormente

while ... do ... done <<< "$foo"

un día comenzó a producir este mensaje de error:

no se puede crear un archivo temporal para el documento aquí: permiso denegado

Vista elíptica
fuente
En mi caso se habilitó IMA ( ima_policy=appraise_tcbparámetro del núcleo) con combinación de /tmpno ser tmpfs. Pero este no es realmente un caso común :).
pevik

Respuestas:

10

Había agregado umask 777antes de la cadena aquí. Después de quitar la umask, el error desapareció. Lección aprendida: hay un archivo temporal creado para una cadena here ( <<<), y esto está relacionado con un documento here ( <<), y debe tener un conjunto umask apropiado para que estos funcionen.

Vista elíptica
fuente
Interesante de hecho. +1 Ver unix.stackexchange.com/questions/166292/…
Rui F Ribeiro
También afecta a zsh y mksh, no a ksh93 ni a tcsh. No son guiones, rc, es, ni yash tampoco, pero eso es porque usan tuberías en lugar de archivos temporales.
Stéphane Chazelas
En el caso de ksh93 y tcsh, funciona porque abren el archivo solo una vez en modo lectura + escritura, escriben los datos y luego vuelven al principio.
Stéphane Chazelas
6

En mi caso modifiqué los /tmppermisos predeterminados del directorio (creo que he cambiado por error a 0777).

La solución fue revertirlo al /tmppermiso predeterminado , que es 1777 en octal (1 = bit fijo, 7 = R + W + X).

En pocas palabras, sudo chmod -R 1777 /tmpdebería solucionar el problema.

Eugen Mihailescu
fuente
Puedo ver dónde eso realmente causaría problemas. Sí, la parte adhesiva es importante para / tmp.
Vista elíptica
2
Probablemente no quieras la -Rbandera. No hay razón para cambiar los archivos de todos a continuación /tmppara que sean ejecutables de lectura-escritura. Algunos de esos archivos son sensibles a la seguridad de sus usuarios.
keithpjolley
1

mi experiencia personal con este problema fue con la umasknotación binaria, al igual que @ eliptical-view. Supuse que escribir:

umask 0644 

me daría acceso de lectura y escritura a los archivos que creé, lo que está mal

Después cambié el umaskser

umask 0022

El error desapareció.

En realidad, la notación binaria debe entenderse como un complemento binario.

Entonces, en la umaskmáscara de abajo, cuando uno escribe 0para el propietario del archivo, este usuario tendrá acceso total a los archivos que crea. El valor 2significa que el segundo bit está enmascarado, lo que significa que en este caso, de forma predeterminada, los demás usuarios no podrán escribir en los archivos que crea el propietario del archivo.

Hilton Fernandes
fuente
1
Gracias por la edición y corrección, @Paulo Tomé. De hecho, es habitual (y claro) usar notación octal umask, ya que precisamente tres bits están involucrados en los permisos de archivos Posix: para el propietario, uno de sus grupos y todos los demás.
Hilton Fernandes
De nada. ;)
Paulo Tomé