Impossible de créer un fichier temporaire pour ici-document: autorisation refusée

11

[Remarque: ce Q similaire concerne le même message d'erreur bash. Il a été marqué un double de cet autre Q . Mais parce que j'ai trouvé une source très différente pour cette erreur, je répondrai à mon propre Q ci-dessous.]

Cette ligne de script bash fonctionnant précédemment

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

un jour a commencé à produire ce message d'erreur:

ne peut pas créer de fichier temporaire pour ici-document: autorisation refusée

Vue elliptique
la source
Dans mon cas, il a été activé IMA ( ima_policy=appraise_tcbparamètre du noyau) avec une combinaison de /tmpne pas être tmpfs. Mais ce n'est pas vraiment un cas courant :).
pevik

Réponses:

10

J'avais ajouté umask 777avant la chaîne ici. Après avoir retiré le umask, l'erreur a disparu. Donc, leçon apprise: un fichier temporaire a été créé pour une chaîne ici ( <<<), et cela est lié à un document ici ( <<), et vous devez avoir un ensemble umask approprié pour que cela fonctionne.

Vue elliptique
la source
Intéressant en effet. +1 Voir unix.stackexchange.com/questions/166292/…
Rui F Ribeiro
Il affecte également zsh et mksh, pas ksh93 ni tcsh. Pas dash, rc, es, ni yash non plus, mais c'est parce qu'ils utilisent des tuyaux au lieu de fichiers temporaires.
Stéphane Chazelas
Dans le cas de ksh93 et ​​tcsh, cela fonctionne car ils n'ouvrent le fichier qu'une seule fois en mode lecture + écriture, écrivent les données, puis reviennent au début.
Stéphane Chazelas
6

Dans mon cas, j'ai modifié les /tmpautorisations par défaut du répertoire (je pense que j'ai changé par erreur en 0777).

La solution était de revenir à la valeur par défaut /tmp autorisation , qui est 1777 en octal (1 = bit collant, 7 = R + W + X).

Donc en un mot sudo chmod -R 1777 /tmpdevrait résoudre le problème.

Eugen Mihailescu
la source
Je peux voir où cela causerait effectivement des problèmes. Oui, le bit collant est important pour / tmp.
Vue elliptique le
2
Vous ne voulez probablement pas le -Rdrapeau. Aucune raison de modifier les fichiers de tout le monde ci-dessous /tmppour qu'ils soient exécutables en lecture-écriture par tout le monde. Certains de ces fichiers sont sensibles à la sécurité de vos utilisateurs.
keithpjolley
1

mon expérience personnelle avec ce problème était avec umaskla notation binaire, tout comme @ eliptical-view. Je suppose que l'écriture:

umask 0644 

me donnerait accès en lecture et en écriture aux fichiers que j'ai créés, qu'est-ce qui ne va pas

Après avoir changé le umaskpour être

umask 0022

l'erreur a disparu.

En fait, la notation binaire doit être comprise comme un complément binaire.

Ainsi, dans le umaskmasque ci-dessous lorsque l'on écrit 0pour le propriétaire du fichier, cet utilisateur aura un accès total aux fichiers qu'il crée. La valeur 2signifie que le 2ème bit est masqué, ce qui signifie dans ce cas, par défaut, les autres utilisateurs ne seront pas autorisés à écrire dans les fichiers créés par le propriétaire du fichier.

Hilton Fernandes
la source
1
Merci pour l'édition et la correction, @Paulo Tomé. En effet, il est courant (et clair) d'utiliser la notation octale dans umask, car précisément trois bits sont impliqués dans les autorisations de fichier Posix - pour le propriétaire, l'un de ses groupes et tout le monde.
Hilton Fernandes
Je vous en prie. ;)
Paulo Tomé