Temporäre Datei für here-document kann nicht erstellt werden: Berechtigung verweigert


11

[Hinweis: Dieses ähnliche Q betrifft dieselbe Bash-Fehlermeldung. Es wurde als Duplikat dieses anderen Q markiert . Da ich jedoch eine ganz andere Quelle für diesen Fehler gefunden habe, werde ich unten meine eigene Frage beantworten.]

Diese zuvor funktionierende Bash-Skriptzeile

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

Eines Tages wurde diese Fehlermeldung ausgegeben:

temporäre Datei für here-document kann nicht erstellt werden: Berechtigung verweigert


In meinem Fall wurde IMA ( ima_policy=appraise_tcbKernel-Parameter) mit der Kombination /tmpNicht-Sein aktiviert tmpfs. Aber das ist nicht wirklich ein häufiger Fall :).
Pevik

Antworten:


10

Ich hatte umask 777vor der hier Zeichenfolge hinzugefügt . Nach dem Entfernen der Umask verschwand der Fehler. Lektion gelernt: Es gibt eine temporäre Datei, die für eine Here-Zeichenfolge ( <<<) erstellt wurde, und diese bezieht sich auf ein Here-Dokument ( <<), und Sie müssen eine geeignete Umask festgelegt haben, damit diese funktionieren.



Es betrifft auch zsh und mksh, nicht ksh93 oder tcsh. Weder Dash, RC, ES noch Yash, aber das liegt daran, dass sie Pipes anstelle von temporären Dateien verwenden.
Stéphane Chazelas

Im Fall von ksh93 und tcsh funktioniert dies, weil sie die Datei nur einmal im Lese- / Schreibmodus öffnen, die Daten schreiben und dann zum Anfang zurückkehren.
Stéphane Chazelas

6

In meinem Fall habe ich die /tmpStandardberechtigungen für das Verzeichnis geändert (ich glaube, ich habe versehentlich auf 0777 geändert).

Die Lösung bestand darin, die Standardberechtigung auf /tmp1777 in Oktal zurückzusetzen (1 = Sticky Bit, 7 = R + W + X).

Kurz gesagt, sudo chmod -R 1777 /tmpsollte das Problem beheben.


Ich kann sehen, wo das tatsächlich Probleme verursachen würde. Ja, das klebrige Bit ist wichtig für / tmp.
Elliptische Ansicht

2
Sie wollen wahrscheinlich nicht die -RFlagge. Kein Grund, die unten aufgeführten Dateien so zu ändern /tmp, dass sie von allen gelesen, geschrieben und ausgeführt werden können. Einige dieser Dateien reagieren empfindlich auf die Sicherheit Ihrer Benutzer.
Keithpjolley

1

Meine persönliche Erfahrung mit diesem Problem war mit der umaskbinären Notation, genau wie bei @ eliptical-view. Ich nahm das Schreiben an:

umask 0644 

würde mir Lese- und Schreibzugriff auf die von mir erstellten Dateien geben, was falsch ist

Nachdem ich das geändert umaskhabe

umask 0022

Der Fehler ist verschwunden.

Eigentlich sollte die binäre Notation als binäres Komplement verstanden werden.

In der folgenden umaskMaske 0hat dieser Benutzer beim Schreiben für den Dateibesitzer vollständigen Zugriff auf die von ihm erstellten Dateien. Der Wert 2bedeutet, dass das 2. Bit maskiert ist. In diesem Fall dürfen die anderen Benutzer standardmäßig nicht in die vom Dateieigentümer erstellten Dateien schreiben.


1
Vielen Dank für die Bearbeitung und Korrektur, @Paulo Tomé. In der Tat ist es üblich (und klar), die Oktalnotation in zu verwenden umask, da genau drei Bits an den Berechtigungen für Posix-Dateien beteiligt sind - für den Eigentümer, eine seiner Gruppen und alle anderen.
Hilton Fernandes

Bitte. ;)
Paulo Tomé
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.