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


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.



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.


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.


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é
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.